Forum: Mikrocontroller und Digitale Elektronik FreeRTOS Fragen


von Moritz M. (Gast)


Lesenswert?

Hallo,


ich hab no ein paar Fragen zu FreeRTOS:

1. Die IdleHook Funktion wird doch immer aufgerufen wenn der IDLE-Task 
"aktiv" wird oder?

2. Wann genau wird die TickHook Funktion aufgerufen?

3. Was ist bei FreeRTOS ein "port"?

4. Was ist ein Interrupt in FreeRTOS? Werden daduch alle anderen Tasks 
unterbrochen?

Bis jetzt hab ich mir das irgentwie immer so zusammen gereimt aber jetzt 
will ich es genau wissen.
Wäre toll wenn jemand dazu was weiß!

Moritz

von Oliver J. (skriptkiddy)


Lesenswert?

Moritz M. schrieb:
> 1. Die IdleHook Funktion wird doch immer aufgerufen wenn der IDLE-Task
> "aktiv" wird oder?
>
> 2. Wann genau wird die TickHook Funktion aufgerufen?
http://www.freertos.org/a00016.html


> 3. Was ist bei FreeRTOS ein "port"?
Ein Port ist eine Portierung des Kernels auf eine andere Architektur.


> 4. Was ist ein Interrupt in FreeRTOS? Werden daduch alle anderen Tasks
> unterbrochen?
Ein Interrupt ist halt ein Interrupt, der von der Hardware ausgelöst 
wird.
Und ja der unterbricht deine Tasks.


Gruß Oliver

von Peter P. (ichbineinepfanne) Benutzerseite


Lesenswert?

Während dem schreiben war Oliver schneller ...
Ich kenne mich nicht sehr gut mit FreeRTOS aus, aber ein grobes 
versändnis habe ich:

Moritz M. schrieb:
> 1. Die IdleHook Funktion wird doch immer aufgerufen wenn der IDLE-Task
> "aktiv" wird oder?
Ja. Da ein prozessor nicht einfach nichts tun kann muss es eine funktion 
geben die "nichts tun" implementiert. Das ist die IdleHook Funktion. In 
der kannst du z.b. eine PWM generieren die ein analoges Messinstrument 
betreibt. Je größer der ausschlag desto geringer ist die CPU-Last.
Prinzipiell könnte der uC an der stelle auch in "Sleep Mode" gehen um 
wirklich nichts zu tun. Aufgeweckt werden kann er dann wieder durch den 
Tick-Interrupt. Ob das gemacht wird weiß ich nicht und wenn dann ist es 
von der verwendeten Hardware abhängig.

> 2. Wann genau wird die TickHook Funktion aufgerufen?
http://www.freertos.org/a00016.html
"The tick interrupt can optionally call an application defined hook (or 
callback) function - the tick hook. The tick hook provides a convenient 
place to implement timer functionality."
Liest sich so als ob er zu jedem Tick nach der eigentlichen 
SystemTick-Rouine augerufen wird.

> 3. Was ist bei FreeRTOS ein "port"?
FreeRTOS versucht möglichst generisch zu bleibem. D.h. so wenig 
hardwarespezifischen code wie möglich. Ports sind die Codeschnipsel die 
doch Prozessorabhängig sind. Z.b. ist es klar dass dier SystemTick 
Interrupt hardwarespezifisch ist (z.b. beim AVR muss ein Timer 
konfiguriert werden. Der Code ist NUR für den verwendeten AVR gültig).

> 4. Was ist ein Interrupt in FreeRTOS? Werden daduch alle anderen Tasks
> unterbrochen?
Ein interrut bleibt ein Interrupt. Wenn du ein ISR handler schreibst 
liegt es an dir für eine schnellsmögliche abarbeitung zu sorgen. Je nach 
verwendetem uC blockierst du in der Zeit alles andere. Ob der SystemTick 
ggf. eine höhere ISR Priorität hat musst du geziehlt nachschauen.

> Bis jetzt hab ich mir das irgentwie immer so zusammen gereimt aber jetzt
> will ich es genau wissen.
> Wäre toll wenn jemand dazu was weiß!
Google mal ... was ist überhaupt ein Betriebsystem, was ist ein 
Prozess/Task/Thread?

Es gibt ein nettes Buch. "Modern Operating Systems". Ist zwar garnicht 
mehr so modern, aber die prinzipien bleiben gleich.
Wenn du das Prinzip verstanden hast wird dir vieles klar.

von Moritz M. (Gast)


Lesenswert?

Hallo,

vielen Dank!

Die FreeRTOS-Dokumente kenne ich schon des halb habe ich ja hier 
gefragt.
Also es gibt keine Interrupts von FreeRTOS sondern nur die normalen 
Hardware-Interrupts? D.h wenn jetzt ein USART-Interrupt kommt werden 
alle Task-Angehalten? Laufen die Task danach automatisch Weiter?

Moritz

von Oliver J. (skriptkiddy)


Lesenswert?

Moritz M. schrieb:
> Also es gibt keine Interrupts von FreeRTOS sondern nur die normalen
> Hardware-Interrupts?
Auf dem CM3  z.B werden über die SVC-Instruktion Softwareinterrupts vom 
Freertos-Kernel ausgelöst. Darüber gelangt der Kernel in den 
privilegierten Modus. Da hatte ich vorhin nicht dran gedacht.


> D.h wenn jetzt ein USART-Interrupt kommt werden
> alle Task-Angehalten?
Im Grunde wird das Programm an der Stelle unterbrochen, an der der 
Interrupt auftritt, sofern gerade keine ISR eines Interrupts mit höherer 
Priorität abgearbeitet wird.


> Laufen die Task danach automatisch Weiter?
Ja.

Gruß Oliver

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.