嵌入式C语言的一些特点与技巧集锦.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式C语言的一些特点与技巧集锦

• 位屏蔽(Bit-mask)法位运算 位屏蔽法位运算是一种使用二进制掩码配合算术逻辑运算(与运算“”、运算“|”、非 运算“~”和异或运算“^”)进行的位运算。这种方法不存在大/小端系统兼容性问题。 • 位域(Bit-field)法位运算 位域法位运算是一种使用位域配合算术逻辑运算进行位运算的方法。其使用收到存储 器大/小端排列方式以及内存地址对其方式的影响,兼容性较差。 • 标准变量类型 由于 C 的基本变量类型并没有规定 int 型变量的长度,因此,在某些平台中 int 型变 量长度为 16 位、某些平台是 32 位。为了解决 C 语言代码移植时 int 型变量宽度问 题带来的不确定性,ANSI-C 在 C99 标准中加入了一个头文件 stdint.h 用于指定对 应平台下 int 型变量的长度。例如,uint16_t 表示长度为 16 位的无符号整数;int8_t 表示长度为 8 位的有符号整数。具体细节请参考文档:ISO/IEC 9899:1999 (E) 。 • 在线汇编 嵌入式C 语言中为了实现某些底层硬件的操作而在C 语言源代码中加入对局部使用汇 编语言的支持称为在线汇编。 • 基本数据类型的标准定义 在不同字长的微处理器中整型变量 int 往往具有不同的长度,例如在 AVR 单片机 8 位系统中 int 型变量的长度为 16 位二进制;在 32 位微处理器 AVR32 中 int 型变量 长度为 32 位。在某些编译器中 char 型变量默认是有符号的,在某些系统中 char 型 变量是无符号的,可以表示 0~255 之间的任意整数。为了解决不同平台间代码的移 植问题,与 ANSI-C99 标准兼容的编译器都会为专门的处理器平台提供了一个标准的 库函数 stdint.h。该头文件为我们定义了常用的基本变量类型: 1 /* 针对 AVR 单片机 8 位系统的专属的 stdint.h */ 2 typedef unsigned char uint8_t; 3 typedef signed char int8_t; 4 typedef unsigned short uint16_t; 5 typedef signed short int16_t; 6 typedef unsigned long uint32_t; 7 typedef signed long int32_t; 8 …… 编写程序时,我们应该统一使用 C99 标准规定的标准数据类型以提高代码在不同平台 间的可移植性。 • 自定义布尔类型 ANSI-C 中并没有定义布尔型变量(Boolean),我们可以利用 unsigned char 型变 量自行进行定义,以下定义方式是嵌入式系统中常见的一种: 1 /* 自定义的布尔型变量 */ 2 typedef unsigned char BOOL; 3 /* 定义布尔型常量 */ 4 # define TRUE 0x01 5 # define FALSE 0x00 根据布尔型变量的精确定义,FALSE 应该为“0”值;TRUE 应该为非“0”。非“0”值可 以是“1”但也可以是其它任何的非“0”整数,因此将 TRUE 直接定义为“1”是不妥当的。 另一种推荐的定义方式如下: 1 /* 定义布尔型常量 */ 2 # define FALSE 0x00 3 # define TRUE (!FALSE) 注意,正因为存在上面两种不确定的定义方式,为了避免带来歧义尽可能不要在逻辑 表达式中与 TRUE 进行“==”或“!=”的判断。下面的代码是非常不妥当的: 1 /* 判断布尔型变量 bFlag 是否为 TRUE */ 2 if (bFlag == TRUE) 3 { 4 …… 5 } 正确的写法应为: 1 if (bFlag != FALSE) 2 { 3 …… 4 } 或者简写为: 1 if

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

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

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档