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