pending flags panding bits

Gast #5057421
Lesenswert?

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.
Gast #5057490
Lesenswert?

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.
Gast #5057630
Lesenswert?

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?
Gast #5057653
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren