Автор Тема: AVR Studio4 и оптимизация  (Прочитано 29677 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
AVR Studio4 и оптимизация
« : 23/07/2014 19:05:20 »
Народ, помогите разобраться, накалякал снифер для определения УОЗ квадроцикла
Спойлер
//#include <mega8.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>

volatile unsigned char i = 0; data_e; temp = 0;
unsigned long buffer;   
volatile unsigned int counter_rpm; count; rpm; rpm1;
unsigned int addr; angle; angle_val[150];


ISR(INT0_vect)
 {
  TCCR1B=0x02;
 }

ISR(INT1_vect)
{
 TCCR1B=0x00;
 //if (temp == 0) count = 0;
 count=TCNT1;
 TCNT1=0;
 i=1;
}


ISR(TIMER1_OVF_vect)
 {
  counter_rpm++;                                       
 }

ISR(ANA_COMP_vect)
 {
  rpm = TCNT1;
  rpm1 = counter_rpm;
 }


void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
;
/* Set up address and data registers */
EEAR = uiAddress;
//temp = ucData>>8;                              // сдвиг вправо на 8 бит
EEDR = ucData;
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
}


int main(void)
{
 cli();
 TCCR1A=0x00;
 TCCR1B=0x00;
 MCUCR |= _BV(ISC11) | _BV(ISC01);
 MCUCR &= ~(_BV(ISC10)) & ~(_BV(ISC00));
 GICR |= _BV(INT0) | _BV(INT1);
 DDRD &= ~(_BV(PD6)) & ~(_BV(PD7)) & ~(_BV(PD2)) & ~(_BV(PD3));
 PORTD = 0xff;
 ACSR |= _BV(ACIE) | _BV(ACIS1) | _BV(ACBG);
 ACSR &= ~(_BV(ACD)) & ~(_BV(ACIC)) & ~(_BV(ACIS0));
 SFIOR &= ~(_BV(ACME));
 data_e = 0xff;
 for (addr=0; addr<512; addr++)
 {
  EEPROM_write(addr,data_e);
 } 
 counter_rpm=0;
 sei();

 while(1)
  {
   temp = 0;
   if (i != 0)                         - это условие проверяется только после вычисления следующей строки, и цикл while передает управление на строку addr = 141176/buffer
    {
    buffer = ((unsigned long)counter_rpm * 65536 + (unsigned long)count);
    addr = 141176/buffer;                                    // через 50 RPM по два байта на угол
    angle = ((buffer - ((unsigned long)rpm1*65536 + (unsigned long)rpm))*423)/buffer;    // угол * 10 !!!

//    data_e = angle/256;
    angle_val[addr] = angle;
//    EEPROM_write(addr,data_e);
//    data_e = angle;
//    addr++;
//     EEPROM_write(addr,data_e);
    counter_rpm=0;
    i=0;
   }
   buffer=0;                                    - если убрать эту строку, то цикл while вообще делает только один проход, и стопорится в самом конце программы ( rjmp $ )
  }

}
Дык эта падла, при оптимизации в цикле while(1) {} неправильно переход и проверку условия переменной i делает.
Без оптимизации все компилирует правильно, но время обработки прерывания становится неприлично большим.
Прям хоть на АСМ-е пиши!
 

Оффлайн tridentxp

  • Модератор раздела
  • Эксперт
  • ****
  • Сообщений: 7516
  • Похвалили: 1107 раз(а)
  • Откуда: ARMвиль
Re: AVR Studio4 и оптимизация
« Ответ #1 : 23/07/2014 20:19:40 »
что значит не правильно i проверяет ? ну ты ваще замудтил... нагрузил 8 битную бедолагу 32-у битными типами (зы,у кого подпись про невпихуемое ?).. кста, я бы *65536 заменил бы на <16. арму юзай.
то, что дарвин и вы называете эволюцией, является лишь умыслом Отца.
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #2 : 23/07/2014 21:23:16 »
переменную i проверяет не в том месте цикла где надо, а на строку ниже.
 

Оффлайн drfaust

  • Модератор раздела
  • Эксперт
  • ****
  • Сообщений: 5277
  • Похвалили: 575 раз(а)
  • Я не Шариков, просто судьба располосовала мой лоб.
  • Откуда: РФ, Лангепас, MSK+2 (UTC+5)
    • faust.dlinkddns.com
