基于Hal库实现FreeRTOS操作系统(二)
前言
通过STM32CubeMX生成了一个工程模板,本章我基于前者新建的工程开始基于FreeRTOS操作系统的动态任务创建方法。
任务创建的动态方法
首先,我们找到tasks.c文件(我的路径是Middleware->FreeRTOS->tasks.c,不同电脑可能路径不同,这里只是作为参考)。在这里找到xTaskCreate函数详细代码如下所示:
xTaskCreate( TaskFunction_t pxTaskCode, //创建任务块
const char * const pcName, //任务块名字
const configSTACK_DEPTH_TYPE usStackDepth, //申请代码块大小
void * const pvParameters, //返回的变量
UBaseType_t uxPriority, //优先级
TaskHandle_t * const pxCreatedTask ) //任务块句柄
由上述代码可知,动态创建一个任务,主要有六个模块组成,在在对应的文件(tasks.h)中有使用的例子。如下
* Example usage:
<pre>
// Task to be created.
void vTaskCode( void * pvParameters )
{
for( ;; )
{
// Task code goes here.
}
}
下面贴入我使用的代码:
#define START_STK_SIZE 120//栈大小
#define START_TASK_PRIO 1//任务优先级
TaskHandle_t StartTask_Handler;//任务句柄
void start_task( void * pvParameters )//任务函数
{
。。。
vTaskDelete(StartTask_Handler);//通过句柄删除任务
}
int main()
{
。。。
xTaskCreate((TaskFunction_t) start_task, //创建任务块
(char *) "start_task", //任务块名字
(configSTACK_DEPTH_TYPE) START_STK_SIZE, //申请代码块大小
(void *) NULL, //返回的变量
(UBaseType_t) START_TASK_PRIO, //优先级
(TaskHandle_t *) &StartTask_Handler ); //任务块句柄
。。。
}
完成动态创建一个任务优先级为1,栈大小为120bit的任务。
vTaskDelete()函数同样在task.c文件中,通过任务块的句柄删除函数。