FreeRTOS入门
零、需求软件(自行下载)
1、keil5.1(编译生成.hex文件)
2、mcuisp(烧录代码)
3、多功能助手(调试,显示数据)
一、任务要求
在STM32下完成一个基于FreeRTOS的多任务程序,执行3个周期性task:
task1,每间隔500ms闪烁(变化)一次LED;
task2,每间隔2000ms,向串口发送一次指令数据“helloworld!";
task3,每间隔5000ms,从AHT20采集一次温湿度数据。
二、FreeRTOS的使用
1、原理
2、多任务程序
(1)在下载的资料里找到图示文件夹
(2)用keil5打开工程。
==注:电脑安装的keil版本最好是5.1以上,否则可能会出现一些问题。
可以看到,此时的该工程文件已完成拷贝 FreeRTOS Package 到裸机工程,FreeRTOSConfig.h 文件到 user 文件夹的工作,无需手动添加。FreeRTOS/src 和 FreeRTOS/port 组也已建立完成。
可以直接进行修改编译。
(3)按照任务要求进行修改
①在main.c文件里面找到任务句柄,将其修改为:
/* 创建任务句柄 */
static TaskHandle_t AppTaskCreate_Handle = NULL;
/* LED任务句柄 */
static TaskHandle_t LED1_Task_Handle = NULL;//每间隔500ms闪烁(变化)一次LED
/* hello任务句柄 */
static TaskHandle_t hello_Task_Handle = NULL;/* 每间隔2000ms,向串口发送一次指令数据“helloworld!"*/
/* AHT20任务句柄 */
static TaskHandle_t AHT_Task_Handle = NULL;¡//每间隔5000ms,从AHT20采集一次温湿度数据
②在main.c文件的主程序中加入创建hello_Task任务和创建AHT_Task任务
/* ´创建hello_Task任务 */
xReturn = xTaskCreate((TaskFunction_t )hello_Task, /* 任务入口函数*/
(const char* )"hello_Task",/* 任务名字 */
(uint16_t )512, /* 任务栈大小*/
(void* )NULL, /* 任务入口函数参数 */
(UBaseType_t )3, /* 任务优先级 */
(TaskHandle_t* )&hello_Task_Handle);/* 任务控制块指针*/
if(pdPASS == xReturn)
printf("创建hello_Task任务成功!\r\n");
/* 创建AHT_Task任务 */
xReturn = xTaskCreate((TaskFunction_t )AHT_Task, /* 任务入口函数 */
(const char* )"AHT_Task",/* 任务名字*/
(uint16_t )512, /* 任务栈大小 */
(void* )NULL, /* 任务入口函数参数*/
(UBaseType_t )3, /* 任务优先级 */
(TaskHandle_t* )&AHT_Task_Handle);/* 任务控制块指针 */
if(pdPASS == xReturn)
printf("创建AHT_Task任务成功!\r\n");
③加入hello_Task函数的延时函数
static void hello_Task(void* parameter)
{
while (1)
{
vTaskDelay(2000); /* 延时2000个tick */
printf("helloworld£¡\r\n");
}
}
④加入AHT_Task函数的延时函数