H8マイコンのメモリセクションの変更を行いたい
以前私はこのような質問をこのサイトでさせて頂きました。
HEWのビルドで出てきたビルドエラーについて#8678205 #okwave #q8678205 http://okwave.jp/qa/q8678205.html
この質問の中で
(エラー内容)
** L2321 (E) Section "S" overlaps section "R"
Optimizing Linkage Editor Abort
ERROR: Process failed with return code: 1
このエラー内容が、Rセクション(初期化領域)の容量がSセクション(スタック領域)にオーバーしているということがわかり、Rセクションの容量を減らすからSセクションの容量を減らして、Rセクションに割り当てる解決方というのを知りました。
実際に開発環境のHEWのtoolchainのセクション設定の項目で変更してビルドが完了し、mapファイルでも設定した通りのアドレスにセクションが設定できることを確認しました。
そのため、初期ではSセクションのスタックは0x200(512)Byteだったのですが、0x1E0(480)Byteと小さくしてしまったのですが、スタック領域を小さくするというのは少し不安を感じています。
他にRAM領域がないかを確認したところ、H8/2368マイコンの外部にCYPRESS社製のSRAM
CY62148EV30LL-45ZSX1
TSOPII(32P3Y-H)
512kbyteのメモリをアドレス0x600000番地スタートで接続していることがわかりました。
512kbyteも容量があり、Rセクションはマップで見ても3.2kbyte程度なので、Rセクションだけこのメモリ領域に移したいと考えています。
ただ、
元々このメモリには次のようなメモリセクションが設定されています。
0x00600000 , BHEAPMEM
0x00670000 , BJURNEL
このBHEAPMEMとBJURNELという文字をソースコード内で検索してみても全く使用されていない文字で検索できませんでした。
ソースコード内の0x600000番地についての記述では次のような
(memmap.h)
#define SRAM_BASE_ADDR 0x600000 /* size 512 K Byte (0x80000) */
#define SRAM_BASE 0x600000 /* size 512 K Byte (0x80000) */
(task.c)
void * my_malloc(size_t size)
{
void * p;
OS_ENTER_CRITICAL();
p = (void *)malloc(size);
if(p == NULL || ((u32)p < (u32)SRAM_BASE_ADDR || (u32)p > ((u32)SRAM_BASE_ADDR + (u32)0x800000)))
{
printf("malloc error\n\r");
task_reset();
}
OS_EXIT_CRITICAL();
return (void *)p;
}
現在のメモリセクションマップはこのようになっています。
Address section
0x00000400 , PResetPRG,PintPRG
0x00000800 , P,C,C$DSEC,C$BSEC,D
0x00600000 , BHEAPMEM
0x00670000 , BJURNEL
0x00FF4000 , BPROGERASE
0x00FF4000 , B,R
0x00FFBE00 , S
これを、次のように変えたいと思っています。
Address section
0x00000400 , PResetPRG,PintPRG
0x00000800 , P,C,C$DSEC,C$BSEC,D
0x00600000 , BHEAPMEM
0x0066F000 , R
0x00670000 , BJURNEL
0x00FF4000 , BPROGERASE
0x00FF4000 , B
0x00FFBE00 , S
実際にこのようなメモリセクションに変更することは可能なのか、また、実際に変更した場合にBHEAPMEM領域に問題が起きないかとか他に調べなければならないことなど、ご教示頂きますよう、どうぞよろしくお願い致します。