工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial Internet of Things >> 埋め込み

Nucleus SEのパーティションメモリ:設定、API、ベストプラクティス

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に有効化マクロがあります。パーティションでは以下のシンボルが存在:

デフォルトではすべてFALSEで、実装をビルドから除外。機能を使用するには対応マクロをTRUEに設定。プール未定義でAPI有効化(NUSE_Partition_Pool_Count()除く)はコンパイルエラー。未有効API呼び出しはリンクエラー。

Nucleus SEのパーティションメモリ:設定、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); 

パラメータ:

戻りコードはRTOS版を反映しNUSE_プレフィックス付き。非タスクスレッドからの無効なサスペンド要求やブロッキングAPI無効時はNUSE_INVALID_SUSPEND。

完全な実装ウォークスルーは、RTOS Revealedシリーズの後続記事を参照してください。

埋め込み

  1. 精密平面研削サービス:エキスパートプロセスと品質
  2. デジタルメモリの基礎:アドレッシング、アクセス、揮発性
  3. ステンレス鋼解説:組成・製造プロセス・グローバルインパクト
  4. Nucleus SEのメールボックス:設定と使用の実践ガイド
  5. Nucleus RTOSのセマフォ:ユーティリティサービスとデータ構造
  6. Nucleus SEのセマフォ:概要、設定、API要点
  7. Nucleus SEのイベントフラググループ:設定とAPI使用の入門ガイド
  8. Nucleus SEのキュー:導入とコアサービスコール
  9. Rutronik、AP Memory IoT RAMの欧州独占ディストリビュータに:グローバル契約締結
  10. C# 入出力の基礎:ユーザー入力と出力の基本をマスター
  11. C++メモリ管理の極意:newとdeleteのエキスパート活用法