EmbeddedCo​derでプリプロセッ​サとしてコード生成す​るための表現

Embedded CoderでのCコード生成を視野に入れた、simulink上でのブロックチャート作成の際に、
#include、#define、#if等の表現はどのように行えばいいでしょうか?

Antworten (1)

Toshinobu Shintai
Toshinobu Shintai am 9 Sep. 2020

1 Stimme

添付ファイルに、R2019bでサンプルモデルを作成してみました。「my_controller.slx」を開き、Ctrl + Bでコード生成を行ってください。
[#includeについて]
Simulinkモデルにおいて#includeを使う場面は、外部のCコードをインポートする場合だと思われます。モデルのように「C Caller」というブロックでC言語の関数を呼ぶことができます。#includeの設定は、コンフィギュレーションパラメータのシミュレーションターゲットで設定できます。
[#defineについて]
#defineの用途としては、定数の定義と#ifの条件式の定義、の二つの用途があるかと思います。
定数の定義として活用しい場合は、Simulink.Parameterに対してストレージクラスをDefineに指定すると、その変数はコード生成後に#defineで定義されるようになります。
#ifの条件式の定義については、次を参照してください。
[#ifについて]
C言語の#ifによる条件分岐は、Simulinkではバリアントモデルに相当します。バリアントモデルの設定で、以下のように「ブロック線図の更新中にすべての選択肢を解析し、プリプロセッサの条件を生成する」にチェックを入れます。
これにより、バリアントモデルの切替条件の式がコード生成後はプリプロセッサで作られます。

3 Kommentare

直樹 田中
直樹 田中 am 22 Dez. 2020
ご回答ありがとうございます。
反応遅くなり申し訳ありません。
重ねての質問になりますが、[#includeについて]
取り込むヘッダファイルにさらにincludeファイルがある(型定義等)場合、
シミュレーションターゲット設定のヘッダファイル部分に#include "xxx.h"と追記すればいいでしょうか?
その際、xxx.hが別ディレクトリにある場合、さらに設定が必要な情報はありますか?
Toshinobu Shintai
Toshinobu Shintai am 22 Dez. 2020
取り込むヘッダファイルにさらにincludeファイルがある(型定義等)場合、コンフィギュレーションパラメータに特に追加で記述する必要はありません。
xxx.hが別ディレクトリにある場合、そのディレクトリにMATLABのパスが通っていればよいです。通っていなければエラーとなります。
直樹 田中
直樹 田中 am 24 Dez. 2020
>ディレクトリにMATLABのパスが通っていればよい
 パスを通しましたが、モデルと同一ディレクトリにincludeするファイルを置かなければ(元場所から異動しなければ)エラーが発生してしまっています。
 なにか設定が間違っているのでしょうか?

Melden Sie sich an, um zu kommentieren.

Kategorien

Produkte

Version

R2019b

Gefragt:

am 8 Sep. 2020

Kommentiert:

am 24 Dez. 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!