为什么她一直都在?从未改变!
__weak void HAL_Delay(__IO uint32_t Delay){
uint32_t tickstart = 0U;
tickstart = HAL_GetTick();
while((HAL_GetTick() - tickstart) < Delay)
{
}
}
为什么这么严重,明显的Bug一直都在?从未改变!!!!
库里面的所有带timeout的函数都有这样的Bug,从来不敢用!!
fushao 发表于 2018-7-5 11:28
HAL_GetTick()内部就是一个32位的uwTick,每隔1个tick ++一次,
如果tick设置为1ms,wuTick 49天会溢出。 ...
没有问题的。
你自己试一下吧。
0x00000000 - 0xffffffff = 1
觉得有问题,就自己去验证啊。给uwTick设个临界点的值,在去调用Delay看看,你会发现自己真的是想当然。。 这个函数有什么问题?
__weak前缀,你可以自己在main.c或者那里写一个HAL_Delay覆盖就好了,为啥不敢用? 这个函数有什么BUG?
眼拙,没看出啥问题。 jjbboox 发表于 2018-7-5 10:47
这个函数有什么BUG?
眼拙,没看出啥问题。
uint32的问题? while里没分号? HAL_GetTick()内部就是一个32位的uwTick,每隔1个tick ++一次,
如果tick设置为1ms,wuTick 49天会溢出。如果在快要溢出时调用这个函数,就出问题了。
难度st是认为st的mcu不可能连续运行49天,所以才一直不修复这个bug?
库里面的所有timeout函数都是这样
楼主专门注册一个账号来提这个问题,给力! 确实有溢出风险
假如当前TICK已经是U32-10,
此时延时15,应该就会不对了。
没问题的
用uint8_t 做一次就知道了
页:
[1]
2