nao-milkの経験ブログ

25年間の半導体エンジニア経験で知り得た内容を記載したブログです。

変数を別メモリに配置

f:id:nao-milk:20210426164612p:plain

特定の変数をプログラムメモリ(CPUが使用するメモリ)とは別のメモリに配置する場合について、説明します。

尚、Intel社製 NiosIIの場合になります。

 

以下の記事では設定手順などの説明がないと思いますので、記載しておきます。

(ネット上にもあまり無いかと思います) 

nao-milk.hatenablog.com

 

 

大まかな設定手順は、

  1. BSP EditorのLinkerでセクションを作る。
  2. 変数とセクションを関連付ける。

です。

 

BSP EditorのLinkerでセクションを作る

1、Project Explorerの????_bspをクリックし、[Nios II] → [BSP Editor]を選択します。

f:id:nao-milk:20210426154100p:plain

BSP Editorの起動

2、Linker Scriptタブを選択します。

  ここでセクションを作成します。

f:id:nao-milk:20210426154438p:plain

Linker Scriptタブ

3、「Linker Memory Regions」の"Add"ボタンをクリックし、メモリとサイズとOffsetアドレスを指定し、"Linker Region Name"を作成します。

  以下のような感じで、配置させたい変数分作ります。

f:id:nao-milk:20210426160419p:plain

f:id:nao-milk:20210426160512p:plain

f:id:nao-milk:20210426160609p:plain

f:id:nao-milk:20210426160703p:plain

f:id:nao-milk:20210426160755p:plain

 

   必要な領域を指定するとPARAMETERが設定されており、アドレスが重複しているために赤文字でメッセージが表示されます。

  "Linker Region Name"の「PARAMETER」選択し、"Remove"ボタンで削除します。

  以下が削除後の表示内容になります。

f:id:nao-milk:20210426161002p:plain

Linker Memory Regions設定

4、「Linker Section Mappings」の"Add"ボタンをクリックし、"Linker Region Name"と"Linker Section Name"を関連付けします。

f:id:nao-milk:20210426161336p:plain

関連付け

  必要な領域分設定します。

f:id:nao-milk:20210426161715p:plain

Linker Section Mappings設定

  "Generate"ボタンをクリックし、終了します。

 

変数とセクションを関連付ける。

 ソースコード内(.cファイル)で「__attribute__」を使って、sectionと変数を関連付けます。

f:id:nao-milk:20210426162423p:plain

ソースコード

 

確認方法

プロジェクトをコンパイルすると「???.map」が出来上がり、変数とセクションが関連付けられたことを確認できます。

f:id:nao-milk:20210426162956p:plain

Map確認

 最後に

上記.mapで配置を確認できますが、Niosを含めたシミュレーションでも確認しています。

以下の記事をご参照ください。

 

以下はNiosソースコードを記載しています。

nao-milk.hatenablog.com

 

以下はシミュレーション波形を載せています。

nao-milk.hatenablog.com