历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2020年02月19日 | PICC18编译器命令行驱动及其应用

2020-02-19 来源:eefocus

简介:PIC18F系列产品是美国微芯科技公司的高档产品,用户多采用C语言进行编程设计, 大部分应用者使用MPLAB集成环境进行编程,在一些重要或大型应用的开发中有一些问题。例如,如何编写C语言的库文件,如何对有代码限制的程序进行编译等,若只是采用传统方式编程,则达不到应有的效果。本文所阐述的HI-TECH C编译器的PICCl8命令行驱动,正是要解决这些问题。


1 HI-TECH C编译器


HI-TECH C编译器提供了C语言的标准特性,同时还加上许多为了适应PIC系列单片机的特定硬件特性而设计的扩展功能,并与汇编器集成在一起提供共享链接器和库管理工具,因而应用较为广泛。


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


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


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


实际上,在使用MPLAB IDE集成环境进行开发时,是使用了CLD的,只是在平常的应用中没有注意到而已。下面是在MPLAB IDE中对C源文件进行编译的结果:



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


2 PICCl8命令行驱动器


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


picc18[选项]files[文件库]


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



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


2.1 长命令行


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


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


例如:

PICC18@xyz.cmd


2.2 PICC18编译器选项


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



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

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

②指定ROM偏移量:-Aaddress。

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

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

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


该选项默认的级为1(最低优先级)。优先级可以设置为l~9的任意一级(9为最高优先级)。数字表明优先级试图缩减代码的程度。对于PICCl8,高于3的优先级通常没有什么用处。


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


3 命令行驱动应用


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


3.1 命令行驱动编译源文件


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

(1)编译Izqmwyz.c


输入“picc18-18f458 lzqmwyz.c”,含义是使用piccl8.exe编译器对lzqmwyz.c源文件进行编译,单片机型号为18f458(即PIC18F458单片机)。这时会输出所需要的编译结果,生成的文件中,以hex为扩展名的lzqmwyz.hex较为重要。若源程序有语法错误,还会显示出错信息及所在的行。


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


(2)-noerrata选项


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



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


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

使用-noerrata选项时,solar050408.c源文件编译就会得到正确的编译结果,命令为“picc18-18f458solar050408.c-o-zgl-noerrata”。命令中“-o”表示调用PICCl8的优化器,“-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中输入“PICCl8-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编译器有更多、更深入的认识。限于篇幅,本文只起抛砖引玉的作用,提供一种思路供广大编程者参考;同时,对于PICC也有相应的参考价值。

推荐阅读

史海拾趣

Caliber公司的发展小趣事

在电子行业中,品质是企业生存和发展的关键。Caliber公司深知这一点,从原材料采购到生产制造的每一个环节,都严格把控品质。公司建立了完善的质量管理体系,通过不断的技术改进和工艺优化,确保每一款产品的品质都达到行业最高标准。正是这种对品质的执着追求,让Caliber的产品在市场上获得了良好的口碑,也为公司的长期发展奠定了坚实的基础。

DAVE Embedded Systems公司的发展小趣事

DAVE Embedded Systems公司于1998年在意大利创立,其初衷是提供嵌入式系统解决方案。在成立初期,公司只有几名工程师和有限的资金,但他们凭借对技术的热爱和对市场的敏锐洞察力,成功设计并销售出了第一款基于微处理器和Linux平台的嵌入式系统模块(SOM)。这款产品因其高性价比和出色的性能,很快赢得了市场的认可,为公司的发展奠定了基础。

国盛科技(BOCHEN)公司的发展小趣事

随着市场竞争的加剧,国盛科技意识到传统生产方式已难以满足市场需求。于是,公司开始积极探索自动化生产之路。经过不懈努力,国盛科技成功自主研发了电位器自动包装设备、自动测试设备等多种自动化设备,实现了产品流水化生产。这一突破不仅大大提高了生产效率,还使得电位器年产量突破一亿只,为国盛科技赢得了市场的广泛认可。

ATO SOLUTION公司的发展小趣事

随着公司规模的扩大,ATO SOLUTION公司开始实施全球化战略布局。公司先后在多个国家和地区设立了研发中心和生产基地,充分利用当地资源和市场优势,提升整体竞争力。同时,公司还加强了与国际知名企业的合作,共同推动电子行业的发展和创新。

Electronic Concepts Inc公司的发展小趣事

