変数を別メモリに配置
特定の変数をプログラムメモリ(CPUが使用するメモリ)とは別のメモリに配置する場合について、説明します。
尚、Intel社製 NiosIIの場合になります。
以下の記事では設定手順などの説明がないと思いますので、記載しておきます。
(ネット上にもあまり無いかと思います)
大まかな設定手順は、
- BSP EditorのLinkerでセクションを作る。
- 変数とセクションを関連付ける。
です。
BSP EditorのLinkerでセクションを作る
1、Project Explorerの????_bspをクリックし、[Nios II] → [BSP Editor]を選択します。
2、Linker Scriptタブを選択します。
ここでセクションを作成します。
3、「Linker Memory Regions」の"Add"ボタンをクリックし、メモリとサイズとOffsetアドレスを指定し、"Linker Region Name"を作成します。
以下のような感じで、配置させたい変数分作ります。
必要な領域を指定するとPARAMETERが設定されており、アドレスが重複しているために赤文字でメッセージが表示されます。
"Linker Region Name"の「PARAMETER」選択し、"Remove"ボタンで削除します。
以下が削除後の表示内容になります。
4、「Linker Section Mappings」の"Add"ボタンをクリックし、"Linker Region Name"と"Linker Section Name"を関連付けします。
必要な領域分設定します。
"Generate"ボタンをクリックし、終了します。
変数とセクションを関連付ける。
ソースコード内(.cファイル)で「__attribute__」を使って、sectionと変数を関連付けます。
確認方法
プロジェクトをコンパイルすると「???.map」が出来上がり、変数とセクションが関連付けられたことを確認できます。
最後に
上記.mapで配置を確認できますが、Niosを含めたシミュレーションでも確認しています。
以下の記事をご参照ください。
以下はNiosソースコードを記載しています。
以下はシミュレーション波形を載せています。