PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ablauf der IRSs mit SIGNAL



weijr
01.12.2006, 17:33
In dem AVR manual wird SIGNAL(signame) definiert als:

-------
6.25.2.3 #define SIGNAL(signame)

Value:

void signame (void) __attribute__ ((signal)); \
void signame (void)

#include <avr/interrupt.h>

Introduces an interrupt handler function that runs with global
interrupts initially disabled. This is the same as the ISR macro.
------

1.Heißt das soviel, dass für IRSs mit SIGNAL(signame) GIE nicht gesetzt
sein brauch um die IRS zu entern oder was ist mit "initially" gemeint?

2.Wenn in einer signal IRS0 eine andere Signal IRS1 enabled wird, dann
wird
normalerweise erst wider in die Mainmode zurückgewechselt, bevor IRS1
geentert werden?

weijr
01.12.2006, 23:33
Hat einer den Plan mit signal?

linux_80
02.12.2006, 01:15
Hallo,
man schreibt ISR nicht IRS,
denn das kommt von Interrupt Service Routine, nicht Interrupt Rountinen Service ;-)

Mit SIGNAL wird nur die Funktion angelegt, und in die entsprechende Adresse der Interrupt Vectoren eingetragen.

Was mit dem global IRQ gemeint ist, wenn ein solcher IRQ aufgetreten ist und die Routine aufgerufen wird, werden alle andern IRQs unterdrückt, also disabled, es kann so kein anderer IRQ dazwischenfunken, auch nicht derselbe nochmal.
Der AVR "merkt" sich das aber und ruft diese gleich nach dem globalen erlauben der IRQs auf, ausser man löscht die IRQ-flags vorher.

Wenn die IRQs global von vorn herein schon nicht erlaubt werden, wird diese Routine auch nicht aufgerufen !

weijr
02.12.2006, 02:15
Danke schön...................

weijr
02.12.2006, 13:40
Wird beim Verlassen einer Signal IRQ das Global Enable automatisch wieder gesetzt?

SprinterSB
03.12.2006, 21:47
Das wird automatisch von der Hardware gesetzt (egal ob SIGNAL oder nicht).