В данном уроке мы рассмотрим основы работы системы FreeRTOS на базе среды программирования Arduino IDE.
Для начало необходимо скачать библиотеку FreeRTOS:
Далее подключаем установленную библиотеку:
#include <Arduino_FreeRTOS.h>
Далее прописываем прототипы программ, которые будут участвовать в работе программы:
void TaskBlink1( void *pvParameters );
Для создание задачи мы используем следующую команду:
xTaskCreate( TaskFunction_t pvTaskCode, const char * const pcName, uint16_t usStackDepth, void *pvParameters, UBaseType_t uxPriority, TaskHandle_t *pxCreatedTask );
Сама программа имеет следующий шаблон:
#include <Arduino_FreeRTOS.h>
void TaskBlink1( void *pvParameters );
void TaskBlink2( void *pvParameters );
void TaskBlink3( void *pvParameters );
void setup() {
xTaskCreate(TaskBlink1, "Blink1", 128, NULL, 2,NULL);
xTaskCreate(TaskBlink2, "Blink2", 128, NULL, 2, NULL);
xTaskCreate(TaskBlink3, "Blink3", 128, NULL, 2, NULL);
}
void loop()
{
// не чего не пишем
}
void TaskBlink1(void *pvParameters) // Это задача.
{
(void) pvParameters;
pinMode(4, OUTPUT);
for (;;) // задача должна никогда не прекращаться или прерываться
{
digitalWrite(4, HIGH); // включить светодиод
vTaskDelay( 700 / portTICK_PERIOD_MS ); // ждать 0,7 секунды
digitalWrite(4, LOW); // выключить светодиод
vTaskDelay( 700 / portTICK_PERIOD_MS ); // ждать 0,7 секунды
}
}
void TaskBlink2(void *pvParameters)
{
(void) pvParameters;
pinMode(6, OUTPUT);
for (;;)
{
digitalWrite(6, HIGH);
vTaskDelay( 1000 / portTICK_PERIOD_MS );
digitalWrite(6, LOW);
vTaskDelay( 1000 / portTICK_PERIOD_MS );
}
}
void TaskBlink3(void *pvParameters)
{
(void) pvParameters;
pinMode(5, OUTPUT);
for (;;)
{
digitalWrite(5, HIGH);
vTaskDelay( 300 / portTICK_PERIOD_MS );
digitalWrite(5, LOW);
vTaskDelay( 300 / portTICK_PERIOD_MS );
}
}