Forum: Mikrocontroller und Digitale Elektronik Callback Funktion in c.


von Flussmittel (Gast)


Lesenswert?

Guten Morgen,
ich suche nach einer Grundlage der C Programmierung.
Versuche mich seit ein paar Wochen mit den STM32 zu beschäftigen.
Ich finde in der Doko der Hal Funktionen immer wieder Callbacks´s
Ich habe soweit verstanden das zB Interrupts nicht direkt aus der Hal 
verwendend werden dürfen. Und soweit ich verstanden habe soll man bzw 
muss man Callbacks verwenden. Stimmt das? Oder habe ich diesen Ansatz 
schon missverstanden?
Kann mir bitte jemand eine gute Deutsche Quelle nennen wo ich mich dazu 
einlesen kann? Oder kann mir anhand eines Beispiels jemand erklären wie 
ich diese Callbacks richtig nutze.
Möchte die Interrupts durch testen und richtig verstehen.
Bei den AVR war es ja Einfach.
Noch eine Frage die NVIC gibt für eine Peripherie global den Interrupt 
dieser frei Oder? Dann Muss man in der Interrupt Routine selbst erkennen 
was es für ein Interrupt war? Stimmt das so?
Danke für Eure Hilfe

von Peter D. (peda)


Lesenswert?

Einen Callback nimmt man, wenn ein Interrupt abhängig vom Kontext 
verschiedene Funktionen aufrufen soll.
Natürlich gelten dafür die gleichen Regeln, wie für einen Interrupt, 
d.h. der Callback sollte nur so kurz wie nötig dauern.

von STK500-Besitzer (Gast)


Lesenswert?

Die HAL (wie der Name schon sagt) abstrahiert die Hardware-Ebene des 
Controllers und macht Programme, die darauf basieren (etwas) 
portierbarer innerhalb der Controller-Familie.

Die NVIC ist das gleiche wie beim AVR die Interrupt-Sprungtabelle.
Allerdings um ein paar Prioritätgeschichten erweitert.

Wird unter HAL ein Interrupt ausgelöst, wird der IRGHandler aufgerufen, 
der das Ereignis filtert.
Dieser ruft wiederum die passende Callback auf. Diese werden durch den 
Applikationsprogrammierer erstellt und verarbeiten die Informationen aus 
dem Handleraufruf weiter.

Die Interrupts werden durch die entsprechenden Enable-Flags freigegeben. 
Das wird entweder duch entsprechende Makro-Aufrufe oder den 
Funktionsaufruf ("..._IT(...)") erledigt.

Flussmittel schrieb:
> Kann mir bitte jemand eine gute Deutsche Quelle nennen wo ich mich dazu
> einlesen kann?

Lern Englisch!

von Stefan F. (Gast)


Lesenswert?

Deine Frage hat nichts mit den C Grundlagen zu tun, sondern den 
spezifischen Anforderungen der HAL. Diese ist (soweit ich weiß) 
ausschließlich in englisch dokumentiert.

Wenn du µC Dokumentationen auf Deutsch suchst, dann solltest du zu den 
älteren AVR, PIC oder MCS51 wechseln. Da gibt es einiges auf Deutsch und 
keine HAL.

Als Mittelweg kann ich Dir empfehlen, STM32 ohne HAL zu programmieren. 
Um die englischen Datenblätter und Reference Manuals kommst du zwar 
nicht herum, aber immerhin brauchst du dann die Doku der HAL nicht zu 
auch noch zu lesen.

von Flussmittel (Gast)


Lesenswert?

Peter D. schrieb:
> Einen Callback nimmt man, wenn ein Interrupt abhängig vom Kontext
> verschiedene Funktionen aufrufen soll.

Heißt das das der Callback mehrmals verwendet wird?

STK500-Besitzer schrieb:
> Wird unter HAL ein Interrupt ausgelöst, wird der IRGHandler aufgerufen,
> der das Ereignis filtert.
> Dieser ruft wiederum die passende Callback auf. Diese werden durch den
> Applikationsprogrammierer erstellt und verarbeiten die Informationen aus
> dem Handleraufruf weiter.
>
> Die Interrupts werden durch die entsprechenden Enable-Flags freigegeben.
> Das wird entweder duch entsprechende Makro-Aufrufe oder den
> Funktionsaufruf ("..._IT(...)") erledigt.
>
> Flussmittel schrieb:
>> Kann mir bitte jemand eine gute Deutsche Quelle nennen wo ich mich dazu
>> einlesen kann?
>
> Lern Englisch!

Wenn ich es richtig verstanden habe gebe ich in der NVIC den Interrupt 
Global frei und dann kann ich mit den Makros die verschiedenen 
Interrupts auswählen?
Wie genau setze ich den zB HAL_UART_TxCpltCallback?
In der Doku sehe ich zwar die verschiedenen Interrupt Quellen aber wie 
ich sie aktiviere habe ich nicht gefunden.
Mein Englisch ist leider für so komplexe Sachen zu schwach.

Danke für Eure Hilfe Zeit und Nerven

von Flussmittel (Gast)


Angehängte Dateien:

Lesenswert?

Noch zwei Bilder

von Flussmittel (Gast)


Lesenswert?

Würde jemanden eventuell auch was zahlen wenn er mir das mit den 
Callback im Teamviewer zeigen würde....

von Vincent H. (vinci)


Lesenswert?

Ich hab die HAL nun einige Zeit nicht mehr verwendet, aber soweit ich 
mich erinnern kann gibt es 2x Varianten wie man die Callbacks setzt.

1.) Der Callback ist bereits definiert, jedoch ein weak Symbol. Das ist 
zum Beispiel bei der UART (STM32F4 Library) der Fall:
1
 __weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)

Es reicht also, wenn du die entsprechende Funktion selbst (ohne __weak) 
definierst.


2.) Der Callback muss bei der Initialisierung im "Init-Struct" 
mitgegeben werden. Beispiel dafür hab ich aktuell keins, meine mich aber 
daran erinnern zu können dass manche Peripherien das so handhaben.

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.