RL78/G13 CS+CA,CX V3.02.00を使っています。
mainプログラム上で、printf分により出力した結果は、どこにどのように表示されるのでしょうか?
Pythonプラグインなども追加したり、FAQなども見たのですが、理解できませんでした。
よろしくお願いします。
liuさん、こんにちは。CA78K0Rではputchar()のソースはCS+\CACX\CA78K0R\V1.72\Src\cc78k0r\src\putchar.asmにあったのですが、CC-RLでは無くなっていますね。なお、出力先を変更するには、これをCC-RL対応に変更した上で且つ(←大変ごめんなさい、私はliuさんの質問で勘違いしていましたね)変更して出力先を変更するか、出力先を変更したものを最初からC言語で書いてしまうか、といったことをする必要がありそうです。また、CA78K0Rではgetchar.asmやシミュレータ用の_putchar.asmも用意されていました。(ちなみに、別スレッドの話になりますがRENESAS ELECTRONICS CONFIDENTIALとなっています、、、) 私は、これとチョコ様のコード生成のサンプルプログラムのUART関数を組み合わせられないか試してみたくなっています。チョコ様が幾つかサンプルを公開されていますので、どれと組み合わせるのが良いかは要検討ですが、、、
fujita nozomu様wrote: said:CS+ のヘルプの printf() 関数と putchar() 関数の項目は参照されてますか? [引用終]
標準の putchar() はデバガで逆アセンブル表示すると
_putchar: 60 MOV A,X 9d00 MOV P0,A 72 MOV C,A f3 CLRB B d7 RET
という内容なので、78K0R 用として CA78K0R に収録されてる putchar.asm と同じ内容ですね。
デバッグ・コンソールの使い方について、RX の情報はすぐ見つかるのですが RL78 用のそれは見当たらないので機能としては提供されていないのだと思います。UART を使うなり Printf イベントを併用するなりの工夫が必要でしょう。
putchar() を下記の実装とし、
int putchar(int c) { static char _[100]; static size_t i = 0; if (c == '\n' || ((_[i++] = (char)c), i >= sizeof(_) - 2)) { memset(&_[i], 0, sizeof(_) - i); i = 0; } return c; }
i =0; の行に Printf イベントを設定し _[] の内容を出力するようすると一応は printf() で出力もできますが、Printf イベントを含むイベントはステップ実行中は機能しないなどわけのわからん仕様となっていて使い辛いです。ハードウェア機能に余裕があれば UART で出力するのが良いと思います。