运行所选代码生成器时出错_Simulink模型嵌入式代码生成的最佳实践

最近的一份命题作文,拿出来分享一下,欢迎广大网友讨论。闲话少说,直奔主题了。 1. 用正确的模型生成代码让我写最佳实践,这肯定是第一位的。当然,模型没有绝对意义上的正确,我这里说的正确的模型可以认为是经过充分验证的模型(什么样的模型算正确的模型?)。简单解释几点:第一,   代码生成工具不能纠错,模型不正确,代码肯定不正确;第二,   MBD开发模式中,在代码中找bug,比在模型中找bug麻烦的多;第三,   开发过程中验证工作提前或者推后,对开发成本影响很大。“心急吃不上热豆腐”的道理大家都懂,只是在实践中总是会给自己各种借口,结果呢,我们也都能想象的到,后续的工作经常焦头烂额。顺便再强调一下, 模型能够被充分验证的前提是模型可验证。 2. 生成代码的背靠背测试模型正确了就能保证生成的代码也同样正确吗?不能!可以想象,如果代码生成工具出错呢?所以自动生成的代码是需要验证的,同样也要会有静态验证和动态验证。不过,生成代码的动态验证比手工代码的动态验证要方便的多,因为模型已经是正确的了,所以只要保证代码和模型在行为上一致,即可认为代码的行为也是正确的。这就是背靠背测试,实践中通常有SIL和PIL两种方式实现。SIL测试一定要做(为什么一定要做SIL测试),至于PIL,看你对开发过程的要求了。 3. 生成代码的静态验证静态验证要不要做?你可以回答“要”,或者“不要”。不得不说,验证,尤其是静态验证,对工具的依赖是很强的。在现有的工具水平下,自动生成的代码要做静态验证,要检查代码里是否有除零、溢出、越界等运行时错误;自动生成的代码,我们不再去维护代码,不需要做编码风格之类的静态验证。 4. 数据管理和管理策略做嵌入式代码是需要数据管理的,尤其像汽车行业,你要把模型中的数据变成标定量、观测量或者可以和其他模块接口的数据,所有这些,都是通过数据管理实现的。这里我们提供了数据对象的方式去管理数据,数据对象本质上是使用了面向对象的概念。 77def6db66bddf2a2f45fe4101b3ebd0.png建议使用数据字典管理数据,一个项目有很多个模型,不同级别的模型可能会有模型引用,对于这样的情况,个人认为,每个模型应该有一个数据字典与之对应,而且,要保证每个模型能够配合其数据字典独立运行。操作层面的东西,后面再专门讨论。 5. 代码的优化及优化策略在代码出现问题的时候,比如:RAM不够,速度太慢,我们会想到优化代码。优化代码有两种方式,第一,   优化代码生成的配置;第二,   优化模型使其能够生成更优的代码。 8ee3f0a1da2bf9dc925ae2a3466a0492.png 在这两种优化方式的选择上,首选第一种,如果修改配置就可以解决问题,又何必折腾模型(模型画的太乱是另外一回事)? 如果修改配置解决不了,就要从模型甚至算法上去考虑了。 6. 不修改自动生成的代码不修改就是不修改,不解释! 7. 单元级模型的代码生成经常听到用户抱怨:现在项目大了,生成一次代码需要3、4个小时,太痛苦了。问题是,你有必要每次都对整个项目做代码生成吗?显然没必要!如果架构合理,软件发布后的每一次变更,都会落实到一个或者几个单元模块上,只需要对这些变更过的单元模块做代码生成就可以了,每次也就是几分钟的时间,完全没必要几个小时的等待。所以,要保证能够对单元级模型做代码生成。 bb7d6432efc09b2ffc5c4cbbb0eadfeb.png 8. 对外部代码的轻量化封装项目上用到一些遗留代码是非常正常的事情,手工编码的年代,有成熟的遗留代码使用是再好不过的了。然而,对于模型开发中,这些代码如果需要被用到模型中,如何处理?我的建议是,轻量化封装,也就是尽量通过简单配置就可以直接在模型中调用这些代码,而不是需要编写另外一份代码才可以调用这些代码。操作层面上,可以使用Stateflow调用外部代码(#雕虫小技#Simulink对外部C代码的调用),新版MATLAB可以使用C-Caller(内容越短,事情越大 | Simulink模型中的C代码调用),不建议通过封装S-Function来调用外部代码。 9. 减少对代码生成过程的深度定制尽可能地使用标准工具,减少定制,尤其是深度定制,为什么这样讲?代码生成过程的深度定制,可能会涉及一些偏门的技术,比如tlc,还需要对整个build过程有深入理解,这都需要对工程师有很高的要求,通常具有这些能力的工程师数量有限,一旦团队不稳定,这类人才流失,必然会造成很被动的局面。另外,这类定制本身的维护成本也很高,随着MATLAB版本的升级,你会不得不投入很多精力去维护这套定制。 10. 哦,没有第十 6b13af489cc238c5fc584d233f81195c.png写最佳实践,最好能写10条,可我只想到了9条,有点像朋友圈里发8张照片,有点别扭。别扭就别扭吧,我就先写9条了,剩下的一条,欢迎大家留言补充!

推荐阅读

Automotive SPICE和Automotive SPICE评估的那些事

Simulink模型的A2L文件生成

雕虫小技 | Simulink模型开发中的一些自动化方法

结构体变量建模之终极解决方案(续)

简单说说MIL、SIL、PIL和HIL

e27dd764a7c1627157fd351a6a4d1cfb.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值