为了方便大家阅读,从这章开始在章节名中添加该章节要讲的主要的东西。

本章给大家讲一个最简单的Simulink模型:

在处理应用逻辑时常常会判断车速信号来得到车是否静止,如果车已经跑起来了,很多功能都会被禁用,比如诊断,开关门等。

以上模型就是一个最简单的车速判断逻辑,int16型数据VehicleSpeed(单位km/h)先得到其绝对值然后再和Constant数3做比较,如果绝对车速大于等于3km/h那么车是Driving状态。如果小于3km/h那么车即可认定为静止状态。

我们来生成以下代码,看看代码是怎么样的:

点击APP下的Embedded Coder,

点击Quick Start,

点击next,

这里可以选择整个Model或者选择Model下的某一个子系统,这里直接选择整个Model,点击next,

当前只是看下基本代码,直接选择C Code 和 单Instance(Instance及autosar相关的选项都是AUTOSAR下相关的属性及配置,后续会有基于AUTOSAR下模型开发的文章)。点击next,

点击next,

这里选择一些基本类型的内存长度,直接选择默认的,点击next,

这里是选择执行最快或者RAM最少,为了让逻辑看起来更明了,选择执行最快,点击next,

直接点击next,

点击finish,

回到Simulink,

点击build,

代码就生成了,

生成了上图的四个.c,.h文件

进入Demo.h

typedef struct {int16_T VehicleSpeed;                /* '<Root>/VehicleSpeed' */
} ExtU;/* External outputs (root outports fed by signals with default storage) */
typedef struct {boolean_T VehicleIsDriving;          /* '<Root>/VehicleIsDriving' */
} ExtY;/* External inputs (root inport signals with default storage) */
extern ExtU rtU;/* External outputs (root outports fed by signals with default storage) */
extern ExtY rtY;/* Model entry point functions */
extern void Demo_initialize(void);
extern void Demo_step(void);

可以看到,Embedded Coder将模型的输入做了一个结构体,对输出也做了一个结构体,这样出来的代码结构比较清晰,在代码debug的过程中会很方便地跟踪这些变量。同时生成了Demo_initialize(void)和Demo_step(void)两个函数,这两个函数在嵌入式RTOS系统用中是很重要的函数,每个SWC(Software component)都必须有这两个函数,Demo_initialize(void)一般用在系统startup时,Demo_step(void)会被assign到一个固定的task中周期执行。

再看下Demo.c

#include "Demo.h"/* External inputs (root inport signals with default storage) */
ExtU rtU;/* External outputs (root outports fed by signals with default storage) */
ExtY rtY;/* Model step function */
void Demo_step(void)
{int16_T tmp;/* Abs: '<Root>/Abs' incorporates:*  Inport: '<Root>/VehicleSpeed'*/if (rtU.VehicleSpeed < 0) {tmp = (int16_T)-rtU.VehicleSpeed;} else {tmp = rtU.VehicleSpeed;}/* End of Abs: '<Root>/Abs' *//* Outport: '<Root>/VehicleIsDriving' incorporates:*  RelationalOperator: '<Root>/Relational Operator'*/rtY.VehicleIsDriving = (tmp >= 3);
}/* Model initialize function */
void Demo_initialize(void)
{/* (no initialization code required) */
}

代码中可以清楚地看出,其先用了一个temp得到VehicleSpeed的绝对值,然后在和3做比较并输出给VehicleIsDriving

打开rtwtype.h

/*=======================================================================** Fixed width word size data types:                                     **   int8_T, int16_T, int32_T     - signed 8, 16, or 32 bit integers     **   uint8_T, uint16_T, uint32_T  - unsigned 8, 16, or 32 bit integers   **=======================================================================*/
typedef signed char int8_T;
typedef unsigned char uint8_T;
typedef short int16_T;
typedef unsigned short uint16_T;
typedef int int32_T;
typedef unsigned int uint32_T;
typedef long long int64_T;
typedef unsigned long long uint64_T;/*===========================================================================** Generic type definitions: boolean_T, char_T, byte_T, int_T, uint_T,       **                           ulong_T, ulonglong_T.                           **===========================================================================*/
typedef unsigned char boolean_T;
typedef int int_T;
typedef unsigned int uint_T;
typedef unsigned long ulong_T;
typedef unsigned long long ulonglong_T;
typedef char char_T;
typedef unsigned char uchar_T;
typedef char_T byte_T;

rtwtype.h是simulink的Realtime Workshop的type定义,提供给各个SWC.h做基本类型引用。在嵌入式系统中,每个SWC在代码生成是都会生成一个rtwtype.h,最终只包含一个大家通用就行了。

最后ert_main.c(Embedded realtime target)没什么用,其只为生成一个示例去调用Demo_initialize(void)和Demostep(void)两个函数,在实际的实时嵌入式系统中,我们会将swc.c, swc.h加入工程中,用系统中提供的task_init(), task_xxms()来调用这两个函数。当然大家也可以将ert_mian.c及swc.c swc.h rtwtype.h加入visual studio工程中进行验证(不过用处不是很大,仅限学习使用)。

以上便是simulink基本模块的搭建以及Embedded coder的基本使用相关的内容,需要提的是不同的simulink版本在simulink的搭建方面是一样的,但是其Embedded coder变化较大,本文在是基于R2020a版本的Embedded coder讲解的,大家在生成代码过程中有什么问题可以自行百度。

