999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Matlab/RTW EC面向MC9S12D64的自動代碼生成

2014-09-06 10:49:58楊潤澤
單片機與嵌入式系統應用 2014年5期
關鍵詞:嵌入式模型系統

楊潤澤

(湖北汽車工業學院 汽車工程學院,十堰 442002)

?

Matlab/RTW EC面向MC9S12D64的自動代碼生成

楊潤澤

(湖北汽車工業學院 汽車工程學院,十堰 442002)

傳統的電控軟件開發模式已無法滿足日益龐大、復雜的汽車電控系統的開發要求,基于模型的開發方法以及自動代碼生成技術在汽車嵌入式軟件開發中得到越來越廣泛的應用。本文介紹使用Matlab/Real-Time Workshop Embedded Coder(Matlab/RTW EC)將Simulink控制模型生成C代碼以及生成代碼與Freescale MC9S12D64單片機底層代碼的集成方法,通過測試驗證了生成代碼的有效性。

嵌入式系統;基于模型設計;代碼生成;RTW EC

引 言

隨著汽車電子控制系統的日益復雜化,以及用戶對產品安全性、可靠性的要求,嵌入式應用的開發難度與代碼量都在迅速增加。目前,一臺中高檔汽車的軟件控制代碼就超過了500萬行,通用雪佛蘭Volt整車的代碼量超過1 000 萬行,而一輛功能先進的醫療急救車甚至需要超過5 000萬行的軟件代碼,而且隨著設計內容的增加、多變的新特征、模糊的設計參數以及用戶不斷增加的需求,程序員的勞動量大大增加,傳統的手工編程方式越來越不能適應現代汽車電控系統的設計開發要求[1-2]。

Matlab/Real-Time Workshop Embedded Coder(Matlab/RTW EC)是MathWorks公司提供的嵌入式代碼自動生成工具,它能夠快速地將Matlab/Simulink控制器模型自動生成優化的、可移植的產品級C代碼,并根據特定的目標配置自動生成嵌入式系統實時應用程序,從而大大減輕軟件工程師的工作量,縮短嵌入式系統的開發周期,提高開發效率。本文以Freescale MC9S12D64單片機為目標芯片,說明從Simulink控制模型生成目標嵌入式代碼的方法。

1 基于模型的設計

基于模型的設計是利用計算機建模仿真技術,快速完成嵌入式產品等產品開發過程中核心算法的開發和驗證工作,利用自動代碼生成技術快速完成產品開發中的邏輯功能、處理算法的實現,同時利用模型的方法構造出被控對象,方便、快捷、大量重復地進行產品控制效果的驗證工作。相比于傳統的開發模式,基于模型的設計開發流程具有以下一些優點[3-4]:

① 在統一的開發測試平臺上,讓設計從需求分析階段就開始驗證與確認,并做到持續不斷地驗證與測試,讓設計的缺陷盡量暴露在開發的初級階段。

② 讓工程師把主要精力放在算法和測試用例的研究上,嵌入式C代碼的生成與驗證留給計算機去自動完成。

③ 模型的復用性好,易于維護和移植。

④ 大大縮短開發周期并降低開發成本。

圖1為基于模型的設計開發流程。在基于模型的設計方法中,系統工程師首先要建立一個系統模型來精確、無歧義地描述用戶的需求,創建一個可執行、可跟蹤的技術規范,并在系統模型與需求之間建立雙向鏈接。在整個開發過程中,工程師利用測試用例追蹤系統級模型和需求,了解系統模型的功能覆蓋度。這些測試通常包括以下三種:

① 軟件在環測試(Software-in-the-Loop, SIL)是對模型生成的代碼或者手寫代碼進行非實時仿真,目的是為了驗證生成的代碼和模型在功能上的等效性。

② 處理器在環測試(Processor-in-the-Loop, PIL)是將自動生成的C代碼下載到目標處理器中,與被控對象一起進行非實時的聯合仿真,目的是為了測量模型生成的代碼在目標處理器上的運行時間,即檢查運行速度和資源消耗。

③ 硬件在環測試(Hardware-in-the-Loop, HIL)是把被控對象的模型生成C代碼并編譯成可執行的文件放到工控機上運行,然后把控制器和工控機通過線束連接,實現閉環控制,檢查整個系統功能。

圖1 基于模型的設計開發流程[5]

顯然,算法的實現是聯系系統模型和在環測試驗證的重要紐帶,這其中所涉及的代碼自動生成技術是基于模型開發方法的關鍵技術之一。自動代碼生成的基本流程包括[5]:運行Model Advisor進行模型檢查、配置代碼生成選項、生成代碼、檢查生成的代碼及報告以及測試生成的代碼等5個環節。

