一、关于FreeRTOS
(一)FreeRTOS简介:FreeRTOS是一个源码公开的免费的嵌入式实时操作系统
(二)FreeRTOS操作系统功能
作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。
FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行效率。
参考:https://blog.csdn.net/lxl584685501/article/details/46622365?
二、STM32下一个基于FreeRTOS的多任务程序
共执行执行3个周期性task
实现多任务句柄
static void AppTaskCreate(void);/* ÓÃÓÚ´´½¨ÈÎÎñ */
static void LED_Task(void* pvParameters);/* LED_TaskÈÎÎñʵÏÖ */
static void USART_Task(void* pvParameters);/* USART_TaskÈÎÎñʵÏÖ */
static void Temperature_Task(void* pvParameters);/* Temperature_TaskÈÎÎñʵÏÖ */
static void BSP_Init(void);/* ÓÃÓÚ³õʼ»¯°åÔØÏà¹Ø×ÊÔ´ */
实现每间隔500ms闪烁(变化)一次LED主要函数
static void LED_Task(void* parameter)
{
while (1)
{
printf("LED is ON!\n");
LED1_ON;
vTaskDelay(500); /* ÑÓʱ500¸ötick */
printf("LED is OFF!\n");
LED1_OFF;
vTaskDelay(500); /* ÑÓʱ500¸ötick */
}
}
实现每间隔2000ms,向串口发送一次指令数据“helloworld!"
static void USART_Task(void* pvParameters)
{
while(1)
{
printf("Hello Windows!\n");
vTaskDelay(2000);
}
}
实现每间隔5000ms,从AHT20采集一次温湿度数据
static void Temperature_Task(void* pvParameters)
{
while(1)
{
printf("¼ì²âζȣ¡\n");
vTaskDelay(5000);
}
}
使用野火调试助手
FreeRTOS V9.0.0 源码:
https://sourceforge.net/projects/freertos/files/FreeRTOS/V9.0.0/
使用现成源码注意添加文件路径
三、总结:
注意添加FreeRTOS头文件的文件路径,注意开发板接线