RZ/G2Lでマルチコアを体験(6)2023/04/10
コア間通信の動作確認
前回はコア間通信を行うためのサンプルプログラムを用意して、メインコアとサブコアの両方でビルドを行うところまでやりました。今回は、それらを動かして実際にコア間通信を確認します。
例によってサブコア側にプログラムをダウンロードするために、コンピューテックスのPALMiCE4を使用します。
CSIDEを起動する
CSIDEの詳しい説明は第4回の記事をご覧いただくとして、手順をざっと追っていきます。
RZ/G2LボードとPALMiCE4が接続できればデバッガソフトCSIDEを起動します。[設定]メニューの[ターゲットシステムの設定]で、[Renesas]、 [RZ/G2L]を選択し、[起動する]ボタンを押します。
[更新]ボタンを押します。
起動後は以下のメニューからCortex-M33にアタッチします。
画面下のバーの3つ目をクリックしてCore2をデバッグ対象に切り替えます。
プログラムのダウンロード
Cortex-M33にプログラムをダウンロードします。ファイルロードのボタンを押してDebugのフォルダに移動し、「rzg2l_cm33_rpmsg_demo.elf」を選択します。
[プロジェクトから起動したときにロードする]のチェックを外してから、[詳細設定]ボタンを押してデバッグ情報の管理をCore2のみにチェックします。
OKボタンを押せば設定完了です。ダウンロードボタンを押してファイルをダウンロードします。
ロード完了後、コードとレジスタとコマンドウィンドウを開いた状態です。
コマンドウィンドウに以下のコマンドを入力し、ベクタアドレスを設定します。
@SetSYS_CM33_CFG __Secure_Vectors,__Vectors
プログラムの実行確認
とりあえず、main関数まで実行できることを確認します。Ctrl+uを押して、「main」と入力すればmain関数まで実行して停止します。
mainまで動くことが確認できましたので、実行ボタンを押してフリーラン状態にします。
次にターミナルを起動してLinux側を確認します。Cortex-A55もフリーラン状態ですので、正しく動作していればログイン状態で待っているはずです。
rootでログインして以下のコマンドを実行します。
$ rpmsg_endpoint_cb 0
このコマンドはコア間通信のサンプルプログラムで、前回のビルドで/ust/binに追加されています。うまく動けば以下のように表示されます。
いろいろと初期化された後、怒涛の通信が始まります。といっても488回で終わります。
これでCortex-A55とCortex-M33でのコア間通信が確認できました。
受信関数の確認
これだけではつまらないので、Cortex-M33側の受信関数で止めて中身を少しのぞいてみましょう。受信関数はrpmsg_endpoint_cb0という名前の関数です。これはrpmsg_demo.cのapp関数でコールバック関数として登録されます。
この関数にブレークポイントを設定して、もう一度コンソールからコマンドを実行してみますと、
ご覧のように止まりました。
データの長さlenを見ると17バイトですね。dataもメモリウィンドウで表示してみました(が、よくわからない・・・)。
まあ、とにかく受信時にコールバック関数が呼ばれて、データを確認できるというのが分かりました。このプログラムを応用して、マルチコアのシステムが作れそうな気がしてきました(作らないけど)。