嵌入式系统序可移植性设计及性能优化.doc

嵌入式系统序可移植性设计及性能优化.doc

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式系统序可移植性设计及性能优化

嵌入式系统程序可移植性设计及性能优化 【摘要】在嵌入式系统的程序设计中,由于软硬件平台的多变性,对程序的可移植性、可扩充性、可裁减性及可维护性等有更严格的要求。本文从宏定义设计、数据结构设计及函数设计等方面,简单介绍了可移植性的设计问题。在嵌入式应用中非常注重代码的时空效率,即产生的代码运行时间和占用的存储空间尽可能少。程序设计一章介绍了如何提高程序的运行效率的相关技巧。 【关键词】嵌入式,可移植性,可维护,可裁减,宏定义设计,数据结构设计,时空效率 目录 1 宏定义设计 - 1 - 1.1 为何要采用宏定义? - 1 - 1.2 宏定义的基本规则 - 1 - 1.3 依赖关系定义宏改善移植性 - 1 - 1.4 通过偏移量和掩码进行位操作 - 2 - 2 数据结构设计 - 4 - 2.1 结构体中成员对齐规则 - 4 - 2.1.1 自然对界 - 4 - 2.1.2 指定对界 - 4 - 2.2 合理设计成员顺序 - 5 - 2.2.1 减少结构体存储空间 - 5 - 2.2.2 填充部分域,避免字节对齐问题 - 6 - 2.2.3 字节对齐问题实例 - 7 - 2.3 采用位域构造结构体 - 8 - 2.3.1 位域设计传输协议 - 8 - 2.3.2 位域的可移植性问题 - 9 - 2.3.3 位域设计硬件配置字 - 10 - 2.4 通过union和struct传递不同格式报文 - 11 - 2.5 将相关功能变量封装为结构体 - 13 - 3 函数设计 - 15 - 3.1 避免过多函数参数,提高调用性能 - 15 - 3.2 合理设计模块,减小耦合度 - 16 - 3.3 用宏函数提高时间效率 - 18 - 3.3.1 宏参数的基本规则 - 18 - 3.3.2 宏语句的基本规则 - 18 - 3.3.3 宏的副作用 - 20 - 3.4 Const修饰输入指针参数 - 21 - 4 程序设计 - 22 - 4.1 循环转置 - 22 - 4.2 减小运算强度 - 23 - 4.2.1 位操作实现求余运算 - 23 - 4.2.2 用移位实现乘除法运算 - 23 - 4.2.3 将循环体内的乘法运算改成循环自加运算 - 23 - 4.3 减少不变计算 - 24 - 4.3.1 循环内部避免恒定式 - 24 - 4.3.2 避免结构体深度访问 - 25 - 4.4 减少存储访问指令周期和个数 - 26 - 4.5 查表 - 28 - 4.6 使用自加、自减指令 - 28 - 4.7 根据频率进行case 排序 - 29 - 4.8 函数指针表替代switch-case - 30 - 嵌入式系统程序可移植性设计及性能优化之一 ――――宏定义设计 【摘要】本节介绍了嵌入式系统程序设计中采用宏定义进行常量定义的必要性。说明了宏常量定义的基本规则以及如何采用依赖关系定义宏常量来保证其可移植性和裁减性。最后介绍了如何利用宏定义实现掩码偏移量等来高效的进行位操作。 【关键词】嵌入式,可移植性,宏定义,依赖关系,掩码,偏移量,位操作 1 宏定义设计 - 1 - 1.1 为何要采用宏定义? - 1 - 1.2 宏定义的基本规则 - 1 - 1.3 依赖关系定义宏改善移植性 - 1 - 1.4 通过偏移量和掩码进行位操作 - 2 - 1?????? 宏定义设计 1.1??? 为何要采用宏定义? 在程序设计过程中,对于经常使用的一些常量,如果将它直接写到程序中去,一旦常量的数值发生变化,就必须逐个找出程序中所有的常量,并逐一进行修改,这样必然会降低程序的可维护性。因此,应尽量通过预处理命令方式将常量定义为特定的字符,这样常量就有了统一的表现形式,不会出现输入错误导致的不一致性。另外宏常量意义明确,大大改善了代码的可读性。 只读的变量也可以实现上述宏常量所带来的可移植性、可靠性及可读性等特点,但其要占据存储空间,需要访问内存,相比宏常量的立即数寻址而言效率要低。在C++中提倡用const只读变量来定义常量,是因为这样可以提供更严格的类型安全检查。但由于C中const只读变量不能用于某些场合,因此在嵌入式C中仍多数采用宏来定义常量。 1.2??? 宏定义的基本规则 下面以一个实例来说明宏定义的基本规则,如用预处理指令#define 声明一个常量,用以表明1年中有多少秒,不考虑润年 #define C_SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL a)?????? 命名风格,为了与普通变量区分开来,宏定义通常全部大写,多个单元之间用下划线隔开; b)?????? 整个表达式应括起来,若有参数则应将每个参数都括起来,防止替换扩展后可能带来的异常问题; c)?????? 常量表达式先合并后再替换。预处理器将为你

文档评论(0)

ybcm963 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档