Re: AVR Studio4 и оптимизация
« Ответ #3 : 23/07/2014 21:31:58 »
А где i инициализируется?
Модификатор volatile говорит компилеру не делать никаких предположений относительно значения i. В дебаг-режиме все переменные обычно обнуляются, если не указано иное, как только включается оптимизация volatile unsigned char i = 0; из-за volatile присвоение i=0; не выполняется. Нужно инициализировать volatile переменные (в том числе и temp) в начале main()

Так что, стоит сначала i и temp явно сразу после cli проинициализировать - должно помочь. Вообще-то попробуй использовать модификатор const вместо volatile, (правда придётся при изменении этой переменной помучатся с преобразованием типа) - согласно стандарту С глобальные переменные(и выражения с их использованием) с модификатором const не оптимизируются -> не должно быть оптимизации перехода if(i != 0)...



СТОП!!! Я ошибся, надо использовать static, а при изменении переменной использовать преобразование типа к обычному int.Хотя по ANSI C оптимизации не подлежат и глобальные переменные - стоит всё-таки поиграться с отсутствием volatile


volatile конкретно по PICам и прочим встройкам - по идее компилер не должен оптимизировать if(!=0)
« Последнее редактирование: 23/07/2014 22:11:56 от drfaust »
Не кассами одними жив ЦТО ;-)
 

Оффлайн tridentxp

  • Модератор раздела
  • Эксперт
  • ****
  • Сообщений: 7516
  • Похвалили: 1107 раз(а)
  • Откуда: ARMвиль
Re: AVR Studio4 и оптимизация
« Ответ #4 : 24/07/2014 12:23:01 »
... volatile unsigned char i = 0; из-за volatile присвоение i=0; не выполняется....
интересный оборот... а где об этом говорится ?
то, что дарвин и вы называете эволюцией, является лишь умыслом Отца.
 

Оффлайн drfaust

  • Модератор раздела
  • Эксперт
  • ****
  • Сообщений: 5277
  • Похвалили: 575 раз(а)
  • Я не Шариков, просто судьба располосовала мой лоб.
  • Откуда: РФ, Лангепас, MSK+2 (UTC+5)
    • faust.dlinkddns.com
Re: AVR Studio4 и оптимизация
« Ответ #5 : 24/07/2014 13:42:56 »
... volatile unsigned char i = 0; из-за volatile присвоение i=0; не выполняется....
интересный оборот... а где об этом говорится ?
Да вроде нигде. И возможно не из-за volftile. Только в дебаге - вся память проги дебаггером заливается 0-ми. А в релизе, да ещё и с оптимизацией это не всегда так. Локальные переменные инициализируются, а вот глобальные, насколько я помню - зависит от компилятора.

Мог и напутать чего... Во всяком случае - стоит попробовать проинициализировать до  установки обработчиков.


К стати, сначала ставим обработчики (по программе), а потом зачищаем епром (процесс долгий - сколько раз обработчики сработают? и есессно установят i в 1). Может стоит сначала епром проинициализировать, а уже потом обработчики прерываний установить?



Не кассами одними жив ЦТО ;-)
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #6 : 24/07/2014 14:02:35 »
Eeprom инициализируется в майне при запрещенных прерываниях, попробовал переменную buffer сделать локальной - бесполезно, та же байда. Ща попозжа попробую ее проинициализировать. Касби 02к приперли.
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #7 : 24/07/2014 14:56:44 »
От япона мать!, победил я его!!! В перечислении переменных вместо точки с запятой надо было запятую ставить.
Переменные buffer, angle, addr сделал локальными до кучи.
 

Оффлайн tridentxp

  • Модератор раздела
  • Эксперт
  • ****
  • Сообщений: 7516
  • Похвалили: 1107 раз(а)
  • Откуда: ARMвиль
Re: AVR Studio4 и оптимизация
« Ответ #8 : 24/07/2014 15:27:55 »
volatile unsigned char i = 0; data_e; temp = 0; гыыы. во я слепошарый не заметил. вопрос: а чо студия ничо не сказала что тут каким то переменным неизвестного типа производится присвоение ?...
то, что дарвин и вы называете эволюцией, является лишь умыслом Отца.
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #9 : 24/07/2014 15:30:09 »
volatile unsigned char i = 0; data_e; temp = 0; гыыы. во я слепошарый не заметил. вопрос: а чо студия ничо не сказала что тут каким то переменным неизвестного типа производится присвоение ?...
а окно бьюилда внизу, и маленькое. Я и не замечал - он показывал, что скомпилировал, типа все ОК, а варнинги я уже потом увидал.
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #10 : 24/07/2014 21:33:58 »
Народ, поправьте, если не прав - аппаратные прерывания в АВР не бывают вложенными???
Т.е., если я в обработке INT1 запрещаю прерывание от компаратора, то оно не сработает?, при этом даже не надо флаг I (общий запрет прерываний ) сбрасывать?
Я в обработке сделал запрет прерывания от АС, и до кучи, как в ДШ прописано на atmega8 еще установил!!! флаг прерывания ACI  - там написано, что надо "1" записать в него для его сброса. Я в прострации.
« Последнее редактирование: 24/07/2014 21:44:45 от Two_byte »
 

