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

2 views (last 30 days)
直樹 田中
直樹 田中 on 8 Sep 2020
Commented: 直樹 田中 on 24 Dec 2020
Embedded CoderでのCコード生成を視野に入れた、simulink上でのブロックチャート作成の際に、
#include、#define、#if等の表現はどのように行えばいいでしょうか?

Answers (1)

Toshinobu Shintai
Toshinobu Shintai on 9 Sep 2020
添付ファイルに、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 Comments
Toshinobu Shintai
Toshinobu Shintai on 22 Dec 2020
取り込むヘッダファイルにさらにincludeファイルがある(型定義等)場合、コンフィギュレーションパラメータに特に追加で記述する必要はありません。
xxx.hが別ディレクトリにある場合、そのディレクトリにMATLABのパスが通っていればよいです。通っていなければエラーとなります。
直樹 田中
直樹 田中 on 24 Dec 2020
>ディレクトリにMATLABのパスが通っていればよい
 パスを通しましたが、モデルと同一ディレクトリにincludeするファイルを置かなければ(元場所から異動しなければ)エラーが発生してしまっています。
 なにか設定が間違っているのでしょうか?

Sign in to comment.

Categories

Find more on 配布 in Help Center and File Exchange

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!