关于加法溢出问题
开个题目《关于加法溢出问题》,以后想到什么情况就在这里更新吧。
1、freeRTOS 的时钟节拍函数
要实现一个定时任务A,当前时钟节拍计数器xTickCount + 需要延时的时钟节拍 delayTick = 延时的时钟节拍时间点tickTime
由于计算机存储数据是有具体大小,所以加法计算是有可能出现溢出问题,如果用xTickCount >= tickTime这样简单的判断区分任务是否到延时时间,将会使所有的溢出情
况无法正确延时。
溢出例子:
uint8_t xTickCount;
uint8_t delayTick;
uint8_t tickTime;
开始定时任务A时,xTickCount=254,delayTick=10,则 tickTime=9
下一个节拍时间,xTickCount = 255 >= tickTime = 9; 这样定时任务A将完成定时,执行定时任务,然而定时的节拍是9,实际定时节拍为1,显然不符合定时的要求
所以,freeRTOS 实现了两个链表,一个放无计算溢出的定时任务 listA,一个放有计算溢出的定时任务listB;每个节拍都会将xTickCount自加并检查listA的任务是否到达定时时间;当xTickCount自加发生溢出时,将listA的内容用listB的内容替换。(好聪明的方法)
未完待续……