ザイリンクスからの回答 (電子メール経由) は以下のとおりです。マルチスレッドについては言及されていません。また、2006 年 (6 年前!!!) にリリースされたソフトウェア ツール 8.2i も参照しています。要するに、それは意味がありません。
学んだ教訓:
- ザイリンクスのサポートは最悪です。
- ザイリンクス ソフトウェア ツールは、後から付け足したものです。
- ドキュメントで概説されていること、特にマルチスレッド環境では動的メモリ割り当てを使用できないことが正しいと想定することしかできません。これは、C++ 標準ライブラリ コンテナーがないことを意味します。
- MicroBlaze ソフト コア プロセッサを選択しようとしているハードウェア担当者は、その前にファームウェア担当者に確認してください。彼はどんな種類のアプリケーションを書くことを期待していますか? C++ でマルチスレッド アプリケーションを作成できないことを彼に知らせてください。
malloc()
Microblaze C ライブラリには、小さくて最小限の機能である malloc() が同梱されています。使用すると、メモリを解放できませんでした。calloc、realloc などの他の関数はサポートされていませんでした。また、malloc() と printf、scanf などのルーチンの両方を使用する場合にもバグがありました。これを修正するために、最小限の機能である malloc() が削除されました。オリジナルの Newlib malloc() に置き換えられました。その結果、機能上の問題は発生しません。コード サイズが約 4K 増加する可能性があります。新しい全機能の malloc() がメモリを要求する方法が異なるため、ユーザー プログラムはヒープ サイズの設定を確認する必要がある場合があります。malloc() 呼び出しが以前は機能していた場所で NULL を返す場合は、ヒープ サイズを増やしてみてください。この変更は、壊れた機能を修正するために不可欠でした。
元の軽量で壊れた malloc() 機能が必要なまれなケースでは、アプリケーションをビルドするためにコンパイルするソース ファイルの 1 つとしてソース コード (malloc.S) を含めることができます。これにより、EDK 8.2i より前の古い機能、コード サイズ要件、動的メモリ要件が保持されます。
xil_malloc()
MicroBlaze C ライブラリには、xil_malloc() と呼ばれる動的メモリ割り当ての代替実装が付属しています。このルーチンにはいくつかの制限があります。ヒープからメモリを割り当てるのではなく、固定の 64K バッファからメモリを割り当てます。このルーチンは廃止されました。このルーチンはまだリンケージに使用できますが、使用しないことを強くお勧めします。malloc(); を使用してください。xil_malloc() より小さく、より優れた機能を提供します。malloc() を使用する場合は、ヒープ サイズの設定を確認して、動的メモリ要件を満たすようにしてください。
スタンドアロン BSP にはパラメーター「need_xil_malloc」が含まれています。このパラメーターは、malloc() を含むコードを記述しながら、xil_malloc() 実装に接続できるようにすることを目的としています。パラメーターの実装にバグがあり、xil_malloc() が廃止されたため、このパラメーターも廃止されました。
Xilkernel にはパラメータ「use_xil_malloc」が含まれています。このパラメーターは、カーネル メッセージ キューの実装で malloc() の代わりに xil_malloc() を使用できるようにするためのものです。xil_malloc() が廃止されたため、このパラメーターも廃止されました。
従来の理由で xil_malloc() ソース コードが必要な場合は、xil_malloc.c および xil_sbrk.c ファイルをダウンロードして使用できます。
C++ アプリケーション
EDK 8.2i より前の C++ アプリケーションでは、異常な動作やメモリの破損などが発生する場合があります。これらの問題を修正するには、添付のソース ファイル (newlib_malloc.c) をアプリケーションのコンパイルの一部として含めます。これにより、原因不明のクラッシュが修正されます。この回避策は、MicroBlaze C ライブラリの malloc() 実装のバグを修正します。この回避策は、EDK 8.2i 以降の C ライブラリに組み込まれています。
この情報は、http ://www.xilinx.com/support/answers/23345.html でも入手できるようです。