Sinmulink代码生成基础体验教程

本文转载在我的微信公众号:古德曼汽车工业。公众号文章都会知识星球、知乎进行转载,请有兴趣的朋友可以关注我的微信公众号

原文地址:Sinmulink代码生成基础体验教程

​前言

一个完整的控制器(xCU)嵌入式程序在逻辑架构均可分为两层:一个是应用逻辑层(Application Software),用来表达整个控制逻辑的实现算法;还有一个是基础软件层(Basic Software)也就是常说的底层驱动,负责芯片功能进行初始化,例如:定时器、锁相环、CAN、SPI等。逻辑层与基础软件层之间需要有一个接口层(Interface Layer)实现数据的交互。

Simulink代码生成技术的出现很好的解决的控制器程序开发的分工问题,控制策略由各专业工程师开发,而底层驱动由嵌入式工程师完成。控制策略工程师可利用Simulink强大的建模与测试功能开发控制策略模型,最后将生成嵌入式代码与底层驱动一起编译成二进制文件。另外,如果硬件变更或者硬件升级,只需要修改驱动成代码不需要更改测试好的逻辑层策略。

代码生成工具

早期Simulink代码生成主要依托dSpace公司的TargetLink实现。安装了TargetLink后,在Simulink中就会出现TargetLink自带的元件库,如果你原先仿真时用的是Simulink的标准原件,就需要将模型转换成TargetLink模型。近几年由于Simulink EmbeddedCoder在技术上日趋成熟,并且推广力度也比较大。所以越来越多厂家开始使用EmbeddedCoder生成嵌入式代码。接下来篇幅就来演示如何使用Simulink的EmbeddedCoder功能快速生成C语言代码。

代码生成基础操作

这部分内容为了让各位对嵌入式代码生成有个直观的感受,希望有兴趣的可以跟着一起练习下,【思想】当初学习也是从这部分开始的。

以一个简单的模型为例,有两个输入分别为x、y,一个输出z。运算过程为z=(x+y)*k;

第一个重要的设置就是解算法,这里一定要设置为离散的定步长算法,并设置步长。因为所有的控制器内部都会有一个模数递减器,用来实现一个步长的精确定时。大部分控制一个步长都设置为10ms。

在模型设置中的代码生成选项,选取代码生成的模板。本次使用的时EmbeddedCoder,所以选择与其对应的ert.tlc。特别注意的是由于生成的代码不会使用Simulink的编译工具进行编译,所以需要勾选Generate Code Only,这样就只会生成C文件与h文件。

点击Build Model按钮或者使用快捷键Ctrl+B进行生成代码,生成的代码会有一个报告,包含模型的配置信息。在左边的框中提示了本次生成代码的文件,点击可以对代码进行查看。生成ert_main.c文件包含了一些模型的初始化并调用模型的主函数,正常开发过程中这个文件是不会被用到。Main函数正常都在芯片开发环境中编写。接口与调度这部分内容会在后面的文章中详细叙述,敬请关注。GenerateCode.c文件则就是存放Simulink模型生成代码的文件,还有若干个h文件和Simulink自带的引用文件。

GenerateCode_Step函数中,就是Simulink模型生成C语言代码,可以看到这里的输入与输出都是以结构体的形式进行表达的,k值则是在WorkPlace中直接赋值。这样的代码可读性比较低,接下来就对模型进行更多的优化设置。

在Simulink数据管理器中使用mpt.Signal添加4个变量,分别命名为x、y、z、k设置数据类型、存储方式等,并且对k赋予初始值。

选中信号线并右键进入properites【属性】对话框,在SignalName中输入刚刚创建的变量名,并勾选Signal name must resolveto Simulink signal object。

设置后的模型效果,可以看到这时候信号线上多了个关联图标并再次对模型生成代码。

生成后的代码就可以看到与第一次生成的相比,那几个晦涩难懂的结构体已经被具体的变量名取代了。以上这个部分很重要,这是后续接口层开发的要点。

函数的封装

手工写过代码的朋友一定有这样的经验,尽可能的要把相同逻辑的代码用一个函数封装起来。这样既可以很方便地调用代码,也能够减少代码冗余提高执行效率。同样的使用Simulink建模也需要考虑这个问题。

对刚刚的模型进行简单的封装,并复制一个出来。两个子系统中的逻辑都是z=(x+y)*k,区别仅仅是输入与输出不同。

右键对Subsystem模块属性进行设置,勾选【Treat as atomic unit】设置为原子子系统,并自定义一个函数名。

生成代码后可以看到,左边两个Subsystem均调用了同一个函数。

生成代码的设置

生成代码的设置除了上面的选择编译模板一定要配置外,下面这几个选项也是需要注意的。

如果比较细心的朋友会发现前面生成报告的硬件信息为Intel->x86-64 (Windows64),在模型设置中可以对设备进行指派,设置芯片的厂家、型号、各数据类型的数据长度、甚至字节序。

另外这部分是很容易被忽略的,这里可以根据不同的C语言标准来生成代码,支持C99和C89标准。做嵌入式开发的朋友一定要根据自己的开发环境来选择,如使用code warrior 5.2的朋友一定要选择C89,选择C99就会出现编译错误的问题。

更多内容

更多的基础设置及细节问题可以向思想索取Matlab官方培训视频及思想对该视频的学习笔记ppt

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,085评论 1 32
  • 机器学习术语表 本术语表中列出了一般的机器学习术语和 TensorFlow 专用术语的定义。 A A/B 测试 (...
    yalesaleng阅读 1,958评论 0 11
  • 无止境的复合增长注定了社会阶层的必然分化,也注定了社会矛盾不管对于任何一种社会经济体制都必然尖锐。而新技术的发...
    南瓜不加糖阅读 4,099评论 0 0
  • 从大学毕业到现在我一直从事SEO优化岗位,几年时间,经历了大大小小的上百次面试邀请,其中的心酸只有自己知道。比如,...
    风中寻梦阅读 173评论 2 5
  • 以下皆为举例说明 选择器灵活使用,可以使得选择元素更加精准和快速;还有一种选择器,可以在ID和类中指明元素前缀,比...
    sky丶星如雨阅读 268评论 0 0