Forum: Mikrocontroller und Digitale Elektronik pending flags panding bits


von viktor (Gast)


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.

von Teo D. (teoderix)


Lesenswert?

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.

von A. B. (Gast)


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.

von Viktor (Gast)


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?

von Peter D. (peda)


Lesenswert?

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.

von Viktor (Gast)


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.

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.