Arbeitsblatt FreeRTOS

Arbeitsblatt Echtzeitsysteme - FreeRTOS
Stand: 30.03.15
Aufbau einer FreeRTOS-Anwendung
•
Einbinden der Kernel-Header-Dateien
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
/* bei Bedarf einbinden */
•
main-Funktion (Task-Erzeugung, Scheduler-Start)
•
Task-Definitionen (Syntax: Standard-C-Funktion ohne Rückgabeparameter)
void task_name(void *pvParameters)
{
/* lokale Variablen */
/* Initialisierungs-Code */
for(;;)
{
/* Code Endlosschleife */
}
}
Wichtige Kernel-Service-Funktionen
•
portBASE_TYPE xTaskCreate(pdTASK_CODE pvTaskCode,
const portCHAR * const pcName,
unsigned portSHORT usStackDepth,
void *pvParameters,
unsigned portBASE_TYPE uxPriority,
xTaskHandle *pvCreatedTask);
/* Funktionspointer */
/* Debug-Name */
/* Task-Stack */
/* Task-Parameter */
/* Task-Priorität */
/* Task-Referenz */
Wert des Rückgabeparameters: pdPASS od. Error-Code (projdefs.h)
•
void vTaskStartScheduler(void);
•
zyklische Zeitverzögerung
void vTaskDelayUntil(portTickType *pxPreviousWakeTime, portTickType xTimeIncrement);
•
Zeitermittlung nach Scheduler-Start
portTickType xTaskGetTickCount(void);
Nutzung von Queues zum Datenaustausch
•
xQueueHandle xQueueCreate(
unsigned portBASE_TYPE uxQueueLength,
unsigned portBASE_TYPE uxItemSize);
/* Queue-Größe */
/* Element-Größe */
wenn Rückgabe == 0 konnte die Queue nicht erzeugt werden
•
portBASE_TYPE xQueueSendToBack(
xQueueHandle xQueue,
const void * pvItemToQueue,
portTickType xTicksToWait);
/* Queue-Handle */
/* Element-Pointer */
/* Wartezeit wenn Queue voll */
•
portBASE_TYPE xQueueReceive(
xQueueHandle xQueue,
void *pvBuffer,
portTickType xTicksToWait);
/* Queue-Handle */
/* Pointer auf Empfangs-Puffer */
/* Wartezeit wenn Queue leer */
INCLUDE_vTaskSuspend = 1 und xTicksToWait = portMAX_DELAY: unendliche Wartezeit
•
portBASE_TYPE xQueueSendToBackFromISR(
xQueueHandle xQueue,
const void *pvItemToQueue,
portBASE_TYPE *pxHigherPriorityTaskWoken);
Rückgabe: pdTRUE oder errQUEUE_FULL bzw. pdFALSE
Seite 1
/* Queue-Handle */
/* Element-Pointer */
/* Ausgabeparam. für schnelle */
/* Taskumschaltung */
Arbeitsblatt Echtzeitsysteme - FreeRTOS
Stand: 30.03.15
Projekteinrichtung FreeRTOS für Microchip PIC18F4520
1. Projekt für PIC18 anlegen
2. Konfiguration der Include-Pfade und Compiler-Options
3. Einbindung von Kernel-Quelldateien
• tasks.c, queue.c, list.c (Kernel – ...\FreeRTOS\Source\)
• heap_1.c (Speichermanagment-Schema für statisches Task-Design ...\FreeRTOS\Source\portable\MemMang\)
4. Kopieren von Quelldateien aus Kernel-Demoprojekt (PIC18F) in aktuelles Projektverzeichnis
sowie Einbinden und Anpassung
• port.c (CPU-spezifischer Code – ...\FreeRTOS\Source\portable\MPLAB\PIC18F\)
Auskommentierung der Aufrufe von Interrupt-Funktionen für die serielle Schnittstelle
// goto vSerialRxISR
// goto vSerialTxISR
• FreeRTOSConfig.h (applikationsspezifische Konfiguration des Kernels –
...\FreeRTOS\Demo\PIC18_MPLAB\)
• 18f452.lkr (Linker-Script – ...\FreeRTOS\Demo\PIC18_MPLAB\)
Änderung der controllerspezifischen Bibliothek (FILES p18f4520.lib)
5. Anlegen und Editieren der Applikationsdateien
Seite 2
Arbeitsblatt Echtzeitsysteme - FreeRTOS
Stand: 30.03.15
Konfiguration der Include-Pfade und Compiler-Options für FreeRTOS unter MPLAB X
MPLAB_PIC18F_PORT
-nw 2066 -nw 2074
C:\Program Files\Microchip\mplabc18\v3.47\h
C:\FreeRTOSV8.2.0\FreeRTOS\Source\include
C:\FreeRTOSV8.2.0\FreeRTOS\Demo\PIC18_MPLAB
Seite 3