- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- 图瓦斯安全防护围栏Presentation.pdf
- 圣魔之血神系统指引任务全攻略介绍.pdf
- 在曲靖石膏板吊顶多少钱 不同材质吊顶价格参考.pdf
- 地学模型课程作业2.pdf
- 地下混凝土工程.pdf
- 城市住宅小区停车难问题的解决对策.pdf
- 在反思中探索在探索中发现_2009年高考江苏卷第18题的反思探究案例.pdf
- 城市垃圾焚烧发电技术简述.pdf
- 场地合作协议.pdf
- 城市养老设施配置的微观模拟与规划政策分析_以北京市为例_颜秉秋.pdf
- 2024年秋季新湘教版地理7年级上册全册教学课件.pptx
- 2024年秋季新冀教版英语三年级上册全册课件.pptx
- 统编版语文四年级下册全册课件(2025年).pptx
- 湘少版英语五年级下册全册教学课件(2025年).pptx
- 统编版语文五年级下册全册教学课件(2025年2月修订).ppt
- 统编版语文五年级下册全册教学课件(2025年2月修订).pptx
- 统编版语文五年级下册全册课件(2025年).pptx
- 2024年秋季新北师大版七年级上册数学全册大单元整体设计教学课件(新版教材).ppt
- 2024年秋季新北师大版七年级上册数学全册大单元整体设计课件.ppt
- 2024年秋季新北师大版七年级上册数学全册大单元整体设计课件.pptx
最近下载
- 季度查漏补种登记表.doc VIP
- GB50318-2017 城市排水工程规划规范.pdf VIP
- 2025至2030中国移动视频监控行业市场占有率及投资前景评估规划报告.docx VIP
- 汽车门锁及空调故障.pptx VIP
- 生态环境数据分级管理指南.pdf VIP
- 八省联考2026届高三年级12月检测训练(T8联考)化学试卷(含答案详解).pdf
- 2022春(六下)顺 - 填空题1.docx VIP
- T∕CACM 1319-2019 慢性阻塞性肺疾病中医诊疗指南.docx VIP
- GZ021 化工生产技术赛项(正式赛卷)仿真操作模块方案及评分6.doc VIP
- 金蝶云星空完整版.pdf VIP
原创力文档


文档评论(0)