-
Notifications
You must be signed in to change notification settings - Fork 358
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
超时溢出有问题 #1
Comments
可以通过增加溢出标识来处理,具体如下:
4.timer_loop函数改为:
5.最后timer_init函数也要加上初始化的标识: |
这样修改即可,修改后暂时没有再测到溢出时出现我所述问题 |
其实还有一种更优雅的解决方法~采用双链表去维护,溢出时切换链表 |
if( (_time_ticks - target->time) < (UINT32_MAX)/2) |
赞同,这种方式是最简单而且容易理解的: |
是不是可以换个思路,解决溢出的原因是以为溢出后会导致计时器不准。 |
这个方案是否可行:timeout参数采用倒计时。 |
typedef struct SortTimer { timestart :254 ticks = 255 1<253满足 ticks = 251 253==253不满足,时间到 ticks = 254 0<253满足,时间错过 |
简单粗暴而不失优雅,哈哈, 在判断时再加个锁可以防止8位、16位、32位CPU的汇编中断问题。 |
感谢您的来信,我会尽快回复您! ——卓琳
|
这样严谨点 |
感谢您的来信,我会尽快回复您! ——卓琳
|
感谢您的来信,我会尽快回复您! ——卓琳
|
是否应该改成这样: } |
感谢您的来信,我会尽快回复您! ——卓琳
|
实际上这里可以直接使用减法,不用考虑溢出条件,无符号减法本身就是借位操作,比如说,我们定义两个32位无符号整数: |
感谢您的来信,我会尽快回复您! ——卓琳
|
应该是2^32+1+(x-y),就像1个字节补码,256表示0,255表示-1。 |
感谢您的来信,我会尽快回复您! ——卓琳
|
_timer_ticks 是一个无符号数, 假如是一个无符号8位,当_timer_ticks为254,我超时为2m, target->timeout此时为0吧,这时候判断感觉出现问题了,会立马导致超时事件发生
The text was updated successfully, but these errors were encountered: