PIC18F XC8编译器 - 未初始化的对象?

时间:2017-02-03 21:09:24

标签: pic xc8

我必须将Microchip PIC用于新项目(需要在TQFP60封装上使用5V工作时的高引脚数)。

我有一个很大的问题,我可能会错过一些东西(对此提前抱歉)。 IDE:MPLAB X 3.51 编译:XC8 1.41

问题在于,如果我将一个对象初始化为0以外的任何东西,它将不会被初始化,并且当我到达main()时总是为零; 在模拟器中它可以工作,对象值是合适的。

简单示例:

#include <xc.h>
static int x= 0x78;
void main(void) {
   while(x){
     x++;
   }
   return;
}

在模拟器中,x为0x78,而while(x)为真。 但是当我使用PICKIT3将代码加载到PIC18F67K40时,x为0。

即使我做了一个简单的sprintf,也会发生这种情况,因为格式化文本字符串(char数组)充满了零,所以它什么也没做。 sprintf(buf,“Number is%u”,x“)

我无法将任何对象初始化为零。 到底是怎么回事?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

发现问题,该芯片有勘误问题,我得到了一个受影响的,奇怪的,Farnell出售它。更奇怪的是,编译器没有为此做好准备,甚至没有给出警告说要小心!

勘误说明:

  

模块:PIC18核心

     

3.1 TBLRD要求NVMREG值指向   适当的记忆   受影响的PIC18FXXK40硅片修订版   设备不正确地要求NVMREG&lt; 1:0&gt;   NVMCON寄存器中的位将设置为TBLRD   访问各种存储区域。问题   在编译的C程序中最明显的是   user定义一个const类型,编译器使用   TBLRD指令从中检索数据   程序闪存(PFM)。问题也是   用户在RAM中定义数组时显而易见   编译器为其创建启动代码,   在main()之前执行,使用TBLRD   从PFM初始化RAM的说明。