1941554_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1941554_ja-JP

1941554_ja-JP

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 );


この初期化後、他のタスクを実行します。

しかし、要素の挿入中に初期化ルーチンでハードフォールトエラーが発生しています。私はここで何が起こっているのか疑問に思っています。

sushmasan_0-1724791519409.png

誰かが私に知らせてもらえますか、問題は何ですか?


よろしくお願いします。

San

Re:LPC55S69のハードフォールトハンドラ

説明をありがとう@ErichStyger@Harry_Zhang、それは非常に役に立ちます。

Re:LPC55S69のハードフォールトハンドラ

さらに、FreeRTOS の各タスクのスタックサイズは、xTaskCreate() API コールのパラメータとして割り当てられます。

Re:LPC55S69のハードフォールトハンドラ

Hi @sushmasan ,

ヒープとスタック(MSP)の両方のサイズは、MCUXpresso IDEのリンカ設定で簡単に変更できます(リンカファイルの変更は必要ありません)。MPSスタックがマークされた設定は次のとおりです。

ErichStyger_0-1725017655568.png


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

Tags (1)
No ratings
Version history
Last update:
‎01-06-2026 01:14 AM
Updated by: