软讯网络 > 硬件指南 > 应用技巧 > pic的c18编译器入门
【标 题】:pic的c18编译器入门
【关键字】:
pic,c18
【来 源】:http://www.cublog.cn/u/16323/showart.php?id=91681
pic的c18编译器入门
一.c18安装目录所包含文件及其作用
MPLAB C18安装目录包含编译器的readme文件(readme.c18)和链接器的 readme文件(readme.lkr),以及一些子目录。
bin子目录包含编译器和链接器的可执行程序,其中mcc18.exe是编译器shell。它以C 文件(如 file.c)作为输入,调用扩展模式和非扩展模式编译器可执行程序。mcc18-extended.exe 为扩展模式编译器可执行程序,在扩展模式编译时由编译器 shell调用。它调用预处理器 cpp18.exe来预处理 C文件,然后编译预处理过的输出文件,并生成一个 COFF文件 (如 file.o)传递给链接器。mcc18-traditional.exe 是非扩展模式编译器可执行程序,在非扩展模式编译时由编译器 shell 调用。它调用预处理器 cpp18.exe来预处理 C文件,然后编译预处理过的输出文件,并生成一个 COFF 文件(如 file.o)传递给链接器。cpp18.exe是C预处理器。mplink.exe 是链接器的驱动程序。它以链接器描述文件、目标文件和库文件作为输入,并把这些文件传递给 _mplink.exe。然后它会把_mplink.exe输出的COFF文件传递给 mp2cod.exe和 mp2hex.exe。_mplink.exe 是链接器,它输入链接器描述文件 (如 p18f452.lkr)、目标文件和库文件,输出 COFF可执行文件 (如file.out 或file.cof)。COFF文件是对输入目标文件及由函数库引用的目标文件的数据和代码进行地址分配所产生的。 _mplink.exe也可以选择生成一个映射文件 (如 file.map),此映射文件包含关于数据和代码分配的详细信息。mp2cod.exe 把 COFF文件变为 COD文件的文件转换器。COD 文件是MPLAB IDE v5.xx使用的符号调试文件格式。 mp2cod.exe的输入是由 _mplink.exe 生成的COFF文件,输出COD 文件(如 file.cod)。它也创建列表文件 (如 file.lst),列表文件列出源代码与机器代码之间的对应关系。mp2hex.exe 把 COFF文件转化为 HEX文件的文件转换器。 HEX文件是PICmicro 单片机编程器(如 PICSTART Plus或 PROMATE II)可读的文件格式。 mp2hex.exe 的输入是由_mplink.exe生成的 COFF文件,输出是 HEX文件 (如 file.hex)。mplib.exe 库管理器。它允许创建和管理库文件 (如 file.lib),而库文件则充当目标文件的存档文件。库文件用于将目标文件组织成可重用的代码库。mpasm.exe 命令行汇编器,它的输入是汇编源文件 (如file.asm),输出是 COFF文件(如 file.o),或HEX 文件和COD文件(如file.hex 和file.cod)。它也生成列表文件(如file.lst)和错误文件 (如file.err),错误文件包含在汇编过程中发出的所有错误或警告。汇编源文件可能包含汇编头文件 (如p18f452.inc),汇编头文件也包含汇编源代码。
cpp子目录包含MPLAB C18 C预处理器的源代码,供有兴趣的用户参考。
doc子目录包含MPLAB C18 的电子文档有关 MPLAB C18 的问题可参考这些文档。
example子目录包含示例应用程序,帮助用户开始学习使用MPLAB C18,其中包括本文档中使用的示例。
h子目录包含标准C 函数库的头文件和所支持PICmicro 单片机的特定处理器函数库的头文件。
lib子目录包含标准C 函数库(clib.lib 或clib_e.lib)、特定处理器的函数库(p18xxxx.lib或p18xxxx_e.lib,其中xxxx是具体的器件型号)和启动模块(c018.o、 c018_e.o、 c018i.o、c018i_e.o、 c018iz.o和 c018iz_e.o)。
lkr子目录包含链接器描述文件。
mpasm子目录包含MPASM 汇编器的命令行版本 MPLAB C18 所支持器件的汇编头文件(p18xxxx.inc),以及函数库所使用的汇编头文件。
src子目录包含标准C 函数库、特定处理器函数库和启动模块的C 和汇编源代码文件。
二.使用扩展模式和非扩展模式
在扩展模式下,编译器将使用扩展指令 (即 ADDFSR、 ADDULNK、 CALLW、 MOVSF、MOVSS、 PUSHL、 SUBFSR和 SUBULNK)以及立即数变址寻址。在非扩展模式下,编译器不会使用扩展指令和立即数变址寻址。
默认情况下,MPLAB C18 工作在非扩展模式,其所生成代码可在工作于非扩展模式的器件上运行。默认状态可通过命令行选项 --extended更改。为进行更改,选择Project>Build Options>Project 并点击 MPLAB C18 选项卡。然后,选中 Use Alternate Settings 复选框来使能此复选框下面的文 --extended,点击OK。
从扩展模式更改为非扩展模式,必须遵循下述步骤:1. 禁止扩展模式。选择Project>Build Options>Project并点击 MPLAB C18选项卡。
然后,如果选中了 Use Alternate Settings 复选框,则从可选设置文般--extended,并通过点击复选框来去掉对它的选择。点击 OK。2. 从 MPLAB IDE 项目中去除扩展模式的 MPLAB ICD 2 链接器描述文件 (18f4620i_e.lkr)。3. 将非扩展模式的 MPLAB ICD 2 链接器描述文件 (18f4620i.lkr)添加到MPLAB IDE 项目。
三.针对处理器的寄存器定义文件
在程序中,我们常常需要读写那些特殊功能寄存器(SFR)用来控制CPU和外围模块,这时,我们一般是用诸如PORTB,TRISB之类的名字来访问这些寄存器,但是,c18并不要求我们用户自己来定义这些名字,因为这已经在寄存器定义文件中定义了.
针对处理器的寄存器定义文件是一个汇编文件,包含特定器件上所有特殊功能寄存器(SFR)的定义。编译时,针对处理器的寄存器定义文件将被编译成需要链接到应用程序的目标文件 (例如, p18c452.asm 编译为 p18c452.o)。此目标文件包含在p18xxxx.lib 中 (例如, p18c452.o 包含在 p18c452.lib中)。针对处理器的寄存器定义文件的源代码在 c:\mcc18\src\traditional\proc 和c:\mcc18\src\extended\proc目录下。编译后的目标代码在 c:\mcc18\lib 目录下,而 c:\mcc18 就是安装编译器的目录。 例如,在 PIC18C4620 针对处理器的寄存器定义文件中,PORTA 定义为:
SFR_UNBANKED0 UDATA_ACS H'F80'
PORTA
PORTAbits RES 1 ; 0xF80
第一行指定PORTA所在的数据寄存器存储区和这个存储区的起始地址。 PORTA 有两个标号, PORTAbits 和 PORTA,都指向同一个地址 ( 0xf80)。