アプリケーションがスタンドアロンで動作しない時の対処
テクニカル・ノート 21904
アーキテクチャ:
ARM
コンポーネント:
debugger
更新日:
2020/02/15 16:23
はじめに
アプリケーションが動作しない理由はさまざまです。このテクニカル ノートは以下の状況について説明します。
状況:
- アプリケーションが C-SPYデバッガ を使用し、デバッガ・プローブと接続している場合のみ動作します。
- アプリケーションがスタンドアロンモード(すなわち、ボードとの接続を切り離し、電源を入れ直した後)では動作しません。
背景
スタンドア ローンで実行する場合と、C-SPY デバッガを使用してアプリケーションを実行する場合は大きな違いがあります。
C-SPYデバッガを使用してアプリケーションをデバッグする場合、いくつかのSFRが以下によって設定されます:
- フラッシュローダのソースコード
- フラッシュローダが使用する mac ファイル
- アプリケーションが使用する macファイル.
アプリケーションがスタンドアロンで実行されるとき、これらの SFR はアプリケーションのスタートアップ/初期化コードで設定する必要があります。
アプリケーションがスタンドアロンモードで動作しない理由の他の可能な説明があります。以下のソリューションを参照してください。
提案
- フラッシュローダが使用されているかどうか確認してください (Options -> Debugger -> Download)。フラッシュローダを設定している場合は、おそらく、フラッシュローダマクロファイルが使われていることを意味します。マクロファイル "
.mac
"を参照している".board
" と ".flash
" ファイルを確認してください。マクロファイルを開いて、何をしているか確認してください。アプリケーションのスタートアップ コードで実行する必要があるか検討します。フラッシュのローダーを無効化すると、原因がわかるかも知れません。 - アプリケーションが Setup マクロファイルを使用しているかどうか確認してください (Options -> Debugger -> Setup). マクロファイルを開いて、何をしているか確認してください。アプリケーションのスタートアップ コードで実行する必要があるか検討します。Setup マクロ を無効化すると、原因がわかるかも知れません。
- アプリケーションコードで
printf()
を使用すると、デバッガが接続されていない場合、プロジェクト設定によっては、永遠にアプリケーションハングすることがあります。printf()
の使用をチェックする方法は、Options -> General Options -> Library Configuration -> 'Library low-level interface' を 'None'に設定する。
ARM Cortexでは、printf()
の呼び出しを継続することができます。その場合、Options -> General Options -> Library Configuration -> stdout/stderr が 'Via SWO'となっていることを確認してください。 - Options -> General Options -> Library Configuration -> stdout/stderr -> 'Via Semihosting'を無効にしないと、アプリケーションがBKPT命令で停止する原因となる可能性があります。これらの
BKPT
は、セミホスティングのためのSWI 割り込みを送信するときにセミホスティング システムによって使用されます。 (Options -> General Options -> Library Configuration -> 'Library low-level interface' を 'None'に設定してください。) - ターゲットデバイス上の特定のハードウェアは、初期化に時間がかかることがあります(PLLなど)。 アプリケーションがこれらの種類の初期化待たないと、問題が発生する可能性があります。デバッガーで実行する時、多くの場合アプリケーションは
main()
で停止します。これは初期化に時間を与えることになりますが、スタンドアロンでデバイスを実行する時は、このような余分な遅延はありません。これを調べるには、main()
の最初に長時間の遅延ループを追加します。もし、これで動作が正常になる場合、デバイスの初期化を待機するコードを追加する必要性があることを意味しています。
全ての製品名は、それぞれの所有者の商標または登録商標です