0

我必须为一个新项目使用 Microchip PIC(需要在具有 5V 操作的 TQFP60 封装上具有高引脚数)。

我有一个很大的问题,我可能会错过一些东西(提前抱歉)。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,"数字是 %u",x")

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

4

1 回答 1

1

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

勘误说明:

模块:PIC18内核

3.1 TBLRD 需要 NVMREG 值指向适当的存储器 受影响的 PIC18FXXK40 器件芯片版本不正确地要求将 NVMCON 寄存器中的 NVMREG<1:0> 位设置为 TBLRD 访问各种存储器区域。当用户定义 const 类型并且编译器使用 TBLRD 指令从程序闪存 (PFM) 中检索数据时,该问题在编译的 C 程序中最为明显。当用户在 RAM 中定义一个数组时,该问题也很明显,编译器为其创建启动代码,在 main() 之前执行,该代码使用 TBLRD 指令从 PFM 初始化 RAM。

于 2017-02-04T10:11:32.690 回答