Оффлайн drfaust

  • Модератор раздела
  • Эксперт
  • ****
  • Сообщений: 5277
  • Похвалили: 575 раз(а)
  • Я не Шариков, просто судьба располосовала мой лоб.
  • Откуда: РФ, Лангепас, MSK+2 (UTC+5)
    • faust.dlinkddns.com
Re: AVR Studio4 и оптимизация
« Ответ #11 : 25/07/2014 00:34:55 »
volatile unsigned char i = 0; data_e; temp = 0; гыыы. во я слепошарый не заметил. вопрос: а чо студия ничо не сказала что тут каким то переменным неизвестного типа производится присвоение ?...
а окно бьюилда внизу, и маленькое. Я и не замечал - он показывал, что скомпилировал, типа все ОК, а варнинги я уже потом увидал.
На temp=0 должен был быть еггог, если авр-студия не начала поддерживать С++11;

Насчёт вложенныз запретов прерываний - нигде не видел. даже на х86 что бы какое-либо прерывание разрешить внутри другого прерывания, приходилось PIC(контроллёр прерываний) напрямую программировать. cli - лочит всё подряд.

З.Ы. Ну а насчёт точек, запятых и точек с запятой - тут СИ очень привередлив. Я тоже несколько раз смотрел код и нифига не увидел :(
Не кассами одними жив ЦТО ;-)
 

Оффлайн Юр

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 2067
  • Похвалили: 103 раз(а)
Re: AVR Studio4 и оптимизация
« Ответ #12 : 25/07/2014 00:49:36 »
Вложенное прерывание сработает в зависимости от приоритета, а cli разрешит и вне зависимости от приоритета. Это общая идеология во всех линейках микроконтроллеров и 86-е системы конечно то же самое.


А точки с запятой - это типичная беда когда внезапно меняешь всякие васики на си и обратно. :)
Есть только  миг
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #13 : 25/07/2014 00:50:42 »
Я тоже сначала не заметил, но, temp, это так, до кучи - нигде она не используется. WinAVR инициализирует переменные в самом начале. В ИДА полез просто поглянуть на код, а, там такое!!!
На Х86 реально можно вызвать прерывание из обработчика другого, но, только программным путем.
А, насчет точек и иже с ними - только седня прокрутил окно бьюилдера, и там такое!!!. Ну тут и начал думать. Код естессно не полный - выложен алгоритм для сектора в 42.35 градуса. INT0 - это прерывание по началу сектора, INT1 - по концу сектора,  ANACOMP - прерывание по искре. Отношение сектора к углу окружности = 8.5 ровно.
Т.е. надо построить график зависимости УЗО от оборотов двигателя. Математику естессно разгрузил, подсчитав константы. Осталось только добавить запись в Епром, и звуковую сигналку. А так, всем спасибо!!!. Volatile прочитал вчера - ничего не нарушил, все по канонам написанного. ( по моим скудным понятиям ).
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #14 : 25/07/2014 00:52:46 »
То ЮР -> насколько я знаю, в отличие от 51-го микрокомплекта, у АВР нет приоритета прерываний.
 

Оффлайн drfaust

  • Модератор раздела
  • Эксперт
  • ****
  • Сообщений: 5277
  • Похвалили: 575 раз(а)
  • Я не Шариков, просто судьба располосовала мой лоб.
  • Откуда: РФ, Лангепас, MSK+2 (UTC+5)
    • faust.dlinkddns.com
