你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

为什么她一直都在?从未改变!

[复制链接]
fushao 提问时间:2018-7-5 10:05 /
__weak void HAL_Delay(__IO uint32_t Delay)
{
  uint32_t tickstart = 0U;
  tickstart = HAL_GetTick();
  while((HAL_GetTick() - tickstart) < Delay)
  {
  }
}
为什么这么严重,明显的Bug一直都在?从未改变!!!!
库里面的所有带timeout的函数都有这样的Bug,从来不敢用!!


<
收藏 1 评论19 发布时间:2018-7-5 10:05

举报

19个回答
jjbboox 回答时间:2018-7-5 13:23:54
fushao 发表于 2018-7-5 11:28
HAL_GetTick()内部就是一个32位的uwTick,每隔1个tick ++一次,
如果tick设置为1ms,wuTick 49天会溢出。 ...

没有问题的。
你自己试一下吧。

0x00000000 - 0xffffffff = 1

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

morphlings2014 回答时间:2018-7-5 13:22:32
觉得有问题,就自己去验证啊。给uwTick设个临界点的值,在去调用Delay看看,你会发现自己真的是想当然。。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

我是熊猫大仙 回答时间:2018-7-5 10:32:53
这个函数有什么问题?
__weak前缀,你可以自己在main.c或者那里写一个HAL_Delay覆盖就好了,为啥不敢用?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

jjbboox 回答时间:2018-7-5 10:47:04
这个函数有什么BUG?
眼拙,没看出啥问题。
潇潇雨歇pku 回答时间:2018-7-5 10:53:11
jjbboox 发表于 2018-7-5 10:47
这个函数有什么BUG?
眼拙,没看出啥问题。

uint32的问题?
wudianjun2001 回答时间:2018-7-5 11:18:24
while里没分号?
fushao 回答时间:2018-7-5 11:28:36
HAL_GetTick()内部就是一个32位的uwTick,每隔1个tick ++一次,
如果tick设置为1ms,wuTick 49天会溢出。如果在快要溢出时调用这个函数,就出问题了。
难度st是认为st的mcu不可能连续运行49天,所以才一直不修复这个bug?
库里面的所有timeout函数都是这样
潇潇雨歇pku 回答时间:2018-7-5 11:45:48
楼主专门注册一个账号来提这个问题,给力!
huangxuejia-292 回答时间:2018-7-5 11:51:20
确实有溢出风险
假如当前TICK已经是U32-10,
此时延时15,应该就会不对了。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

momososo 回答时间:2018-7-5 13:10:19
没问题的
用uint8_t 做一次就知道了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版