北欧の特定のembedded deviceで作業しています。データシートには、32ビットのCortex M0に16kBのRAMを持つ256kBのフラッシュが記載されています。これは、私の主な質問は、スタックRAMの物理的なRAMの制約を与えられたヒープサイズです。私は、RAM/ROM管理とその関連する使用法に関する文書hereを見つけましたが、スタックサイズの計算方法はまだ不明です。たとえば、 最大スタック/ヒープサイズを2048バイトに設定するアセンブリ構成(arm_startup.s)が見つかりました。 2048バイトを証明するために、スタックオーバーフローが表彰されている引き起こさ主、私は意図的に無効に設定* X =のmalloc(2064)において試験として仮想スタック/ヒープサイズはどのように計算されるのですか?
IF :DEF: __STACK_SIZE
Stack_Size EQU __STACK_SIZE
ELSE
Stack_Size EQU 2048
ENDIF
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
IF :DEF: __HEAP_SIZE
Heap_Size EQU __HEAP_SIZE
ELSE
Heap_Size EQU 2048
ENDIF
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
PRESERVE8
THUMB
。私の質問は、16kBのRAMしか持てない場合、2048バイトをスタックとヒープの両方にどのように割り当てることができるかということです。ちょっと調べてから、私はCortex M0のドキュメントに入りました。私はそのような制約を見つけることができませんでしたが、やはり私は間違った角度からこれを見ているかもしれません。上記のアセンブリスニペットを考えると、ハードウェアまたはソフトウェアのいずれかのように見えますが、スタック全体とヒープ用に2つに分割された合計仮想RAMサイズは4096です。
プログラミング言語CおよびC++への隠しリンクはどこにありますか? – IInspectable
Er、 "2048kB"は2097152 ... – Notlikethat
2048は2048バイトを意味しないと確信していますか? –