FreeRTOS学习笔记4:时间管理

绝对时间:abs Time
相对时间:百分比% time

IDLE是空闲任务。

RUN_Time_State:
port。。。()初始化一个外设提供时基单元 //具体初始化要自己操作
这个定时器的分辨率高于freeRTOS系统时钟,10-20倍 1s=1000ms=1000000us 1khz系统时钟 ~需要10k或者20khz

另外两个宏(有一个就可以)去实现统计时间,获取时基单元的时间值。

延时函数vTaskDelay() //相对。也需要配置宏

周期性任务可以用绝对模式
步骤:
1 判定传参>0
2 vTaskSuspendAll()//挂起任务调动器。后面会恢复

3 当前任务添加到延时列表。//有一个list记录所有的延时任务
//两个参数:要延时的时间、pdFALSE

4 恢复:记录xTaskResumeAll()里是否有任务切换
若xTaskResumeAll()的返回值 == pdFALSE //即恢复任务调度器里没有切换
5 则需要进行一次任务切换
进行任务切换原因:有任务从就绪状态移除,添加到延时列表中,状态有变化
状态变化需要检查下有没有任务变化的需求


3 添加当前任务到延时列表中去:
获取当前系统时钟节拍:xTickCount

列表中移除任务uxListRemove(传参 任务控制块中的、状态列表)


时间关系:

滴答定时器 、节拍定时器 tasks.c
完成任务管理任务切换等,systick 会周期性的触发中断,

四个寄存器:
CTRL OxE00E010 控制与状态寄存器
LOAD 自动重装载值寄存器
VAL 当前计数值寄存器
CALIB 校准值寄存器

猜你喜欢

转载自www.cnblogs.com/yyyyloveu/p/12333030.html