Hallo, ich habe eine Frage zu der ISR-Behandlung bei den MSP430ern. Das folgende konstrukt findet sich beispielhaft in mehreren Büchern und Examplecodes. __interrupt void TIMERB1_ISR(void) { /* Any access, read or write, of the TBIV register automatically resets //the highest "pending" interrupt flag. */ switch( __even_in_range(TBIV,14) ) { case 0: break; // No interrupt case 2: break; // CCR1 not used case 4: break; // CCR2 not used case 6: break; // CCR3 not used case 8: break; // CCR4 not used case 10: break; // CCR5 not used case 12: break; // CCR6 not used case 14: P1OUT ^= 0x01; // overflow break; default: break; } } Was ich mich dabei aber frage: "Case 0" trifft doch im wesentlichen immer zu, und demnach müsste die ISR doch stets sofort verlassen werden, ohne jemals einen der echten Interrupt-Cases erreichen zu können... oder habe ich die switch-case Anweisung nicht richig verstanden?
MSP430 schrieb im Beitrag #2742059: > "Case 0" trifft doch im wesentlichen immer zu case 0 trifft genau dann zu wenn __even_in_range(TBIV,14) (dessen Definition du uns ja verschwiegen hast) Null ist. Ich glaube du hast switch-case tatsächlich falsch verstanden.
MSP430 schrieb im Beitrag #2742059: > oder habe ich die switch-case Anweisung nicht richig verstanden? Danach sieht es aus.
nicht richtig verstanden, ja! das '__even_in_range' ermöglicht dem compiler hier eine ganz einfache sprungtabelle zu bauen. die 14 meint dann, dass der hoechste wert 14 möglich ist. im TBIV-reister sind nur die bits 1 bis 3 belegt, und der wert, der ausgelesen wird entspricht dann eben 2,4,6,8, ... je nach priorität. 0 kommt praktisch nicht vor, da sonst keine interrupt ausgelöst werden würde. oder zielt deine frage darauf ab, dass ein 'grösser als'-vergleich im case stattfindet? mir klingt das nach irgendeiner komischen sprache, in der das so war. basic oder so?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.