7.7 スキャッタファイルを使用したスタックとヒープの指定

ARM C ライブラリには、関数 __user_setup_stackheap() の複数の実装があり、スキャッタファイルの情報に基づいて適切な実装が自動的に選択されます。

2 つの領域によるメモリモデルを選択するには、スキャッタファイルに ARM_LIB_HEAP および ARM_LIB_STACK という名前の 2 つの特殊な実行領域を定義します。これらの領域には EMPTY 属性があります。そのため、ライブラリでは、以下のシンボルの値を使用する、__user_setup_stackheap() のデフォルトではない実装が選択されます。

ARM_LIB_STACK 領域と ARM_LIB_HEAP 領域のどちらか 1 つを指定できます。その際、サイズを割り当てる必要があります。以下に例を示します。

LOAD_FLASH … {
    …     ARM_LIB_STACK 0x40000 EMPTY -0x20000  ; スタック領域は下方向に拡大する     { }     ARM_LIB_HEAP 0x28000000 EMPTY 0x80000 ; ヒープ領域は上方向に拡大する     { }
    … }

EMPTY 属性が定義された ARM_LIB_STACKHEAP という単一の実行領域を定義することにより、スタックとヒープの結合領域を使用できます。その結果、 __user_setup_stackheap() では、シンボル Image$$ARM_LIB_STACKHEAP$$Base および Image$$ARM_LIB_STACKHEAP$$ZI$$Limit の値が使用されます。

__user_setup_stackheap() を再実装すると、すべてのライブラリ実装がオーバーライドされます。

関連する参考文書
6.3 領域関連シンボル
関連情報
スタックとヒープの配置
RVCT v2.2 と RVCT v3.0 の間での C および C++ ライブラリの変更点
__user_setup_stackheap()
古い関数 __user_initial_stackheap()
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.