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

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

回答 (1 件)

Toshinobu Shintai
Toshinobu Shintai 2020 年 9 月 9 日

1 投票

添付ファイルに、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 件のコメント

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

サインインしてコメントする。

カテゴリ

ヘルプ センター および File Exchange配布 についてさらに検索

製品

リリース

R2019b

質問済み:

2020 年 9 月 8 日

コメント済み:

2020 年 12 月 24 日

Community Treasure Hunt

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

Start Hunting!