6

Atmelプロセッサ用のcodevisionコンパイラでは、たとえば、グローバル変数のストレージ アドレスを指定する可能性があります。

int a @0x100; // will place the variable at the address 0x100 in RAM

もちろん、標準 C のように、変数は宣言時に初期化できます。

int a=42;

ただし、両方を実行する可能性はありませんでした。int a @0x100 = 42またはint a = 42 @0x100;機能しない場合、コンパイラ エラーが発生します。

なぜそれを行うことがそれほど重要なのかと尋ねるかもしれません。

int a @0x100;

int main()
{
    a = 42;
    //...
}

ただし、EEPROMに変数がある場合は、それらを初期化する必要があります。これが、値を含む eeprom ファイルを自動的に生成する唯一の方法だからです。これらの値を後で割り当てることはできません。その場合、プログラムの開始ごとに実際に値が eeprom に書き込まれるからです。

4

4 に答える 4

2

CodeVisionAVRヘルプを見るだけで、

@ operator「を使用して特定のアドレスに配置されたグローバル変数を宣言中に初期化する必要がある場合は、次の手順を使用する必要があります。

/* the variable will be stored in EEPROM at address 0x10 */

eeprom int abc @0x10;

/* and it will be initialized with the value 123 */ 

eeprom int abc=123; 
于 2017-01-04T06:05:30.790 に答える
0

絶対アドレスを指すポインターを使用できます。

volatile int *pa = (int *) 0x100;

次に、逆参照演算子を使用して、*次のようにそのアドレスの値にアクセスできます。

int value = *pa;

また

*pa = 0x10;

編集:特定の領域を指すように変数を宣言し、同時にその領域に値を割り当てる方法はありません。コンパイラがそれを許可する拡張機能を持っていない限り、そうではありません。

于 2012-08-02T05:34:19.000 に答える