我必须将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“)
我无法将任何对象初始化为零。 到底是怎么回事?任何帮助表示赞赏!
答案 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的说明。