2004 Microchip Technology Inc. DS51288C_CN
MPLAB
®
C18
C 编译器用户指南
DS51288C_CN 第 ii 页 2004 Microchip Technology Inc.
本出版物中所述的器件应用信息及其它类似内容仅为您提供便
利,它们可能由更新之信息所替代。确保应用符合技术规范,是
您自身应负的责任。 Microchip 对这些信息不作任何明示或暗
示、书面或口头的声明或担保,包括但不限于针对其使用情况、
质量、性能、适销性或特定用途的适用性的声明或担保。
Microchip 对因这些信息及使用这些信息而引起的后果不承担任
何责任。未经 Microchip 书面批准,不得将 Microchip 的产品用
作生命维持系统中的关键组件。在 Microchip 知识产权保护下,
不得暗中或以其它方式转让任何许可证。
商标
Microchip 的名称和徽标组合、 Microchip 徽标、 Accuron、
dsPIC、 K
EELOQ、 microID、 MPLAB、 PIC、 PICmicro、
PICSTART、PRO MATE、PowerSmart、 rfPIC 和 SmartShunt
均为 Microchip Technology Inc. 在美国和其它国家或地区的注
册商标。
AmpLab、 FilterLab、 MXDEV、 MXLAB、 PICMASTER、
rfPIC、 SEEVAL、 SmartSensor 和 The Embedded Control
Solutions Company 均为 Microchip Technology Inc. 在美国的注
册商标。
Analog-for-the-Digital Age、 Application Maestro、
dsPICDEM、 dsPICDEM.net、 dsPICworks、 ECAN、
ECONOMONITOR、 FanSense、 FlexROM、 fuzzyLAB、
In-Circuit Serial Programming、 ICSP、 ICEPIC、 Migratable
Memory、 MPASM、 MPLIB、 MPLINK、 MPSIM、 PICkit、
PICDEM、 PICDEM.net、 PICLAB、 PICtail、 PowerCal、
PowerInfo、 PowerMate、 PowerTool、 rfLAB、 rfPICDEM、
Select Mode、Smart Serial、SmartTel 和 Total Endurance 均为
Microchip Technology Inc. 在美国和其它国家或地区的商标。
SQTP 是 Microchip Technology Inc. 在美国的服务标记。
在此提及的所有其它商标均为各持有公司所有。
© 2004, Microchip Technology Inc。版权所有。
请注意以下有关 Microchip 器件代码保护功能的要点:
•Microchip的产品均达到 Microchip 数据手册中所述的技术指标。
•Microchip确信:在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一。
• 目前,仍存在着恶意、甚至是非法破坏代码保护功能的行为。就我们所知,所有这些行为都不是以 Microchip 数据手册中规定的操
作规范来使用 Microchip 产品的。这样做的人极可能侵犯了知识产权。
•Microchip愿与那些注重代码完整性的客户合作。
•Microchip或任何其它半导体厂商均无法保证其代码的安全性。代码保护并不意味着我们保证产品是 “牢不可破”的。
代码保护功能处于持续发展中。 Microchip 承诺将不断改进产品的代码保护功能。任何试图破坏 Microchip 代码保护功能的行为均可视
为违反了《数字器件千年版权法案 (Digital Millennium Copyright Act)》。如果这种行为导致他人在未经授权的情况下,能访问您的软
件或其它受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为。
Microchip
位于美国亚利桑那州
Chandler
和
Temp e
及位于加利福尼亚州
Mountain View
的全球总部、设计中心和晶圆生产厂均于
2003
年
10
月通
过了
ISO/TS-16949:2002
质量体系认证。公司在
PICmicro
®
8
位单片
机、
KEELOQ
®
跳码器件、串行
EEPROM
、单片机外设、非易失性存储
器和模拟产品方面的质量体系流程均符合
ISO/TS-16949:2002
。此外,
Microchip
在开发系统的设计和生产方面的质量体系也已通过了
ISO
9001:2000
认证。
MPLAB
®
C18 C 编译器
用户指南
2004 Microchip Technology Inc. DS51288C_CN 第 iii 页
目录
前 言 ................................................................................................................................. 1
第 1 章 简介
1.1 概述.............................................................................................................. 7
1.2 调用编译器 ................................................................................................... 7
1.2.1 生成输出文件 ................................................................................................. 8
1.2.2 显示诊断信息 ................................................................................................. 8
1.2.3 定义宏 ............................................................................................................ 9
1.2.4 选择处理器 ..................................................................................................... 9
1.2.5 选择模式......................................................................................................... 9
第 2 章 语法说明
2.1 数据类型及数值范围................................................................................... 11
2.1.1 整型.............................................................................................................. 11
2.1.2 浮点型 .......................................................................................................... 12
2.2 字节存储顺序 — Endianness ................................................................... 12
2.3 存储类别..................................................................................................... 13
2.3.1 Overlay......................................................................................................... 13
2.3.2 static 型函数参数 ..................................................................................... 14
2.4 存储限定符 ................................................................................................. 14
2.4.1 near/far 数据存储对象 ............................................................................. 14
2.4.2 near/far 程序存储对象 ............................................................................. 14
2.4.3 ram/rom 限定符 .......................................................................................... 15
2.5 包含文件搜索路径 ...................................................................................... 15
2.5.1 系统头文件 ................................................................................................... 15
2.5.2 用户头文件 ................................................................................................... 15
2.6 预定义宏名 ................................................................................................. 16
2.7 与 ISO 的差异............................................................................................. 16
2.7.1 整型的提升 ................................................................................................... 16
2.7.2 数字常量....................................................................................................... 16
2.7.3 字符串常量 ................................................................................................... 17
2.8 语言的扩展 ................................................................................................. 19
2.8.1 匿名结构....................................................................................................... 19
2.8.2 行内汇编....................................................................................................... 20
2.9 Pragma 伪指令........................................................................................... 21
2.9.1 #pragma sectiontype ........................................................................... 21
2.9.2 #pragma interruptlow fname /
#pragma interrupt fname .................................................................... 27
2.9.3 #pragma varlocate bank variable-name
#pragma varlocate "section-name" variable-name................... 31
2.10 针对处理器的头文件................................................................................... 33
2.11 针对处理器的寄存器定义文件 .................................................................... 35
2.12 配置字 ........................................................................................................ 35
MPLAB
®
C18 C 编译器用户指南
DS51288C_CN 第 iv 页 2004 Microchip Technology Inc.
第 3 章 运行时模型
3.1 存储模型 .................................................................................................... 37
3.2 关于调用的约定.......................................................................................... 38
3.2.1 返回值...........................................................................................................39
3.2.2 管理软件堆栈 ................................................................................................40
3.2.3 C 语言与汇编语言的混合编程.......................................................................40
3.3 启动代码 .................................................................................................... 45
3.3.1 默认操作 .......................................................................................................45
3.3.2 定制 ..............................................................................................................46
3.4 编译器管理的资源 ...................................................................................... 46
第 4 章 优化
4.1 合并相同的字符串 ...................................................................................... 49
4.2 转移优化 .................................................................................................... 50
4.3 存储区选择优化 ......................................................................................... 50
4.4 W 寄存器内容跟踪 ..................................................................................... 51
4.5 代码排序 .................................................................................................... 51
4.6 尾部合并 .................................................................................................... 52
4.7 删除执行不到的代码 .................................................................................. 53
4.8 复制传递 .................................................................................................... 53
4.9 冗余存储删除 ............................................................................................. 54
4.10 删除死代码................................................................................................. 55
4.11 过程抽象 .................................................................................................... 55
第 5 章 示例应用程序
附录 A COFF 文件格式
A.1 struct filehdr — 文件头 ................................................................... 61
A.1.1 unsigned short f_magic......................................................................61
A.1.2 unsigned short f_nscns.......................................................................61
A.1.3 unsigned long f_timdat........................................................................61
A.1.4 unsigned long f_symptr........................................................................61
A.1.5 unsigned long f_nsyms ..........................................................................61
A.1.6 unsigned short f_opthdr......................................................................61
A.1.7 unsigned short f_flags........................................................................62
A.2 struct opthdr — 可选文件头 .............................................................. 62
A.2.1 unsigned short magic ............................................................................62
A.2.2 unsigned short vstamp ..........................................................................62
A.2.3 unsigned long proc_type......................................................................62
A.2.4 unsigned long rom_width_bits...........................................................64
A.2.5 unsigned long ram_width_bits...........................................................64
A.3 struct scnhdr — 段头 ......................................................................... 64
A.3.1 union _s .....................................................................................................65
A.3.2 unsigned long s_size ............................................................................65
A.3.3 unsigned long s_scnptr........................................................................65
A.3.4 unsigned long s_relptr........................................................................65
A.3.5 unsigned long s_lnnoptr......................................................................65
A.3.6 unsigned short s_nreloc......................................................................65
A.3.7 unsigned short s_nlnno........................................................................65
A.3.8 unsigned long s_flags ..........................................................................66
目录
2004 Microchip Technology Inc. DS51288C_CN 第 v 页
A.4 struct reloc — 重定位记录 ................................................................. 66
A.4.1 unsigned long r_vaddr.......................................................................... 66
A.4.2 unsigned long r_symndx........................................................................ 66
A.4.3 short r_offset........................................................................................ 66
A.4.4 unsigned short r_type.......................................................................... 67
A.5 struct syment — 符号表记录............................................................... 68
A.5.1 union _n..................................................................................................... 68
A.5.2 unsigned long n_value.......................................................................... 68
A.5.3 short n_scnum.......................................................................................... 69
A.5.4 unsigned short n_type.......................................................................... 69
A.5.5 char n_sclass.......................................................................................... 70
A.5.6 char n_numaux.......................................................................................... 70
A.6 struct coff_lineno — 行号记录 ....................................................... 71
A.6.1 unsigned long l_srcndx........................................................................ 71
A.6.2 unsigned short l_lnno.......................................................................... 71
A.6.3 unsigned long l_paddr.......................................................................... 71
A.6.4 unsigned short l_flags........................................................................ 71
A.6.5 unsigned long l_fcnndx........................................................................ 71
A.7 struct aux_file — 源文件的附加符号表记录.................................... 71
A.7.1 unsigned long x_offset........................................................................ 71
A.7.2 unsigned long x_incline ..................................................................... 71
A.7.3 unsigned char x_flags.......................................................................... 72
A.8 struct aux_scn — 段的附加符号表记录 .............................................. 72
A.8.1 unsigned long x_scnlen........................................................................ 72
A.8.2 unsigned short x_nreloc ..................................................................... 72
A.8.3 unsigned short x_nlinno ..................................................................... 72
A.9 struct aux_tag — struct/union/enum 标记名的附加符号表记录 .72
A.9.1 unsigned short x_size.......................................................................... 72
A.9.2 unsigned long x_endndx........................................................................ 72
A.10 struct aux_eos — struct/union/enum 结束的附加符号表记录...... 73
A.10.1 unsigned long x_tagndx...................................................................... 73
A.10.2 unsigned short x_size........................................................................ 73
A.11 struct aux_fcn — 函数名的附加符号表记录........................................ 73
A.11.1 unsigned long x_tagndx...................................................................... 73
A.11.2 unsigned long x_lnnoptr ................................................................... 73
A.11.3 unsigned long x_endndx...................................................................... 73
A.11.4 short x_actscnum ................................................................................. 73
A.12 struct aux_fcn_calls — 函数调用的附加符号表记录 ....................... 74
A.12.1 unsigned long x_calleendx............................................................... 74
A.12.2 unsigned long x_is_interrupt......................................................... 74
A.13 struct aux_arr — 数组的附加符号表记录 ........................................... 74
A.13.1 unsigned long x_tagndx...................................................................... 74
A.13.2 unsigned short x_size........................................................................ 74
A.13.3 unsigned short x_dimen[X_DIMNUM]................................................ 74
A.14 struct aux_eobf — 块或函数结尾的附加符号表记录 .......................... 75
A.14.1 unsigned short x_lnno........................................................................ 75
评论30
最新资源