FreeRTOS学习笔记
使用注意:FreeRTOS与ucOS相比,需要修改启动文件。
1. 任务创建
包含FreeRTOS.h //这个是必须要包含的// 和task.h。 调用API函数:xTaskCreate
pvTaskCode:函数指针(函数名)。
pcName:描述性任务名,只是用于辅助调试。可以通过
FreeRTOSConfig.h第100行的
configMAX_TASK_NAME_LEN来改变描述名长度。
usStackDepth:任务栈大小。建议为64的整数倍。 pvParameters:任务参数,void * 类型。不用写NULL。 uxPriority:任务优先级。值越大优先级越高。同等优先级时,
按照os heart进行时间片轮转。
xTaskHandle:任务句柄。改变该任务优先级、删除任务等时才会
2. 开始多任务 vTaskStartScheduler()
用到。不用写NULL。
3. 如何多任务切换
调用API函数:vTaskDelay(unsigned int time) Time为多少个os heart。
4. 时间片轮转例子 创建两个任务
xTaskCreate(USART1_Task, \
xTaskCreate(USART2_Task, \
相同优先级,波特率可以设置低一些。
然后就会看到这就是时间片轮转。
5. 系统心跳频率
在FreeRTOSConfig.h第97行的configTICK_RATE_HZ,源码使用1000HZ,就是1ms,如果为200就是200HZ,5ms。 相关宏:portTICK_RATE_MS。
6. vTaskDelayUntil
和vTaskDelay不同,这个函数不包括函数运行时间,而
vTaskDelayUntil包括。
比如,一个函数A执行时间为2ms,
使用vTaskDelay(10),则再次执行这个函数最少需要等待12ms。 使用vTaskDelayUntil(10),则这2ms包括在内,A以固定10ms周期运行。
使用方法:
红圈的地方就是固定心跳周期。
7. 空闲任务钩子函数
void vApplicationIdleHook(void) {}
需使能FreeRTOSConfig.h中第126行的configUSE_IDLE_HOOK。
8. 消息队列---Queue 包含:#include \