ECI成立于20世纪90年代初,当时正值电子产业快速发展的浪潮。公司创始人李先生,一位有着丰富电子行业经验的工程师,看准了市场对定制化电子解决方案的需求,决定创立ECI。然而,初创时期资金紧张、人才匮乏,李先生不得不身兼数职,既要做研发,又要跑市场。在一次偶然的机会下,ECI成功为一家大型企业提供了定制化的电子控制模块,这一项目不仅为公司带来了可观的收入,也为ECI赢得了良好的口碑。

屹晶微(EG)公司的发展小趣事

随着业务的不断拓展和市场的不断扩大,屹晶微逐渐意识到与合作伙伴建立长期战略合作关系的重要性。于是,在2023年,他们与电子产业一站式服务平台华秋电子达成了授权代理合作。这一合作不仅为屹晶微提供了更广阔的市场渠道和客户资源,也为其未来的发展奠定了坚实的基础。

在合作过程中,华秋电子为屹晶微提供了全方位的支持和服务。他们共同推广屹晶微的芯片产品,为客户提供更优质的解决方案和服务。同时,华秋电子还利用自身的技术优势和渠道优势,帮助屹晶微拓展海外市场,提升品牌知名度和影响力。

以上两个故事只是屹晶微在电子行业中发展起来的一部分。他们的发展历程充满了挑战和机遇,但黄米龙和他的团队始终保持着坚定的信念和不懈的努力,为中国的芯片产业做出了积极的贡献。

问答坊 | AI 解惑

在mtk做手机软件开发有前途么?很急,请各位指教!

  我现在拿到mtk的offer了,手机软件开发职位,11w/年左右,我也同时拿到了另一家国内比较有名的做网络安全的公司的offer,8~9w/年。     上面两个公司职位一个是偏嵌入式,一个是win c++软件开发, 我是计算机系的,自己感 ...…

查看全部问答>

求助:eVC开发数据库的问题

请教各位高人:     我使用的工具是eVC4.0,前期开发了一些程序,不是利用MFC框架编的,直接用API编写的 那么我想问一下在我目前的这样开发环境下,开发数据库数据库,选用SQLite和SQLCE哪个开发容易一些呢? 另外:我没有开发数据库 ...…

查看全部问答>

大锅和机顶盒的原理是?有点疑问,很愚昧

我这样问,好像是很简单的问题了。 大锅和机顶盒好像都是只会接受消息,不会回复消息。 如果大锅能回复消息,卫星怎能承受得了。 机顶盒也是一样。 如果是这样,怎么认证帐号呢?[img=http://forum.eeworld.net/PointForum/ui/scripts/eeworld/ ...…

查看全部问答>

请教USB DEVICE 驱动的一个问题

Bulk-Only时 如果HOST向DEVICE写数据时 出现如下情况: 1 HOST发送CBW 2 DEVICE接收后开始等待DATA 3 HOST没有接收硬件层的关于CBW的确认。(对USB不了解,其中可能出现了重传等过程。最终的结果就是,HOST认为CBW没有被接收,DEVICE则等待DATA ...…

查看全部问答>

--声卡驱动 找不到 啊 !!!

音频控制芯片 SiS Azalia Audio Controller 芯片制造商 SiS 子系统ID 304217AAh 板卡制造商 Lenovo 中断 IRQ 18,INT# A ------------------------以上是Windows优化大师 检测的信息 sis high definition audio controller 着驱动精灵的信息 ...…

查看全部问答>

VGA 转 RGB

请问有谁做过VGA 转 RGB的系统没? 电脑显卡出来的VGA显示信号,转变为RGB数字信号,24位的最好, 就是想用480x272的LCD液晶来显示电脑输出的显示信号呀 ,各位高 手请指点一下,用哪个芯片好?…

查看全部问答>

怎么理解 ??????????????????????????????????????????????????????????????????

8051的停止位怎么设置? -------------------------------------------------------------------------------- 发布时间: 2006-12-15 ; 上次回复: 2006-12-15; 总计回复: 1人次 -------------------------------------------------------------- ...…

查看全部问答>

sql ce 数据库联接的问题,困扰

需要做一个sql ce的程序,我的开发环境是.net 2005,pc端数据库是sql server 2000 Developer版,pda操作系统mobile 5,sql ce 2.0,数据库放在My Documents下。 在程序进行数据库pull时连接不上,提示“The database file cannot be found. Check ...…

查看全部问答>

IAR5.4所產生的library(.a)如何在GCC下使用??

Dear all, 有人使用過IAR5.4產生的library,然後在GCC(WINARM)下使用嗎??…

查看全部问答>