こんにちは、
私はheap_1.cでFreeRTOSを使用しています。そして構成
configAPPLICATION_ALLOCATED_HEAP = 1 が有効になっています。
以下に示すように、main.cからDTCM RAMにFreeRTOSヒープを割り当てました。
/* データ密結合メモリ (D-TCM) */
dtcm (rw) : ORIGIN = 0x20000000、 LENGTH = 0x1F000 /* 124KB データ RAM */
stack_dtcm (rw) : ORIGIN = 0x2001F000、 LENGTH = 0x1000 /* 4KB */
.bss_tcm_data (NOLOAD) :
{
. = ALIGN (4);
__dtcm_bss_start__ = .;
*(.dtcm_bss*)
. = ALIGN (4);
__dtcm_bss_end__ = .;
*(.my_heap)
} > dtcm
.mapファイルは、ヒープメモリがDTCMに配置されていることを確認しています。
しかし、この変更後、 FreeRTOSは正しく動作しなくなりました。
この設定内容を確認していただき、不足している点や間違っている点についてアドバイスをいただけますでしょうか?
こんにちは、 @Omkar9903 さん。
portMAcro.h ではportBYTE_ALIGNMENT はどのように定義されていますか?
https://forums.freertos.org/t/memory-alignment-in-heap-1-c-file/13355
ヒープはそのバイト数に合わせてアラインメントされている必要があります。
エラー例外については、さらに詳しい情報を調べてみてください。
https://community.nxp.com/t5/S32K-Knowledge-Base/Fault-handling-on-S32K14x/ta-p/1114447
BR、ダニエル
こんにちは、 @Omkar9903 さん。
「FreeRTOSが正しく動作していない」とはどういう意味でしょうか?もう少し詳しく説明していただけますか?
例えば、スケジューラが起動しない、タスクが実行されない、あるいはハードフォルトが発生しているといった状況でしょうか?
また、.my_heap がセクションはデフォルトの.heapと同じように配置されますセクション。
最後に、問題を正確に分析するために、以下の詳細情報をご提供ください。
BR、ダニエル
こんにちは、 @danielmartynek さん、
私は、RTDバージョン5.0.0、RTOSバージョンFreeRTOS Kernel V10.5.0を搭載したs32k341マイクロコントローラを使用しています。
問題は、クロック初期化関数、つまり「Clock_Ip_SetWaitStates」からハードフォルトが発生していることです。
main.c では、ヒープ配列を次のように宣言しました。
MAPファイルで、ucHeapがDTCMメモリに正しく割り当てられていることを確認しました。
レビューのためにリンカーファイルを添付します。
何か不足している点や設定ミスがあればお知らせください。
マップファイルのスナップショット:
main.c は sid.c に名前が変更されました。
ありがとうございます。