simulink怎么生成vxworks的执行程序_Matlab/Simulink基础了解(五):基础Simulink模型搭建及Embedded基础使用...相关推荐

  1. simulink怎么生成vxworks的执行程序_从EPB模型谈谈Simulink代码生成

    前段时间有读者朋友问代码生成的例子,说他正在做EPB的仿真模型,但总是和应用串不到一块去,我这里就从一个简单EPB控制模型来谈谈simulink代码生成,总结代码生成方法的同时也顺便回答他的问题. 1 ...

  2. simulink怎么生成vxworks的执行程序_让天下没有难改的Simulink模型

    相信不少用Simulink建模的朋友平时或多或少都会碰到这些情况 拿到几个同事搭的模型做集成,有些同事喜欢用红色设置inport,有些同事喜欢用蓝色设置constant,各种颜色设置,五花八门 如果要 ...

  3. Matlab/Simulink自动生成C代码实验

    目录 0. 概要 1. Matlab /Simulink/Embedded Coder关系与区别 2. 搭建Simulink模型及仿真 2.1 搭建模型 2.2 仿真 3. 生成代码 3.1 求解器设 ...

  4. simulink自动生成STM32代码详解

    1.开发软件 STM32-MAT/TARGET_V5.6.0 STM32CubeMX_V5.6.0 JAVA 64_bit MATLAB_2018b MDK-ARM_V5 下图是STM32-MAT/T ...

  5. EPB电子驻车制动系统Simulink模型(参考VDA305_100标准进行模型搭建)

    EPB电子驻车制动系统Simulink模型(参考VDA305_100标准进行模型搭建) 版本:matlab2018a,可生成低版本 模型包括:有刷直流电机+执行器模型,电机参数m文件,SSM模块,PB ...

  6. 智能车辆路径跟踪:carsim和simulink联合仿真,基于车速的变权重多点预瞄驾驶员模型个例

    @基于轨迹预测的多点预瞄驾驶员模型,适合初学者学习,carsim&simulink联合仿真,模型搭建. 一.预瞄-控制基本原理 二.casim模型的搭建 三.联合仿真结果分析 前言 本文主要是 ...

  7. Simulink仿真入门到精通(五) Simulink模型的仿真

    本系列教程是根据孙忠潇编著的<<Simulink仿真及代码生成技术入门到精通>>学习笔记. 目录 Simulink仿真入门到精通(一) Simulink界面介绍 Simulin ...

  8. Matlab基础学习笔记(五)—— Simulink仿真

    听万门的一个Matlab实践课做的笔记 知识结构 笔记链接(点我) 知识点比较零散记得比较概括,用幕布看可能更清晰一点 本节内容只是做个简单记录,具体使用某个库再进行具体学习 顺便放个邀请注册链接,可 ...

  9. 倒立摆的simulink模型搭建

    倒立摆的simulink模型搭建 1.倒立摆基本背景: 倒立摆,Inverted Pendulum ,是典型的多变量.高阶次 ,非线性.强耦合.自然不稳定系统.倒立摆系统的稳定控制是控制理论中的典型问 ...

最新文章

  1. ASP.NET中Cookie的使用(实战教程)
  2. c++两数组合并算法
  3. 日均百亿级日志处理:微博基于 Flink 的实时计算平台建设
  4. 硬盘根目录里的Msdia80.dll文件是干什么用的
  5. IDEA2019.3新版本 报错 Cannot resolve column 'ID'
  6. opencv阈值操作threshold以及图像二值化
  7. 固态U盘能装linux么,用u盘在固态硬盘上安装linux 多重开启系统
  8. python学习之编写学员管理系统
  9. 日语动词的て形歌,歌词
  10. 小程序开发之全栈开发(一)
  11. 使用朴素贝叶斯对电影评论分类
  12. 不带www的域名强制跳转到www域名,Nginx服务器rewrite重写
  13. 中介者(Mediator)
  14. Windows关于文件句柄数的限制
  15. Python爬虫JS解密详解,学会直接破解80%的网站(一)!!!
  16. 安徽省计算机二级各部分分值分布,计算机二级各部分分值
  17. 阿里巴巴达摩院发布2019十大科技趋势
  18. C语言if选择练习题
  19. 科普文章-另一个视角解读计算机编码(修订版)【一个吊丝的个人理解】
  20. 气象ts评分_中国气象局广东省区域数值天气预报重点实验室

热门文章

  1. delphi image 编辑器_照片拼图编辑器app下载-照片拼图编辑器下载 v1.0.0 安卓版
  2. 如何将四元数方向转化为旋转举证_是否有将四元数旋转转换为欧拉角旋转的算法?...
  3. idea java主题_IDEA变身超级形态,需要这个酷炫主题
  4. 光纤收发器的选购原则介绍
  5. 【渝粤教育】国家开放大学2018年秋季 0233-22T学前儿童语言教育 参考试题
  6. [渝粤教育] 西南科技大学 农业推广学 在线考试复习资料
  7. 【渝粤题库】国家开放大学2021春3607矿井瓦斯灾害防治题目
  8. c语言open参数,ifstream :: open()的C类型参数
  9. php如何禁用浏览器的缓存,php如何禁止浏览器使用缓存页面
  10. pojo java_什么是POJO,JavaBean?