mallocを使用する.(コンパイラがEWARMの場合)

弊社RTOS「μC3/Compact」、「μC3/Standard」に関するご質問
返信する
アバター
eForce技術担当
記事: 189
登録日時: 2014年4月24日(木) 14:18

mallocを使用する.(コンパイラがEWARMの場合)

投稿記事 by eForce技術担当 » 2015年9月25日(金) 19:07

mallocを使用する場合には、拡張子が.icfのファイルに下記の記述を追加して頂くことで、
RAM上にHEAPエリアが確保され、mallocで領域が取得され、freeで解放されるようになります。

****リンカ設定ファイルに追加****

コード: 全て選択

 
define block HEAP with size = 0x400, alignment = 8{ };
 place in RAM_region {block HEAP};
コンフィグレータが生成した****.icfファイルを使用される場合は、
上記の変更を実施した後にコード生成を実行すると、上書きされるので注意してください。
また、コンパイラが用意している malloc関数はリエントラント(再入可能)に作られていません。
μITRON OSでは、マルチタスクでアプリケーションを作成することを前提としているため、
複数のタスクから呼び出されると mallocの管理領域が破壊されてしまいます。
1つのタスクのみが使うのであれば、そのままで使用可能ですが、複数のタスクで使う場合には
排他制御(セマフォで管理するなど)が必要になります。

このような訳で、デフォルトでは mallocが使えないような設定として
います。(HEAPエリアを確保していません)
基本的には、μC3/Compact上でmalloc等を使用することは、推奨していません。
uITRONではmallocはなく、メモリを取得する場合、通常は固定長のメモリ
プールから取得・解放(get_mpf, rel_mpf)して頂くことを推奨いたします。

返信する