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

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

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

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

725e07db30855a1725f1d6aa95ca704b.png

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

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

点击APP下的Embedded Coder,

ddeda6cb913ef7b170602c13ba4f2095.png

点击Quick Start,

928b06c8704a55c32d215129e28d621d.png

点击next,

268902b62f1b9200a861bc7359052cbe.png

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

5b90a431bbcf05b7abe0712f8ed2f9a2.png

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

0a7e0c1f58ce22ab7ee76daacadd1957.png

点击next,

3e3085850e88cedbfba2682a40c987a5.png

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

35250d3734812b0c95798c1dc628749b.png

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

f86929d4f0b2fe0a2d3912916aea9a1c.png

直接点击next,

230a16aa32d1a98b63d04fa163578d33.png

点击finish,

回到Simulink,

9f5c201e1d1201cdef9b0fe659af379d.png

点击build,

代码就生成了,

bccebdadb73e23d2b6549ca891f51b9d.png

生成了上图的四个.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讲解的,大家在生成代码过程中有什么问题可以自行百度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Q 语言初学者系列:(2)基本数据类型

明&#xff1a;本系列文章全部参考自官方教程&#xff0c;由于缺乏中文资料而且本人E文实在太菜&#xff0c;对于E文较好的朋友可以直接通过下面的链接访问官方网站提供的教程&#xff0c; 欢迎大家一起学习讨论。 hhttps://code.kx.com/trac/wiki/QforMortals2/contents 用户名…

Megacli恢复RAID0磁盘数据

今天干了一件蠢事&#xff0c;距离删库跑路&#xff0c;只差一步。把一块RAID0的磁盘给拔掉了,拔掉之后发现这是一块数据盘&#xff0c;幸好这个数据库是一台备库。赶紧动手恢复&#xff0c;以下是恢复的过程。 首先把拔下来的盘插回去&#xff0c;通过Megacli查看状态是这样的…

内核堆栈 用户堆栈_堆栈痕迹从何而来?

内核堆栈 用户堆栈我相信&#xff0c;阅读和理解堆栈跟踪是每个程序员都必须具备的一项基本技能&#xff0c;以便有效地解决每种JVM语言的问题&#xff08;另请参阅&#xff1a; 过滤日志中无关的堆栈跟踪行和首先记录引起根的异常 &#xff09;。 那么我们可以从一个小测验开始…

Java中使用log4j记录日志

在项目开发中&#xff0c;记录错误日志是一个很有必要功能。一是方便调试&#xff1b;二是便于发现系统运行过程中的错误&#xff1b;三是存储业务数据&#xff0c;便于后期分析&#xff1b; 在java中&#xff0c;记录日志&#xff0c;有很多种方式。 比如&#xff0c;自己实…

python如何输出两列数据_如何用python将一列数据分为两列?

引用来自“Ashkandi”的评论[{date: c[:10], time: c[11:]} for c in Col] 引用来自“vx2008”的评论 谢谢回复&#xff0c;这行代码执行完了以后&#xff0c;日期和时间都村到哪里了呢&#xff1f; 我是了一下&#xff0c;调用date&#xff0c;提示没有定义date&#xff0c;请…

Q 语言初学者系列:(3)Lists 初级

声明&#xff1a;本系列文章全部参考自官方教程&#xff0c;由于缺乏中文资料而且本人E文实在太菜&#xff0c;对于E文较好的朋友可以直接通过下面的链接访问官方网站提供的教程&#xff0c; 欢迎大家一起学习讨论。 hhttps://code.kx.com/trac/wiki/QforMortals2/contents 用户…

数据库图书管理建表与修改表

根据调研选定实体及相应属性画出E-R图 ​ 2、将E-R模型转换为对应关系模型&#xff0c;并指出主码和外码 图书book&#xff08;书号&#xff0c;类别&#xff0c;出版社&#xff0c;作者&#xff0c;书名&#xff0c;定价&#xff0c;备注&#xff09;&#xff1b; 读者reade…

如何指南:Apache Drill入门

Apache Drill是一种引擎&#xff0c;可以连接到许多不同的数据源&#xff0c;并为它们提供SQL接口。 它不仅是想跳入任何复杂事物的SQL接口&#xff0c;而且是一个功能强大的接口&#xff0c; 其中包括对许多内置函数和窗口函数的支持。 尽管它可以连接到您仍然可以使用SQL查询…

python3编程入门_在类Unix系统上开始Python3编程入门

