PIC单片机C语言编程教程(3)

2025-07-18

PICC 把所有函数内部定义的 auto 型局部变量放在 bank0。为节约宝贵的存储空间,它

采用了一种被叫做“静态覆盖”的技术来实现局部变量的地址分配。其大致的原理是在编译

器编译原代码时扫描整个程序中函数调用的嵌套关系和层次,算出每个函数中的局部变量字

节数,然后为每个局部变量分配一个固定的地址,且按调用嵌套的层次关系各变量的地址可

以相互重叠。利用这一技术后所有的动态局部变量都可以按已知的固定地址地进行直接寻

址,用 PIC 汇编指令实现的效率最高,但这时不能出现函数递归调用。PICC 在编译时会严

格检查递归调用的问题并认为这是一个严重错误而立即终止编译过程。

既然所有的局部变量将占用 bank0 的存储空间,因此用户自己定位在 bank0 内的变量字

节数将受到一定的限制,在实际使用时需注意。

11.5.5 PICC 中的位变量

bit 型位变量只能是全局的或静态的。PICC 将把定位在同一 bank 内的 8 个位变量合并

成一个字节存放于一个固定地址。因此所有针对位变量的操作将直接使用 PIC 单片机的位

操作汇编指令高效实现。基于此,位变量不能是局部自动型变量,也无法将其组合成复合型

高级变量。

PICC 对整个数据存储空间实行位编址,0x000 单元的第 0 位是位地址 0x0000,以此后

推,每个字节有 8 个位地址。编制位地址的意义纯粹是为了编译器最后产生汇编级位操作指

令而用,对编程人员来说基本可以不管。但若能了解位变量的位地址编址方式就可以在最后

程序调试时方便地查找自己所定义的位变量,如果一个位变量 flag1 被编址为 0x123,那么

实际的存储空间位于:

字节地址=0x123/8 = 0x24

位偏移 =0x123%8 = 3

即 flag1 位变量位于地址为 0x24 字节的第 3 位。在程序调试时如果要观察 flag1 的变化,必

须观察地址为 0x24 的字节而不是 0x123。

PIC 单片机的位操作指令是非常高效的。因此,PICC 在编译原代码时只要有可能,对

普通变量的操作也将以最简单的位操作指令来实现。假设一个字节变量 tmp 最后被定位在

地址 0x20,那么

tmp |= 0x80

tmp &= 0xf7

=> bsf

=> bcf

0x20,7

0x20,3

if (tmp&0xfe)

=> btfsc 0x20,0

即所有只对变量中某一位操作的 C 语句代码将被直接编译成汇编的位操作指令。虽然编程

时可以不用太关心,但如果能了解编译器是如何工作的,那将有助于引导我们写出高效简介

的 C 语言原程序。

在有些应用中需要将一组位变量放在同一个字节中以便需要时一次性地进行读写,这一

功能可以通过定义一个位域结构和一个字节变量的联合来实现,例如:

union {

struct {

unsigned b0: 1;

unsigned b1: 1;

unsigned b2: 1;

unsigned b3: 1;

unsigned b4: 1;

unsigned b5: 1;

unsigned : 2; //最高两位保留

} oneBit;

unsigned char allBits;

} myFlag;

例 11-3 定义位变量于同一字节

需要存取其中某一位时可以

myFlag.oneBit.b3=1; //b3 位置 1

一次性将全部位清零时可以

myFlag.allBits=0; //全部位变量清 0

当程序中把非位变量进行强制类型转换成位变量时,要注意编译器只对普通变量的最低

位做判别:如果最低位是 0,则转换成位变量 0;如果最低位是 1,则转换成位变量 1。而标

准的 ANSI-C 做法是判整个变量值是否为 0。另外,函数可以返回一个位变量,实际上此返

回的位变量将存放于单片机的进位位中带出返回。

11.5.6 PICC 中的浮点数

PICC 中描述浮点数是以 IEEE-754 标准格式实现的。此标准下定义的浮点数为 32 位长,

在单片机中要用 4 个字节存储。为了节约单片机的数据空间和程序空间,PICC 专门提供了

一种长度为 24 位的截短型浮点数,它损失了浮点数的一点精度,但浮点运算的效率得以提

高。在程序中定义的 float 型标准浮点数的长度固定为 24 位,双精度 double 型浮点数一般

也是 24 位长,但可以在程序编译选项中选择 double 型浮点数为 32 位,以提高计算的精度。

一般控制系统中关心的是单片机的运行效率,因此在精度能够满足的前提下尽量选择

24 位的浮点数运算。

11.5.7 PICC 中变量的绝对定位

首先必须强调,在用 C 语言写程序时变量一般由编译器和连接器最后定位,在写程序


PIC单片机C语言编程教程(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2024年水族鱼缸市场调研及发展趋势预测

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219