初めまして、よろしくお願いします。
e2 studio で CCRL 1.09 を使用させていただいています。
変数サイズミスで終わらないforループをワーニングにする方法を教えて頂けないでしょうか。
・コンパイラの最適化はDebug優先です。
・forの後のコード(ret = 10;)を生成していないので、コンパイラは無限ループを認識していると思います。
・ワーニングが出ないと、全てのforループの変数長と、終了条件を目視チェックすることになるので、非常に厳しいです。
例:(1000までカウントする変数 count を、8ビットで定義してしまった)
void main(void) { unsigned char count; unsigned char ret; ret = 0; for(count = 0; count < 1000; count++){ ret++; } ret = 10;}
アセンブラ出力:
#CC-RL Compiler RL78 Assembler Source#@ CC-RL Version : V1.09.00 [11 Nov 2019]#@ Commmand :#@ -cpu=S2#@ -c#@ -dev=C:\Renesas\e2_studio\DebugComp\\RL78\RL78\Common\DR5F1026A.DVF#@ -I C:\Program Files (x86)\Renesas\RL78\1_9_0\inc#@ -I C:\test\char_test\generate#@ -character_set=utf8#@ -lang=c#@ -g#@ -asm_path=src/#@ -pass_source#@ -Onothing#@ -o src/char_test.obj#@ ../src/char_test.c#@ compiled at Tue Apr 21 08:55:06 2020
.PUBLIC _main
.SECTION .textf,TEXTF_main: .STACK _main = 6 ;*** 1 : ;*** 2 : void main(void) .LINE "C:/test/char_test/src/char_test.c", 2 push hl ;*** 3 : { ;*** 4 : unsigned char count; ;*** 5 : unsigned char ret; ;*** 6 : ret = 0; .LINE "C:/test/char_test/src/char_test.c", 6 mov [sp+0x00], #0x00.BB@LABEL@1_1: ; entry.split ;*** 7 : for(count = 0; count < 1000; count++){ .LINE "C:/test/char_test/src/char_test.c", 7 mov [sp+0x01], #0x00 br $.BB@LABEL@1_3.BB@LABEL@1_2: ; bb ;*** 8 : ret++; .LINE "C:/test/char_test/src/char_test.c", 8 mov a, [sp+0x00] inc a mov [sp+0x00], a mov a, [sp+0x01] inc a mov [sp+0x01], a.BB@LABEL@1_3: ; bb6 .LINE "C:/test/char_test/src/char_test.c", 7 br $.BB@LABEL@1_2 ;*** 9 : } ;*** 10 : ret = 10; ;*** 11 : }
よろしくお願いいたします。
> 変数サイズミスで終わらないforループをワーニングにする方法 ・gcc(https://gcc-renesas.com/ja/rl78/rl78-download-toolchains/)でコンパイルしてみる ・CC-RL 改善のリクエストをルネサスに執拗に送る ・ループの書き方を変更する for(count = 1000; count > 0; count--){ ぱっと思いつくのはこの辺りですね。
ega258さんほや です。こんにちは。
e² studioのプロジェクトインポート機能にCC-RLからGCCプロジェクトへの変換(コンバータ)はないので、GCCのプロジェクトを新規で作成するしかありません。CC-RLのプロジェクトとしてインポートしたものを「Tool chainエディター」でtoolchainだけGCCに変更しようとしてもまずうまく行かないので御注意。
文法チェックだけが目的ならリンクまで通す必要はないので難しくないと思います。
> 大きな修正後にソースコード一式をコピペで置き換えて、ビルドしています。
e² studio上でソースファイルを別のプロジェクトにドラッグ&ドロップし、その際に「コピー」でなく「リンク」を選ぶと、ソースファイルを毎回コピーし直さずに済みます。