简述HI-TECH C编译器的PICC18命令行驱动

出处:neo980 发布于:2011-09-01 22:38:26

  PICl8F系列产品是美国微芯科技公司的产品,用户多采用C语言进行编程设计,HI-TECH SoftwarePty.Ltd.公司的PICC18编译器得到了广泛应用。计算机语言便于人编写,阅读,维护。低阶机器语言是计算机能直接解读、运行的。编译器将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源代码一般为语言 (High-level language), 如 Pascal、C、C++、C# 、Java 等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。大部分应用者使用MPLAB集成环境进行编程,在一些重要或大型应用的开发中有一些问题。本文所阐述的HI-TECH C编译器的PICC18命令行驱动,正是要解决这些问题。

  编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。

  1 HI-TECH C编译器

  HI-TECH C编译器提供了C语言的标准特性,同时还加上许多为了适应PIC系列单片机的特定硬件特性而设计的扩展功能,并与汇编器集成在一起提供共享链接器和库管理工具,因而应用较为广泛。编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高阶语言作为输入,输出也是高阶语言的编译器。例如: 自动并行化编译器经常采用一种高阶语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。

  当编译一个程序时,就有许多操作既可由命令行驱动程序CLD(command-line driver),也可由HPD集成环境驱动程序(觋在为HI-TIDE)独立完成。在任一情况下,HPD或CLD采用编程者指定的选项来决定哪一个内部应用需要执行。

  用户提供的适合于目标系统的C语言源程序、汇编语言程序,都可以用CLD或HPD进行操作。当用CLD时,用命令行的任何命令来选择操作方式;当使用HPD时,在源文件列表对话框中键入需要的文件。

  通常使用的源程序可以被编译到一个库文件中,这样文件可被编译器更方便地处理、更快速地访问。编译器可以像其他源文件一样直接接收库文件,并用。lib扩展名指定文件的类型,因而库文件必须按这种方式命名。库文件在使用CLD时,用命令行的任何命令来选择操作方式;或使用HPD时,在“源文件列表…”对话框中键入需要的库文件。

  实际上,在使用MPLAB IDE集成环境进行开发时,是使用了CLD的,清除方向标志,在字符串的比较,赋值,读取等一系列和rep连用的操作中,di或si是可以自动增减的而不需要人来加减它的值,cld即告诉程序si,di向前移动,std指令为设置方向,告诉程序si,di向后移动。只是在平常的应用中没有注意到而已。下面是在MPLAB IDE中对C源文件进行编译的结果:

  从上面的结果可以看出,编译器使用了CLD命令,二者是可以统一。只有了解了CLD后,才能对HI-TECHC编译器有更深入的理解和掌握。

  2 PICC18命令行驱动器

  PICC18是调用DOS命令行的驱动器,用来编译和/或链接C语言程序的。PICC18的基本命令格式为:

  PICC18[选项]files[文件库]

  通常在文件名之前用破折号“——”来识别,实际上这不是必须的。文件可以是源文件(C或汇编程序)和目标文件的混合。文件库是库名字的一个列表,或一L选项源文件。类型如表1所列。

  PICC18将检查每个文件并完成适当的操作。C文件将被编译,汇编文件将被汇编。,所有通过编译或汇编得到的目标文件或者在命令行中明确列出的目标文件,都将与标准运行代码库和任何用户指定库链接,除非它们被某种选项禁止。仅当引用源代码时,库中函数才能被链接成结果输出文件。仅用目标文件作为凋用PICC18,意味着仅执行链接阶段,这是一种典型的用法。

  2.1 长命令行

  PICC18驱动器是32位的视窗软什,可以处理超过128字符长的命令行。驱动器可以通过DOS的批文件调用,或通过命令文件传递选项。当使用批文件时,送入PICC18的命令行必须列成一行。在命令文件中,驱动器选项可以被传送至多行,这是通过一个空格键紧接一个反斜线“\”再接一个回车键来分开各行实现的。例如,一个命令文件可以包含:

  因为没有提供命令行指令,因此PICC18将读xyz.cmd得到它的命令行指令。命令文件也可以通过@符号读出。

  2.2 PICC18编译器选项

  编译器的设定主要基于ROM代码的生成。表2列出了PICC18编译器的几个常用的重要选项。

  ①定义处理器类型:-processor。

  这一选项决定了哪个处理器被使用。例如,用命令行-18c452来编泽PICl8C452。用户也可以增加自己的处理器到编译器。

  ②指定ROM偏移量:-Aaddress。

  英文简称ROM。ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定 ,断电后所存数据也不会改变;其结构较简单,读出较方便,因而常用于存储各种固定程序和数据。除少数品种的只读存储器(如字符发生器)可以通用之外,不同用户所需只读存储器的内容不同。为便于使用和大批量生产 ,进一步发展了可编程只读存储器(PROM)、可擦可编程序只读存储器(EPROM)和电可擦可编程只读存储器(EEPROM)。例如早期的个人电脑如Apple II或IBM PC XT/AT的开机程序(操作系统)或是其他各种微电脑系统中的韧体(Firmware)。

  -A选项是用来为ROM映像区指定基地址的。若该选项要求引导输入这样的调试工具,则该词试工具期望ROM映射地址始于非零地址。该选项影响所有基于ROM的部分,包括复位和中断向量,以及放置代码和常量数据的链接器分类。

  ③优化器及优化优先级选项:-O和-Zg。

  -O表示调用PICC18的优化器,-Zg选项在代码生成路径调用全局优先级。这对于代码长度的缩减及内部RAM的使用有着重要意义。该优先级没有传递优先级苛刻,但对代码长度的缩减很有意义。在一个执行函数的基础上,全局优先级可以化寄存器的使用。

  该选项默认的级为1。优先级可以设置为l~9的任意(9为优先级)。数字表明优先级试图缩减代码的程度。

  了解了命令行驱动后,对第1节中在MPLAB IDE中对C源文件进行编译的例子就有了更深入的理解。

  3 命令行驱动应用

  下面介绍命令行驱动在实际应用中的一些例子。通过这些例子,可以对命令行驱动的应用有一个初步的认识,并可以此为基础,对PICC18编译器进行深入的学习和应用。

  3.1 命令行驱动编译源文件

  在Win2000下进行如下操作:执行“开始”→“运行”命令,然后输入“CMD”;或执行“开始”→“程序”→“附件”→“命令提示符”命令,弹出cmd.exe的界面,如图1所示。若cmd.exe中出现的当前目录不是在C盘根目录下,则需要通过输入命令“cd c:\”进入C盘根目录。输入“cd htsoft\picl8\bin”命令,进入PICC18.exe软件所在目录,如图2所示。

  (1)编译Izqmwyz.c

  输入“PICC18-18f458 lzqmwyz.c”,含义是使用PICC18.exe编译器对lzqmwyz.c源文件进行编译,单片机型号为

  18f458(即PIC18F458单片机)。这时会输出所需要的编译结果,生成的文件中,以hex为扩展名的lzqmwyz.hex较为重要。若源程序有语法错误,还会显示出错信息及所在的行。

  注意:在cmd.exe界面中进行操作时,所有的源文件均存放在PICC18.exe同一目录下(PICC18.exe默认安装目录是c:\HTSOFT\PIC18\Bin)。在本文中,PICC18均采用此默认安装目录。这里lzqmwyz.c存放在c:\HTSOFT\PICl8\Bin下。

  (2)-noerrata选项

  “-noerrata”选项不使能输出代码的错误修改,而缺省时,会对编译器的输出代码有所修改。有些芯片没有正误表,不会用编译器对此修改。这个选项可以用编译器来禁止任何正误表方位。当正误表变化时,会安全禁止。对有些芯片,PICC18对程序的代码长度进行了限制(一般限制在0x4000之内,即16KB之内)。这就是同上的PICl8应用论坛中。有些编程者则在程序中编写了下面的提示程序:

  若编译的程序代码超出了这个范围,将会列出出错信息。

  图3是对solar050408.c源文件编译时,代码超过了Ox4000长度时出现的提示信息。

  使用-noerrata选项时,solar050408.c源文件编译就会得到正确的编译结果,命令为“PICC18-18f458solar050408.c-o-zgl-noerrata”。命令中“-o”表示调用PICC18的优化器,“-zg1”表示调用优化器时采用的优先级为1级。

  3.2 库文件生成及应用

  3.2.1 C源文件

  (1)包含main函数的lzqmwyzl.c源文件

  (2)包含function_X3函数的funcx3.c源文件

  3.2.2 生成库文件

  用3.2.1中的两个文件直接创建一个应用程序,这在平时的应用中是经常用到的。这里介绍将funcx3.c源文件生成库文件,再由lzqmwyz.c调用的方法,也就是自己制作库文件进行使用。

  (1)生成obj文件

  将funcx3.c源文件存放在PICC18.exe同一目录下,然后在cmd.exe中输入“PICC18-18f458-C funcx3.c”。-C选项是将几个源文件编译成目标文件(。obj文件)。这里是将funcx3.c的源文件编译成funcx3.obj文件,然后就可以在c:\HTSOFT\PICl8\Bin目录下找到funcx3.obj文件。

  (2)生成lib库文件

  在cmd.exe中输入“libr r fun.lib runcx3.obj”。其中r选项为替换模块。fun.lib是由函数funcx3.c制作的库文件的文件名,如图4所示。

  3.2.3 库文件应用

  图5是使用3.2.1的lzqmwyzl.c源文件和调用3.2.2制作的库文件fun.1ib的工程。这时使用到的就只有lzqmwyzl.c源文件和fun.1ib文件,而不必再应用包含runetton_X3函数的funcx3.c源文件。

  结语

  PICC18编译器命令行驱动在实践中有许多应用,只有了解了它,才能对C编译器有更多、更深入的认识。采用PICC18编写的单片机源代码,编译环境MPLABv7.62;编译器PICC18pro9.60,程序中虽然未采用RTOS,但采用了任务段处理的方式,即每个运行周期只运行一个任务。并将面向对象的思想引入C中,一个文件相当于一个类。对初学者有一定的参考意义。有些代码考虑到易读性和通用性牺牲了代码的效率。


  
关键词:ICPIC驱动

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!