资料介绍
1. 小心使用汇编表达式
在C/C++代码中,有时候一些操作难免会对某些CPU寄存器进行操作,此时要使用内嵌的汇编表达式,例如asm(“EALLOW”),或者重置某个中断的掩码寄存器等。在优化代码时,编译器会重新调整某些代码段的顺序,自己决定使用某些寄存器(例如AR0-AR7这样的辅助寄存器),甚至删除某些编译器认为无用的变量、函数等,但是编译器一般情况下并不会对内嵌的汇编代码进行任何优化(除非这段汇编代码被编译器认为是永远不会执行到的无用代码),这就造成了编译器的优化效果在这段汇编代码和它的上下文代码中无法进行有效的优化,特别是汇编代码和C/C++代码直接存在变量调用的情况下。所以非必要的情况下,要尽量避免C/C++和汇编语句的混用,如果确实需要的,也要在编译之后检查生成的汇编代码是不是保证了我们代码原意的完整性。
2. 为必要的内存存取使用volatile关键字
在C/C++代码的编译过程中,编译器会分析数据流,从而尽量避免对存储空间的直接存取。但是如果我们要在C/C++代码中直接对内存地址进行操作的话,需要使用volatile关键字来定义变量,编译器在优化时不会对volatile类型的变量进行优化。
例如,在下面的代码中,循环的结束条件为指针指向的地址为0xFF:
unsigned int *ctrl;
while (*ctrl !=0xFF);
因为*ctrl是一个不变的表达式,这个循环会被优化为一次内存读取。为了正确实现我们的代码意图,需要把ctrl定义为volatile类型:
volatile unsigned int *ctrl
使用volatile类型定义的类型在调试的时候还有一个极大的优势,就是我们可以直接在CCS的debug窗口里改变变量的值,极大地方便我们的调试。
3. 小心使用Alias变量
Alias(别名)在一个变量可以被至少两种方式存取的时候会用到,例如,当两个指针指向同一块区域或对象时,我们称一个指针 alias 另一个指针。Alias变量的使用要非常谨慎,因为会涉及到非直接的引用,从而破坏了优化效果。编译器在优化时会分析代码来决定在哪些地方会产生alias引用,然后在保持代码正确性的基础上“保守”地优化代码。
一般情况下,编译器会假设,如果一个本地变量的地址被传递给某个函数,则这个函数有可能会通过指针操作改变这个本地变量的内容,但是这个函数不能在该地址被返回后仍然可以被别的指针操作所示使用,例如把这个本地变量的地址分配给一个全局变量或者返回它。如果这种假设被打破,则需要在编译器选项里使用-ma强制编译器按照最坏情况的别名引用来进行一定的优化,在这种情况下,任何非直接的引用(例如使用指针)都可以引用到这个变量。
- 《信号与系统 第3版》习题解析 0次下载
- 樊昌信《通信原理》真题解析及讲义电子版 0次下载
- 电工学-知识要点与习题解析电子版 0次下载
- DSP载波移相控制C语言源代码下载 55次下载
- 电工学知识要点与习题解析 56次下载
- DSP的C语言编程的详细简介和优化改进设计的详细概述 8次下载
- TMS3C6000 DSP的五个最有效的优化代码详细介绍 10次下载
- DSP汇编程序优化方法的探讨 5次下载
- 电子设计竞赛赛题解析 0次下载
- 风力摆控制系统赛题解析 31次下载
- 自动控制原理习题解析 0次下载
- DSP环境下C语言的编程优化 22次下载
- Visual C++面向对象与可视化程序设计习题解析与编程实 0次下载
- TMS320C6000 系列DSP 的C 代码优化方法 31次下载
- TMS320C6000系列DSP的C代码优化方法 24次下载
- 浅谈代码优化与过度设计 290次阅读
- 更快的tsv解析代码分享 144次阅读
- 简谈BlueNRG-LP和-LPS的代码空间优化 626次阅读
- 优化重复冗余代码的8种方式 304次阅读
- 解析优化的调度逻辑和cuda实现 646次阅读
- 代码如何优化掉多余的if/else? 436次阅读
- PLC的五大编程技术方法 4024次阅读
- M代码如何停止CNC编程的程序 2236次阅读
- 基于LabVIEW和单片机实现DSP应用程序代码的自举模块设计 1779次阅读
- 关于Java代码优化的35个小技巧,你学到了吗 1054次阅读
- C和汇编代码结合 是实现DSP软件设计的最好方式 2400次阅读
- 一文详解单片机C程序及代码的优化 4595次阅读
- 详细putty串口使用教程与八大使用技巧分享 7.1w次阅读
- 一文了解FPGA与DSP的区别、特点及用途 2.8w次阅读
- DSP编程的关键问题分析 1568次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1489次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 91次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 9次下载 | 免费
- 6基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
- 7基于单片机和 SG3525的程控开关电源设计
- 0.23 MB | 3次下载 | 免费
- 8基于单片机的红外风扇遥控
- 0.23 MB | 3次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30319次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537791次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233045次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论
查看更多