2017-02-03 16 views
0

新しいプロジェクトにはマイクロチップPICを使用する必要があります(5V動作のTQFP60パッケージでは高いピン数が必要です)。PIC18F XC8コンパイラ - オブジェクトは初期化されていませんか?

私は大きな問題を抱えています。私は何かが恋しいかもしれません(あらかじめ申し訳ありません)。 IDE:MPLAB X 3.51 コンパイラ:XC8 1.41

問題は)私が0以外にオブジェクトを初期化する場合は、それが初期化されないだろう、と私は(メインに到達したときに常にゼロであることです。 シミュレータでは動作し、オブジェクト値は適切な値です。

簡単な例:シミュレータで

#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は、X "「数は%uのである」)

私がゼロであることを離れて任意のオブジェクトを初期化することはできません。 何が起こっている?すべてのヘルプは感謝!

+0

これでも、ゼロで塗りつぶされたオブジェクトになります。char txt [] = {"hello"}; –

答えて

0

は、チップを問題を発見しましたコンパイラがそれに対応していないというより奇妙なことに、慎重であると言う警告も出されません。

エラッタノート:私は、奇妙な問題を抱えています。

モジュール:PIC18コア

3.1 TBLRDが不適切NVMREG < 1を必要 適切なメモリにPIC18FXXK40 デバイスの 罹患シリコンリビジョンを指すようにNVMREG値を必要とする:NVMCON 0> ビットは、種々のTBLRD アクセスのために設定するレジスタメモリ領域。 は、 ユーザがconstタイプを定義し、コンパイラが TBLRD命令を使用して プログラムフラッシュメモリ(PFM)からデータを取得するときに、コンパイルされたCプログラムで最も顕著です。問題は、ユーザーがRAM内の配列 を定義したときに、コンパイラが起動コードを作成する配列 がmain()より前に実行され、TBLRD 命令を使用してPFMからRAMを初期化するときに発生します。

+0

回避策がリストされましたか? –

+1

はい、うまくいきます。適切なコピー元を選択するためにいくつかのビットを設定する必要があります。 –

+0

なぜ答えの中に作業用アーチを含めないのですか? –

関連する問題