Ich entwickle eine C-Applikation mit atmega168a-pu und Interrupts. Ich verwende die folgenden Interrupts:AVR-Programmierung, Interrupt-Handling
ISR(TIMER0_COMPA_vect);
ISR(TIMER0_COMPB_vect);
ISR (TIMER2_COMPA_vect);
ISR(SPI_STC_vect);
ISR(TIMER1_COMPA_vect);
ISR (PCINT1_vect);
und mein Code sieht aus wie
int main(void){
///initialization etc.
sei();
while(1){
///do some stuff and wait the interrupts
}
return 0;
}
Ich möchte alle anderen Interrupts blockieren, wenn eine Unterbrechung auftritt und ermöglichen die Interrupts, kurz bevor die Interrupt-Funktion zu verlassen.
Könnten Sie bitte erklären Sie es auf einem Code-Snippet, wie ich es tun kann?
BEARBEITEN: http://www.nongnu.org/avr-libc/user-manual/optimization.html#optim_code_reorder besagt, dass solche Verwendung Ursache Neu-Probleme verursachen.
function(){
cli();
..
sei();
}
Wie deaktivieren und aktivieren Sie globale Interrupts, ohne ein Problem zu verursachen? –
Würden die Downvoters ihren Downvote erklären? Johan hat den Hinweis ungefähr 8 Minuten nach meiner Veröffentlichung hinzugefügt. – junix
@JohanElmander Ich habe die Antwort auf Ihre geänderte Frage aktualisiert. – junix