生成代碼的過程如圖2所示。用戶在Matlab/Simulink/Stateflow建立的算法模型經過Simulink編譯器生成rtw中間文件;rtw文件是一個描述整個模型的結構體文本,包含模型中的參數、變量、模塊名稱以及為代碼生成所做的各種配置,rtw文件經過目標語言編譯器(Target Language Compiler, TLC)生成C語言代碼,最后通過C編譯器得到最終的可執行程序[1,6]。

圖2 Matlab/RTW EC代碼自動生成過程[7]

2 流水燈模型建立及嵌入式代碼生成

流水燈Simulink功能驗證模型,通過設置脈沖發生函數的周期和占空比,使LED燈按照一定的時間間隔順時針方向輪流點亮。示意圖略——編者注。

將流水燈功能驗證模型中的脈沖生成器和Goto模塊分別使用In、Out模塊替換后得到的自動代碼生成模型如圖3所示。

圖3 代碼生成模型

在Configuration Parameters中對代碼生成過程進行相關的配置并指定變量的數據類型后,Matlab/RTW EC依據上述的流水燈控制模型自動生成了ert_main.c、LightsCtr.c、LightsCtr.h、LightsCtr _private.h、LightsCtr _types.h、LightsCtr _private.h、rtwtypes.h等6個文件。其中,ert_main.c提供了算法函數調用的樣例程序,它包括main()、rt_OneStep()函數。LightsCtr.c包含了LightsCtr _initialize()、LightsCtr _step()、LightsCtr _terminate()函數,是整個模型的算法實現代碼。

3 應用層底層代碼集成

Matlab/RTW EC生成的應用層代碼和特定芯片的驅動代碼集成目前主要有兩種方式:一種方式是在建模過程中,將驅動程序封裝為S函數模塊,代碼自動生成的過程中建立相應芯片的TLC模板文件,實現一鍵從模型到編譯代碼下載到控制器芯片中。第二種方式是在集成開發環境(Integrated Development Environment, IDE)中手工進行代碼集成。

在產品化的項目開發中,采用第一種方式集成代碼,需要對底層驅動建模,存在以下的困難:①底層驅動在Simulink環境下不能仿真;②底層驅動建模需要熟悉TLC腳本語言;③產品化項目的底層軟件往往很大,開發一個安全、可靠的底層模塊庫,針對特定的目標板定制TLC文件等,都需要大量的時間投入,不易操作。

從項目開發的角度考慮,一般的項目多是采用第二種方式,也就是先進行產品化代碼生成然后手工進行代碼集成,節省了“目標板模型化”的成本和時間,有利于項目代碼文件的管理與維護,而且問題追溯和代碼調整也更為方便和靈活。

基于上述考慮,本文采用將自動生成的代碼在CodeWarrior中進行手工代碼集成,在ert_main.c中添加必要的與硬件相關的代碼,例如頭文件、中斷服務程序、硬件初始化代碼、算法與硬件接口代碼、循環語句等。集成后的ert_main.c源代碼如下:

……

#include /* 刪除頭文件*/

#include "LightsCtr.h" /* Model's header file */

#include "rtwtypes.h" /* MathWorks types */

#include /* 添加頭文件*/

#include "derivative.h" /* 添加頭文件*/

……

long flag=0; //中斷發生標志

#pragma CODE_SEG __NEAR_SEG NON_BANKED

interrupt 26 void Timer_ISR(void){ //中斷服務程序

flag++;

MCCNT=0xFFFF;

MCCTL_FLMC=1;

MCFLG_MCZF=1;

}

#pragma CODE_SEG DEFAULT

……

void rt_OneStep(void){

……

/* Re-enable timer or interrupt here */

EnableInterrupts; //允許可屏蔽中斷

……

/* Get model outputs here */

PORTA_BIT7=LightsCtr_Y.Out1;//輸出與硬件端口關聯

PORTA_BIT6=LightsCtr_Y.Out2;

PORTA_BIT5=LightsCtr_Y.Out3;

PORTA_BIT4=LightsCtr_Y.Out4;

PORTA_BIT3=LightsCtr_Y.Out5;

PORTA_BIT2=LightsCtr_Y.Out6;

PTM_PTM7=LightsCtr_Y.Out7;

PORTB_BIT2=LightsCtr_Y.Out8;

PORTB_BIT0=LightsCtr_Y.Out9;

PORTK_BIT7=LightsCtr_Y.Out10;

PORTE_BIT2=LightsCtr_Y.Out11;

PORTE_BIT3=LightsCtr_Y.Out12;

……

}

