新闻中心

EEPW首页>嵌入式系统>设计应用> 基于PICC 编译环境编写PIC单片机程序

基于PICC 编译环境编写PIC单片机程序

作者: 时间:2012-02-23 来源:网络 收藏

3C中的指针
3.1指向RAM的指针

C在编译C原程序时将指向RAM的指针操作最终用FSR来实现间接寻址。FSR能够直接连续寻址的范围是256 B,所以一个指针可以同时覆盖两个bank 的存储区域(bank0/1或bank2/3,一个bank区域是128 B)。要覆盖最大512 B的内部数据存储空间,在定义指针时必须明确指 定该指针所适用的寻址区域。例如:

既然定义的指针有明确的bank 适用区域,在对指针变量赋值时就必须实现类型匹配,否则 将产生错误,例如:

  若出现此类错误的指针操作,C 在最后连接时会告知类似于下面的信息:
  Fixup overflow in expression (…)

3.2指向ROM常数的指针

如果一组变量是已经被定义在ROM 区的常数,那么指向他的指针可以这样定义:

3.3指向函数的指针

因为在PIC这一特定的架构上实现函数指针调用的效率不高,因此,除非特殊算法的需要,建议大家尽量不要使用函数指针。

4PICC中的子程序和函数

中档系列的PIC程序空间有分页的概念,但用C语言编程时基本不用太多关心代码的分页问题。因为所有函数或子程序调用时的页面设定(如果代码超过一个页面)都由自动生成的指令实现。

4.1函数的代码长度限制

PICC决定了C源程序中的一个函数经编译后生成的机器码一定会放在同一个程序页面内。 中档系列的PIC其一个程序页面的长度是2 kB,用C语言编写的任何一个函数最后生成的代码不能超过2 kB。如果为实现特定的功能确实要连续编写很长的程序,这时就必须把这些连续的代码拆分成若干函数,以保证每个函数最后编译出的代码不超过一个页面空间。

4.2调用层次的控制

PIC单片机采用硬件堆栈,所以编程时函数的调用层次会受到一定限制。一般PIC系列的中档单片机硬件堆栈深度为8级。编程员必须自己控制子程序调用时的嵌套深度以符合这一限制要求。PICC 在最后编译连接成功后可以生成一个连接定位映射文件(*map),在此文件中有详细的函数调用嵌套指示图“call graph”,有些函数调用是编译代码时自动加入的库函数,这些函数调用从C源程序中无法直接看出,但在嵌套指示图上则一目了然。

5C语言和汇编语言混合编程

单片机的一些特殊指令操作在标准的C 语言语法中没有直接对应的描述,例如PIC 单片机的清看门狗指令“clrwdt”和休眠指令“sleep”;单片机系统强调的是控制的实时性,为了实现这一要求,有时必须用汇编指令实现部分代码以提高程序运行的效率。在C程序中嵌入汇 编指令有2种方法:
  (1) 如果只需要嵌入少量几条的汇编指令,PICC 提供了一个类似于函数的语句:
  asm("clrwdt");
  这是在C原程序中直接嵌入汇编指令的最直接最容易的方法。
  (2) 如果需要编写一段连续的汇编指令,PICC 支持另外一种语法描述:用“#asm”开始汇 编指令段,用“#endasm”结束。例如:



评论


相关推荐

技术专区

关闭