- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MPLABC编译器介绍
MPLAB C32编译器介绍
第1 章 语言相关信息
1.1 简介
本章讨论MPLAB C32 C 编译器命令行的使用、属性、pragma 伪指令和数据表示。
1.2 数据存储
1.2.1 MPLAB C32 C 编译器以小尾数格式存储多字节值。即,最低有效字节存储在最低地址。
1.2.2 整型表示
MPLAB C32 C 编译器中的整型值以2 的补码形式表示,长度为8 到64 位。这些值可在通过limits.h 编译后的代码中使用。
1.2.3 有符号和无符号字符类型
默认情况下,不带修饰符的char 类型的值是有符号值。根据C 标准,这是由实现定义的操作,有一些环境将不带修饰符的char 值定义为无符号值。
1.2.4 浮点型表示
MPLAB C32 C 编译器使用IEEE-754 浮点格式。float.h 中提供了对于翻译单元的实现限制的详细信息。
1.2.5 指针
MPLAB C32 C 编译器中的指针长度均为32 位。
1.2.6 limits.h
limits.h 头文件定义了可以使用整型表示的值的范围。
1.3 预定义宏
1.3.1 MPLAB C32 C 编译器宏
MPLAB C32 C 编译器定义了许多宏,大多数都带有前缀“_MCHP_”,它们定义了各种目标特定选项、目标处理器和主机环境其他方面的特性。
1.3.2 SDE 兼容性宏
MIPS SDE(软件开发环境)定义了许多宏,大多数带有前缀“_MIPS_”,它们定义了各种目标特定选项的特性,其中一些由命令行选项决定(例如, -mint64)。在适用时,这些宏将由MPLAB C32 C编译器定义,以方便将应用程序和中间件从SDE移植到MPLAB C32 C编译器。
1.4 属性和PRAGMA 伪指令
1.4.1 函数属性
always_inline
如果函数声明为inline,则始终内联函数,即使是未指定任何优化级别。
longcall
始终通过以下方式调用函数:首先将其地址装入一个寄存器,然后使用该寄存器的内容进行调用。这使得可以调用位于直接调用指令28 位寻址范围之外的函数。
far
在功能上等价于longcall。
near
始终使用绝对调用指令来调用函数,即使是指定了-mlong-calls 命令行选项。
mips16
以MIPS16 指令集为函数生成代码。
nomips16
始终以MIPS32 指令集为函数生成代码,即使是编译带有-mips16 命令行选项的翻译单元。
interrupt
为用作中断处理程序的函数生成序言(prologue)和尾声(epilogue)代码。
vector
在所指示的异常向量(其目标为一个函数)处生成一条转移指令。
at_vector
将函数体放到所指示的异常向量地址处。
naked
不为函数生成序言或尾声代码。
section (“name”)
将函数放入由“name”指定的段。
例如,
void __attribute__ ((section (“.wilma”))) baz () {return;}
函数baz 将被放入.wilma 段。
-ffunction-sections 命令行选项对使用section 属性定义的函数不起作用。
unique_section
将函数放入唯一指定的段中,就如同指定了-ffunction-sections。如果函数还具有section 属性,那么将使用相应的段名作为前缀来生成唯一的段名。
例如,
void __attribute__ ((section (“.fred”), unique_section) foo (void) {return;}
函数foo 将被放入.fred.foo 段。
noreturn
向编译器指示,函数将永不返回。在一些情况下,这将使编译器可以在调用函数中生成效率更高的代码,因为在执行优化时可以无需考虑函数确实会返回时的行为。声明为noreturn 的函数的返回类型应始终为void。
noinline
始终不考虑将函数内联。
pure
如果某个函数除了对其返回值之外没有任何其他副面影响,并且返回值仅依赖于参数和/ 或(非易变)全局变量,那么对于该函数的调用,编译器可以执行更积极的优化。此类函数可以使用pure 属性指示。
const
如果一个pure 函数仅根据其参数决定其返回值(即,不检查任何全局变量),那么可以将其声明为const,以允许更积极的优化。请注意,对指针参数进行解引用的函数不属于const,因为指针解引用使用了不属于参数的值,虽然指针本身是一个参数。
format (type, format_index, first_to_check)
for
文档评论(0)