2353011_ja-JP

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

2353011_ja-JP

2353011_ja-JP

RTOSヒープメモリの空き領域がSRAM0からDTCMに変更されました。

こんにちは、

私はheap_1.cでFreeRTOSを使用しています。そして構成
configAPPLICATION_ALLOCATED_HEAP = 1 が有効になっています。

以下に示すように、main.cからDTCM RAMにFreeRTOSヒープを割り当てました。

uint8_t ucHeap[ configTOTAL_HEAP_SIZE ]
__attribute__ ((section(".my_heap")));

リンカースクリプトでは、ヒープセクションをDTCMメモリに以下のようにマッピングしました。
/* ヒープセクション */

 

/* データ密結合メモリ (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


.heap (NOLOAD) :
{
. = ALIGN(4);
_end = .;
end = .;
_heap_start = .;
. += HEAP_SIZE;
_heap_end = .;
} > dtcm

 

.my_heap (NOLOAD) :
{
*(.my_heap)
} > dtcm

.mapファイルは、ヒープメモリがDTCMに配置されていることを確認しています。
しかし、この変更後、 FreeRTOSは正しく動作しなくなりました

この設定内容を確認していただき、不足している点や間違っている点についてアドバイスをいただけますでしょうか?

Re: Free RTOS heap memory changed from SRAM0 to DTCM

こんにちは、 @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/Example-S32K312-HARDFAULT-Handling-Interrupt-DS3-5-...

https://community.nxp.com/t5/S32K-Knowledge-Base/How-To-Debug-A-Fault-Exception-On-ARM-Cortex-M-V7M-...

https://community.nxp.com/t5/S32K-Knowledge-Base/Fault-handling-on-S32K14x/ta-p/1114447


BR、ダニエル



Re: Free RTOS heap memory changed from SRAM0 to DTCM

こんにちは、 @Omkar9903 さん

「FreeRTOSが正しく動作していない」とはどういう意味でしょうか?もう少し詳しく説明していただけますか?
例えば、スケジューラが起動しない、タスクが実行されない、あるいはハードフォルトが発生しているといった状況でしょうか?
また、.my_heap がセクションはデフォルトの.heapと同じように配置されますセクション。

最後に、問題を正確に分析するために、以下の詳細情報をご提供ください。

  • MCUバリアント
  • RTDバージョン
  • FreeRTOS RTD拡張バージョン

BR、ダニエル


Re: Free RTOS heap memory changed from SRAM0 to DTCM

こんにちは、 @danielmartynek さん


私は、RTDバージョン5.0.0、RTOSバージョンFreeRTOS Kernel V10.5.0を搭載したs32k341マイクロコントローラを使用しています。

問題は、クロック初期化関数、つまり「Clock_Ip_SetWaitStates」からハードフォルトが発生していることです。


main.c では、ヒープ配列を次のように宣言しました。

UNSIGNED8 ucHeap[8712] __attribute__ ((section(".dtcm_bss")));
 

MAPファイルで、ucHeapがDTCMメモリに正しく割り当てられていることを確認しました。

レビューのためにリンカーファイルを添付します。
何か不足している点や設定ミスがあればお知らせください。

マップファイルのスナップショット:

main.c は sid.c に名前が変更されました。

Omkar9903_0-1776686466120.pngOmkar9903_0-1776686466120.png

ありがとうございます。

Tags (1)
No ratings
Version history
Last update:
‎04-28-2026 02:44 AM
Updated by: