1. Error[173] Source file path exceeds 62 characters
原文件的目录地址过长,超过了62个字符。
2. Error: The selected compiler: "PCM" is not installed on this PC
所选择的编绎器没在在计算机中发现,多因为这个编绎器安装不正确或选用的使用的地方不对,可以选其它的编绎控件。如CCS的PICC。EXE不生效,可以换用HI-TECH Software\PICC\PRO\9.61\。
3. 对于PIC的单片机需要使用前机进行位置功能的配置,否则系统不能运行。
4. 对于C与汇编共同编程的在C中加入 #asm 汇编程序以汇编方式写 #endasm 则可,或asm("单指令"); 但注意其中的汇编对应的数据地名和存储器名则以 _数据地名和存储器名 为写作方法。
5. Error[000] : Can't find 0x12C words for psect rbss_1 in segment BANK1
11.5.3 PICC 对数据寄存器 bank的管理
为了使编译器产生最高效的机器码,PICC 把单片机中数据寄存器的 bank问题交由编程
员自己管理,因此在定义用户变量时你必须自己决定这些变量具体放在哪一个 bank 中。如
果没有特别指明,所定义的变量将被定位在 bank0,例如下面所定义的这些变量:
unsigned char buffer[32];
bit flag1,flag2;
float val[8];
除了 bank0 内的变量声明时不需特殊处理外,定义在其它 bank 内的变量前面必须加上
相应的 bank序号,例如:
bank1 unsigned char buffer[32]; //变量定位在bank1中
bank2 bit flag1,flag2; //变量定位在bank2中
bank3 float val[8]; //变量定位在bank3中
中档系列 PIC 单片机数据寄存器的一个 bank 大小为 128 字节,刨去前面若干字节的特
殊功能寄存器区域,在 C 语言中某一 bank 内定义的变量字节总数不能超过可用 RAM 字节
数。如果超过 bank 容量,在最后连接时会报错,大致信息如下
6. PICC 中的浮点数
32 位长,在单片机中要用 4 个字节存储。为了节约单片机的数据空间和程序空间,PICC 专门提供了
一种长度为 24 位的截短型浮点数,它损失了浮点数的一点精度,但浮点运算的效率得以提
高。在程序中定义的 float 型标准浮点数的长度固定为 24 位,双精度 double 型浮点数一般
也是 24 位长,但可以在程序编译选项中选择 double 型浮点数为 32 位,以提高计算的精度。
7. 位变量外理 在有些应用中需要将一组位变量放在同一个字节中以便需要时一次性地进行读写,这一
功能可以通过定义一个位域结构和一个字节变量的联合来实现,例如:
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;
8. 一个
变量绝对定位的例子如下:unsigned char tmpData @ 0x20; //tmpData定位在地址0x20
unsigned char tmpData @ 0x20; //tmpData定位在地址0x20
bit tmpBit0 @ tmpData*8+0; //tmpBit0对应于tmpData第 0 位
bit tmpBit1 @ tmpData*8+1; //tmpBit0对应于tmpData第 1 位
bit tmpBit2 @ tmpData*8+2; //tmpBit0对应于tmpData第 2 位
9. Fixup overflow in expression (...)
定义的指针有明确的 bank 适用区域,在对指针变量赋值时就必须实现类型匹配
试图将bank2内的变量地址赋给指向bank0/1的指针
10. 中档系列的 PIC 单片机其一个程序页面的长度是 2K字,换句话说,用 C 语言编写的任
何一个函数最后生成的代码不能超过 2K字。
11. 中档系列 PIC 单片机的硬件堆栈深度为 8 级,考虑中断响应需占用一级堆栈,有函数调用嵌套的最大深度不要超过 7 级。
12. 一个良好的习惯是在编写程序代码前先声明所有用到的函数类型.笔者在实际工作中有时碰到一些用户声称发现 C 编译器生成了 错误的代码,最后究其原因就是因为没有事先声明函数类型所致。
13. PICC 可以实现 C 语言的中断服务程序。中断服务程序有一个特殊的定义方法: void interrupt ISR(void); 其中的函数名 “ISR”可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型必须是“void”型,亦即没有入口参数和返回参数, 且中间必须有一个关键词“interrupt”。
14. 用 C 语言编写中断服务程序必须遵循高效的原则:
代码尽量简短,中断服务强调的是一个“快”字。
避免在中断内使用函数调用。虽然 PICC 允许在中断里调用其它函数,但为了解决递归调用的问题,此函数必须为中断服务 独家专用。既如此,不妨把原本要写在其它函数内的代码直接写在中断服务程序中。
避免在中断内进行数学运算。数学运算将很有可能用到库函数和许多中间变量,就算不出现递归调用的问题,光在中断入口 和出口处为了保护和恢复这些中间临时变量就需要大量的开销,严重影响中断服务的效率。
15. C 语言中常用的格式化打印函数“printf/sprintf”用在单片机的程序中时要特别谨慎。printf/sprintf 是一
个非常大的函数,一旦使用,你的程序代码长度就会增加很多。
16. PICC 提供了相关的预处理指令以实现在原程序中定义单片机的配置字和标记单元。编译器错误
__CONFIG (HS & UNPROTECT & PWRTEN & BORDIS & WDTEN);
17. ㈠ 慎用汇编指令 ㈡ 尽量使用嵌入汇编 [三]尽量使用全局变量进行参数传递 :使用全局变量最大的好处是寻址直观,只需在 C 语言定义的变量名前增加一个下划线符即可在汇编语句中寻址;使用全局变量进行参
数传递的效率也比形参高。
18. 系统中的工能都要作初始化,包括I/O口。 I/O配以输入输出模式,以TRISA~TRISE来写,其位上以1表可写入,以O表可以输出,不配置则不能用,被悬空。
注意PIC 的配置表:。
19. 注意PIC的位据作比数据操作过,位操作只用一个指今周期,而在数据操作上则要用二个指今周期,这个在PROTEUS上作过仿真得。
20.汇编语言中的变量名称的大小写要分清,而指令可以不分大小写。
21.在PIC 中的中断程序中是不能调用子程序的!否则会有编译不能调用内存问题发生
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论