2017-11-27 54 views
1

はおそらくmain.cの中でフラッシュ変数を定義し、初期化するための簡単なコマンドである何(のIAR Embedded Workbenchの/ TI MSP430F)に苦しんでメイン

をフラッシュ変数を定義&Iniitialise私は別のCではフラッシュルーチンを持っていますファイル(Battery_Store.c)は変数を(メインから)取り込み、設定された場所に格納します。フラッシュルーチンが機能します。

void Set_Battery_Store(unsigned int Battery_Status) 
    { 

      Flash_Start() ; 
      Flash_Erase_Segment((unsigned int *)&Battery_Status) ; 
      Flash_Write_Word((unsigned int *)&Battery_Status, Battery_Status) ; 
      Flash_Finish() ; 
    } 

私は変数を定義し、同じCファイルに

const volatile unsigned int Battery_Status @ 0x1070 = 1 ; 

と.hの

extern const volatile unsigned int Battery_Status ; 

しかし、もちろん、私は、メイン(System_FlagsからBattery_Storeを呼び出すたびでそれを初期化します.Battery_Statusはmainで扱う別の変数です)。すなわち

Set_Battery_Store (System_Flags.Battery_Status) ; 

Battery_Statusは、おそらく私が設定して、main.cの内(とないBattery_Store.cとBattery_Store.h内)からBattery_Statusを初期化し、持っているどのように

const volatile unsigned int Battery_Status @ 0x1070 = 1 ; 

の、再び1となりBattery_Store.cはそれを参照していますか?

答えて

1

Set_Battery_Store関数のパラメータは、スタック上に存在するため、Battery_Statusのパラメータがパラメータです。したがって、&Battery_Statusを使用する場合、この関数は決して実際にフラッシュメモリにアクセスしません。

パラメータまたはグローバル変数に異なる名前を付けます。

関連する問題