UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 12421

MicroBlaze - MicroBlaze でのメモリ管理方法および malloc/free のファンクションの使用

説明


概要 :

MicroBlaze でメモリはどのように管理されていますか。メモリ管理用に malloc/free のファンクションを使用すべきでしょうか。

ソリューション


現在 MicroBlaze にはハードウェアにメモリ管理ユニット (MMU) がなく、また基本ライブラリにもメモリ管理サポートはありません。これはハードウェア MMU がハードウェア リソースを非常に多く使用するからです。さらに、通常 lib.c にある高機能な malloc または free のファンクションは 15kB を超えます。



現在 malloc は既に正しく機能していて、メモリが使用可能な場合はメモリを割り当て、メモリがすべて使用されている場合は NULL を返します。free はシステム固有のもので、メモリに管理サブシステムに対し、メモリ セットがプログラムで使用されなくなったことを示すだけのファンクションです。free の実際の機能のインプリメントはシステムによります。



一般的にメモリ管理サブシステムはすぐにはメモリを解放しませんが、malloc で使用可能なメモリが定義されている下位値を下回ったことが示されたときに解放されたメモリのスイープだけを実行します。この後に初めてメモリ管理機能によって、free の呼び出しにより解放の対象になっていたメモリがすべて解放されます。コード サイズの理由で、現在 (a1.9)、free では何も実行されません。



どのシステムでも機能するコードを書くには、malloc が返す値が NULL より大きな値になるようにすることです。(下記の例を参照してください。)malloc を 1 度実行し、これが free と共に再帰実行されていないことを確認してください。再帰実行されていると DS-OCM がすぐに容量いっぱいに使用されてしまうからです。



このオプションが使用できるようにフル メモリ管理 (ライブラリおよびハードウェア MMU) を今後インプリメントする予定です。この機能は、LUT とコード サイズが大きくなる (ライブラリのファンクションが大きくなる) のでパフォーマンスに影響する点に留意してください。しかし、このオプションを使用すると、さまざまなロケーションで使用可能なメモリの解放や割り当てを行うコードをユーザーが書くことができるようになります。



当面は、malloc を 1 度実行して、この malloc が実行されたメモリを可能な限り何度も再利用するのがよいでしょう。また、malloc が正しく実行されたかどうかを常に確認するためのコードを書く必要もあります。



これは malloc が返す値をチェックするコード例です。



digit8 = (char*) malloc(9*sizeof(char));

n=i_;



if (digit8 != NULL) {



for(d=7 ; d>=1 ; d--){

r = n%10;

digit8[d]=(char)(48+r);

q = (int)(n/10);

n=q;

};



}
AR# 12421
日付 12/15/2012
ステータス アクティブ
種類 一般
ツール
  • EDK - 10.1 sp2
  • EDK - 10.1
  • EDK - 10.1 sp1
  • More
  • EDK - 10.1 sp3
  • EDK - 11.1
  • EDK - 11.2
  • EDK - 11.3
  • EDK - 11.4
  • EDK - 11.5
  • EDK - 12.1
  • Less
IP
  • Microblaze
このページをブックマークに追加