MBD开发方式中几种无法覆盖C语言用法的情况
MBD开发方式是一种嵌入式开发的新的方法,并配有相关的工具链,在实践过程中,发现有几种C/C++语言的用法无法通过代码生成。
1.多bit位的位域变量,位域可以有效减少对物理空间的使用,在Simulink中,可以配置一个总线,然后总线中,将变量设置为布尔数据类型,代码生成后,可以生成1bit的位域,可以通过存储模块进行读取写入操作;但是,没有多bit位的位域变量,目前找到一种解决的办法,多位位域变量分成多个1bit位的位域,然后做一个定制化的sfunction模块,或者m函数,从整形转换为多个布尔变量输出,接入总线;如图:
2.union联合体,在memory设置中,如果强制将struct设置为union,将直接提示触及了simulink关键字,代码生成不通过,同理,总线也不能命名;除非重新做一个m函数,在代码生成后,将某个总线名称改过来,这个有点搞笑;
3.指针变量,在定制化block中,我们可以在TLC脚本中,写入一个指针变量作为参数的C函数,在模块输出中,选择输出地址作为函数的输入参数,则可以使用指针变量了,但是还没有发现直接定义一个pointer类型的变量;
此外,新版本的simulink已经支持了字符串变量,这个在以前版本中也是个很难解决的事。可以发现simulink作为MBD开发工具有一定的局限性,涉及内存的操作还不够给力,这可能是MBD开发方式最早源于汽车电子开发有关,不同于消费类电子,汽车电子往往选择的芯片内存冗余很多,关注点在控制逻辑的开发。
以上心得,请多指正。