关于加法溢出问题

开个题目《关于加法溢出问题》,以后想到什么情况就在这里更新吧。 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的内容替换。(好聪明的方法) 未完待续……

posted on 2017-03-09 22:43  simonlin  阅读(413)  评论(0编辑  收藏  举报

导航