e2studioでリアルタイムデバック

便利な機能を一度使ってしまうと、その環境に慣れてしまい機能がないことに苦痛を感じてしまいます。(スマホもね)

e2studioはeclipse系の統合環境でモニタをしたい変数を右クリックして監視式を追加とすると、その変数の数値を見ることが出来ます。昔はこの数値はCPUを動作させながら見るのは難しかったのですが、最近の開発環境は見れるものがあります。そしてe2studioにもリアルタイム・リフレッシュという機能があってデバック中に変数が変わると数百ms位で更新されました。これならデバックが楽ちんと.

しかし、この機能は一度、CPUの動作を停止させ、その間にデータを読み出すものでした。なのでモータなどを回転させ名が読み込むと、モータがガクガクしてしまいます。モータを高速でなんてとても回せない。

同じe2studioを使って同じようにリアルタイムリフレッシュをRxで行うと、CPUは停止せず、リアルタイムデバックが行えるので、大分困った現象でした。

色々なデバッカを試しましたが結局は

Rz/T1にはR4のメインプロセッサ+CM3のコプロセッサがのっていて、共有メモリ用域の0x2000 0000があり、そこにセクションを切ってR4で見たい構造体を放り込んでおいて、CM3側で見るとR4側は、常に動いているので、状況を確認しながらモータを回すことが出来るようになりました。

セクションの切り方は

linker_script.ldの

MEMORY{}内に以下を追加

DATA_RAM_MIRROR : ORIGIN = 0x22000000, LENGTH = 524288

SECTIONS{}内に以下を追加

.text.AHP (NOLOAD) :
{
*(AHP_data);
} >DATA_RAM
.const.AHP (NOLOAD) :
{
*(AHP_data);
} >DATA_RAM
.bss.AHP (NOLOAD) :
{
*(AHP_data);
} >DATA_RAM
.data.AHP (NOLOAD) :
{
*(AHP_data);
} >DATA_RAM

あとはソースコード上で

int A __attribute__ ((section (“SDRAM_data”)));

とし、R4とCM3両方に同じ記述をすれば、CM3から見ることが出来ます。CM3側が止まってしまってもR4側は止まらないのでスムーズにデバックが出来ました。(共有メモリとして使いたい場合は、共有メモリとしての設定をしなくてはいけませんが、デバック用であれば大丈夫そうです。

問題は、この0x2000 0000はR4から見ると、バスアクセスが遅いので注意が必要です。

最新情報をチェックしよう!