NevermindZZT / cpost

c语言程序上下文切换和解耦的工具
MIT License
270 stars 97 forks source link

关于delay延时的问题 #5

Closed Qinyongle closed 1 year ago

Qinyongle commented 2 years ago
`CPOST_MAX_TICK - cposhHandlers[i].startTime > cposhHandlers[i].delay
                ? tick - cposhHandlers[i].startTime >= cposhHandlers[i].delay
                : CPOST_MAX_TICK - cposhHandlers[i].startTime + tick >= cposhHandlers[i].delay`

这一段,当CPOST_MAX_TICK - cposhHandlers[i].startTime<cposhHandlers[i].delay时后面的CPOST_MAX_TICK - cposhHandlers[i].startTime + tick >= cposhHandlers[i].delay出现了问题。

假设CPOST_MAX_TICK=10,cposhHandlers[i].startTime=8,delay=4。

那么当tick=9的时候,10-8+9>4,返回真。按理来说这时应该返回假吧。

CPOST_MAX_TICK - cposhHandlers[i].startTime + tick >= cposhHandlers[i].delay这一段是不是该替换为(tick>cposhHandlers[i].startTime ? tick-cposhHandlers[i].startTime: CPOST_MAX_TICK - cposhHandlers[i].startTime + tick) >= cposhHandlers[i].delay

NevermindZZT commented 2 years ago

这里这个写法是要在实际情况下的一个简化的写法,一般CPOST_MAX_TICK是由芯片架构决定,是size_t表示的最大数,对于32位cpu,这个值是0xFFFFFFFF,如果计算得到的值超过size_t的最大值,值会溢出,从而变成一个小的数字 在这个前提下,考虑你的设定,如果认为CPOST_MAX_TICK等于10,那就是cpu能处理的最大数字为10,此时10-8+9=1