在freertos中创建静态任务的一般步骤
第一步 任务栈
第二步 写一个任务函数
第三步 任务控制块 tcb(控制块的英文名字)
动态创建任务的步骤,
任务句柄
static TaskHandle_t Task_Handle = NULL; 创建一个任务的任务句柄
接下来在主函数里面开启
BaseType_t xReturn = pdPASS; //d定义创建信息的返回值 默认为pdpas
BSP_Init(); //外设的初始化
//定义 第一个的初始任务
xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate, //任务入口函数
(const char* )"AppTaskCreate",//任务名字
(uint16_t )512, //任务栈大小
(void* )NULL,//任务入口函数参数
(UBaseType_t )1,//优先级 数字越大 优先级越高
(TaskHandle_t* )&AppTaskCreate_Handle);//任务控制块 指针 ,任务句柄
if(pdPASS == xReturn)
vTaskStartScheduler(); //启动任务 开启调度器
else
return -1;
while(1);
任务函数
static void AppTaskCreate(void)
{
BaseType_t xReturn = pdPASS; //d定义创建信息的返回值 默认为pdpas
taskENTER_CRITICAL(); //进入临界保护状态
xReturn = xTaskCreate((TaskFunction_t )LED1_Task, //任务入口函数
(const char* )"LED1_Task",//任务名字
(uint16_t )512, //任务栈大小
(void* )NULL,//任务入口函数参数
(UBaseType_t )2, //优先级 数字越大 优先级越高
(TaskHandle_t* )&LED1_Task_Handle);//任务控制块 指针 ,任务句柄
if(pdPASS == xReturn)
vTaskDelete(AppTaskCreate_Handle); //删除这个初始任务
taskEXIT_CRITICAL(); //退出临界区
一般定义一个启动任务,然后在这个启动任务里面,开启其他任务,然后再把这个任务删除。
static void LED1_Task(void* parameter)
{
while (1)
{
LED1_ON;
vTaskDelay(500); /* ÑÓʱ500¸ötick */
printf("LED1_Task Running,LED1_ON\r\n");
LED1_OFF;
vTaskDelay(500); /* ÑÓʱ500¸ötick */
printf("LED1_Task Running,LED1_OFF\r\n");
//Key_Scan(LED1_GPIO_PORT,LED1_GPIO_PIN);
}
}