MQX RTOS Task Aware Debugging plug-in(TAD)は、マルチタスク・アプリケーションのデバッグを容易にするデバッガ・ツールのオプションの拡張機能です。TADを使用すると、タスクコンテキストとカーネルオブジェクトを検査できます。一般的な使用例は次のとおりです
--タスクエラーコードを表示する
- 各タスクのスタック使用量を調べる
--メモリ使用量の調査
-- TCP受信問題のデバッグ
--ソケットとPCBのデータを調べる
--メモリプール/メッセージプールの使用率レベルを観察
-- 同期オブジェクトの観察
以下は、MQX タスク対応デバッガーの説明と、スタック・オーバーフローをデバッグする例です。これはweb_hvac MQXインストールフォルダ内のデモに基づいており、他のアプリケーションにも適用されます。
MQXプルダウンメニューは、下の写真の通りです。
タスクの概要ウィンドウには、システム内のすべてのタスク、タスク名、タスクID、タスクの状態、優先度、およびタスクエラーコードが表示されます。アイドル・タスクは、MQXによって引き続きタスクとして扱われ、何が起こっているかを知るのに役立つため、リストされます。
スタック使用量ウィンドウには、タスク割り込みに割り当てられたその割合がこれまでに使用された割合が表示されます。これは高ウォーターマークであり、現在使用されているスタックの量ではありません。割り当てられたスタックを超えるスタックがポイントとして使用されている場合は、最後の列にオーバーフローが示されていることがわかります。また、参考までに、上りと下りの両方のベースのアドレスが示されています。
カーネルデータウィンドウは、実行している環境が実際にロードされたものであることを確認するのに役立ちます。実行中のMQXのバージョン、CPU、PSPなどの重要なデータを提供します。時間コンポーネントの設定と、カーネル ログやスタック モニターなどがオンになっているかどうかを確認するためのコンパイル時構成設定の数。
メモリ ブロック ウィンドウには、メモリ マネージャーがカーネル オブジェクトまたはアプリケーション タスク用に現在予約しているメモリのすべてのブロックが表示されます。リストされているのは、各ブロックの開始アドレス、各ブロックのサイズを16進数で示し、各ブロックの所有者です。これは、システムまたは特定のタスクのいずれかであり、ブロックのタイプを示します。割り込みスタックのブロック、システムスタック、タスク準備完了キュー、割り込みに関連付けられたブロックなど、さまざまなタイプが見られます。ロギング機能、メッセージプールなど一番下には、タスク記述子とタスクスペースを含むスタック固有のメモリブロックが表示されます。TAD はタスク記述子が何であるかを知っているため、タスクに関連するすべての情報を提供します。
次のウィンドウのグループは、MQX がサポートするさまざまな同期に関連しています。セマフォやイベント、ミューテックスなど。一部がグレー表示されている場合は、アプリケーションがそれを使用していないためです。
TAD を使用したデバッグの例
タスク認識デバッグ (TAD) 機能の使用経験を積み、それをアプリケーションのデバッグに使用する方法を学ぶために、web_hvacデモでは、タスク スタック サイズを 2400 から 500 に減らすことで、シェル タスクにスタック オーバーフローを作成しました。
ここでアプリケーションを実行すると、アプリケーションがアイドルタスクにすばやく実行されることがわかります。
スタック使用量ウィンドウを開くと、実際にオーバーフローが検出されたことがわかります。
また、その結果、シェルタスクのスタック情報が破損していること。タスクの概要ウィンドウには、シェルタスクの破損した情報も表示されます。
よく見ると、リストされているタスクは以前よりも短く、タスクのリストを比較すると、そこに何があると思っていたかがわかります。シェルタスクが完了して消えていることに気づきました。しかし、コンソールを見ると、それがはっきりと始まっていることがわかります。
では、それはどこに行ったのでしょうか?スタックオーバーランは良い手がかりです。ただし、スキャンチェックでエラーウィンドウを確認することもお勧めします。
タスクの概要、スタックの使用状況、およびエラーウィンドウを確認し、期待する状態の値を再度サニティチェックを行うことで、すべてのタスクがそこにあることを確認します。エラーコードを確認し、スタックの問題を探します。アプリケーションをデバッグするには、次の手順に従う必要があります。
- 実行中のタスク。
- タスクの状態
- 特定されたエラーの確認
- スタックオーバーフローを探します
どなたか助けていただけますか、このプラグインをIAR workbench 6.5および7.5に統合する方法。私はこの活動のためのいくつかの簡単なドキュメント/方法を探していました
OK、明日確認します、お知らせありがとうございます。
よろしくお願いします。
Daniel
Hi Daniel,
次のものを見ていただけますか。
https://community.nxp.com/thread/461422
あなたがそれを見つけることを期待して、そのスレッドを開きました。
ありがとうございます
ニール
はい、私はあなたが素のメンタルを使用していることを覚えています、OSはありません。これらのAPIは、素朴なメンタルではなく、マルチタスク環境用だと思います。なぜなら、ベアメンタルには一つのタスクしかないからです。
Hi Daniel,
これは、Freescale->KSDK_1.3.0->examples->frdmk64f->demo_apps->usb->host->msd->msd_fatfsの例からのものです
私はあなたがそれに精通していると思います、私は彼らがこの例でFreeRTOS、MQX、または他のものを使用しているかどうかわかりませんか?
ありがとうございます。
Hi Neil:
どのRTOSを使用していますか?FreeRTOS、MQX、それともその他?
よろしくお願いします。
Daniel
Hi Daniel,
OS_Task_createを使用すると、task_idが返されますか?
次の機能にはタスク ID が必要です。
uint32_t OS_Task_delete(uint32_t task_id);
uint32_t OS_Task_suspend(uint32_t task_id);
uint32_t OS_Task_resume(uint32_t task_id);
作成したタスクを一時停止してから再開したいのですが、わかりません
task_idの入手方法は?
ありがとうございます
ニール