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
© Copyright 2024 ExpyDoc