2017-09-22 15 views
1

IARコンパイラを使用したSTM8Sマイクロコントローラで作業しています。絶対メモリ位置に変数を配置する(IAR C/C++)

プラグマなどの方法を使用して、1つ以上の変数を開始位置に固定するにはどうすればよいですか。

Iは、これらのコードをしようとすると、コンパイラは、このエラーメッセージ与える:

エラー[Lp025]:絶対セクション.near.bss(main.o#12) は([0x000100-0x000100])と重複し絶対セクション.near.bss (main.o#8)([0x000100-0x000100])

私はIARのテクニカルノート "絶対位置変数" を検索しますが、私は行うことができませんでした。

#pragma location = 0x100 /* Start address of absolute location */ 

extern uint8_t  R0, 
         R1, 
         R2, 
         R3, 
extern uint16_t  M1;   
extern uint8_t  M2,  
         M3;  
+0

[this](http://www.keil.com/support/docs/2829.htm)が役立つかもしれません。 –

+0

@Michael Walzあなたが送るリンクで、IARに関する同様の手順が見つかりました。私は試してみている。 – mryldz

答えて

1

同じELFセクションに絶対的な地域にしたい変数を配置する使用#pragma location = "my_abs"または_Pragma("location=\"my_abs\"")#pragma locationは、次の宣言にのみ適用されるので、絶対ブロックで変数を宣言するときに前に付けることができる定義を作成することができます。プリプロセッサマクロでは、構文が_Pragma("location=\"my_abs\"")であることに注意してください。

#pragma section="my_abs" 
#define IN_ABS _Pragma("location=\"my_abs\"") 

IN_ABS char R0, R1, R2, R3; 
IN_ABS short M1;   
IN_ABS char M2, M3; 

int no_abs; 

このセクションを指定したアドレスに配置するには、リンカー設定に行を追加します。

place at address mem:0x100 { rw section my_abs };

あなたは同じセクションで初期化し、初期化されていない変数を混在させることはできません。