2016-08-25 2 views
-1

北欧の特定の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です。

+3

プログラミング言語CおよびC++への隠しリンクはどこにありますか? – IInspectable

+1

Er、 "2048kB"は2097152 ... – Notlikethat

+1

2048は2048バイトを意味しないと確信していますか? –

答えて

0

何らかのプログラミングクラスが進行しているのはなぜですか?同じ質問または関連する質問が突然現れたのはなぜですか?

もしあなたが16KBのRAMを持っていれば、すべての読み書き情報ははいに合っていなければなりませんか?これらの定義をしないと、そのコードは2Kのスタックと2Kのヒープを4K生成します。 4Kは16K未満であるため、.bssと.dataには12Kが残ります。

ヒープはマイクロコントローラでは意味がありません。通常は書かれたライブラリの一部としてmallocsを移植するかもしれませんが、ちょうどそれを偽造します(しかし、基本的にはどれくらいの量を使用してから、単純なmallocを実装するかを "割り当てる"しかし、より高いレベルのプラットフォーム用に書かれたコードを借用すること以外は、mallocを使用したくないということです。

"割り振る"スタックはそれほど意味がありません。どのように管理しているのでしょうか。コンパイラに依存しているため、コンパイラに必要なものを供給し、制限されたリソースから生成して消費する余分なコードを処理し、制限された帯域幅からタイムアウトする必要があります。代わりにあなたのシステムエンジニアリングを行い、それを実行する必要はありません。

cortex-mはこれと何の関係もなく、ハードウェアにはまったく関係しません。 2K + 2K < 16K。ちょうど学年の数学。

関連する問題