今天主要是个笔记的形式记下这点内容,
最近在集成软件时,发现某个项目需要把simulink中模型生成的代码传到工程文件中,以前集成时,项目内的模型是模块化的,基本上一个模型对应一对代码(源文件和头文件),而这个项目却出现了一个项目对应好几对代码,在代码生成设置里面找了半天,也没有发现,单个模型文件是怎么实现代码模块化的,通过不停的摸索,发现是原子子系统起了大作用。
我们现在创建5个子系统分别命名为Code A、Code B、Code C、Code D、Code E,用ert.tlc,Embedded Coder的系统目标文件生成代码
模型:
子系统内部:
生成的代码:
可以看到只有该模型的代码。
我们现在对模型进行设置,让他生成多个代码
将CodeA和CodeB 按如下设置(设置为原子子系统):
非复用性功能:
CodeC的设置(设置为原子子系统):复用性功能
CodeD的设置(设置为原子子系统):自动
Code E不做任何改变,即非原子子系统 :
生成的报告如下:
CodeA/B/C都生成了单独的源代码,而D和E没有单独的代码。
另外该 rt_sys_CodeA_0.c与h文件是5个子系统中的状态机相关的代码,
而rt_sys_CodeA_2.c和h文件则为5个子系统中触发子系统的代码
由此可见,原子子系统的设置可以去实现当复用性较多的功能策略时,不仅可以降低代码量,对提高模型的可读性是有非常积极的作用的。
另外,需要注意的是
一般的子系统如果选择“Treat as atomic unit”后,它就变成了原子子系统。外框也变成了黑粗线。
其他的子系统(包括函数调用子系统,使能子系统,触发子系统,迭代子系统等)都是原子子系统,因此默认外框也都是黑粗线。
当在原子子系统中配置
为“Reusable function”或者“Nonreusable function”时,生成的代码可以为子系统的名称,也可以自定义生成的函数名称和文件名称。