メインコンテンツ

cgsl_0411: 不揮発性メモリへのアクセス

ID: タイトルcgsl_0411: 不揮発性メモリへのアクセス
説明ターゲット プラットフォームの不揮発性メモリにアクセスするには、次のいずれかの方法を使用します。
A

非同期的または同期的なメモリ アクセスに対して、永続性サービス インターフェイスを使用します。

  1. [永続データ] を指定する測定サービス インターフェイスを構成します。

  2. 状態とデータ ストアを永続データの測定サービス インターフェイスを使用するように構成します。

B

同期的なメモリ アクセスに対して、Initialize Function ブロックおよび Terminate Function ブロックと [Direct Access] データ通信方法を使用します。

  1. コンポーネントのルートレベルで、データの読み取りには Initialize Function ブロック、データの書き込みには Terminate Function ブロックを使用します。

  2. ルートレベルの端子を [Direct Access] データ通信方法を使用するように構成します。

メモ

永続性サービス インターフェイスを使用したメモリ アクセス

ターゲット環境で提供されるサービスを使用して不揮発性メモリにアクセスするには、内部の状態とデータ ストアを永続データの測定サービス インターフェイスにマッピングします。詳細については、cgsl_0414: コンポーネント モデル用のサービス インターフェイスの構成を参照してください。

あるいは、サービス インターフェイスのモデル化にクライアント/サーバー インターフェイスのアプローチを使用できます。このアプローチでは、不揮発性メモリへのアクセスを提供するターゲット環境のサービスを Simulink Function ブロックを使用して表現し、そのサービスに Function Caller ブロックを使用してアクセスします。詳細については、Nonvolatile Memory Interfaces (Embedded Coder)を参照してください。

Initialize Function ブロックと Terminate Function ブロックを使用したメモリ アクセス

関数の実行中の不揮発性メモリへの同期アクセスについては、ガイドラインcgsl_0406: コンポーネント展開用のデータ送信およびcgsl_0405: コンポーネント展開用のデータ受信を参照してください。

根拠A

永続性サービス インターフェイスを使用したメモリ アクセス:

  • 不揮発性メモリに対する非同期的または同期的な読み取りと書き込みをサポート

  • 同時に実行する関数のデータ アクセスをロバストに処理

  • コンポーネントの複数のインスタンスをサポート

  • ターゲット プラットフォームのサービスを使用

B

Initialize Function ブロックと Terminate Function ブロックを使用したメモリ アクセス:

  • 不揮発性メモリに対する同期的な読み取りと書き込みのみをサポート

  • 同時に実行する関数のデータ アクセスをロバストに処理

  • コンポーネントの複数のインスタンスをサポート

モデル アドバイザー チェックこのガイドラインについてのモデル アドバイザー チェックは提供されていません。

永続性サービス インターフェイスを使用したメモリ アクセス

Simulink model that contains a discrete integrator

Code Mappings editor. The Discrete Integrator state is mapped to PermanentRAM measurement service.

生成される ModelName.h の例:

#include "PersistencyServiceExample_types.h" 
#include "services.h" 
. 
. 
. 
/* Storage class 'PersistentMemory' */ 
extern double DiscreteIntegrator; 
. 
. 
.
生成される ModelName.c の例:
#include "PersistencyServiceExample.h" 

/* Storage class 'PersistentMemory' */ 
double DiscreteIntegrator;           /* '<Root>/Discrete Integrator' */ 
. 
. 
. 
void PersistencyServiceExample_step(void) 
{ 
   double EstimatedPosition; 
   EstimatedPosition = DiscreteIntegrator;
   DiscreteIntegrator++; 
   . 
   . 
   . 
}

Initialize Function ブロックと Terminate Function ブロックを使用したメモリ アクセス

Simulink model that uses Initialize Function and Terminate Function blocks to access nonvolatile memory

生成される ModelName.c の例:

void CD_initialize(void)
.
.
.
    &(get_CD_initialize_input())[0]
.
.
.
void CD_terminate(void)
{
  memcpy(&(getref_CD_terminate_OutBus_NVM()))[0]...
}

バージョン履歴

すべて展開する

R2022b で導入