前一阵参加了MathWorks公司一个关于根据模型的规划的讲座,先介绍了根据模型的规划model based design,然后是亲主着手体会;感觉很有意义,特别是其间的主动代码生成,所以在此和咱们共享一下。
听起来,主动生成代码好像是专门为不想多着手的工程师预备的东西。其实,主动代码生成最早是做为根据模型的规划办法的一部分提出的。一般情况下,嵌入式体系软件的开发分为需求界说、功用规划、代码编写和测验等几个阶段,测验、找bug和处理bug往往要花费许多的精力,特别是越是躲藏的深的bug越难发现和处理,危险也很大。所以每次在传统办法下发现和处理bug形成的发布延时都会形成整个修正本钱的指数级上升。而选用根据模型的规划,则能够在规划的前期经过仿真等手法确保模型的正确性,例如在仿真环境下,咱们的模型能够彻底完结咱们的目的,然后主动代码生成和验证便是瓜熟蒂落的问题了。
其次,根据模型的规划在杂乱和十分杂乱的体系中特别有意义。他们举了几个比如,例如在高级的汽车上,悉数代码预估现已到达千万行、乃至两千万行的级别了,这么多代码要是靠手艺编写和测验,首要需求几十个几百个人的编程和测验团队不说,光是交流的功率就很难确保了;根据模型的规划办法则能够有用处理这个问题。现在在汽车行业,这种形式现已成为干流的开发办法了,在航空航天等范畴也得到了很广泛的运用,例如闻名的F-22战斗机和“猎奇号”火星车都运用了根据模型的规划办法。例如讲座中说到,火星车的开发中,运用了380000次仿真,这要是依照传统的测验办法去一遍遍做,估量整个团队都要吐血身亡了。
此外,开发一个杂乱体系要花费很多的时刻,新体系开发时从现有体系中复用现有的代码是省劲实力的。根据模型的规划办法由于运用模型参阅调用的办法引证子体系,所以代码的移植和复用十分便利。例如例如讲座中说到,F35战斗机有A、B、C三种类型,在开发进程中,能够重复运用的体系规划模型就明显提高了开发功率。
接下来讲讲我所了解的根据模型规划的开发进程:
1. 体系需求
不管用啥开发办法,终究要完结的体系是相同的,所以体系需求并没有什么明显差异。只不过Simulink开发东西能够在建模中将模型与需求文档进行相关,便利快速检查模型功用与需求文档之间是否有误差。
2. 建模
便是在Simulink环境中把咱们需求的功用用模块建立起来,例如控制体系、通讯体系等,根据图形化的编程仍是较为直观和简单的,并且仿真测验很快就能得到成果了。
3. 代码生成
模型有了,这一步便是超级吸引人的了,直接把模型生成C代码,多便利的功用。当然有一些规范要界说的,包含一些ISO的规范;并且假如咱们运用的处理器被Simulink支撑的话,在生成代码的时分还能够直接针对代码优化,例如咱们的方针对象是TI的一个DSP,则一些数学运算在生成代码时会直接调用BootROM里的数学库,比较于传统的C言语math.h里边的规范数学库,运转速度要强的多;常用的DSP、ARM等根本都是支撑的。
4. 软件在环测验
硬件在环测验HIL咱们或许都听说过,不过软件在环测验SIL貌似是个比较新鲜的概念。它的意义便是把生成的c代码调用到仿真环境中,输入是与仿真的那步是相同的,这样就能比较生成的代码和咱们的模型是否有成果的差异。当然几乎是不会呈现什么情况的。
5. 硬件在回路测验
这一步许多人都不生疏,便是把生成的代码下载到实践的控制器中,观测回来的成果是不是和咱们的仿真模型是共同的。
实验了一下,生成代码的功率还不错,可读性也很好,假如觉得编程太累了,能够测验一下。当然有一些功用在Simulink里边完结仍是暂时有困难的,例如实时操作体系的使命调度,现在还很难完结出来,所以能够把功用区分一下,一部分控制体系、通讯体系的代码运用这种办法,其它的则还需求手艺编写,然后经过接口进行协同作业。