Я разрабатываю приложение C с помощью atmega168a-pu и прерываний. Я использую следующие прерывания:Программирование AVR, обработка прерываний
ISR(TIMER0_COMPA_vect);
ISR(TIMER0_COMPB_vect);
ISR (TIMER2_COMPA_vect);
ISR(SPI_STC_vect);
ISR(TIMER1_COMPA_vect);
ISR (PCINT1_vect);
и мой код выглядит
int main(void){
///initialization etc.
sei();
while(1){
///do some stuff and wait the interrupts
}
return 0;
}
Я хочу, чтобы блокировать все другие прерывания, когда происходит прерывание и включить прерывания непосредственно перед выходом из функции прерывания.
Не могли бы вы объяснить это на фрагменте кода, как я могу это сделать?
EDIT: http://www.nongnu.org/avr-libc/user-manual/optimization.html#optim_code_reorder заявляет, что такое использование вызывает проблему передислокации.
function(){
cli();
..
sei();
}
как именно вы отключите и включите глобальные прерывания, не вызывая никаких проблем? –
Будут ли нижестоящие лидеры объяснять их нижестоящий? Йохан добавил подсказку к описанию ошибки примерно через 8 минут после моего размещения. – junix
@JohanElmander Я обновил ответ на ваш измененный вопрос. – junix