int_T main(int_T argc, const char_T *argv[]){

/* Initialize model */

LightsCtr_initialize();

MCCTL=0xC7;//允許中斷,模數計數方式和分頻常數設置

MCCNT=0xFFFF;

MCCTL_FLMC=1;

DDRA=0xFC; //設置輸出端口

DDRM=0x80;

DDRB=0x05;

DDRK=0x80;

DDRE=0x0C;

……

//刪除printf和fflush代碼

while (rtmGetErrorStatus(LightsCtr_M) == (NULL)) {

/* Perform other application tasks here */

if(flag==1) {

flag=0;

LightsCtr_U.In1=~LightsCtr_U.In1;

//翻轉輸入信號,實現脈沖輸入

}

rt_OneStep();

}

……

}

將集成后的代碼通過inDART-one在我校開發的汽車電子技術實驗系統上進行了測試,實現了預期LED燈順時針明燈流動,驗證了整個開發流程的可行性。

結 語

本文建立了LED流水燈的Simulink控制模型,使用Matlab/RTW EC將該控制模型生成嵌入式C代碼,并將自動生成的C代碼與Freescale MC9S12D64單片機底層代碼進行了集成和測試,得到了預期的LED燈控制效果。這種基于模型的開發方式以及自動代碼生成技術使得控制算法具有更高的可移植性、更快的開發迭代速度,從而能夠大大地提升電子控制系統的開發效率,降低開發成本。

Yang Runze

(School of Automotive Engineering, Hubei University of Automotive Technology, Shiyan 442002, China)

Tranditional electronic control software development mode can not meet the requirements of increasingly huge and complex automotive electronic control systems. Model-based design associated with automatic code generation is more and more widely used in the development of vechicle embedded software. This paper presents the method for converting Simulink control model to C codes with Matlab/Real-Time Workshop Embedded Coder (Matlab/RTW EC) and integrating the generated codes with low-level codes of Freescale MC9S12D64 microcontroller. Further more, the validation of generated codes is verified by testing.

embedded system; model-based design; code generation; RTW EC

TP368.1

A

猜你喜歡
嵌入式模型系統
一半模型
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
搭建基于Qt的嵌入式開發平臺
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
3D打印中的模型分割與打包
主站蜘蛛池模板: 国产综合精品日本亚洲777| 亚洲欧美日韩中文字幕一区二区三区| 中文字幕乱码二三区免费| 精品色综合| 尤物精品视频一区二区三区| 在线中文字幕网| 成人日韩精品| 天堂va亚洲va欧美va国产| 国产一区二区三区日韩精品| 人妻出轨无码中文一区二区| 女同久久精品国产99国| 中文字幕av无码不卡免费| 国产第三区| 天堂在线www网亚洲| 亚洲一区精品视频在线| 欧美A级V片在线观看| 午夜精品久久久久久久无码软件 | 看国产一级毛片| 国产精品浪潮Av| 99re视频在线| 午夜成人在线视频| 日本成人一区| 国产第四页| 3344在线观看无码| 欧美va亚洲va香蕉在线| 无码免费的亚洲视频| 成人va亚洲va欧美天堂| 国产在线一二三区| 呦视频在线一区二区三区| 久久亚洲日本不卡一区二区| 色AV色 综合网站| 欧美a级在线| 色噜噜在线观看| 国产精品亚洲天堂| 中国毛片网| 在线观看免费人成视频色快速| 伊人久久影视| 亚洲精品第1页| 中文无码毛片又爽又刺激| 亚洲欧美日韩久久精品| 国产不卡在线看| 毛片a级毛片免费观看免下载| 中文字幕有乳无码| 国产精品网拍在线| 久久综合九九亚洲一区| 久久国产免费观看| 91香蕉视频下载网站| 亚洲天堂视频网站| 亚洲av综合网| 亚洲婷婷在线视频| 亚洲va视频| 亚洲午夜国产片在线观看| 国产成年女人特黄特色大片免费| 六月婷婷精品视频在线观看| 操国产美女| 国产亚洲欧美日韩在线一区二区三区| 成人日韩视频| 国产综合精品日本亚洲777| 中文字幕永久在线看| 国产91精品久久| 亚洲色图欧美激情| 久久国产V一级毛多内射| 中文字幕日韩视频欧美一区| 色婷婷丁香| 国产综合亚洲欧洲区精品无码| 亚洲午夜综合网| 一级香蕉视频在线观看| 久久久久无码精品| 九九热在线视频| 午夜精品久久久久久久99热下载 | 99久久婷婷国产综合精| 国产视频你懂得| 蜜臀AV在线播放| 三级毛片在线播放| 99久久国产综合精品女同| 99热国产在线精品99| 精品一区国产精品| 色播五月婷婷| 夜夜操天天摸| 亚洲欧美日韩中文字幕在线| 成人一级黄色毛片| 亚洲国产精品成人久久综合影院|