Re: AVR Studio4 и оптимизация
« Ответ #15 : 25/07/2014 01:01:59 »
...
На Х86 реально можно вызвать прерывание из обработчика другого, но, только программным путем.
...
Там иерархия прерываний. Поэтому если сработал, допустим int 3 для того, что бы разрешить внутри обработчика int3 клаву (int 9) надо с PICом общаться. sti/cli работают по всем int`ам (исключение виртуальные режимы, например virt 86 внутри protected 386)
...
Volatile прочитал вчера - ничего не нарушил, все по канонам написанного. ( по моим скудным понятиям ).
...

Я давно уже ничего серъёзного не писал, мог и накосячить. Но признаки были, будто i неинициализирована... Ну а точки и запятые - это да, бич СИ, так же как и скобки (если вложенность больше пяти одну забытую скобку в гигантской функции откапать сложно - ругань компилера начинается парой-тройкой экранов ниже)
Не кассами одними жив ЦТО ;-)
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #16 : 25/07/2014 01:06:27 »
Я в общем то про то же и говорил, но!!!, из допустим INT3, можно вызвать INT9 программным путем, разрешив перепрограммирование контроллера прерываний. Это я про DOS. sti, cli не берем - это глобально.
Меня больше АВР волнует - у меня прерывание по искре может быть после INT1, а, вот это задница. Правда сегодня код малька подправил. Если интересует, могу завтра кинуть.
 

Оффлайн drfaust

  • Модератор раздела
  • Эксперт
  • ****
  • Сообщений: 5277
  • Похвалили: 575 раз(а)
  • Я не Шариков, просто судьба располосовала мой лоб.
  • Откуда: РФ, Лангепас, MSK+2 (UTC+5)
    • faust.dlinkddns.com
Re: AVR Studio4 и оптимизация
« Ответ #17 : 25/07/2014 01:12:53 »
Я в общем то про то же и говорил, но!!!, из допустим INT3, можно вызвать INT9 программным путем, разрешив перепрограммирование контроллера прерываний. Это я про DOS. sti, cli не берем - это глобально.
Я не про это. Програмно я могу вызвать что угодно и когда угодно. Допустим int3 - (дебаг поинт - плохой пример), пусть будет деление на 0 = int0. Лочит всё что ниже по приоритету. Допустим я пишу свой супер-пупер обработчик этого int`a, так вот для того, чтобы принять ввод с клавы внутри "деления на 0" мне нужно через PIC контроллер разрешить int 9 (при этом остальные могут висеть залоченные), а могу просто подать PICу команду, мол я отработал и он разрешить все прерывания. При этом cli не прокатит нужно вот это:
mov     al,20H             ;послать сигнал "конец прерывания"
out     20H,al             ; контроллеру прерываний 8259
Не кассами одними жив ЦТО ;-)
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #18 : 25/07/2014 01:16:39 »
Вах, Федя, давно с х86 не работал, мог и забыть что-то. Но ты мне лучше по АВР скажи, если юзал. Я просто в ДШ не увидел иерархии прерываний. Поэтому лучше завтра исходник кину, там и поглядим, где я не прав.
Самое главное алгоритм правильно вписать, остальное ерунда. Мне кстати VVM сказал, что, если в программе нет деления на ноль, то это моветон.
 

Оффлайн Юр

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 2067
  • Похвалили: 103 раз(а)
Re: AVR Studio4 и оптимизация
« Ответ #19 : 25/07/2014 01:28:10 »
Да, точно, в авр есть приоритеты, но это относится к их одновременному аппаратному вызову - первым выполняется то, которое имеет меньший адрес. Ты прав. А запрета на вложения по умолчанию никакого нет.
Есть только  миг
 

Оффлайн drfaust

  • Модератор раздела
  • Эксперт
  • ****
  • Сообщений: 5277
  • Похвалили: 575 раз(а)
  • Я не Шариков, просто судьба располосовала мой лоб.
  • Откуда: РФ, Лангепас, MSK+2 (UTC+5)
    • faust.dlinkddns.com
