Hallo, ich habe eine Frage. Was ist der Unterschied zwischen pending flags und pending bits. Hintergrund meiner Frage ist, in der CubeMX Library F4 von STM gibt es zwei Makros die entweder die Pending Bits oder Flags löschen. Ich verstehe aber den Unterschied zwischen Flags und Bits nicht in diesem Fall. __HAL_GPIO_EXTI_CLEAR_FLAG und __HAL_GPIO_EXTI_CLEAR_IT Zum Verständnis ich verstehe unter Pendind bits und flags das gleiche das ein Interrupt erkannt wurde aber noch nicht vom Processor bearbeitet wurde. Das Heißt die Abarbeitung des Interrupt steht noch bevor. Bitte korrigiert mich, wenn ich das falsch verstanden habe.
Ich rate mal in Blau. ;) Ein Flag zeigt was an, ein bit bewirkt was. viktor schrieb: > flags das gleiche > das ein Interrupt erkannt wurde aber noch nicht vom Processor bearbeitet > wurde. Jup, das Flag alleine bewirkt noch nichts, erst wenn das zugehörige freihabe bit gesetzt ist, wird der Interrupt bearbeitet.
Die pending bits zeigen nur an, dass ein entsprechendes Ereignis aufgetreten ist. Nur wenn zusätzlich für dieses Ereignis auch der Interrupt freigegeben ist, wird ein Interrupt ausgelöst. Man kann also wahlweise auch ohne Interrupts zu verwenden lediglich das pending flag abfragen, ob seit der letzten Abfrage das Ereignis aufgetreten ist. Oder z. B. in der ISR sofort das pending flag löschen und (wenn die Bearbeitung etwas dauern sollte) noch innerhalb der ISR prüfen, ob das betreffende Ereignis ein zweites Mal aufgetreten ist. Sonst müsste die ISR ja erst beendet sein, bevor ein weiteres Auftreten durch einen erneuten Interrupt bearbeitet werden kann. (Die Alternative, in der ISR denselben Interrupt gleich wieder frei zu geben, ist u. U. gefährlich, da sie bei mehrfachen Auftreten in schneller Folge den Stack zum Überlaufen bringen könnte.) Andererseits sollte man i. d. R. vor Aktivierung des Interrupts das pending flag löschen, damit nicht ein (event. lang zurückliegendes) Ereignis sofort einen Interrupt auslöst. Insbesondere, wenn man die Einstellung der aktiven Flanke ändert, möchte man ja für "veraltete" Ereignisse (von der vorherigen Einstellung) keinen Interrupt.
Erstmal Danke für die schnellen Rückmeldungen. Ich habe das immer noch nicht so ganz verstanden. Also die pending Flags werden immer gesetzt, wenn ein Ereignis für ein Interrupt aufgetreten ist, unabhängig davon ob ich eine Interrupt-quelle freigegeben habe z.B. über die STM Funktion "HAL_NVIC_EnableIRQ()" oder nicht. Was machen dann die pending Bits? Werden diese vielleicht wie die Flags automatisch gesetzt aber nur wenn ich die Interrupt-quelle erst freigegeben habe z.B. über die STM Funktion "HAL_NVIC_EnableIRQ()"???? Im welchem Fall bzw. unter welchen Bedingungen werden die pending Bits gesetzt?
Ich würde einfach mal in die Doku zu den Macros schauen, da sollte es erklärt sein. Vielleicht wurden die Macros von mehreren Autoren erstellt und einer nennt sie Bits, der andere Flags.
Peter D. schrieb: > Ich würde einfach mal in die Doku zu den Macros schauen, da sollte > es > erklärt sein. > > Vielleicht wurden die Macros von mehreren Autoren erstellt und einer > nennt sie Bits, der andere Flags. Ich habe mal in die Doku reingeschaut und da steht wirklich das Selbe für zwei Makros: #define __HAL_GPIO_EXTI_CLEAR_IT(_EXTI_LINE_)(EXTI->PR = (_EXTI_LINE_)) Clears the EXTI's line pending bits. Parameters: _EXTI_LINE_,: specifies the EXTI lines to clear. This parameter can be any combination of GPIO_PIN_x where x can be (0..15) Return values: None Definition at line 218 of file stm32f4xx_hal_gpio.h. Referenced by HAL_GPIO_EXTI_IRQHandler(). _____________________________________________________________________ #define __HAL_GPIO_EXTI_CLEAR_FLAG(_EXTI_LINE_) (EXTI->PR = (_EXTI_LINE_)) Clears the EXTI's line pending flags. Parameters: _EXTI_LINE_,: specifies the EXTI lines flags to clear. This parameter can be any combination of GPIO_PIN_x where x can be (0..15) Return values: None Definition at line 202 of file stm32f4xx_hal_gpio.h. Also ist das Wurst ob ich __HAL_GPIO_EXTI_CLEAR_FLAG oder __HAL_GPIO_EXTI_CLEAR_IT verwende. ______________________________________________________________________ _ Warum gibt es für die eine Sache zwei verschiedene Makros? Mich hat das richtig irritiert.
Viktor schrieb: > Warum gibt es für die eine Sache zwei verschiedene Makros? Mich hat das > richtig irritiert. Ach, das gibt es häufig. Ein neuer Autor findet einen neuen Namen besser, muß aber den alten Namen drin lassen, damit sich frühere Quelltexte weiterhin übersetzen lassen. Z.B. gab es bei AVR-GCC früher SIGNAL und jetzt heißt es ISR.
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.