コア間通信の動作確認

前回はコア間通信を行うためのサンプルプログラムを用意して、メインコアとサブコアの両方でビルドを行うところまでやりました。今回は、それらを動かして実際にコア間通信を確認します。

例によってサブコア側にプログラムをダウンロードするために、コンピューテックスのPALMiCE4を使用します。

CSIDEを起動する

CSIDEの詳しい説明は第4回の記事をご覧いただくとして、手順をざっと追っていきます。

RZ/G2LボードとPALMiCE4が接続できればデバッガソフトCSIDEを起動します。[設定]メニューの[ターゲットシステムの設定]で、[Renesas]、 [RZ/G2L]を選択し、[起動する]ボタンを押します。

Workbench

[更新]ボタンを押します。

Workbench

起動後は以下のメニューからCortex-M33にアタッチします。

Workbench

画面下のバーの3つ目をクリックしてCore2をデバッグ対象に切り替えます。

Workbench

プログラムのダウンロード

Cortex-M33にプログラムをダウンロードします。ファイルロードのボタンを押してDebugのフォルダに移動し、「rzg2l_cm33_rpmsg_demo.elf」を選択します。

Workbench

[プロジェクトから起動したときにロードする]のチェックを外してから、[詳細設定]ボタンを押してデバッグ情報の管理をCore2のみにチェックします。

Workbench

OKボタンを押せば設定完了です。ダウンロードボタンを押してファイルをダウンロードします。

Workbench

ロード完了後、コードとレジスタとコマンドウィンドウを開いた状態です。

Workbench

コマンドウィンドウに以下のコマンドを入力し、ベクタアドレスを設定します。

@SetSYS_CM33_CFG __Secure_Vectors,__Vectors

プログラムの実行確認

とりあえず、main関数まで実行できることを確認します。Ctrl+uを押して、「main」と入力すればmain関数まで実行して停止します。

Workbench

mainまで動くことが確認できましたので、実行ボタンを押してフリーラン状態にします。

次にターミナルを起動してLinux側を確認します。Cortex-A55もフリーラン状態ですので、正しく動作していればログイン状態で待っているはずです。

Workbench

rootでログインして以下のコマンドを実行します。

$ rpmsg_endpoint_cb 0

このコマンドはコア間通信のサンプルプログラムで、前回のビルドで/ust/binに追加されています。うまく動けば以下のように表示されます。

Workbench

いろいろと初期化された後、怒涛の通信が始まります。といっても488回で終わります。

Workbench

これでCortex-A55とCortex-M33でのコア間通信が確認できました。

受信関数の確認

これだけではつまらないので、Cortex-M33側の受信関数で止めて中身を少しのぞいてみましょう。受信関数はrpmsg_endpoint_cb0という名前の関数です。これはrpmsg_demo.cのapp関数でコールバック関数として登録されます。

Workbench

この関数にブレークポイントを設定して、もう一度コンソールからコマンドを実行してみますと、

ご覧のように止まりました。

Workbench

データの長さlenを見ると17バイトですね。dataもメモリウィンドウで表示してみました(が、よくわからない・・・)。

まあ、とにかく受信時にコールバック関数が呼ばれて、データを確認できるというのが分かりました。このプログラムを応用して、マルチコアのシステムが作れそうな気がしてきました(作らないけど)。