Nucleus RTOS/SEのパーティションメモリ:ユーティリティサービスとデータ構造
RTOS Revealedシリーズを表示
前回のRTOSパーティションメモリ探求に続き、本記事ではNucleus RTOSとその簡易版Nucleus SEで効率的なメモリ管理を可能にする実用的ユーティリティと基盤データ構造を掘り下げます。
パーティションプールユーティリティサービス
Nucleus RTOSには、パーティションプールに必要な情報と管理機能を提供する3つの専用API呼び出しがあります:詳細プール情報の取得、アプリケーション内のプール総数の取得、すべてのプール構造へのポインタ取得。最初の2機能はNucleus SEで完全サポートされていますが、機能セット削減により一部差異があります。
パーティションプール情報の取得
NU_Partition_Pool_Informationサービスは指定されたパーティションプールの包括的なスナップショットを返します。Nucleus SEでは、オブジェクト命名、サスペンド順序、タスクサスペンドサポートがないため、データセットが削減されます。
Nucleus RTOSのパーティションプール情報API呼び出し
サービスコールプロトタイプ:
STATUS NU_Partition_Pool_Information(NU_PARTITION_POOL *pool, CHAR *name, VOID **start_address, UNSIGNED *pool_size, UNSIGNED *partition_size, UNSIGNED *available, UNSIGNED *allocated, OPTION *suspend_type, UNSIGNED *tasks_waiting, NU_TASK **first_task);
パラメータ:
pool – 情報要求対象のパーティションプールへのポインタ。
name – プール名を受け取る8文字バッファへのポインタ(null終端含む)。
start_address – プールデータ領域のベースアドレスを受け取る変数へのポインタ。
pool_size – プール総サイズ(バイト)を受け取る変数へのポインタ。
partition_size – 各パーティションのサイズを受け取る変数へのポインタ。
available – 現在空きパーティション数を受け取る変数へのポインタ。
allocated – 使用中パーティション数を受け取る変数へのポインタ。
suspend_type – サスペンドポリシー(有効値:NU_FIFOまたはNU_PRIORITY)を受け取る変数へのポインタ。
tasks_waiting – このプールでサスペンドしているタスク数を受け取る変数へのポインタ。
first_task – 最初のサスペンドタスクへのポインタを受け取る変数へのポインタ。
戻り値:
NU_SUCCESS – 操作成功。
NU_INVALID_POOL – 提供されたプールポインタが無効。
Nucleus SEのパーティションプール情報API呼び出し
Nucleus SEでは、以下の簡略化インターフェースで同等の機能を提供。SEはタスクサスペンドをサポートしないため、関連フィールドは省略。
サービスコールプロトタイプ:
STATUS NUSE_Partition_Pool_Information(NUSE_PARTITION_POOL pool, ADDR *start_address, U32 *pool_size, U16 *partition_size, U8 *available, U8 *allocated, U8 *tasks_waiting, NUSE_TASK *first_task)
パラメータ:
pool – パーティションプールのインデックス。
start_address – プールデータ領域のベースアドレスを受け取る変数へのポインタ。
pool_size – プール総サイズ(バイト)を受け取る変数へのポインタ。
partition_size – 各パーティションのサイズを受け取る変数へのポインタ。
available – 空きパーティション数を受け取る変数へのポインタ。
allocated – 使用中パーティション数を受け取る変数へのポインタ。
tasks_waiting – 待機タスク数を受け取る変数へのポインタ(タスクサスペンド無効時はゼロ)。
first_task – 最初のサスペンドタスクのインデックスを受け取る変数へのポインタ(タスクサスペンド無効時はゼロ)。
戻り値:
NUSE_SUCCESS – 操作成功。
NUSE_INVALID_POOL – プールインデックスが無効。
NUSE_INVALID_POINTER – 1つ以上のポインタ引数がnull。
Nucleus SEのパーティションプール情報実装
SE実装は簡潔:要求フィールドを設定し、ブロッキングAPI有効時は待機タスク数と最初のタスクインデックスを設定(無効時はゼロクリア)。

パーティションプール数の取得
このサービスはアプリケーションで定義されたパーティションプールの総数を返します。Nucleus RTOSではプール作成/削除で動的に変化;Nucleus SEではビルド時に固定。
Nucleus RTOSのパーティションプール数API呼び出し
サービスコールプロトタイプ:
UNSIGNED NU_Established_Partition_Pools(VOID);
パラメータ:なし。
戻り値:アクティブなパーティションプールの現在の数。
Nucleus SEのパーティションプール数API呼び出し
サービスコールプロトタイプ:
U8 NUSE_Partition_Pool_Count(void);
パラメータ:なし。
戻り値:コンパイル時に設定されたパーティションプールの数。
実装
SEルーチンは単にコンパイル時定数NUSE_PARTITION_POOL_NUMBERの値を返します。
埋め込み
- デジタルメモリの基礎:アドレッシング、アクセス、揮発性
- マイクロプロセッサ:ストアドプログラムコンピューティングの進化
- C++構造体とクラス:組み込み開発者のための実践ガイド
- Nucleus SEのメールボックス:設定と使用の実践ガイド
- Nucleus RTOSのセマフォ:ユーティリティサービスとデータ構造
- Nucleus SEのセマフォ:概要、設定、API要点
- イベントフラググループの習得:Nucleus RTOS/SEのユーティリティサービスとデータ構造
- Nucleus SEのイベントフラググループ:設定とAPI使用の入門ガイド
- Nucleus SEのキュー:導入とコアサービスコール
- クラウド vs オンプレミスサーバー:最適なホスティングソリューションの選び方
- Microsoft Azureがブロックチェーン・トークン化とデータ管理サービスを発表