LPC55S69のハードフォールトハンドラ こんにちはチーム、 これは、LPC55S69のハードフォールトの問題に関するものです。 私はC ++プロジェクトを作成し、プロジェクトの変更を実装しました。その一環として、C++ STLライブラリの機能を利用しています。 以下はコードスニペットです。 I have an enum defined with few CMD codes,
typedef enum
{
CMD_INVALID = 0x9999,
CMD_0 = 0x0000,
CMD_1 = 0x0001,
CMD_2 = 0x0002,
CMD_3 = 0x0003,
CMD_4 = 0x0004,
CMD_5 = 0x0005,
CMD_6 = 0x0006,
CMD_7 = 0x0007,
CMD_8 = 0x0008,
CMD_9 = 0x0009,
}CMD_CODES;
I have initialized the map container
std::map<:string> Protocol::commands_map;
In an initialization routine, inserting the elements
commands_map.emplace( std::string( "CMD1" ), CMD_1);
commands_map.emplace( std::string( "CMD2" ), CMD_2 );
commands_map.emplace( std::string( "CMD3" ), CMD_3 );
commands_map.emplace( std::string( "CMD4" ), CMD_4 );
commands_map.emplace( std::string( "CMD5" ), CMD_5 );
commands_map.emplace( std::string( "CMD6" ), CMD_6 );
commands_map.emplace( std::string( "CMD7" ), CMD_7 );
commands_map.emplace( std::string( "CMD8" ), CMD_8 );
commands_map.emplace( std::string( "CMD9" ), CMD_9 ); この初期化後、他のタスクを実行します。 しかし、要素の挿入中に初期化ルーチンでハードフォールトエラーが発生しています。私はここで何が起こっているのか疑問に思っています。 誰かが私に知らせてもらえますか、問題は何ですか? よろしくお願いします。 San Re:LPC55S69のハードフォールトハンドラ 説明をありがとう@ErichStyger、@Harry_Zhang、それは非常に役に立ちます。 Re:LPC55S69のハードフォールトハンドラ さらに、FreeRTOS の各タスクのスタックサイズは、xTaskCreate() API コールのパラメータとして割り当てられます。 Re:LPC55S69のハードフォールトハンドラ Hi @sushmasan , ヒープとスタック(MSP)の両方のサイズは、MCUXpresso IDEのリンカ設定で簡単に変更できます(リンカファイルの変更は必要ありません)。MPSスタックがマークされた設定は次のとおりです。 PSP(プロセススタックポインタ)については、これはスレッドのスタックに使用されます。設定は、使用するRTOSによって異なります。たとえば、FreeRTOSの場合は、次のように定義する設定です。 #define configTOTAL_HEAP_SIZE (32*1024) お役に立てば幸いです。 Erich Re:LPC55S69のハードフォールトハンドラ Hi @sushmasan
MCUXpresso プロジェクトでメイン スタック ポインター (MSP) とプロセス スタック ポインター (PSP) のスタック サイズを増やすには、通常、プロジェクトのリンカー スクリプトまたは関連する構成設定を変更する必要があります。これを行う方法は次のとおりです。
1. ヒープ サイズの定義を確認する ヒープ・サイズも変更する必要がある場合は、ヒープの同様の定義を探します。 __HeapBase = ____; __HeapLimit = __StackLimit; The heap size is usually defined by the difference between __HeapBase と __HeapLimit になります。必要に応じて、これらの定義を適宜調整します。 2. MSPおよびPSPスタックサイズの調整 MSPはデフォルトで使用され、通常はRAMの上部から割り当てられます。FreeRTOS などのリアルタイムオペレーティングシステム (RTOS) を使用している場合、PSP はタスクに使用され、そのサイズは RTOS 設定によって管理されます。ベアメタル アプリケーションの場合、通常はリンカ スクリプトの MSP 調整で十分です。
RTOS ベースのアプリケーションの場合: • MSP スタック サイズ: リンカ スクリプトによって制御されます (上記のとおり)。 • PSP スタックサイズ: RTOS 設定 (多くの場合、FreeRTOSConfig.h で定義) によって調整されます。または同様の設定ファイル。
BR
掛ける Re:LPC55S69のハードフォールトハンドラ コードのデバッグ中に気付いたのは、ヒープサイズが100%に非常に近い増加していることで、これはハードフォールトがトリガーされるときです。割り当てられたスタックとヒープサイズを確認したとき、それは4KBであり、それが失敗の原因でした。ヒープサイズを 8KB に構成した後、コードは問題なく動作しました。使用したヒープサイズは約6.2KBでした。 あなたが言ったように、MSP、PSPスタックのためにもっとスペースを試してみてください。どうすればいいですか? Re:LPC55S69のハードフォールトハンドラ 私にはスタックオーバーフローの可能性があります。MSPおよびPSPスタック用により多くのスペースを予約してみてください。 それ以外:これは私が使用しているハードフォールトハンドラです: https://github.com/ErichStyger/McuOnEclipseLibrary/blob/master/lib/src/McuHardFault.c お役に立てば幸いです。 Erich
記事全体を表示