好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

pic_mplab_error_调试的常见问题.doc

5页
  • 卖家[上传人]:
  • 文档编号:43734989
  • 上传时间:2018-06-07
  • 文档格式:DOC
  • 文档大小:15.91KB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • pic_MPLAB_ERROR_pic_MPLAB_ERROR_调试的常见问题调试的常见问题1. Error[173] Source file path exceeds 62 characters 原文件的目录地址过长,超过了 62 个字符2. Error: The selected compiler: “PCM“ is not installed on this PC所选择的编绎器没在在计算机中发现,多因为这个编绎器安装不正确或选用的使用的地方不对,可以选其它的编绎控件如 CCS 的PICCEXE 不生效,可以换用 HI-TECH Software\PICC\PRO\9.61\bin\picc.exe3. 对于 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 17. ㈠ 慎用汇编指令 ㈡ 尽量使用嵌入汇编 [三]尽量使用全局变量进行参数传递 :使用全局变量最大的好处是寻址直观,只需在 C 语言定义的变量名前增加一个下划线符即可在汇编语句中寻址;使用全局变量进行参数传递的效率也比形参高18. 系统中的工能都要作初始化,包括 I/O 口 I/O 配以输入输出模式,以 TRISA~TRISE 来写,其位上以 1 表可写入,以 O 表可以输出,不配置则不能用,被悬空注意 PIC 的配置表:19. 注意 PIC 的位据作比数据操作过,位操作只用一个指今周期,而在数据操作上则要用二个指今周期,这个在 PROTEUS 上作过仿真得20.汇编语言中的变量名称的大小写要分清,而指令可以不分大小写21.在 PIC 中的中断程序中是不能调用子程序的!否则会有编译不能调用内存问题发生。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.