2017-02-03 47 views
0

我必須使用Microchip PIC進行新項目(在5V工作時需要使用TQFP60封裝的高引腳數)。PIC18F XC8編譯器 - 對象未初始化?

我有一個巨大的問題,我可能會錯過一些(遺憾的是,在提前)。 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和同時(x)爲真。但是當我使用PICKIT3將代碼加載到PIC18F67K40時,x爲0.

即使我做了一個簡單的sprintf,它也沒有做任何事,因爲格式化文本字符串(char數組)完全沒有零。 的sprintf(BUF「號是%U」 X「)

我不能初始化任何對象除了是零。 這是怎麼回事?任何幫助表示讚賞!

+0

即使這將是一個零填充的對象:字符TXT [] = { 「你好」}; –

回答

0

發現問題,該芯片有一個勘誤的問題,我得到了一個有影響的,奇怪的,Farnell賣了它。更奇怪的是編譯器沒有爲此做好準備,甚至沒有給出警告說要小心!

勘誤注:

模塊:PIC18核心

3.1 TBLRD要求NVMREG值以指向 適當的存儲器 的PIC18FXXK40 器件的受影響的硅修正不適當要求NVMREG < 1:在NVMCON 0> 位寄存器用於各種的TBLRD 訪問要被設置內存區域。當用戶 限定const型和編譯器使用 TBLRD說明從 閃存程序存儲器(PFM)檢索數據的問題 是在已編譯的C程序最明顯。當用戶在RAM 中定義一個陣列時,問題也是顯而易見的,編譯器會在main()之前創建啓動代碼 ,該指令使用TBLRD 指令從PFM初始化RAM。

+0

是一個解決上市? –

+1

是的,並且運作良好。需要設置一些位來選擇正確的複製源。 –

+0

爲什麼不包括答案中的工作? –