MPLAB
®
C18
C
编译器用户指南
2005 Microchip Technology Inc.
DS51288J_CN
请注意以下有关
Microchip
器件代码保护功½的要点:
•
•
•
Microchip
的产品均达到
Microchip
数据手册中所述的技术指标。
Microchip
确信:在正常½用的情况下,
Microchip
系列产品是½今市场上同类产品中最安全的产品之一。
目前,仍存在着恶意、甚至是非法破坏代码保护功½的行为。就我们所知,所有这些行为½不是以
Microchip
数据手册中规定的操
½规范来½用
Microchip
产品的。这样做的人极可½侵犯了知识产权。
Microchip
愿与那些注重代码完整性的客户合½。
Microchip
或任½其他半导½厂商均无法保证其代码的安全性。代码保护并不意味着我们保证产品是 “牢不可破”的。
•
•
代码保护功½处于持续发展中。
Microchip
承诺将不断改进产品的代码保护功½。任½试图破坏
Microchip
代码保护功½的行为均可视
为违反了 《数字器件千年版权法案 (Digital
Millennium Copyright Act)
。如果这种行为导致他人在未经授权的情况下,½访问您的½
》
件或其他受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为。
提 供 本 文 档 的 中 文 版 本 仅 为 了 便 于 理 解。
Microchip
Technology Inc.
及其分公司和相关公司、各级主管与员工及事
务代理机构对译文中可½存在的任½差错不承担任½责任。建议
参考
Microchip Technology Inc.
的英文原版文档。
本出版物中所述的器件应用信息及其他类似内容仅为您提供便
利,它们可½由更新之信息所替代。确保应用符合技术规范,是
您自身应负的责任。
Microchip
对这些信息不½任½明示或暗
示、书面或口头、法定或其他½式的声明或担保,包括½不限于
针对其½用情况、质量、性½、适销性或特定用途的适用性的声
明或担保。
Microchip
对因这些信息及½用这些信息而引起的后
果不承担任½责任。未经
Microchip
书面批准,不得将
Microchip
的产品用½生½维持系统中的关键组件。在
Microchip
知识产权
保护下,不得暗中或以其他方式½让任½许可证。
商标
Microchip
的名称和½标组合、
Microchip
½标、
Accuron、
dsPIC、 K
EE
L
OQ
、
microID、 MPLAB、 PIC、 PICmicro、
PICSTART、 PRO MATE、 PowerSmart、 rfPIC
和
SmartShunt
均为
Microchip Technology Inc.
在美½和其他½家或地区的注
册商标。
AmpLab、FilterLab、Migratable Memory、MXDEV、MXLAB、
PICMASTER、 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、 Linear Active Thermistor、
MPASM、 MPLIB、 MPLINK、 MPSIM、 PICkit、 PICDEM、
PICDEM.net、 PICLAB、 PICtail、 PowerCal、 PowerInfo、
PowerMate、 PowerTool、 Real ICE、 rfLAB、 rfPICDEM、
Select Mode、 Smart Serial、 SmartTel、 Total Endurance、
UNI/O、
WiperLock
和
Zena
均为
Microchip Technology Inc.
在美
½和其他½家或地区的商标。
SQTP
是
Microchip Technology Inc.
在美½的服务标记。
在此提及的所有其他商标均为各持有公司所有。
© 2005, Microchip Technology Inc.
版权所有。
Microchip
½于美½亚利桑那州
Chandler
和
Tempe
及½于加利福尼亚
州
Mountain View
的全球总部、设计中心和晶圆生产厂均于
2003
年
10
月通过了
ISO/TS-16949:2002
质量½系认证。公司在
PICmicro
®
8
½
单片机、
K
EE
L
OQ
®
跳码器件、串行
EEPROM
、单片机外设、非易失性
存储器和模拟产品方面的质量½系流程均符合
ISO/TS-16949:2002
。
此外,
Microchip
在开发系统的设计和生产方面的质量½系也已通过了
ISO 9001:2000
认证。
DS51288J_CN
第
ii
页
2005 Microchip Technology Inc.
MPLAB
®
C18 C
编译器
用户指南
目½
前 言
................................................................................................................................. 1
第
1
章 简介
1.1
1.2
概述..............................................................................................................
7
调用编译器
................................................................................................... 7
1.2.1
1.2.2
1.2.3
1.2.4
1.2.5
生成输出文件
................................................................................................. 8
显示诊断信息
................................................................................................. 8
定义宏
............................................................................................................ 9
选择处理器
..................................................................................................... 9
选择模式.........................................................................................................
9
第
2
章 语法说明
2.1
2.1.1
整型..............................................................................................................
11
2.1.2
浮点型
.......................................................................................................... 11
数据类型及数值范围...................................................................................
11
2.2
2.3
2.3.1 Overlay......................................................................................................... 12
2.3.2
static
型½数参数
..................................................................................... 13
字节存储顺序 —
Endianness ................................................................... 12
存储类别.....................................................................................................
12
2.4
存储限定符
................................................................................................. 14
2.4.1
near/far
数据存储对象
............................................................................. 14
2.4.2
near/far
程序存储对象
............................................................................. 14
2.4.3
ram/rom
限定符
.......................................................................................... 14
2.5
包含文件搜索路径
...................................................................................... 15
2.5.1
系统头文件
................................................................................................... 15
2.5.2
用户头文件
................................................................................................... 15
2.6
2.7
2.7.1
2.7.2
2.7.3
2.7.4
预定义宏名
................................................................................................. 15
与
ISO
的差异.............................................................................................
15
整型的提升
................................................................................................... 15
数字常量.......................................................................................................
16
字符串常量
................................................................................................... 16
stdio.h
½数
.............................................................................................. 18
2.8
语言的扩展
................................................................................................. 18
2.8.1
匿名结构.......................................................................................................
18
2.8.2
行内汇编.......................................................................................................
19
2005 Microchip Technology Inc.
DS51288J_CN
第
iii
页
MPLAB
®
C18 C
编译器用户指南
2.9
Pragma
伪指令...........................................................................................
20
2.9.1
#pragma sectiontype
............................................................................20
2.9.2
#pragma interruptlow fname /
#pragma interrupt fname....................................................................27
2.9.3
#pragma tmpdata [section-name].....................................................31
2.9.4
#pragma varlocate bank variable-name
#pragma varlocate
"section-name"
variable-name
...................33
2.9.5
#pragma config
.......................................................................................34
2.10
针对处理器的头文件
.................................................................................. 36
2.11
针对处理器的寄存器定义文件
.................................................................... 38
第
3
章 运行时模型
3.1
3.2
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
存储模型
.................................................................................................... 39
关于调用的约定..........................................................................................
40
非扩展模式的约定.........................................................................................40
扩展模式约定
................................................................................................41
返回值...........................................................................................................42
管理½件堆栈
................................................................................................43
C
语言与汇编语言的混合编程
.......................................................................43
3.3
启动代码
.................................................................................................... 48
3.3.1
默认操½
.......................................................................................................48
3.3.2
定制
..............................................................................................................49
3.4
编译器管理的资源
...................................................................................... 50
合并相同的字符串
...................................................................................... 49
½移优化
.................................................................................................... 50
存储区选择优化
......................................................................................... 50
W
寄存器内容跟踪
..................................................................................... 51
代码排序
.................................................................................................... 51
尾部合并
.................................................................................................... 52
删除执行不到的代码
.................................................................................. 53
复制传递
.................................................................................................... 53
冗½存储删除
............................................................................................. 54
删除死代码
................................................................................................. 55
过程½象
.................................................................................................... 55
应用程序:½用
LED
和中断的嵌入式 “Hello,
World!”程序.................... 59
应用程序:创建大数据对象及读写
USART................................................ 62
应用程序:½用
EEDATA
和多个中断源
.................................................... 67
第
4
章 优化
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
第
5
章 应用实例
5.1
5.2
5.3
DS51288J_CN
第
iv
页
2005 Microchip Technology Inc.
目½
附½
A COFF
文件格式
A.1
A.1.1
A.1.2
A.1.3
A.1.4
A.1.5
A.1.6
A.1.7
struct filehdr
— 文件头
.................................................................. 73
unsigned short f_magic.....................................................................
73
unsigned short f_nscns
...................................................................... 73
unsigned long f_timdat........................................................................
73
unsigned long f_symptr........................................................................
73
unsigned long f_nsyms..........................................................................
73
unsigned short f_opthdr
..................................................................... 73
unsigned short f_flags........................................................................
74
unsigned short magic............................................................................
74
unsigned long vstamp..........................................................................
74
unsigned long proc_type
..................................................................... 75
unsigned long rom_width_bits...........................................................
76
unsigned long ram_width_bits...........................................................
76
union _s.....................................................................................................
78
unsigned long s_size............................................................................
78
unsigned long s_scnptr........................................................................
78
unsigned long s_relptr........................................................................
78
unsigned long s_lnnoptr
..................................................................... 78
unsigned short s_nreloc
..................................................................... 78
unsigned short s_nlnno........................................................................
78
unsigned long s_flags..........................................................................
79
A.2
A.2.1
A.2.2
A.2.3
A.2.4
A.2.5
struct opthdr
— 可选文件头...............................................................
74
A.3
A.3.1
A.3.2
A.3.3
A.3.4
A.3.5
A.3.6
A.3.7
A.3.8
struct scnhdr
— 段头
......................................................................... 77
A.4
A.4.1
A.4.2
A.4.3
A.4.4
struct reloc
— 重定½记½
................................................................. 79
unsigned long r_vaddr..........................................................................
79
unsigned long r_symndx........................................................................
79
short r_offset........................................................................................
79
unsigned short r_type..........................................................................
80
union _n.....................................................................................................
81
unsigned long n_value..........................................................................
81
short n_scnum..........................................................................................
82
unsigned long n_type............................................................................
82
char n_sclass..........................................................................................
83
unsigned char n_numaux.......................................................................
83
A.5
A.5.1
A.5.2
A.5.3
A.5.4
A.5.5
A.5.6
struct syment
— 符号表记½...............................................................
81
A.6
A.6.1
A.6.2
A.6.3
A.6.4
A.6.5
struct coff_lineno
— 行号记½
....................................................... 84
unsigned long l_srcndx........................................................................
84
unsigned short l_lnno..........................................................................
84
unsigned long l_paddr..........................................................................
84
unsigned short l_flags........................................................................
84
unsigned long l_fcnndx........................................................................
84
A.7
A.7.1
unsigned long x_offset........................................................................
84
A.7.2
unsigned long x_incline
..................................................................... 84
A.7.3
unsigned char x_flags..........................................................................
85
struct aux_file
— 源文件的附加符号表记½....................................
84
2005 Microchip Technology Inc.
DS51288J_CN
第
v
页
评论