Keil5-延时函数不起作用现象处理

引言

在使用Keil5编写程序,编写完成烧写后发现延迟函数并没有在正常运行
通过分析main.c代码,导致出现上述现象的间接原因是延时函数没有起作用。检查延时函数的实现代码,并没有错误。所以极大可能是编译器在编译过程中优化掉了延时函数,使得整个程序不能按照预定功能实现。

修改前

图片
图片

实现

方法一

降低ARM Compiler version
在Target设置界面下,Code Generation默认的是ARM Compiler version 6。将ARM Compiler version 6改为ARM Compiler version 5即可。
点开魔术棒->Target->Code Generation->ARM Compiler

修改前

图片

修改后

图片

方法二

volatile关键字影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错。
volatile关键字最通俗的解释是,告诉编译器这个变量我有其他用,不要给我随便优化掉。

修改前

1
2
3
4
void led_delay(uint32_t DelayTime)
{
while(DelayTime--);
}

修改后

1
2
3
4
void led_delay(volatile uint32_t DelayTime)
{
while(DelayTime--);
}

结论

修改完成点击OK,再次编译烧写
图片