那么在使用SysTick做定时我们就要注意,由于SysTick的作用是(假设节拍是1ms)每1ms检查一下,是否进行任务调度,那么对于OS来说这个调度时间是固定的,你不能区修改Reload值,这样会导致节拍时间变化。因此对于SysTick做定时器我们就要特别注意,你是否是在OS中。
如果不在OS中,不需要处理任务调度,那么你需要多长的延时时间只需要修改Reload的值就OK了;如下为正点原子的一种代码利用SysTick中断来做延时函数:
此处省略配置函数等:
如果是在OS中,那么系统要处理任务调度,间隔节拍时间是固定的1ms那么你就不能随意区修改Reload的值,这时候怎么办,通过抓取SysTick计数值Val寄存器来解决:
又遇到一个问题:如果时钟节拍1ms,需要的延时时间大于1ms假设5ms,且处在OS中(非OS状况下容易解决)怎么办?
1.不断的使用delay(nus)累加
2.调用OS的自带延时函数解决,前面使用SysTick的主要目的是节省资源