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

质疑HAL库的延时函数HAL_Delay  

[复制链接]
与龙共舞 提问时间:2018-4-20 08:55 /
阅读主题, 点击返回1楼
收藏 2 评论25 发布时间:2018-4-20 08:55
25个回答
toofree 回答时间:2018-4-20 11:54:22
与龙共舞 发表于 2018-4-20 10:15
哦 我传参是100 肯定OK  
我说的是(猜测) 比如此时ucTick数值就是4294967290 那会发生什么事呢?它++10 ...

会的,溢出后,肯定回到0
jjbboox 回答时间:2018-4-20 12:29:45
anobodykey 发表于 2018-4-20 10:23
楼主可以多分析一下,建议你看下该链接https://www.stmcu.org.cn/module/forum/thread-608277-1-1.html,同样是 ...

就算移植到8位的系统,uwTick也应该定义为uint32_t,就是unsigned long,怎么能改成uint_8呢?
Dandjinh 回答时间:2018-4-20 13:27:15
你的理解没错,是会溢出。可是不知道你注意到了没,跟tick相关函数的都是weak的,如果你觉得不够可以自己定义一套自己的tick

评分

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

查看全部评分

黑皮男 回答时间:2018-4-20 13:41:09
本帖最后由 黑皮男 于 2018-4-20 13:43 编辑

这个肯定会出现溢出,但是可以参考linux中的实现方法。下面是我的代码,只不过改了些名字,实现是一样的。
#define kernel_time_after(unknow, known)    ((long)(know)-(long)(unknow)<0)
#define kernel_time_before(unknow, know)    ((long)(unknow)-(long)(know)<0)
#define kernel_time_after_eq(unknow, know)  ((long)(unknow)-(long)(know)>=0)
#define kernel_time_before_eq(unknow, know) ((long)(know)-(long)(unknow)>=0)

void kernel_delay_ms(kernel_msec_t millis)
{
    unsigned long timeout = _kernel_wall_jiffies + millis/1000*KERNEL_HZ;
   
    while(kernel_time_before(_kernel_wall_jiffies, timeout));
        
}
zhdzhd-174422 回答时间:2018-4-20 15:26:11
楼主这是什么试卷啊?
与龙共舞 回答时间:2018-4-20 16:29:25
黑皮男 发表于 2018-4-20 13:41
这个肯定会出现溢出,但是可以参考linux中的实现方法。下面是我的代码,只不过改了些名字,实现是一样的。
...

所以你的这思路就是把U32提升到U64 再次降低出现溢出的可能吗?
黑皮男 回答时间:2018-4-20 18:14:49
与龙共舞 发表于 2018-4-20 16:29
所以你的这思路就是把U32提升到U64 再次降低出现溢出的可能吗?

不是,是无符号数和有符号数的问题。http://www.cnblogs.com/hfyinsdu/p/4600052.html

评分

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

查看全部评分

与龙共舞 回答时间:2018-4-20 18:51:33
黑皮男 发表于 2018-4-20 18:14
不是,是无符号数和有符号数的问题。http://www.cnblogs.com/hfyinsdu/p/4600052.html

受教了受教了
XinLiYF 回答时间:2018-4-20 20:13:33
无符号的回环问题:(uint8_t)(0x00) - (uint8_t)(0xFF) = (uint8_t)(0x01)

这个是一个很好的例子:模仿kfifo实现的环形缓冲区

评分

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

查看全部评分

与龙共舞 回答时间:2018-4-24 16:11:13
本帖最后由 与龙共舞 于 2018-4-24 16:13 编辑

测试了一下 Keil下面编译是没有负数的
0-0xff=0X01
QQ截图20180424160715.png

所属标签

相似问题

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