你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
黑皮男 发表于 2018-4-20 13:41 这个肯定会出现溢出,但是可以参考linux中的实现方法。下面是我的代码,只不过改了些名字,实现是一样的。 ...
与龙共舞 发表于 2018-4-20 16:29 所以你的这思路就是把U32提升到U64 再次降低出现溢出的可能吗?
查看全部评分
黑皮男 发表于 2018-4-20 18:14 不是,是无符号数和有符号数的问题。http://www.cnblogs.com/hfyinsdu/p/4600052.html
dsjsjf 发表于 2018-4-20 10:22 按照楼主所说,此时uwTick是220,那么uwTick会随着时间脉冲++,理论到320的时候解除死循环, 而在255的时候 ...
toofree 发表于 2018-4-20 09:13 HAL_Delay()函数的参数类型是uint32_t,即无符号32位int型。 如果超过32位的最大数(4亿多4294967296)的话 ...
所以你的这思路就是把U32提升到U64 再次降低出现溢出的可能吗?
不是,是无符号数和有符号数的问题。http://www.cnblogs.com/hfyinsdu/p/4600052.html
评分
查看全部评分
受教了受教了
这个是一个很好的例子:模仿kfifo实现的环形缓冲区
评分
查看全部评分
测试了一下 Keil下面编译是没有负数的
0-0xff=0X01
uint8_t a,b;
uint8_t c;
a=0xff;
b=1;
c = b-a;
osDelay(c);
反汇编
MOVS r4,0xff
MOVS r6,0x01
SUBS r0,r6,r4
UXTB r5,r0
MOV r0,r5
BL.W osDelay(0x08003186)
评分
查看全部评分
还是没从本质上明白,但我试了一下,无符号64-220,确实等于100
正解!确实存在uwTick变量累加到临界最大值导致出错隐患。