HeiOS_Thread.c File Reference

In dieser Datei sind alle HeiOS-Funktionen enthalten. More...

`#include "HeiOS_Thread.h"`
`#include "FixedPriority.h"`
Include dependency graph for HeiOS_Thread.c:

## Functions

void | setfpoutoutidle (void(*fp)(void))
void | Thread_init (Thread_t *Thread, void *stack, uint32_t stack_size, char name[], void(*pfunc)(), uint32_t executiontime, uint8_t priority)
| Diese Funktion initialisert einen Thread und fügt ihn der Ready-Liste hinzu. More...
uint8_t | priv_thread_sort_add (Thread_t **root, Thread_t *Thread)
| Mithilfe der Funktion werden die Thread-Objekte in einer einfach verketteten Liste angeordnet. Die Reihenfolge ist dabei von der Priorität des Threads abhängig. More...
uint8_t | priv_thread_remove (Thread_t **root, Thread_t *Thread)
| Diese Funktion entfernt das Threadobjekt aus der Liste. More...
void | thread_suspend (Thread_t *Thread)
| Diese Funktion entfernt einen Thread von der Ready-Liste und löst gegebenenfalls einen Kontextwechsel aus. More...
void | thread_resume (Thread_t *Thread)
| Diese Funktion fügt den übergebenen Thread zur Ready-Liste hinzu. More...
void | thread_delay (uint32_t tick)
| Diese Funktion entfernt den übergebenen Thread von der Ready-Liste und fügt ihn der Sleep-Liste hinzu. Nach Ablauf der übergebenen Tickanzahl wird der Thread automatisch der Ready-Liste wieder hinzugefügt. More...
__asm void | SVC_Handler (void)
| Diese Funktion ermittelt mithile von embedded Assembler den verwendeten Stackpointer. More...
void | SVC_Handler_service (uint32_t *svc_args)
| Diese Funktion dient als API, um Funktionen im priviligierten Modus ausführen zu können. Diese Funktion besitzt die höchste Priorität und kann somit von keinem anderen Interrupt unterbrochen werden. More...
void | SysTick_Handler (void)
| Diese Funktion wird in regelmäßigen Abständen ausgeführt. More...
void | PendSV_Handler (void)
| Diese Funktion führt den Kontextwechsel aus. More...
__asm void | save_R4toR11 (void)
| Diese Funktion sichert die Register R4-R8 mit Inline-Assembler. More...
__asm void | load_R4toR11 (void)
| Diese Funktion ladet die Register R4-R8 mit Inline-Assembler. More...
void | OS_Start_Scheduler (void)
| Diese Funktion initialisiert das OS und sorgt anschließend für den Wechsel in den Idlethread. More...
void | IdleThread (void)
| Diese Funktion durchläuft eine Endlosschleife und sorgt für einen definierten Zustand, falls kein Thread für die Abarbeitung bereit ist. More...
void | update_Thread_slp (void)
| Diese Funktion aktualisiert die Verzögerungszeit der Threads. More...
void | update_executiontime (void)
| Diese Funktion aktualisiert die Ausführungszeit der Threads. More...

## Variables

void(* | fpoutputidle )(void)
Thread_IDLE_t | IDLE_Thread
Thread_t * | Thread_ready = NULL
Thread_t * | Thread_slp = NULL
Thread_t * | Thread_run = NULL

## Detailed Description

In dieser Datei sind alle HeiOS-Funktionen enthalten.

Author
  Heinrich Ginter

Version
  v1.0

Date
  16.12.2015

## Function Documentation

## IdleThread()

void IdleThread | ( | void |  | ) |

Diese Funktion durchläuft eine Endlosschleife und sorgt für einen definierten Zustand,
falls kein Thread für die Abarbeitung bereit ist.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  keine | Übergabeparameter

Returns
  keinen Rückgabeparameter

Here is the caller graph for this function:

## load_R4toR11()

__asm void load_R4toR11 | ( | void |  | ) |

Diese Funktion ladet die Register R4-R8 mit Inline-Assembler.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  keine | Übergabeparameter

Returns
  keinen Rückgabeparameter

Here is the caller graph for this function:

## OS_Start_Scheduler()

void OS_Start_Scheduler | ( | void |  | ) |

Diese Funktion initialisiert das OS und sorgt anschließend für den Wechsel in den Idlethread.

Der Prozessstackpointer des Idlethreads wird initialisert und die Prioritäten der Interrupts werden gesetzt.
Ebenfalls wird die Tickrate des SysTick-Handlers konfiguriert und der Wechsel in den Thread-Mode eingeleitet.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  keine | Übergabeparameter

Returns
  keinen Rückgabeparameter

Here is the call graph for this function:

## PendSV_Handler()

void PendSV_Handler | ( | void |  | ) |

Diese Funktion führt den Kontextwechsel aus.

Innerhalb der Funktion wird der aktuelle Prozessstackpointer in der Threaddatenstruktur gesichert,
die Wahl des nächsten Threads anhand des Scheduling-Algorithmus bestimmt und der nächste Prozessstackpointer geladen.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  keine | Übergabeparameter

Returns
  keinen Rückgabeparameter

Here is the call graph for this function:

## priv_thread_remove()

uint8_t priv_thread_remove | ( | Thread_t ** | root,
|  | Thread_t * | Thread
| ) |  |

Diese Funktion entfernt das Threadobjekt aus der Liste.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  Listenanker | und Threadobjekt

Returns
  bei erfolgreicher Ausführung wird ein positiver Wert zurückgegeben ansonsten eine 0

Here is the caller graph for this function:

## priv_thread_sort_add()

