Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

RL78のルネサスuITRON実装製品RI78V4のサンプルプログラムでグローバル変数/スタティック変数が使えるようにしてみた

こんにちは。NoMaYです。

別スレッドでRL78のルネサスさんのuITRON実装製品RI78V4のサンプルプログラムではグローバル変数やスタティック変数が使えないことを知ったのですが、ものは試しということで使えるように手を入れてみました。なお、サンプルプログラムはCS+に以下のプラグインをインストールした時に追加されたものを使用しました。(今回のツール環境はCS+ for CC V6.00.00(2017/10/05版)とCC-RL V1.02.00です。)

RL78ファミリ用リアルタイムOS RI78V4 V2 Trial版 Web公開のお知らせ
www.renesas.com/.../150601tn5_j.pdf

RL78ファミリ用 リアルタイムOS RI78V4 (CS+対応) Trial版 補足説明書
www.renesas.com/.../r20tu0049jj0100_ri78v4.pdf

【Trial版】RL78ファミリ用リアルタイムOS RI78V4 V2.00.00 (CS+対応) ダウンロード
www.renesas.com/.../D3016200.html

手を入れた箇所は以下の2点です。なお、サンプルプログラムに追加するファイルや上書きするファイルを以下のzipファイルに固めておきました。(すみません、勢いでCC-RLの標準(ただし使うかどうかユーザの判断しだい)のスタックエリアを0クリアする処理のソースstkinit.asmも入れてしまったのですが、サンプルプログラムのinitstack.asmで充分だったかも知れません。)

(1) CC-RLの標準のcstart.asmに以下の部分を組み込んでcstart_ri78v4.asmを作成
(2) それをRI78V4のサンプルプログラムに組み込んだ後にCC-RLのROM化機能を設定

Issue_20171005.zip

具体的には、(1)で組み込んだ部分は以下の通りです。(赤字の部分を追加しました。)

    ;--------------------------------------------------
    ; call main function
    ;--------------------------------------------------
;   CALL    !!_main     ; main();

    ;--------------------------------------------------
    ; call reset function
    ;--------------------------------------------------
    CALL    !!_reset

    ;-----------------------------------------------------------------------------
    ; initializing RI78V4 area(.kernel_data_init)
    ;-----------------------------------------------------------------------------
    MOVW    HL,#LOWW(STARTOF(.kernel_data_init))
    MOVW    AX,#LOWW(STARTOF(.kernel_data_init) + SIZEOF(.kernel_data_init))
    BR  $L2_KERNEL_DATA
L1_KERNEL_DATA:
    MOV [HL+0], #0
    INCW    HL
L2_KERNEL_DATA:
    CMPW    AX,HL
    BNZ $L1_KERNEL_DATA

    ;-----------------------------------------------------------------------------
    ; RI78V4 stack area initialization function
    ;  When the RAM parity error detection function is not used,
    ;  it is not necessary to call this function.
    ;-----------------------------------------------------------------------------
    CALL    !!__init_ri_stackarea

    ;-----------------------------------------------------------------------------
    ; RI78V4 initialization function
    ;-----------------------------------------------------------------------------
    BR  !!__kernel_start        ; kernel start

    ;--------------------------------------------------
    ; call exit function
    ;--------------------------------------------------
    CLRW    AX      ; exit(0)
_exit:
    BR  $_exit

また、(2)では[ROMからRAMにマップするセクション]として以下を設定しました。(プロジェクト生成時のデフォルトの設定に戻したことに相当します。)

.data=.dataR
.sdata=.sdataR


手を入れる前は、以下の通り、初期値なしでも初期値ありでも、グローバル変数やスタティック変数は使えませんでした。(すみません、スタティック変数で実際に試した訳ではありませんが。)

初期値あり変数を使おうとしてもリンクエラーになる


初期値なし変数を使おうとしても0クリアされない



手を入れた後は、以下の通り、初期値なしでも初期値ありでも、グローバル変数やスタティック変数を使うことが出来ます。(すみません、スタティック変数で実際に試した訳ではありませんが。)

初期値なし変数も初期値あり変数もリンクエラーにならない


初期値なし変数は0クリアされ、初期値あり変数は初期値になる



[関連リンク]

RL78ファミリ用リアルタイムOS [RI78V4] V2 ドキュメント一覧
www.renesas.com/.../ri78v4-v2-for-rl78-family.html#documents

[余談]

初めに書いたプラグインをCS+にインストールすると、CS+にRI78V4のサンプルプログラムが組み込まれるだけでなく、CS+で以下のRTOS向けデバッグ機能が使えるようにもなりましたので、暫く遊んでみることも出来そうです。



この後で試したいこと(興味が続かなくなったら終了):

・残っているリンク時の2つのワーニングを解消する
・デバイスを秋月電子さんのR5F100LGAFB変換モジュール搭載のものへ変更する
・フォルダ構成をコード生成機能のソース生成先フォルダが固定されているe2 studio (v6)に合わせる
・シミュレータでどこまで動くのか(どこから実デバイスが無いと試せなくなるか)調べる
printf/scanfと一緒に使うにはどうすれば良いか調べて試す
・コード生成機能と一緒に使うにはどうすれば良いか調べて試す
音声再生ミドルウェアと一緒に使うにはどうすれば良いか調べて試す

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page