提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在嵌入式开发中,利用Simulink的相关功能模块搭建逻辑流程以后,一个非常重要的步骤就是利用代码生成功能将我们搭建的功能转化为代码,并且和嵌入式平台的芯片软件工程融合,使我们开发的功能在单片机上跑起来,从而实现产品的功能要求。
一、工程创建
这次使用Simulink搭建的工程的目标产品是车载智能保险盒,前两篇文章中的CAN模块、雨刮模块等都是其中的功能,这些功能组装起来通过一个完整的simulink project进行管理。以功能为文件夹,把相关的功能文件进行统一归类。我的理解这样创建的工程类似于代码编辑时在编译器中创建的工程。
就像KEIL或者IAR中可以进行编译,运行操作一样,simulink项目也可以进行model test、依存关系查看、运行检查等操作。版本管理也集成了SVN或git,只需要进行简单的设置也可以实现。我用的就是SVN进行版本管理,但是习惯上还是直接拷贝文件夹进行update和commit。
二、代码生成
1.搭建模块
生成代码每个模块的操作是一样的,设置参数和操作。本文采用近光灯模块进行解释,主要因为近光模块功能比较简单。信号量较少,且逻辑简单。主要信号如下:
输入信号:
1、点火开关IGN信号
2、大灯供电信号
3、近光灯开关信号
4、短路判断信号
5、开路判断信号
6、报文刷新标志
输出信号:
1、近光灯继电器的控制信号
2、CAN报文信号
3、报文发送标志位
其中报文刷新标志和报文发送标志是系统内部的判断信号,不作为对外的输出,相当于写代码时设置的标志位是一个局部变量。
工能逻辑结构如下:
一 整体结构
二 内部结构
三 stateflow
功能搭建完成以后,点击RUN图标,若未报错证明语法上结构正确是符合了生成代码的前提条件,至于控制逻辑是否正确可以通过dashboard搭建指示灯进行仿真,仿真的方法可参考前文《Simulink模型实现汽车雨刮基本功能并仿真》。
2.设置参数
点击工具栏上面model setting的齿轮图标,进入设置参数界面
以本项目生成嵌入式代码为例,主要需要调节的参数设置如下:
solver解算器下,Solever selection解算器选择,type选fixed-step(定步长),solver选discrete(离散型)
细节选项fixed-step size设置为0.01,采样步长为0.01s,这个参数关系到在嵌入式工程中多久调用一次功能循环,以本项目为例,设置为0.01s也就意味着,每10ms调用一次功能函数,要是不按照设定值进行定时中断,那么会影响模块中的计时操作。
code generation选项中主要需要注意的是两个参数,一个是System target file要选为ert.tlc,另一个就是Language要选C语言。
Report选项中选择生成代码报告,一般勾选前两项分别是生成报告和自动打开,第三个web view可选可不选。
根据所用单片机型号我们要在Hardware Implementation中选择相对应的单片机厂商和内核类型,本项目所用的是NXP