Hallo STM32 Freunde, ich habe eine grundsätzliche Frage zum Thema ISR. In vielen Beispielen von ST wird in der ISR noch abgefragt, ob das entsprechende Interrupt Flag (z.B. beim Überlauf eines Timers) überhaupt gesetzt ist, anstatt es einfach gleich zu löschen. Ist dies nicht unnötig, da ohne Überlauf und ohne gesetztes Überlauf Flag die ISR erst gar nicht aufgerufen worden wär? Hier ein Beispiel: void TIM2_IRQHandler(void){ if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){ TIM_ClearITPendingBit(TIM2, TIM_IT_Update); if(key_state == FALSE && GPIO_ReadInputDataBit(GPIOX, GPIO_Pin_X) == FALSE){ if(press_flag == FALSE){ press_flag = TRUE; // Aktion bei Tastendruck } } else{ press_flag = FALSE; } key_state = GPIO_ReadInputDataBit(GPIOX, GPIO_Pin_X); } } Ist die Abfrage: " if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){ " nicht eigentlich unnötig? Freu mich auf eure Antworten. Grüße Stefan
>Ist die Abfrage: " if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){ " >nicht eigentlich unnötig? Vieleicht auch mal da drüber nachdenken? > TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
Inwiefern da drüber nachdenken? Das Flag muss man schon per Software löschen!
So sind sie halt, die eingebildeten User (nicht alle) von mikrocontroller.net. Können sich einfach nicht vorstellen, dass es auch Menschen gibt, die weniger wissen als sie selbst und geben dann nur dumme Antworten, anstatt zu helfen. Ja mir ist bewusst dass der Beitrag älter als 6 Monate ist, aber da außer dem TE vielleicht auch noch andere über diese Frage stolpern, gebe ich hier mal die Antwort: In jedem IRQHandler werden mehrere Interruptquellen zusammengefasst. Um nun auf die richtige Interruptquelle zu reagieren, wird in der ISR als erstes abgefragt, um welche von den viele Interruptquellen es sich handelt. Dann wird der Code abgearbeitet, der für den jeweiligen Interrupt interessant ist. Bsp: void TIM2_IRQHandler(void){ if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){ //mach was } if(TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET){ //mach was anderes } }
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.