一、使用接口函数创建任务
1.动态创建 xTaskCreate()
函数原型:
BaseType_t xTaskCreate(
TaskFunction_t pxTaskCode, // 函数指针, 任务函数
const char * const pcName, // 任务的名字
const configSTACK_DEPTH_TYPE usStackDepth, // 栈大小,
单位为word(字),1字=4字节(在32位MCU)
void * const pvParameters, // 调用任务函数时传入的参数
UBaseType_t uxPriority, // 优先级
TaskHandle_t * const pxCreatedTask ); // 任务句柄, 以后使用它来操作这个任务
2.静态创建 xTaskCreateStatic()
函数原型:
TaskHandle_t xTaskCreateStatic (
TaskFunction_t pxTaskCode, // 函数指针, 任务函数
const char * const pcName, // 任务的名字
const uint32_t ulStackDepth, // 栈大小,单位为word,10表示40字节
void * const pvParameters, // 调用任务函数时传入的参数
UBaseType_t uxPriority, // 优先级
StackType_t * const puxStackBuffer, // 静态分配的栈,就是一个buffer
StaticTask_t * const pxTaskBuffer // 静态分配的任务结构体的指针,用它来操作这个任务
);
二、实验1-任务创建
内容:创建两个任务,分别运行LED任务和OLED显示屏任务
(1)在系统默认创建的任务中初始化LCD(OLED),并循环运行LCD_Test()
(2)使用动态创建任务,在MX_FREERTOS_Init(void)中,调用xTaskCreate()创建Led任务
//依次分别为:任务函数,任务名,栈大小,任务函数传入形参,优先级,句柄
xTaskCreate(MyTask, "myfirsttask", 128, NULL, osPriorityNormal, NULL);
三、实验2-任务创建"声、光、色、影"
内容:(1)动态创建任务"声",使用无源蜂鸣器播放音乐
(2)静态创建任务"光",LED灯闪烁
(3)静态创建任务"色",全彩LED渐变颜色
(4)Freertos默认任务,在默认任务中检测红外遥控器的键值并显示在OLED上
1.PlayMusic任务:PlayMusic
在music.c中(文件路径:../Core/Src)
2.LED任务:Led_Test
在静态创建时,我们直接将函数LedTest作为任务函数,不再另外编写,如图:
此处报警:warning: #167-D: argument of type "void (*)(void)" is incompatible with parameter of type "TaskFunction_t" {TaskFunction_t 是 void (*)(void)型,类型不匹配,但是不影响调用 }
3.全彩LED任务:ColorLED_Test
在静态创建时,我们直接将函数ColorLED_Test作为任务函数,不再另外编写,如图:
4.OLED任务:StartDefaultTask