Forum: Mikrocontroller und Digitale Elektronik Was Was genau übergibt das Argument an die Callback-Funktion


von neongr (Gast)


Lesenswert?

Hallo,

ich habe gerade das Problem, dass ich in einer Ausarbeitung etwas über 
das verschachtelte Interrupt-System in HAL erzählen muss. Im konkreten 
Fall geht es um ein Timer-Interrupt eines STM32F407-Discovery-Boards, 
dessen ISR ja in folgender Form erfolgt:

void_HAL_TIM_PeriodElapsedCallback(TIM_HandleTypDef *htim)
{if (htim->Instance == TIM2)

 {ISR.....}
}

liege ich mit der Annahme richtig, dass der aktuelle Timer-Wert laufend 
an diese Funktion übergeben wird und mit dem ARR verglichen wird?

von Karl M. (Gast)


Lesenswert?

Du must klären, was TIM_HandleTypDef ist.

von neongr (Gast)


Lesenswert?

tja, so wird nach meinen Recherchen eine ISR in HAL geschrieben (hier 
für einen initialisierten und gestarteten Timer 2) und das funktioniert 
auch ;)

von Harry L. (mysth)


Lesenswert?

Du bekommst einen Pointer auf das HAL-Handle des Timers übergeben.

von neongr (Gast)


Lesenswert?

Aber wo genau zeigt der drauf? der Tim2.Instance-Wert ist ja nicht der 
Wert des ARR, aber genau damit wird das Argument in der Funktion 
verglichen

von Harry L. (mysth)


Lesenswert?

neongr schrieb:
> Aber wo genau zeigt der drauf? der Tim2.Instance-Wert ist ja nicht der
> Wert des ARR, aber genau damit wird das Argument in der Funktion
> verglichen

Nein, wird er nicht.
Das ist ein Zeiger auf eine Struktur, und dein ARR-Register findest du 
dann unter htim->Instance->ARR.

von neongr (Gast)


Lesenswert?

also ist die aufgenommene Struktur eine nach jedem Zählschritt 
Aktualisierte, die mit der Initialstruktur verglichen wird?

von Max D. (max_d)


Lesenswert?

Die Struktur die du übergeben bekommst ist verschachtelt.
Das interessante (in diesem Fall) Element ist die Instance.
Bei HAL ist das AFAIK ein Zeiger auf die Basis-Adresse des peripherals 
(hier der Timer).
Indem du die Instance (aka Adresse) mit der bekannten Instance TIM2 
vergleichst überprüfst du ob Timer2 übergeben wurde.

von Harry L. (mysth)


Lesenswert?

Es reicht bereits, das Timer-Handle zu vergleichen der ist auch 
eindeutig - also so:
1
if (htim == &htimx)
2
{
3
  // hier der Code für *meinen* Timer
4
}
5
else
6
{
7
  // hier ggf. Code für weitere Timer
8
}

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.