关于Keil调试systick定时器一直卡在while(TimingDelay != 0);的问题

时间:2024-04-07 11:50:49

最近项目上使用了stm32L系列的MCU,调试阶段需要用到systick定时器,于是乎便从官方固件例程里面移植了systick的例程,本以为这么简单的功能,分分钟就能搞定,没成想,调试了两天才搞出来,因为每次程序都会卡在while(TimingDelay != 0);这句话里面,而调试仿真发现即便TimingDelay这个变量已经为0,依然跳不出来这个while循环,程序一直死在这里!本以为是我驱动某些地方没有移植好,然后一直从驱动的地方找原因,找了两天,最后实在没辙,突发奇想是否是程序优化等级的原因呢?

然后我试着将Keil的程序优化等级调到0,见下图:

关于Keil调试systick定时器一直卡在while(TimingDelay != 0);的问题

systick竟然可以跑起来了。

原来是TimingDelay这个变量被Keil编译器给优化掉了,导致程序执行出问题!其实只需要将static  uint32_t TimingDelay;这个定义前面加个volatile就可以完事,即volatile static  uint32_t TimingDelay;