MDK的优化应用

MDK的优化应用 http://blog.163.com/zhaojun_xf/blog/static/300505802011291384721/

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

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

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

?
?

?
?

为了保证你的代码在优化后能正确运行,一定要注意在不能被优化的变量前加上:volatile。

时间: 2024-08-29 09:27:34

MDK的优化应用的相关文章

关于MDK编译器优化产生的一个小问题

偶然间遇到后,滤除了其他无关的代码和模块,在开发板上试了试,是一样的问题 用正点原子的F4开发板和他们的定时器中断例程. 将定时器中断改为20ms一次 截图就是全部代码了. 中断里给TimeFlag++, 在主循环里判断标志是否来临,如果来临LED0翻转,如果超时则打印超时信息. 用示波器看到的波形是这样的. 解决这个问题的办法有很多,但是我不知道这样为什么不行,最后吃菠菜面的时候突然想到会不会是编译器造成的,第二天上班一试果然. 原文地址:https://www.cnblogs.com/sch

MDK编译器内存分配

转:https://blog.csdn.net/zuixin369/article/details/76195186?locationNum=7&fps=1 Keil MDK编译器完成编译链接后,在调试窗口会出现Code,RO,RW,ZI 四种内存分配区域,下面说明其中的意思. Code区:代码区.该区域除了存放指令外,还有全局.静态及局部变量的初始化值.当函数被调用时,该函数用code区内局部变量初始化值来初始化堆栈区内分配的局部变量. RO区:常量区.该区域存放那种类型的数据呢?有字符串常量

STM32F4学习笔记(一)

新建工程 由于使用固件库开发的高效便捷,我选择了使用STM32F4标准外设库.开发板的芯片为STM32F429XX,其他的可根据相关情况进行变化. 在标准固件库中,存在在CMSIS和STM32F4xx_StdPeriph_Driver两个文件夹.在工程中新建一个文件夹Drivers,在此目录中再新建两个目录Inc和Src,分别用于 保存头文件和源文件.将STM32F4xx_StdPeriph_Driver目录下的头文件和源文件,分别拷贝到Drivers目录下的录中.再将CMSIS目录中的需要的文

MDK C++中对内联的极度优化

先来看看我们SmartIRQ的具体实现 // 智能IRQ,初始化时备份,销毁时还原 class SmartIRQ { public: force_inline SmartIRQ(bool enable = false) { _state = __get_PRIMASK(); if(enable) __enable_irq(); else __disable_irq(); } force_inline ~SmartIRQ() { __set_PRIMASK(_state); } private:

Keil MDK从未有过的详细使用讲解

转自博客:http://blog.csdn.net/zhzht19861011/article/details/5846510 这博主关于MDK 的使用的文章,写的得TM的好  TM的实用! 真心收藏! 熟悉Keil C 51的朋友对于Keil MDK上手应该比较容易,毕竟界面是很像的.但ARM内核毕竟不同于51内核,因此无论在设置上还是在编程思想上,都需要下番功夫研究的.本文以MDK V4.03为例,详细的写一下MDK的设置.界面.工具.可能会有些杂乱,但我想所涉及的东西都是最常用的:可能不是

MDK建立STM32F103*开发模板

一.整体流程 1.获取ST库--STM32F10x_StdPeriph_Lib_V3.5.0 2.新建文件夹并加载文件 3.新建工程 4.给工程添加组 5.设置"Target Option" 6.设置Debug选项 二.获取ST库 这里用野火光盘提供的"ST库3.5.0源码"--STM32F10x_StdPeriph_Lib_V3.5.0. 三.新建文件夹并添加文件 先新建一个顶层文件夹Template,然后依次建立以下子文件夹. 1.DOC 此目录存放说明文档,对

C++返回值优化RVO

返回值优化,是一种属于编译器的技术,它通过转换源代码和对象的创建来加快源代码的执行速度.RVO = return value optimization. 测试平台:STM32F103VG + Keil 5.15 背景:我们有个MacAddress::ToArray byte* MacAddress::ToArray() const { return (byte*)&Value; } 因为封装需要,打算返回字节数组类ByteArray的对象,于是有 ByteArray MacAddress::To

视频编码器评估与参数优化

视频编码器评估与参数优化是个比较麻烦的问题,主要原因是:编码器种类多,输入的参数繁多,参数的相互影响非线性,深入理解其实现需要投入巨大的精力或者不可能(对于商业产品而言).而另一方面,评估和选择编码器.针对特定的目标选择最优的编码参数组合对于视频服务商--比如视频网站来说,是一个现实的需要.有感于或者苦恼于如何选择最优的方案,笔者通过对多目标优化方法的尝试进行了一定的探索,之所以选择这种方法,主要原因是它比较"暴力"和"傻瓜",并不需要过多的纠缠参数的涵义f'(*∩

有趣的keil MDK细节(转)

源:有趣的keil MDK细节 1.MDK中的char类型的取值范围是? 在MDK中,默认情况下,char 类型的数据项是无符号的,所以它的取值范围是0-255.它们可以显式地声明为signed char 或 unsigned.因此,定义有符号char类型变量,必须用signed显式声明.我曾读过一本书,其中有一句话:“signed关键字也是很宽宏大量,你也可以完全当它不存在,在缺省状态下,编译器默认数据位signed类型”,这句话便是有异议的,我们应该对自己所用的CPU构架以及编译器熟练掌握.