uint8_t priv_thread_sort_add | ( | Thread_t ** | root,
|  | Thread_t * | Thread
| ) |  |

Mithilfe der Funktion werden die Thread-Objekte in einer einfach verketteten Liste angeordnet.
Die Reihenfolge ist dabei von der Priorität des Threads abhängig.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  Ein | Listenanker sowie das Thread-Objekt werden übergeben.

Returns
  liefert einen Integer zurück und symbolisiert dadurch eine erfolgreiche Ausführung

Here is the caller graph for this function:

## save_R4toR11()

__asm void save_R4toR11 | ( | void |  | ) |

Diese Funktion sichert die Register R4-R8 mit Inline-Assembler.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  keine | Übergabeparameter

Returns
  keinen Rückgabeparameter

Here is the caller graph for this function:

## setfpoutoutidle()

void setfpoutoutidle | ( | void(*)(void) | fp | ) |

## SVC_Handler()

__asm void SVC_Handler | ( | void |  | ) |

Diese Funktion ermittelt mithile von embedded Assembler den verwendeten Stackpointer.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  keine | Übergabeparameter

Returns
  keinen Rückgabeparameter

Here is the call graph for this function:

## SVC_Handler_service()

void SVC_Handler_service | ( | uint32_t * | svc_args | ) |

Diese Funktion dient als API, um Funktionen im priviligierten Modus ausführen zu können.
Diese Funktion besitzt die höchste Priorität und kann somit von keinem anderen Interrupt unterbrochen werden.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  der | Stackrahmen mit den Registern xPSR,PC,LR,R12,R0-R3 wird übergeben

Returns
  keinen Rückgabeparameter

Here is the caller graph for this function:

## SysTick_Handler()

void SysTick_Handler | ( | void |  | ) |

Diese Funktion wird in regelmäßigen Abständen ausgeführt.

Innerhalb der Funktion wird die Ausführungsdauer eines Threads überprüft.
Ebenfalls werden die Threads, die sich in der Sleep-Liste befinden, aktualisiert und gegebenenfalls der Ready-Liste hinzugefügt.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  keine | Übergabeparameter

Returns
  keinen Rückgabeparameter

Here is the call graph for this function:

## thread_delay()

thread_delay | ( | uint32_t | tick | ) |

Diese Funktion entfernt den übergebenen Thread von der Ready-Liste und fügt ihn der Sleep-Liste hinzu.
Nach Ablauf der übergebenen Tickanzahl wird der Thread automatisch der Ready-Liste wieder hinzugefügt.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  Tickanzahl | (Ein Tick entspricht hierbei dem Intervall des SysTicks)

Returns
  keinen Rückgabeparameter

Here is the call graph for this function:

## Thread_init()

Thread_init | ( | Thread_t * | Thread,
|  | void * | stack,
|  | uint32_t | stack_size,
|  | char | name[],
|  | void(*)() | pfunc,
|  | uint32_t | executiontime,
|  | uint8_t | priority
| ) |  |

Diese Funktion initialisert einen Thread und fügt ihn der Ready-Liste hinzu.

Alle übergebenen Parameter werden den Attributen der Datenstruktur zugewiesen. Ebenfalls werden die CPU-Register des Threads für die erstmalige Ausführung initialisert.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  Thread_t | *Thread: Übergabeparameter der angelegten Threaddatenstruktur (call by reference) void *stack: Übergabeparameter des Stackframes uint32_t stack_size: Übergabeparameter der Arraygröße char name[]: Name des Threads void (*pfunc)(): Übergabeparameter der Threadfunktion uint32_t executiontime: Ausführungszeit eines Threads uint8_t priority: Priorität eines Threads

Returns
  keinen Rückgabeparameter

Here is the call graph for this function:

## thread_resume()

void thread_resume | ( | Thread_t * | Thread | ) |

Diese Funktion fügt den übergebenen Thread zur Ready-Liste hinzu.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  Threadobjekt |

Returns
  keinen Rückgabeparameter

Here is the call graph for this function:

## thread_suspend()

void thread_suspend | ( | Thread_t * | Thread | ) |

Diese Funktion entfernt einen Thread von der Ready-Liste und löst gegebenenfalls einen Kontextwechsel aus.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  Threadobjekt |

Returns
  keinen Rückgabeparameter

Here is the call graph for this function:

## update_executiontime()

void update_executiontime | ( | void |  | ) |

Diese Funktion aktualisiert die Ausführungszeit der Threads.

Nach Ablauf der Ausführungszeit wird ein Kontextwechsel ausgelöst.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  keine | Übergabeparameter

Returns
  keinen Rückgabeparameter

Here is the caller graph for this function:

## update_Thread_slp()

void update_Thread_slp | ( | void |  | ) |

Diese Funktion aktualisiert die Verzögerungszeit der Threads.

Nach Ablauf der Verzögerungszeit wird der jeweilige Thread von der Sleep-Liste entfernt und der Ready-Liste hinzugefügt.

Author
  Heinrich Ginter

Version
  1.0

Date
  16.12.2015

Parameters

  keine | Übergabeparameter

Returns
  keinen Rückgabeparameter

Here is the call graph for this function:
Here is the caller graph for this function:

## Variable Documentation

## fpoutputidle

void(* fpoutputidle) (void)

## IDLE_Thread

Thread_IDLE_t IDLE_Thread

Definition des Idlethreads

## Thread_ready

Thread_t* Thread_ready = NULL

Listen Anker für die Ready-Queue

## Thread_run

Thread_t * Thread_run = NULL

Listen Anker für den aktiven Thread

## Thread_slp

Thread_t * Thread_slp = NULL

Listen Anker für die Sleep-Queue