参考:FreeRTOS使用教程
关于打印调试信息:
修改FreeRTOSConfig.h中的
//调试信息打印
#define configUSE_TRACE_FACILITY 1 //默认值是0
#define configUSE_STATS_FORMATTING_FUNCTIONS 1 //增加这一行
并且配置print和usart,使usart能打印调试信息,:
static void vTaskLed1(void *pvParameters)
{
uint8_t pcWriteBuffer[500];
while(1)
{
LED1_ON;
vTaskDelay(500);
LED1_OFF;
vTaskDelay(500);
vTaskList((char *)&pcWriteBuffer);
printf("tsak state priority stacks number\r\n");
printf("%s\r\n", pcWriteBuffer);
}
}
1、任务函数
- 任务函数必须返回void,且必须带有一个void指针参数:void *pvParameters
- 例如:void ATaskFunction(void *pvParameters);
- 任务都是自己职权范围内的一个小程序,其具有程序入口,通常会运行在一个死循环中,也不会退出;
- 任务不允许任何形式的返回(绝对不能有return语句,也不能执行的函数末尾,当然也可以运行完任务显示的删除它vTaskDelete(NULL))
- 一个任务函数可以创建若干个任务,任务之间均独立执行;
1.1、创建任务函数:xTaskCreate()
首先看一下该函数的定义:
pvTaskCode:创建的任务将要执行的函数名,该函数定义是包含一个void参数指针;
pcName: 具有描述性的任务名,仅仅用来腐竹调试,RTOS不会调用他
usStackDepth:告诉内核给该任务分配多大的栈空间,单位:字
例如,32位的机器,栈空间宽为32,若usStackDepth值为100,那么会分配3200位空间, 即400字节。
pvParameters:任务函数接受一个指向void的指针(void*),pvParameters的值是传递到任务中的值
uxPriority: 指定任务的优先级,优先级的上限在初始化中就应该设置好
pvCreatedTask:pvCreatedTask用于传出任务的句柄。这个句柄将在 API 调用中对该创建出来的任务进行