程序可移植性设计及性能优化.pdfVIP

  • 34
  • 0
  • 约5.26万字
  • 约 65页
  • 2021-11-19 发布于天津
  • 举报
嵌入式系统程序可移植性设计及性能优化之一 ――――宏定义设计 Sailor_forever sailing_9806@163.com 转载请注明 /sailor_8318/archive/2008/07/16/2663254.aspx 【摘要】本节介绍了嵌入式系统程序设计中采用宏定义进行常量定义的必要性。 说明了宏常 量定义的基本规则以及如何采用依赖关系定义宏常量来保证其可移植性和裁减性。 最后介绍 了如何利用宏定义实现掩码偏移量等来高效的进行位操作。 【关键词】嵌入式,可移植性,宏定义,依赖关系,掩码,偏移量,位操作 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) 常量表达式先合并后再替换。预处理器将为你计算常量表达式的值,因此,直接 写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有运行性能代价 的。 d) 为常量添加类型信息。宏的不足之一在于缺乏类型安全检查,人为的提供类型信 息可以有效检查出此类问题。 UL 告诉编译器这个常量是无符号长整型数,因此将其赋值给 u16 型变量会出现告警。 1.3 依赖关系定义宏改善移植性 嵌入式系统程序的最大特点是硬件平台的多变性, 因此需要根据具体的应用情况更改大量配 置,而这些配置基本都是由宏定义来实现的, 放在特定的头文件中,与其他的代码隔离,在 一定程度上改善了代码的可移植性。 但有些时候, 多个宏定义有严重的依赖关系, 增减某个 宏会引起其他定义的更改,如何定义这些宏对嵌入式程序的可移植性有很大影响。 A 常量分别定义 #define C_DD_MODULE_ID_AOM (0 /* AOM 模块 ID */ #define C_DD_MODULE_ID_RRCM (0

文档评论(0)

1亿VIP精品文档

相关文档