Re: AVR Studio4 и оптимизация
« Ответ #20 : 25/07/2014 01:29:06 »
Вах, Федя, давно с х86 не работал, мог и забыть что-то. Но ты мне лучше по АВР скажи, если юзал. Я просто в ДШ не увидел иерархии прерываний. Поэтому лучше завтра исходник кину, там и поглядим, где я не прав.
Самое главное алгоритм правильно вписать, остальное ерунда. Мне кстати VVM сказал, что, если в программе нет деления на ноль, то это моветон.
Со встройкой я вообще дела не имел, только x86 и пытался изучать x86_64, но без практики - это ниочём. Закончу балкон - займусь эклз-либ... Хоть какая-то да практика :(


VVM

Это да. Деление на ноль и runtime error 200 просто обязательно должны выскакивать раз в месяц, в хорошо написанной программе, иначе это просто быдлокод :D
Не кассами одними жив ЦТО ;-)
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #21 : 25/07/2014 01:36:18 »
Так, подводим итоги - в АВР есть иерархия прерываний ( не видел в ДШ, кто первым пришел, того и тапки ), прерывания не могут вызываться ( в АВР ) из другого прерывания, поскольку флаг I сбрасывается при входе в обработчик прерывания, восстанавливается командой reti,  прерывание ( другое ) может быть сброшено из п\п обработки прерывания???
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #22 : 25/07/2014 01:42:41 »
Вот так вот, юзаешь Си для АВР, а, тут бац, и вторая смена! (с).
 

Оффлайн Юр

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 2067
  • Похвалили: 103 раз(а)
Re: AVR Studio4 и оптимизация
« Ответ #23 : 25/07/2014 01:49:58 »
Про что это?
The list also determines the priority levels of the different interrupts. The lower the address the higher is the priority level


Так, подводим итоги - в АВР есть иерархия прерываний ( не видел в ДШ, кто первым пришел, того и тапки ), прерывания не могут вызываться ( в АВР ) из другого прерывания, поскольку флаг I сбрасывается при входе в обработчик прерывания
Для чего же тогда система приоритетов, если все равно при входе в процедуру прерывания другие прерывания автоматически становятся запрещены сбросом этого флага даже для прерываний с более высоким приоритетом?
Есть только  миг
 

Оффлайн drfaust

  • Модератор раздела
  • Эксперт
  • ****
  • Сообщений: 5277
  • Похвалили: 575 раз(а)
  • Я не Шариков, просто судьба располосовала мой лоб.
  • Откуда: РФ, Лангепас, MSK+2 (UTC+5)
    • faust.dlinkddns.com
Re: AVR Studio4 и оптимизация
« Ответ #24 : 25/07/2014 02:05:33 »
...Для чего же тогда система приоритетов, если все равно при входе в процедуру прерывания другие прерывания автоматически становятся запрещены сбросом этого флага даже для прерываний с более высоким приоритетом?
Наверняка для разруливания одновременного прихода двух и более прерываний...
Не кассами одними жив ЦТО ;-)
 

Оффлайн Two_byte

  • Резидент
  • Эксперт
  • ****
  • Сообщений: 1721
  • Похвалили: 281 раз(а)
  • Не впихуйте невпихуемое!
  • Откуда: Ногинск
Re: AVR Studio4 и оптимизация
« Ответ #25 : 25/07/2014 02:08:53 »
The lower the address the higher is the priority level - Меньший адрес, имеет бОльший приоритет. ОК, только при входе в прерывание флаг I сбрасывается, и вложенных прерываний быть не может. Соот-стно, если я обнулю флаг какого-то прерывания в обработке другого прерывания, то его ( обнуленного ), не будет???
Мож вопросы и ламерские, но надо до конца разобраться. На МК51 у меня таких вопросов не возникает. (Паять схему с двумя светодиодами не предлагать. ) - времени нету.
И в Си я не гуру. В АСМ-е, пожалуйста.
 

Оффлайн drfaust

  • Модератор раздела
  • Эксперт
  • ****
  • Сообщений: 5277
  • Похвалили: 575 раз(а)
  • Я не Шариков, просто судьба располосовала мой лоб.
  • Откуда: РФ, Лангепас, MSK+2 (UTC+5)
    • faust.dlinkddns.com
Re: AVR Studio4 и оптимизация
« Ответ #26 : 25/07/2014 02:43:16 »
...Соот-стно, если я обнулю флаг какого-то прерывания в обработке другого прерывания, то его ( обнуленного ), не будет???
...
Приходят несколько сигналов на входы - срабатывает такт процессора -> проц смотрит сигналы по интам и выбирает с наивысшим (меньший адрес/номер) приоритетом. Запрещаются ВСЕ прерывания и вызывается обработчик. Как я понял в АВРе разрешить прерывания из обработчика можно только выполнив iret... Затем проц снова смотрит прерывания и т.д.


По теории может возникнуть ситуация "пропуска" прерывания с меньшим приоритетом, если более высокое слишком долго "думает" (тут "пропуски" уже по аналогии с х86)...
Не кассами одними жив ЦТО ;-)
 

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24