日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/2 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 simulink怎么生成vxworks的执行程序_Matlab/Simulink基础了解(五):基础Simulink模型搭建及Embedded基础使用... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為了方便大家閱讀,從這章開始在章節(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。