作者:Dear丶尐英 | 来源:互联网 | 2023-10-17 12:42
绝对时间:absTime相对时间:百分比%timeIDLE是空闲任务。RUN_Time_State:port。。。()初始化一个外设提供时基单元具体初始化要自己操作这个定时器的分辨
绝对时间: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 校准值寄存器