2016-05-31 20 views
0

最近、私はMicroblazeのCアプリケーションを書いて、私はuC/OS-IIを使いました。 uC/OS-IIは、固定サイズのメモリブロックの割り当てと割り当て解除を行うメモリプールを提供します。私は現在、この時間FreeRTOSを使用するSTM32用のCアプリケーションを作成しています。 FreeRTOSが同じ仕組みを提供していないか、何か迷ってしまったようですね。私は5つのヒープの実装は、私が探しているものではないと思う。FreeRTOSのメモリプールuC/OS IIのように

メモリプールが実際に存在しない場合、具体的な理由はありますか?

答えて

0

FreeRTOSのオリジナルバージョンはメモリプールを使用しました。しかし、ユーザーはプールの次元を決定するのに苦労し、一定のサポート要求が発生しました。また、FreeRTOSの元々のバージョンは、非常にRAMが制約されたシステムを対象としていたため、過剰なプールを使用することによって無駄になったRAMは許容できませんでした。したがって、アプリケーションのサブセット以上のものに適しているスキームはなく、ユーザーが独自のスキームを提供できるように、ポータブル・レイヤーにメモリー割り当てを移動することが決定されました。あなたが言及しているように、ほぼすべてのアプリケーションをカバーするthere are five example implementations providedがありますが、メモリプール実装を絶対に使用する必要がある場合は、独自のpvPortMalloc()およびvPortFree()実装を提供することで簡単に追加できます(メモリプールは、実装する)。

また、FreeRTOS V9には、すべてを静的に割り当てることができるため、メモリ割り当て方式は必要ありません。

+0

ヒープの5つの実装例の1つは、OS(タスク、キューなど)用にRAMを割り当てるのに適している場合があります。しかし、同じサイズのメッセージ(基本的にはバイト配列)を保存したいのですか?この場合、pvPortMalloc()またはvPortFree()を使用できないため、おそらくheap_1を使用するため、スレッドセーフなメモリプール(これはあまり難しくないと思います)を実装する必要がありますか? – Semaphor