>>> s Hello >>> x len(s) >>> print("The length of %s is %d" % (s,x)) The length of Hello is 5 看看《Python基础编程》中对格式化输出的总结&#xff1a; (1). %字符&#xff1a;标记转换说明符的开始 (2). 转换标志&#xff1a;-…

visual studio 调试时提示 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。

问题描述 “Win32Project3.exe”(Win32): 已加载“D:\software\VS2013\VS2013 文档\Win32Project3\Debug\Win32Project3.exe”。已加载符号。 “Win32Project3.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。 “Win32Project3.exe”(Wi…

matlab的一个疑问?

把逻辑值放入一个已知矩阵&#xff0c;为啥结果是&#xff1a;真就取矩阵的值&#xff0c;假就不取值&#xff1f; K>> aaaarandi(10,10,2) aaaa 6 3 10 4 6 7 5 2 6 3 8 2 1 2 9 4 2 9 5 5 K>> aaaa9 ans 102 logical array 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 …

如何使用log4j记录日志

【1】从零开始 a). 新建Java Project>>新建package>>新建java类&#xff1b; b). import jar包&#xff08;一个就够&#xff09;&#xff0c;这里我用的是log4j-1.2.14.jar&#xff0c; c). 新建log4j.properties&#xff0c;置于project根目录下&#xff1b; log…

python验证码 识别代码不准_谈谈Python进行验证码识别的一些想法

用python加“验证码”为关键词在baidu里搜一下&#xff0c;可以找到很多关于验证码识别的文章。我大体看了一下&#xff0c;主要方法有几类&#xff1a;一类是通过对图片进行处理&#xff0c;然后利用字库特征匹配的方法&#xff0c;一类是图片处理后建立字符对应字典&#xff…

matlab 安装jdbc.jar

加到matlab的启动项下面。 方法如下&#xff1a;找到matlab的安装路径&#xff0c;如下&#xff1a; 有一个classpath的txt文件&#xff0c;打开&#xff0c;在末尾添加jdbc的jar包路径即可&#xff0c;如下&#xff1a; 或者&#xff0c;直接在matlab 上用以下命令&#xff0…

MyEclipse软件中快捷键

在调试程序的时候&#xff0c;我们经常需要注释一些代码&#xff0c;在用Myeclipse编程时&#xff0c;就可以用 Ctrl/ 为选中的一段代码加上以 // 打头的注释&#xff1b;当需要恢复代码功能的时候&#xff0c;又可以用Ctrl/ 去掉注释。这样的快捷键确实让我们编程变得容易多了…

python3:(unicode error) 'utf-8' codec can't decode

操作系统&#xff1a;win7 旗舰版 语言&#xff1a;python3.4 文本编辑器&#xff1a;vim、notepad 报错&#xff1a;SyntaxError: (unicode error) utf-8 codec cant decode byte 0xb4 in position 0:invalid start byte 基本知识&#xff1a;在python中默认的编码格式是 utf-…

传统的Web应用程序和RESTful API

如今&#xff0c;当我们构建Web应用程序时&#xff0c;将所有功能公开为RESTful API&#xff0c;然后自己使用它是一种最佳实践。 这通常与使用繁重的javascript的丰富前端配合使用&#xff0c;例如Angular / Ember / Backbone / React。 但是沉重的前端似乎不是一个很好的默认…

c语言怎样获得函数内参数的值_C语言可变参数函数的实现原理

在本人的《C语言可变参数函数的实现方法》一文中&#xff0c;介绍了如何建立自己的可变参数函数。下面继续介绍可变参数函数的实现原理。在汇编语言程序设计中&#xff0c;详细介绍了子程序的实现思想&#xff1a;(1)子程序只是一段代码的起始地址&#xff1b;(2)调用子程序之前…

Log4j使用详解(log4j.XML格式)——整理

log4j.xml配置详解&#xff08;原文地址&#xff09; 首先当然是得到log4j的jar档&#xff0c;推荐使用1.2.X版&#xff0c;下载地址&#xff1a; http://logging.apache.org/log4j/1.2/download.html xml格式的log4j配置文件概述 xml格式的log4j配置文件需要使用org.apache…

SAS

options nosource; * 抑制SAS语句日志;options nosource2; * 抑制宏到日志文件的打印;options notes; * 抑制所有消息记录;你也可以三个一起用&#xff0c;如下&#xff1a;options nosource nosource2 notes; 下面的是连错误都不打印 option nonotes nomprint nosource nos…