
|
 |
MESC TOOL NEWS:
MESCT-MR32R-010316D
M32Rファミリ用リアルタイムOS MR32Rの使用上の注意事項を連絡します。
- メモリ配置に関するマニュアルの補足事項について
- メモリ配置の制限事項の緩和策について
- 該当製品
- MR32R V.1.00 Release 1 ~ MR32R V.3.30 Release 1までの全バージョン
- 内 容
- 2.1 メモリ配置に関するマニュアルの補足事項について
- MR32Rでは、先頭アドレスから16MBを越える領域(1000000H番地以降)へのメモリ配置には制限があります。
セクションのメモリ配置の制限について、MR32R V.3.30 Release 1ユーザーズマニュアル「5.7 メモリ配置」をベースに補足をいたします。
- メモリ配置に関する制限について
- (1) 1000000H番地以降に配置可能な領域 (動的生成機能を使用しない場合のみ配置可能です。)
- INT_USR_STACK, EXT_USR_STACKセクション
動的生成機能(cre_tsk,del_tsk,exd_tsk,def_exc)を使用しない場合に配置可能
- EXT_MR_RAM, MR_HEAP, EXT_MR_HEAPセクション
動的生成機能(cre_mbx, del_mbx, cre_mbf, del_mbf, cre_mpf, del_mpf, cre_mpl, del_mpl)を使用しない場合に配置可能
- (2) 1000000H番地以降に配置不可能な領域
- MR_RAM, MR_ROM, INTERRUPT_VECTOR, MR_Dbg_RAMセクション
- SYS_STACKセクション
- MR_KERNEL, MR_KERNEL2, OS_DEBUGセクション
- (3) START_UPセクションの制限
- スタートアップルーチン (crt0mr.ms, crt0mr.s中に記載) からOSカーネルの呼び出しは、bra, bl命令を使用しているため、bra, bl命令で届かない範囲に配置することはできません。
- ※ アプリケーションが使用するコード領域 (Pセクションや.textセクションなど) やデータ領域 (B,D,Cセクションや.bss, .data, .rodataセクションなど) の配置に関しては、ご使用になるコンパイラに依存します。
また、コンパイラオプションの変更・リンクする標準ライブラリの変更・標準ライブラリの再構築が必要となる場合があります。
詳細については、ご使用のコンパイラのマニュアル等を参照ください。
- 2.2 メモリ配置の制限事項の緩和策について
- (1) 2.1(1)の動的生成機能を使用する場合、およびSYS_STACKセクションを1000000H番地以降に配置する方法
- 以下に示すようにスタートアップファイル(crt0mr.ms, crt0mr.s)の1箇所と、環境変数LIB32Rで示されるディレクトリにある初期化マクロファイル (mr32r.inc) の10箇所を変更してください。
※ TW32R, D-CC/M32Rご使用の場合も同様に以下のシンボルを32bitで読み込むように変更してください。
- スタートアップファイル(crt0mr.ms, crt0mr.s)の変更
[変更後]
__START:
seth R1,#high(__Sys_Sp)
or3 R1,R1,#low(__Sys_Sp)
[変更前] crt0mr.msの55行目
__START:
ld24 R1,#__Sys_Sp
- 初期化マクロファイル(mr32r.inc)の変更
(1)[変更後]
seth R5,#high(__MR_INT_SP_TOP) ; memadd
or3 R5,R5,#low(__MR_INT_SP_TOP) ; memadd
[変更前] mr32r.inc 1477行目
ld24 R5,#__MR_INT_SP_TOP ; memadd
(2)[変更後]
seth R5,#high(__MR_EXT_SP_TOP) ; memadd
or3 R5,R5,#low(__MR_EXT_SP_TOP) ; memadd
[変更前] mr32r.inc 1495行目
ld24 R5,#__MR_EXT_SP_TOP ; memadd
(3)[変更後]
seth R5,#high(__MR_INT_MBX_TOP)
or3 R5,R5,#low(__MR_INT_MBX_TOP)
[変更前] mr32r.inc 1561行目
ld24 R5,#__MR_INT_MBX_TOP
(4)[変更後]
seth R5,#high(__MR_EXT_MBX_TOP)
or3 R5,R5,#low(__MR_EXT_MBX_TOP)
[変更前] mr32r.inc 1587行目
ld24 R5,#__MR_EXT_MBX_TOP
(5)[変更後]
seth R5,#high(__MR_INT_MBF_TOP)
or3 R5,R5,#low(__MR_INT_MBF_TOP)
[変更前] mr32r.inc 1658行目
ld24 R5,#__MR_INT_MBF_TOP
(6)[変更後]
seth R5,#high(__MR_EXT_MBF_TOP)
or3 R5,R5,#low(__MR_EXT_MBF_TOP)
[変更前] mr32r.inc 1685行目
ld24 R5,#__MR_EXT_MBF_TOP
(7)[変更後]
seth R5,#high(__MR_INT_MPL_TOP)
or3 R5,R5,#low(__MR_INT_MPL_TOP)
[変更前] mr32r.inc 1765行目
ld24 R5,#__MR_INT_MPL_TOP
(8)[変更後]
seth R5,#high(__MR_EXT_MPL_TOP)
or3 R5,R5,#low(__MR_EXT_MPL_TOP)
[変更前] mr32r.inc 1791行目
ld24 R5,#__MR_EXT_MPL_TOP
(9)[変更後]
seth R5,#high(__MR_INT_MPF_TOP)
or3 R5,R5,#low(__MR_INT_MPF_TOP)
[変更前] mr32r.inc 1886行目
ld24 R5,#__MR_INT_MPF_TOP
(10)[変更後]
seth R5,#high(__MR_EXT_MPF_TOP)
or3 R5,R5,#low(__MR_EXT_MPF_TOP)
[変更前] mr32r.inc 1912行目
ld24 R5,#__MR_EXT_MPF_TOP
- (2) MR_KERNEL, MR_KERNEL2, OS_DEBUGセクションを1000000H番地以降の領域に配置する方法
- スタートアップファイルで行っているEITベクタエントリの定義を以下のように変更します。
- 1000000H番地以降の領域に配置するためには、一度、その領域内にジャンプさせ、再度、32ビットでOSカーネル (SYSCALL0, SYSCALL1) を呼び出すように変更します。
- int_entryを32ビットで呼び出すように変更します。
- (3) START_UPセクションの制限の回避策
- スタートアップルーチン (crt0mr.ms, crt0mr.s中に記載)・初期化マクロファイル(mr32r.inc)のbra, bl命令を32ビットで呼び出すように変更(jmp, jl命令に変更) すれば、どの空間へも配置可能です。
- 恒久対策
上記の2.1(1)のセクション配置に関する緩和策は次期バージョンで実施する予定です。
|