基于PICC 编译环境编写PIC单片bob综合体育官方入口
  • 时间:2022-05-14
  • 点击率:

目前,Microchip公司生产的PIC系列单片机以其低成本、低功耗、高性能、开发速度快、用户可一次性编程等优势迅速占领国内市场,成为国内最大的单片机。而国内介绍他的C语言开发工具的书籍和文章很少,使用的人也不多,给广大程序员在开发过程中带来了很多困难和不便。

Microchip没有针对中低档PIC单片机的C语言编译器,但是很多专业的第三方公司提供了很多支持PIC单片机的C语言编译器,比如Hitech,CCS,IAR,Bytecraft等。Hitech的PICC编译器稳定可靠,代码效率高。使用PIC单片机设计和开发该系统得到了工程师们的广泛认可。因此,本文以PICC为背景,介绍了PIC C语言的基本特点。

1 HiTech PICC与ANSI C语言的异同及HiTech PICC语言的特点

除了PICC不支持函数的递归调用,PICC基本符合ANSI标准,这主要是由于PIC单片机特殊的堆栈结构。PIC单片机中的堆栈是用硬件实现的,其深度已经和芯片固定了,无法实现需要大量堆栈运算的递归算法。另外,在PIC单片机中实现软件栈的效率不是很高。因此,PICC编译器采用了一种“静态覆盖”技术来实现C语言函数中固定地址空对局部变量的分配。这样处理出来的机器码效率很高。当代码量超过4 kB时,C语言编译的代码和汇编代码实现的代码长度相差不是很大(10%)。当然,前提是在整个C代码编写过程中,我们要时刻关注所写语句的效率。

2PICC中的2个变量

PICC中的变量类型与标准C中的相同,这里不再赘述。为了让编译器产生最高效的机器码,PICC把单片机中数据寄存器的存储体问题留给了程序员自己,所以在定义用户变量时,他必须决定这些变量应该放在哪个存储体中。除非另有说明,否则定义的变量将位于bank0中。在其他银行中定义的变量必须以相应的银行序列号开头,例如:

bank1无符号字符温度;//变量位于bank1中

中档系列PIC单片机数据寄存器的一个bank 大小为128 B,刨去前面若干字节的特殊功能寄 存器区域,在C语言中某一bank内定义的变量字节总数不能超过可用RAM字节数。如果超过ba nk 容量,在最后连接时会报错,大致信息如下:  连接器提示总共有0x12C(300)个字节准备放到bank1 中但bank1 容量不够。虽然变量所在的bank定位必须由编程员自己决定,但在编写源程序时进行变量存取操作前无需再特意编 写设定bank 的指令。C 编译器会根据所操作的对象自动生成对应bank 设定的汇编指令。为 避免频繁的bank 切换以提高代码效率,尽量把实现同一任务的变量定位在同一个bank 内; 对不同bank 内的变量进行读写操作时也尽量把位于相同bank 内的变量归并在一起进行连续 操作。中档PIC单片机的数据寄存器中一个bank的大小为128 B,不包括前面字节的特殊功能寄存器区。在C语言中,一个内存库中定义的变量字节总数不能超过可用RAM字节数。如果超过银行容量,将在最后一次连接时报告错误。大致信息如下:连接器指示总共有0x12C(300)字节要放入bank1,但是bank1的容量不足。虽然变量所在的库的位置必须由程序员自己决定,但是在编写源程序时,不需要在变量访问操作执行之前专门编写设置库的指令。c编译器会根据所操作的对象自动生成相应的汇编指令集。为了避免频繁的银行切换,提高代码效率,尽量将实现相同任务的变量定位在同一银行中;读写不同存储体中的变量时,尽量将同一存储体中的变量合并在一起进行连续操作。

位变量只能是全局的或静态的。PICC将位于同一存储体中的八位变量组合成一个字节,并将其存储在一个固定地址。PICC对整个数据存储空进行位寻址,单元0x0000的第0位是位地址0x0000,然后向前推。每个字节有8位地址。如果位变量flag1被寻址为0x12 3,则实际存储空位于:字节地址= =0x123/8 = 0x24位偏移= =0x123%8 = 3。

即flag1 位变量位于地址为0x24 字节的第3 位。在程序调试时如果要观察flag1 的变化, 必须观察地址为0x24 的字节而不是0x123。PICC 在编译原代码时只要有可能,对普通变量 的操作也将以最简单的位操作指令来实现。假设一个字节变量tmp 最后被定位在地址0x20,那么    另外,函数可以返回一个位变量,实际上此返回的位变量将存放于单片机的进位位中带出返回。


客服QQ: 点击这里
地址:台州市寨金路899号电子时代广场5116室 客服QQ:329435596
Copyright © 2022 bob综合体育官方入口 版权所有

08980-89895656

服务时间:7X10小时