【问题标题】:PIC18F XC8 compiler - objects not initialized?PIC18F XC8 编译器 - 对象未初始化?
【发布时间】:2017-02-03 21:09:23
【问题描述】:

我必须为一个新项目使用 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")

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

【问题讨论】:

  • 即使这将是一个零填充对象:char txt[] = {"hello"};

标签: pic xc8


【解决方案1】:

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

勘误:

模块:PIC18 内核

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

【讨论】:

  • 是的,效果很好。需要设置一些位来选择正确的复制源。
猜你喜欢
  • 2012-02-15
  • 2021-07-31
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 2011-06-18
相关资源
最近更新 更多