Nucleus SEのパーティションメモリ:設定、API、ベストプラクティス
RTOS Revealedシリーズを表示
メモリパーティションは前回の記事で導入され、従来のC言語malloc()関数と比較されました。パーティションはパーティションプールから割り当てられる固定サイズのメモリブロックで、タスクが信頼できる決定論的な割り当てと解放を提供します。
パーティションの使用
Nucleus SEでは、パーティションプールはコンパイル時に定義されます。アプリケーションあたり最大16プールまで設定可能。プールを定義しない場合、すべての関連データ構造とAPIコードがビルドから省略され、フットプリントを最小限に抑えます。
プールは単純に、同一パーティションのセットに分割された連続メモリ領域です。アプリケーションが各プールのサイズと個数を制御します。タスクがパーティションを要求すると、ブロックへのポインタを受け取ります。呼び出し側は割り当てられた境界内に留まる責任があります。パーティションは任意のタスクが解放APIでプールへ返却可能。プールが枯渇した場合、APIパラメータとビルドオプションに応じてエラーを返すかタスクをサスペンドします。
メモリパーティションの設定
パーティションプール数
パーティションプールはnuse_config.h内の#define文で有効化されます。鍵シンボルはNUSE_PARTITION_POOL_NUMBERで、プール数を設定。デフォルトは0でプールなし。有効値は1~16;無効値はnuse_config_check.hによりコンパイル時#errorをトリガー。
非ゼロ値設定で必要なデータ構造が活性化されROMで初期化され、後述のAPI有効化シンボルがアンロックされます。
API有効化
各サービスコールにはnuse_config.hに有効化マクロがあります。パーティションでは以下のシンボルが存在:
NUSE_PARTITION_ALLOCATENUSE_PARTITION_DEALLOCATENUSE_PARTITION_POOL_INFORMATIONNUSE_PARTITION_POOL_COUNT
デフォルトではすべてFALSEで、実装をビルドから除外。機能を使用するには対応マクロをTRUEに設定。プール未定義でAPI有効化(NUSE_Partition_Pool_Count()除く)はコンパイルエラー。未有効API呼び出しはリンクエラー。

パーティションプールサービスコール
Nucleus RTOSにはパーティションプール用の7つのサービスコールがあります。Nucleus SEではコアの割り当てと解放APIのみ実装。以下の表に各呼び出し、実装状況、簡単な説明を示します:
| API | 実装 | 説明 |
|---|---|---|
NU_Allocate_Partition() | 実装済み | パーティションを割り当てる。 |
NU_Deallocate_Partition() | 実装済み | パーティションを解放する。 |
NU_Partition_Pool_Information() | 実装済み | プールメタデータを取得。 |
NU_Established_Partition_Pools() | 実装済み | アクティブプール数をカウント。 |
NU_Create_Partition_Pool() | 未実装 | 動的プール作成。 |
NU_Delete_Partition_Pool() | 未実装 | 動的プール削除。 |
NU_Partition_Pool_Pointers() | 未実装 | プールポインタを返す。 |
Nucleus RTOSもSEもパーティションプールのリセットルーチンを提供しないことに注意。これは、タスクがパーティションを割り当て、そのポインタを別タスクに渡し、最終的に後者が解放するという典型的ユースケースを反映しています。プールをリセットするとすべてのパーティションが静かにフリー状態になり、タスクレベルの契約を破ることになります。
割り当てと解放サービス
コア操作は:
- 割り当て:パーティションを使用済みマークし、そのアドレスを返す。
- 解放:パーティションをフリーマークする。
Nucleus RTOS割り当てAPI
プロトタイプ:
STATUS NU_Allocate_Partition(NU_PARTITION_POOL *pool, VOID **return_pointer, UNSIGNED suspend);
戻り値にはNU_SUCCESS、NU_NO_PARTITION、NU_INVALID_POOL、NU_INVALID_POINTER、NU_INVALID_SUSPEND、NU_TIMEOUT、NU_POOL_DELETEDが含まれます。
Nucleus SE割り当てAPI
プロトタイプ:
STATUS NUSE_Partition_Allocate(NUSE_PARTITION_POOL pool, ADDR *return_pointer, U8 suspend);
パラメータ:
pool– 使用するプールのインデックス。return_pointer– 割り当てブロックのアドレス。suspend–NUSE_NO_SUSPENDまたはNUSE_SUSPEND。
戻りコードはRTOS版を反映しNUSE_プレフィックス付き。非タスクスレッドからの無効なサスペンド要求やブロッキングAPI無効時はNUSE_INVALID_SUSPEND。
完全な実装ウォークスルーは、RTOS Revealedシリーズの後続記事を参照してください。
埋め込み
- 精密平面研削サービス:エキスパートプロセスと品質
- デジタルメモリの基礎:アドレッシング、アクセス、揮発性
- ステンレス鋼解説:組成・製造プロセス・グローバルインパクト
- Nucleus SEのメールボックス:設定と使用の実践ガイド
- Nucleus RTOSのセマフォ:ユーティリティサービスとデータ構造
- Nucleus SEのセマフォ:概要、設定、API要点
- Nucleus SEのイベントフラググループ:設定とAPI使用の入門ガイド
- Nucleus SEのキュー:導入とコアサービスコール
- Rutronik、AP Memory IoT RAMの欧州独占ディストリビュータに:グローバル契約締結
- C# 入出力の基礎:ユーザー入力と出力の基本をマスター
- C++メモリ管理の極意:newとdeleteのエキスパート活用法