指定したフォルダーへの Simulink 自動コード生成

目次

序文

ディレクティブフォルダーへの自動コード生成

.c と .h は指定したフォルダーに配置されます

要約する


序文

前回に引き続き、モジュラーモデリング後、各サブモデルで生成されたコードは比較的深い別のディレクトリに置かれるのですが、長時間探した結果、AUTOSARのようにコードを直接パッケージ化する方法が見つかりませんでした。私は今でも Embeded coder を使用してコードを生成していますが、生成されたコードは分散しており、多くのフォルダーがあります。

Simulink 自動コード生成 System Composer はアーキテクチャ モデルを使用 - Carlos Yi のブログ - CSDN ブログ

 

 もちろん、Simulink によって生成されたコードのディレクトリとモデルをソフトウェア プロジェクトに直接配置し、生成されたコードの Makefile にファイル パスを直接設定することもできますが、これによりプロジェクト全体が肥大化してしまいます。独自の操作の更新、抽出された生成コードは参照のみを目的としています

ディレクティブフォルダーへの自動コード生成

コードを生成する前に、次のスクリプトを実行します。

orig = Simulink.fileGenControl('get','CodeGenFolderStructure');
Simulink.fileGenControl('set','CodeGenFolderStructure',...
Simulink.filegen.CodeGenFolderStructure.TargetEnvironmentSubfolder);
myCodeGenFolder = fullfile('E:','Code_generate_test');
Simulink.fileGenControl('set', ...
   'CodeGenFolder',myCodeGenFolder, ...
   'keepPreviousPath',true, ...
   'createDir',true);

 これらの文の意味は、生成されたコード フォルダーを独自の定義に置き換えることです。ここでのカスタム フォルダーは E:\Code_generate_test です。

Simulink.fileGenControl('reset'); % カスタム フォルダーを使用したくない場合は、既定のフォルダーを使用します。

コード生成後のフォルダーは次のようになります。

 コードの 3 つの部分は次のように対応します。

モデルコードはメインモデルによって生成されるコードです

モデル参照コードは、各サブモデルによって生成されるコードです。

共有コードは共有ファイルであり、各モデルで生成されたコードによって呼び出される部分です

 

 

 コードが生成された後も、各モデルのコードは独自のフォルダーに配置され、コードには .c 、 .h およびその他のファイルが含まれます。

.c と .h は指定したフォルダーに配置されます

現時点では良い解決策が見つかりませんが、ここではフォルダ内の.cと.hをバッチ処理(.bat)でインデックスし、指定したフォルダに配置するという操作になります。

バッチ ファイルを通じて、次のようにします。ただし、.bat は Simulink によって生成され、コードは ARM7 に配置されます。

 ダブルクリックすると、さらに 2 つのフォルダーが表示され、それぞれ .c ファイルと .h ファイルが保存されます。これにより、手動でコピーすることなく、指定したパスにコードを直接生成できるため、効率が向上します。

 

 

 作成されたバッチ ファイルは次のとおりです.c と .h をそれぞれ保存する 2 つのフォルダーと、検索された .c と .h ファイル ディレクトリを保存する 2 つの txt ファイルを作成し、ARM7 フォルダーを検索するのが一般的なプロセスです。 .c ファイルと .h ファイルを txt テキストに変換して指定したフォルダーにコピーし、最後に txt ファイルを削除します

@echo off
md E:\Code_generate_test\Ccode
md E:\Code_generate_test\Hcode
dir E:\Code_generate_test\Cdir.txt
dir E:\Code_generate_test\Hdir.txt

dir /s/b/a-d E:\Code_generate_test\ARM7\*.c* >E:\Code_generate_test\Cdir.txt

for /f "delims=" %%i in (E:\Code_generate_test\Cdir.txt) do copy "%%i" E:\Code_generate_test\Ccode

dir /s/b/a-d E:\Code_generate_test\ARM7\*.h* >E:\Code_generate_test\Hdir.txt

for /f "delims=" %%i in (E:\Code_generate_test\Hdir.txt) do copy "%%i" E:\Code_generate_test\Hcode


del E:\Code_generate_test\Cdir.txt
del E:\Code_generate_test\Hdir.txt

echo copy completed!
pause

要約する

これより良い解決策はまだ見つかっておらず、この方法のみを使用できるため、複数の解決策が存在する可能性があります。将来のレビューのためにここに記録してください。

Guess you like

Origin blog.csdn.net/weixin_42665184/article/details/131685371