チョコです。
一月程度,忙しい日が続いたのも何とか終わったので,RL78のサンプルプログラム等を再開しようと思います。
その第1弾として,ソフトウェアによるI2Cバスのスレーブ機能を考えています。
10pinのRL78/G10にはIICA0が搭載されていないので,I2Cバスのスレーブとして使用できませんでした。
そこで,R5F10Y16(ROM:2KB,RAM:256B)でどこまでできるかにチャレンジしてみることにします。
(R5F10Y17(ROM:4KB,RAM:512B)の方が楽なのですが,入手性の問題から秋月で入手できるR5F10Y16を
ターゲットにしてみました。)
さすがに,400kbpsのファースト・モードには対応できないので,100kbpsの標準モードをターゲットにします。
まずは,ターゲット仕様を決めます。
メモリが少ないので,どこまで実現できるか楽しみです。
RL78でのソフトウェアによるI2Cバスのスレーブ機能の実現.pdf
> 実際には最初の200バイト程度は使えない cstart.asm を小変更すると CALLT テーブル領域にスタートアップのコードの大半を収めることができ、使われない領域を減らせます。japan.renesasrulz.com/.../22161 に添付のファイルでそれを行っているので宜しかったら見てみて下さい。
> 本当は,ベクタ領域の未使用分も使おうとしました。 『RL78/G10 ユーザーズマニュアル ハードウェア編』によると RL78/G10 のベクタ・テーブル領域は 10ピンの製品は 0001AH~0007DH の 100バイト、16ピンの製品では 0002AH~0007DH の 84バイトの連続した領域が何の用途も割り当てられてないですね。これを使わないのは勿体ない!
チョコさん、こんにちは。NoMaYです。確認したのがCC-RL V1.02なのでV1.04では挙動が異なるかも知れませんが、ソースコード上でベクタを全く生成しないようにした上で、以下のような設定をすれば、一応ベクタ領域にもコードをおくことが出来ました。(マップファイルの抜粋を添付します。) ですので、CA78K0Rを引っ張り出さなくても済むと思います。(なお、ベースにしたプロジェクトは以前のApplilet EZ PLのスレッドに添付したものです。また、CC-RL V1.02で試しているのは当方特有の事情です。すみません。)・cstart.asmで以下の行をコメントアウトする _start .VECTOR 0 CALL !!_hdwinit (もしくは藤田さんソースのCALL !_hdwinit) CALL !_main ; main();・CS+にて[セクションの開始アドレス]を以下のようにする .text/0001A,.textf,.SLIB,.RLIB/000CE・CS+にて[その他の追加オプション]を以下のようにする -change_message=warning=2320
*** Options ***-subcommand=DefaultBuild\EZPLforRL78v2andCCRLv102.clnk-Input=DefaultBuild\cstart.obj-Input=DefaultBuild\opt_byte.obj-SECURITY_ID=00000000000000000000-DEVICE=E:\tools\micom\Renesas\CS+\CC\Device\RL78\Devicefile\DR5F10Y47.DVF-DEBug-NOCOmpress-OUtput=DefaultBuild\EZPLforRL78v2andCCRLv102.abs-LIBrary=E:\tools\micom\Renesas\CS+\CC\CC-RL\V1.02.00\lib\rl78nm4s.lib-LIBrary=E:\tools\micom\Renesas\CS+\CC\CC-RL\V1.02.00\lib\rl78nm4r.lib-ENTry=_start-LISt=DefaultBuild\EZPLforRL78v2andCCRLv102.map-SHow=ALL-AUTO_SECTION_LAYOUT-STARt=.text/0001A,.textf,.SLIB,.RLIB/000CE-FSymbol=.text-ROm=.data=.dataR-ROm=.sdata=.sdataR-NOMessage-NOLOgo-change_message=warning=2320-end*** Error information ***W0562320:Section address overflowed out of range : ".text"*** Mapping List ***SECTION START END SIZE ALIGN.const 00000002 00000002 0 2.constf 00000002 00000002 0 2.data 00000002 00000002 0 2.sdata 00000002 00000002 0 2.text 0000001a 00000055 3c 1.option_byte 000000c0 000000c3 4 1.security_id 000000c4 000000cd a 1.textf 000000ce 000000ce 0 1.SLIB 000000ce 000000ce 0 1.RLIB 000000ce 000000ce 0 1.bss 000ffce0 000ffce0 0 2.dataR 000ffce0 000ffce0 0 2.sbss 000ffe20 000ffe20 0 2.sdataR 000ffe20 000ffe20 0 2
あと、例示するプロジェクトを用意する手間を横着しようとして、こちらのプロジェクト上で設定してしまったのですが、本来の相手側のプロジェクトで以下のように設定すれば、相手側のプロジェクトで例えば以下のような外部シンボル定義ファイル(*.fsy)を生成させることが出来ますので、それをこちら側のプロジェクトに追加すると、プロジェクト間でサブルーチンコールしたりすることが簡単になります。(もし、ご存知でしたら、すみません、、、)・CS+にて[外部定義シンボルをファイル出力するセクション]に以下を追加する .text
;RENESAS OPTIMIZING LINKER GENERATED FILE 2017.05.28;fsymbol = .text;SECTION NAME = .text .public _start_start .equ 0x0000001a .public _exit_exit .equ 0x00000054
[画面コピー][追記] 2017/05/28 14:42そういえば、先日チョコさんはコード生成では初期化関数のみ生成させることを好まれているようなことを仰っていましたので、たとえ幾らかはコード生成を使っていたとしても、たぶん、今回のチョコさんのソース全体に渡ってベクタを生成させないように記述するのは容易な気がします。その上で、そのプロジェクトから外部シンボル定義ファイル(*.fsy)を生成させ、もう1つプロジェクトを用意し、そちらではその外部シンボル定義ファイル(*.fsy)を利用してベクタ部分だけ記述するようにし、それらからの2つのMOTをCS+のPythonスクリプト等を[ビルド後に実行するコマンド]の設定で実行させて結合するというのは、どうでしょうか。(あくまで苦肉の策ですが。)
チョコさん、こんにちは。NoMaYです。チョコさんがコードシュリンク前のR5F10Y47でのソースを公開された時に、こちらで確認するのが効率が良さそうだと思っていて、その時には試してみるつもりなのですが、でも、ひとまず忘れない為のメモ代わりの投稿、ということにして書いておくことにしました。エラー番号としては、以下の2つの番号が考えられます。E0562321:Section ".text" overlaps section ".vect"E0562320:Section address overflowed out of range : ".text"上の1つ目のものであれば、どこか別のところに残っているのだろうと考えられるのですが、2つめのものであれば、チョコさんがイメージしておられるであろう原因/理由とは別ものだと思われます。先程の策でも実は2つ目のものがエラーとして残っていたのです。(原因/理由は腑に落ちませんが。) それをリンクオプションに -change_message=warning=2320 を指定することで強制的にエラーをワーニング扱いに変更させて、何とかABS/MOTの生成に漕ぎ着けたというカラクリなのです。なお、エラーの種類によってはABS/MOTの生成に漕ぎ着けられず駄目なこともあるのですが、このエラーに関しては何とかなりました。(ただ、CC-RL V1.04ではV1.02と挙動が異なっているという可能性は有り得ます。)駄目だったエラーは、上の1つ目のものでした。一応、-change_message=warning=2321 を指定するとワーニング扱いになって状況は変わるのですが、今度は別のエラーが発生してしまい、それをワーニング扱いにすると更に別のエラー発生するという状況で、それら全てを -change_message=warning=2321,2320,2022 でワーニング化しようとしても、最後のエラーがワーニング化されずに以下のように表示され、ABS/MOTの生成に漕ぎ着けられませんでした。(この最後のエラーに関しても腑に落ちませんが。)W0562321:Section ".text" overlaps section ".vect"W0562320:Section address overflowed out of range : ".text"E0562022:Address ranges overlap in option "output" : "0x1a-0x5d"