为何延时函数不起作用?

本文探讨了一位开发者在使用STM32的SYSTICK定时器做延时时遇到的问题,发现代码在开启高优化等级后无法正常工作。问题在于全局变量Delay未声明为volatile,导致编译器优化导致程序行为不符合预期。添加volatile后,问题得到解决。文章提醒开发者在处理可能被中断服务程序访问的全局变量时要使用volatile关键字,以确保在不同优化等级下代码的正确性。
摘要由CSDN通过智能技术生成

5ec7246867a2ddce390dc7bdf641e5b0.jpeg

有人利用STM32做开发,基于片内SYSTICK定时器做延时,即利用SYSTICK的周期性溢出中断来实现指定延时。可是他发现自己编写的延时函数似乎不起作用。代码也很简单,颇为奇怪。

我这里基于他的功能模拟一段测试代码,如下截图所示:

454431667304b26b8cb021a535d735e8.png

上面代码在主循环里,每一轮循环就是先让LED闪烁5次,然后熄灭一会。就这样循环进行。其中,有个全局变量Delay,决定每次延时长短。

uint32_t  Delay;  //Define a globle variable 

关于SYSTICK的中断服务函数也很简单,像下面这样:

b9686cbf1c0252781f27fb05113e291b.png

所有测试代码就是上面两个截图所涉及的内容。

在测试过程中发现,当我们开启IDE的编译优化,尤其优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值