simulink怎么生成vxworks的执行程序_Matlab/Simulink基础了解(五):基础Simulink模型搭建及Embedded基础使用...
為了方便大家閱讀,從這章開(kāi)始在章節(jié)名中添加該章節(jié)要講的主要的東西。
本章給大家講一個(gè)最簡(jiǎn)單的Simulink模型:
在處理應(yīng)用邏輯時(shí)常常會(huì)判斷車(chē)速信號(hào)來(lái)得到車(chē)是否靜止,如果車(chē)已經(jīng)跑起來(lái)了,很多功能都會(huì)被禁用,比如診斷,開(kāi)關(guān)門(mén)等。
以上模型就是一個(gè)最簡(jiǎn)單的車(chē)速判斷邏輯,int16型數(shù)據(jù)VehicleSpeed(單位km/h)先得到其絕對(duì)值然后再和Constant數(shù)3做比較,如果絕對(duì)車(chē)速大于等于3km/h那么車(chē)是Driving狀態(tài)。如果小于3km/h那么車(chē)即可認(rèn)定為靜止?fàn)顟B(tài)。
我們來(lái)生成以下代碼,看看代碼是怎么樣的:
點(diǎn)擊APP下的Embedded Coder,
點(diǎn)擊Quick Start,
點(diǎn)擊next,
這里可以選擇整個(gè)Model或者選擇Model下的某一個(gè)子系統(tǒng),這里直接選擇整個(gè)Model,點(diǎn)擊next,
當(dāng)前只是看下基本代碼,直接選擇C Code 和 單Instance(Instance及autosar相關(guān)的選項(xiàng)都是AUTOSAR下相關(guān)的屬性及配置,后續(xù)會(huì)有基于A(yíng)UTOSAR下模型開(kāi)發(fā)的文章)。點(diǎn)擊next,
點(diǎn)擊next,
這里選擇一些基本類(lèi)型的內(nèi)存長(zhǎng)度,直接選擇默認(rèn)的,點(diǎn)擊next,
這里是選擇執(zhí)行最快或者RAM最少,為了讓邏輯看起來(lái)更明了,選擇執(zhí)行最快,點(diǎn)擊next,
直接點(diǎn)擊next,
點(diǎn)擊finish,
回到Simulink,
點(diǎn)擊build,
代碼就生成了,
生成了上圖的四個(gè).c,.h文件
進(jìn)入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將模型的輸入做了一個(gè)結(jié)構(gòu)體,對(duì)輸出也做了一個(gè)結(jié)構(gòu)體,這樣出來(lái)的代碼結(jié)構(gòu)比較清晰,在代碼debug的過(guò)程中會(huì)很方便地跟蹤這些變量。同時(shí)生成了Demo_initialize(void)和Demo_step(void)兩個(gè)函數(shù),這兩個(gè)函數(shù)在嵌入式RTOS系統(tǒng)用中是很重要的函數(shù),每個(gè)SWC(Software component)都必須有這兩個(gè)函數(shù),Demo_initialize(void)一般用在系統(tǒng)startup時(shí),Demo_step(void)會(huì)被assign到一個(gè)固定的task中周期執(zhí)行。
再看下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) */ }代碼中可以清楚地看出,其先用了一個(gè)temp得到VehicleSpeed的絕對(duì)值,然后在和3做比較并輸出給VehicleIsDriving
打開(kāi)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定義,提供給各個(gè)SWC.h做基本類(lèi)型引用。在嵌入式系統(tǒng)中,每個(gè)SWC在代碼生成是都會(huì)生成一個(gè)rtwtype.h,最終只包含一個(gè)大家通用就行了。
最后ert_main.c(Embedded realtime target)沒(méi)什么用,其只為生成一個(gè)示例去調(diào)用Demo_initialize(void)和Demostep(void)兩個(gè)函數(shù),在實(shí)際的實(shí)時(shí)嵌入式系統(tǒng)中,我們會(huì)將swc.c, swc.h加入工程中,用系統(tǒng)中提供的task_init(), task_xxms()來(lái)調(diào)用這兩個(gè)函數(shù)。當(dāng)然大家也可以將ert_mian.c及swc.c swc.h rtwtype.h加入visual studio工程中進(jìn)行驗(yàn)證(不過(guò)用處不是很大,僅限學(xué)習(xí)使用)。
以上便是simulink基本模塊的搭建以及Embedded coder的基本使用相關(guān)的內(nèi)容,需要提的是不同的simulink版本在simulink的搭建方面是一樣的,但是其Embedded coder變化較大,本文在是基于R2020a版本的Embedded coder講解的,大家在生成代碼過(guò)程中有什么問(wèn)題可以自行百度。
總結(jié)
以上是生活随笔為你收集整理的simulink怎么生成vxworks的执行程序_Matlab/Simulink基础了解(五):基础Simulink模型搭建及Embedded基础使用...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: git编辑器选哪个_[Git]Git创建
- 下一篇: python如何输出两列数据_如何用py