FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
下面分不同篇幅分别介绍各部分的功能,本次介绍任务管理功能。
任务管理:
FreeRTOS任务常用的调度方案为:固定优先级抢占式调度。
所谓固定优先级,即在任务初始化函数中固定初始化任务的优先级。
所谓抢占式即为,当有任务处于就绪态或者优先级改变时,处于更低优先级的任务处于运行态时,其处于就绪态的任务会抢占当前正在运行的更低优先级的任务。
任务的堆栈大小设置原则:栈深度X栈宽度 注:栈深度不能超过Size_t所能表示的最大值。
任务创建API:BaseType_t xTaskCreate(TaskFunction_t pxTaskCode,
const char * const pcName,
const uint16_t usStackDepth,
void * const pvParameters,
UBaseType_t uxPriority,
TaskHandle_t * const pxCreatedTask )
函数与参数说明:该API初始化创建一个任务,人物名为pcName,任务优先级为uxPriority,usStackDepth为使用的堆栈的大小,栈宽度为4byte,栈深度为usStackDepth。pxTaskCode为待执行的任务的函数。
相关DEMO:
xTaskCreate( vTask1, /* 任务函数 */
"vTask1", /* 任务名 */
512, /* 任务栈大小,单位word,也就是4字节 */
NULL, /* 任务参数 */
2, /* 任务优先级*/
&xHandleTaskLED ); /* 任务句柄 */
void vTask1(void * pvParameters)
{
TickType_t xLastWakeTime;
const TickType_t xFrequency = 2 * configTICK_RATE_HZ;
xLastWakeTime = xTaskGetTickCount ();
for( ;; )
{
vTaskDelayUntil( &xLastWakeTime, xFrequency );
printf("Task1\r\n");
}
}
以上即为创建任务和相应任务执行函数的例程。
任务优先级的切换API:
void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority )
参数说明:xTask为创建任务时的任务句柄。uxNewPriority 为需要修改后的任务优先级。