Applilet EZ PL for RL78 V1.0J, V2.00J を試してみました。
デジタル回路版電子ブロックという感じで興味深いツールと思いましたが、少々使いづらい点もあったので改善要望として挙げておきます。
> 本ツールは評価版です。本ツールに関するテクニカルサポートは受け付けておりません。
と明記されていることは理解しており、返答等を求めているものではありません。
・作例 Lチカ
1185.knight2000.zip
10ピンの RL78/G10 をターゲットとして作成。Applilet EZ PL for RL78 V2.00 + CC-RL V1.04.00 の組み合わせで生成を行った結果、.map ファイルに出力される各セクションは
*** Mapping List *** SECTION START END SIZE ALIGN .vect 00000000 0000007f 80 0 .const 00000080 0000008f 10 2 .constf 00000080 00000080 0 2 .sdata 00000080 00000080 0 2 .option_byte 000000c0 000000c3 4 1 .security_id 000000c4 000000cd a 1 .textf 000000c4 000000c4 0 1 .data 000000ce 00000142 75 2 .text 00000143 00000a24 8e2 1 .RLIB 00000a25 00000a8a 66 1 .bss 000ffce0 000ffceb c 2 .dataR 000ffcec 000ffd60 75 2 .stack_bss 000ffd62 000ffda1 40 2 .sbss 000ffe20 000ffe28 9 2 .sdataR 000ffe2a 000ffe2a 0 2 *** Total Section Size *** RAMDATA SECTION: 000000ca Byte(s) ROMDATA SECTION: 00000113 Byte(s) PROGRAM SECTION: 00000948 Byte(s)
という結果となった。ROM の容量が 2kB を超えたため、R5F10Y16ASP では動作させることができない。内容的には単純なものであるためこの程度のものは R5F10Y16ASP で動作させたいところであり、省メモリ化でそれが実際に可能かを検証する。
検証その 1
1856.knight2000lite1.zip
makeprj.bat を以下の通り変更
.c をコンパイルする際に使用する *.pcc を以下の通り変更
リンクの際に使用する *.plk を以下の通り変更
以上の変更を行い makeprj.bat を実行してビルド行った結果、.map ファイルに出力された各セクションは以下の通りであり
*** Mapping List *** SECTION START END SIZE ALIGN .vect 00000000 0000007f 80 0 .const 00000080 0000008f 10 2 .constf 00000080 00000080 0 2 .sdata 00000080 00000080 0 2 .option_byte 000000c0 000000c3 4 1 .security_id 000000c4 000000cd a 1 .textf 000000c4 000000c4 0 1 .SLIB 000000c4 000000c4 0 1 .data 000000ce 0000013c 6f 2 .text 00000143 00000961 81f 1 .RLIB 00000a25 00000a8a 66 1 .bss 000ffce0 000ffceb c 2 .dataR 000ffcec 000ffd5a 6f 2 .sbss 000ffe20 000ffe26 7 2 .sdataR 000ffe28 000ffe28 0 2 *** Total Section Size *** RAMDATA SECTION: 00000082 Byte(s) ROMDATA SECTION: 0000010d Byte(s) PROGRAM SECTION: 00000885 Byte(s)
ROM の使用量が 201バイト、RAM の使用量が 72バイトそれぞれ削減された。
検証その2
6131.knight2000lite2.zip
検証その1 の内容に加えソースプログラムの冗長な部分に手を入れた。手法としては先に述べている部分も多いがその他、
以上の変更を行った。
結果、ビルド時に生成される .map ファイルに出力された各セクションは以下の通りであり
*** Mapping List *** SECTION START END SIZE ALIGN .vect 00000000 0000007f 80 0 .callt0 00000080 000000bf 40 2 .const 00000080 00000080 0 2 .constf 00000080 00000080 0 2 .data 00000080 00000080 0 2 .sdata 00000080 00000080 0 2 .option_byte 000000c0 000000c3 4 1 .textf 000000c0 000000c0 0 1 .RLIB 000000c0 000000c0 0 1 .SLIB 000000c0 000000c0 0 1 .security_id 000000c4 000000cd a 1 .text 000000ce 00000533 466 1 .bss 000ffce0 000ffce0 0 2 .dataR 000ffce0 000ffce0 0 2 .sbss 000ffe20 000ffea7 88 2 .sdataR 000ffea8 000ffea8 0 2 *** Total Section Size *** RAMDATA SECTION: 00000088 Byte(s) ROMDATA SECTION: 000000ce Byte(s) PROGRAM SECTION: 00000466 Byte(s)
最初のものと比べ ROM の使用量が約半分と、大幅なメモリ使用量の削減が達成できたと言える。R5F10Y16ASP でも十分動作させられるサイズに収まった。
Applilet EZ PL for RL78 のテンプレートとして提供されているソースファイルがメモリ使用量を重視して書かれていればこの程度のメモリ使用量の削減は可能な筈であり今後に期待したい。
※ 2017/05/29 cstart.asm に不具合があったので添付ファイルを更新
「検証その 1」の .map ファイルの出力を見てみると、NoMay さんの報告されてる「(3) 機能しないパターンその2」と同様の「謎の空隙(くうげき)」が出来ていることに気付いた。
リンクの際に使用している rlink.exe へのサブコマンド・ファイル knight2000.plk に
-STARt=.text,.textf,.RLIB,.SLIB,.sdata,.data/000ce,.dataR,.bss/FFCE0,.sdataR,.sbss/FFE20
を追加してビルドした結果、
*** Mapping List *** SECTION START END SIZE ALIGN .vect 00000000 0000007f 80 0 .const 00000080 0000008f 10 2 .constf 00000080 00000080 0 2 .option_byte 000000c0 000000c3 4 1 .security_id 000000c4 000000cd a 1 .text 000000ce 000008ec 81f 1 .textf 000008ed 000008ed 0 1 .RLIB 000008ed 00000952 66 1 .SLIB 00000953 00000953 0 1 .sdata 00000954 00000954 0 2 .data 00000954 000009c2 6f 2 .dataR 000ffce0 000ffd4e 6f 2 .bss 000ffd50 000ffd5b c 2 .sdataR 000ffe20 000ffe20 0 2 .sbss 000ffe20 000ffe26 7 2 *** Total Section Size *** RAMDATA SECTION: 00000082 Byte(s) ROMDATA SECTION: 0000010d Byte(s) PROGRAM SECTION: 00000885 Byte(s)
謎の空隙は解消した。