ガレスタさんのDIY日記

電子回路、Web、組み込み、自作エフェクターを語るblog

i.MX RT1050のデバッグ速度が遅い問題について

こんばんわ最近進捗なくてすいません・・・・
一応開発は続けています。

というわけで今回はRT1050のデバッグが明らかに遅いと言う問題に遭遇したのでそれについて書いていきます。

まず前提条件について
このチップに関してはROMレスということもあり起動方法がいくつかあります。

  • XIP(eXecute-In-Place)で外部の何かしらから実行
  • デバッガからソフトリセットしてRAM実行(電源落とすと消える)

的な感じで大まかに2種類あります(ほんとはもっと多くの起動分岐があるが割愛)

XIPに関しては外部からフェッチしてるので少し遅いのはわかるんですがRAM直接の方もブレークに入るまでが明らかに遅いです。
というわけで今回はRAM実行の方を例としてやっていこうと思います。

Exampleをインポート。

f:id:gsmcustomeffects:20180105234606p:plain
import SDK exampleをクリックする。

次に検索欄でledと入力して出てくるサンプルを選ぶ
f:id:gsmcustomeffects:20180105234908p:plain

RAM実行なのでメモリコンフィグはそのまま
f:id:gsmcustomeffects:20180105235037p:plain

あとはそのままビルドする。

デバッグ

OpenSDAのファームウエアが古いとデバッグすらできないので古い方は
デバッグを行う前にアップデートをしてください
方法はこちら

適当にこの辺にブレーク立てて普通にデバッグして見ます。
f:id:gsmcustomeffects:20180106001035p:plain
デバッグをクリックして開始します。
実行アドレスを見ればわかる通りにRAM常にいるのですがブレークが帰ってくるのが圧倒的に遅いと思います。
f:id:gsmcustomeffects:20180106001305p:plain

そんなわけでそれをいくらかマシにするためにデバッグ設定をちょいといじります。
デバッグ設定画面を開いてください
f:id:gsmcustomeffects:20180106001425p:plain

ここでaddtional optionsというところがあると思います。

  • --no-packed --cachelib libm7_cache.so

となっている部分を

  • --no-packed

と修正します。

すると結構早くなります。(動画がなくてすいません・・・・・・・

このスクリプトデバッガがMCUとの一貫性を維持するために実行する保守的なキャッシュ処理に関連している。とのことでIDE開発チームのドキュメントによるとこれが滅多に発生しないので取り除いてもいいよとのことです。

この問題についてはキャッシュコヒーレンシとかググると出てきますので知りたい方は是非。

まとめ

  • デバッグのステップ実行が少し早くできた。
  • RAM実行で一応開発ができる段階まできた。

RAM実行に関しては起動時にプログラム展開とかする記述をしていないので電源を落とすと消えるので注意
まともな作品にするなら原始的なブートローダを仕込んで起動時に内部RAMに展開する操作が必要となる。
移動まではやり方に見当がついているのだが細かい問題いうか僕の勉強不足でわからないことがいくつかある。

  • MPUの設定
  • XIPで起動後プログラムカウンタをRAMにうつすのはどうすれば良いのか
  • _attribute__ ((section( .セクション名 )))みたいな書き方で関数単位では移動できるが全体的にRAM展開するとなるとどうなるのか?
  • リンカスクリプトの修正(> SRAM_ITC AT>Flash)みたいな書き方で修正はいるのか?

以上が現状解決できていない問題になります。
実際今の段階ではPCありきなので問題はないがいずれデモをするときにスタンドアロンで動かす必要があるので頑張って行きます。

参考文献

Overview of using the MIMXRT1050-EVK with MCUXpresso IDE v10.1(サポートフォーラムに行くとNXPの人があげている資料)

OpenSDAファームウエアアップデート

以下のサイトに飛ぶ

OpenSDA Serial and Debug Adapter|NXP

Hyperflashの方のバイナリをダウンロードする。

あとはmbedと同じ方法でリセットを押しながらUSBをつなぎアップデートする。