关闭

mdk 优化

标签: 优化平台
2339人阅读 评论(0) 收藏 举报
分类:

使用Keil/MDK这么多年了,一直都没有使用它的代码优化功能。总是觉得在容量可以容纳的情况下没有必要。最近在做一个摄像头项目时,总是只能在TFT上显示大约2/3的图像。其余1/3没有显示。当按键时,整个TFT都能显示,那么按照分析,应该是因为代码是速度太慢造成的。但是分析了一下代码实在没有可以更改的地方了。那么是单片机运行速度问题吗?

本代码本来是用IAR编写的,而且在单片机上实现了,效果非常不错。所以完全能够排除上面的问题。那么只能说明是编译平台在生成代码的过程中,造成了速度问题。

既然如此,那就优化一下代码吧,通过更改MDK的优化选项,编译下载后,问题搞定。看了优化功能还是不错的。



用KEIL MDK uVision4,如下程序,GPS_flg 是一个全局变量,当有GPS数据时就会中断被置1,结果我在while(1)外面判断GPS_flg就始终为0,进入死循环出不来,在while(1)里面就可以判断到GPS_flg为1,最后找不到问题,把优化level1改成level0就好了。折腾了半天时间,难道优化这么恐怖?

main()
{...
while(GPS_flg == 0)
{;}
while(1)
{
if(GPS_flg == 0)
i++;
if(GPS_flg == 1)
{
xprintf("i = %d/r/n", i++);
i=0;
}
...
}
}
下面是论坛大哥们的发言:

Keil不优化的时候,所有变量用到时必然会从内存读。开了优化就可能寄存器。
中断要设置的变量 最好 volatile

虽然我已经试过了volatile,不行,但从今以后一定会加上volatile这点

Keil RMDK 默认优化是LEVEL 2

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:378239次
    • 积分:3039
    • 等级:
    • 排名:第11458名
    • 原创:26篇
    • 转载:98篇
    • 译文:0篇
    • 评论:85条
    文章分类
    最新评论