Simulink自动代码生成到指定的文件夹

目录

前言

自动代码生成到指令文件夹

.c和.h放到指定文件夹

总结


前言

接上回,通过模块化建模后,每个子模型生成的代码都放在比较深且不同的目录,找了半天也没找到像AUTOSAR那样直接打包代码的方法, 还是用Embeded coder去生成代码,生成的代码比较分散,文件夹比较多:

Simulink 自动代码生成System Composer的使用Architecture Model_卡洛斯伊的博客-CSDN博客

Simulink自动代码生成到指定的文件夹_第1张图片 Simulink自动代码生成到指定的文件夹_第2张图片

 当然可以把Simulink生成代码的目录和模型直接放到软件工程里面,生成代码直接在Makefile里面把文件路径设置好,只是这样就会让整个Project看起来很臃肿,这里就总结一个自己的操作,清爽的提取出生成的代码仅供参考

自动代码生成到指令文件夹

生成代码前运行以下脚本:

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'); %如果不想用自定义的文件夹,就用默认的

生成代码后的文件夹就变成了:

Simulink自动代码生成到指定的文件夹_第3张图片

 对应的就是三个部分的代码,如下:

Model code 就是主模型生成的代码

Model Reference code 就是每个子模型生成的代码

Shared Code 就是共享的文件,每个模型生成的代码都会调用到的部分

 Simulink自动代码生成到指定的文件夹_第4张图片

 Simulink自动代码生成到指定的文件夹_第5张图片

 生成代码后每个模型的代码还是放在各自的文件夹,且代码包含.c和.h及其他文件

Simulink自动代码生成到指定的文件夹_第6张图片

.c和.h放到指定文件夹

目前没找到好的解决办法,这里通过批处理(.bat)的方式把文件夹里的.c和.h索引出来,并放到指定文件夹,操作如下:

通过批处理文件, 如下除了.bat都是Simulink生成的,代码都放在ARM7里面

Simulink自动代码生成到指定的文件夹_第7张图片

 双击之后,多了两个文件夹,里面分别存放了.c和.h文件,用这种方法就可以直接生成代码到指定的路径,不需要手动拷贝了,提高效率

Simulink自动代码生成到指定的文件夹_第8张图片

 Simulink自动代码生成到指定的文件夹_第9张图片

 Simulink自动代码生成到指定的文件夹_第10张图片

 创建的批处理文件如下,大致流程是创建两个文件夹分别存放.c和.h用,还有两个txt用来存放搜索到的.c和.h的文件目录,然后搜索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

总结

解决方法也许不止一种,因为目前没找到更好的方案只能采取这种方式,这里记录一下方便日后回顾

你可能感兴趣的:(Simulink,Simulink)