Sinmulink代碼生成基礎(chǔ)體驗(yàn)教程

本文轉(zhuǎn)載在我的微信公眾號(hào):古德曼汽車工業(yè)麸锉。公眾號(hào)文章都會(huì)知識(shí)星球、知乎進(jìn)行轉(zhuǎn)載星持,請(qǐng)有興趣的朋友可以關(guān)注我的微信公眾號(hào)

原文地址:Sinmulink代碼生成基礎(chǔ)體驗(yàn)教程

?前言

一個(gè)完整的控制器(xCU)嵌入式程序在邏輯架構(gòu)均可分為兩層:一個(gè)是應(yīng)用邏輯層(Application Software)藕施,用來表達(dá)整個(gè)控制邏輯的實(shí)現(xiàn)算法;還有一個(gè)是基礎(chǔ)軟件層(Basic Software)也就是常說的底層驅(qū)動(dòng)彤委,負(fù)責(zé)芯片功能進(jìn)行初始化,例如:定時(shí)器或衡、鎖相環(huán)焦影、CAN、SPI等封断。邏輯層與基礎(chǔ)軟件層之間需要有一個(gè)接口層(Interface Layer)實(shí)現(xiàn)數(shù)據(jù)的交互斯辰。

Simulink代碼生成技術(shù)的出現(xiàn)很好的解決的控制器程序開發(fā)的分工問題,控制策略由各專業(yè)工程師開發(fā)坡疼,而底層驅(qū)動(dòng)由嵌入式工程師完成彬呻。控制策略工程師可利用Simulink強(qiáng)大的建模與測(cè)試功能開發(fā)控制策略模型柄瑰,最后將生成嵌入式代碼與底層驅(qū)動(dòng)一起編譯成二進(jìn)制文件闸氮。另外,如果硬件變更或者硬件升級(jí)教沾,只需要修改驅(qū)動(dòng)成代碼不需要更改測(cè)試好的邏輯層策略蒲跨。

代碼生成工具

早期Simulink代碼生成主要依托dSpace公司的TargetLink實(shí)現(xiàn)。安裝了TargetLink后详囤,在Simulink中就會(huì)出現(xiàn)TargetLink自帶的元件庫(kù)财骨,如果你原先仿真時(shí)用的是Simulink的標(biāo)準(zhǔn)原件镐作,就需要將模型轉(zhuǎn)換成TargetLink模型藏姐。近幾年由于Simulink EmbeddedCoder在技術(shù)上日趨成熟,并且推廣力度也比較大该贾。所以越來越多廠家開始使用EmbeddedCoder生成嵌入式代碼羔杨。接下來篇幅就來演示如何使用Simulink的EmbeddedCoder功能快速生成C語言代碼。

代碼生成基礎(chǔ)操作

這部分內(nèi)容為了讓各位對(duì)嵌入式代碼生成有個(gè)直觀的感受杨蛋,希望有興趣的可以跟著一起練習(xí)下兜材,【思想】當(dāng)初學(xué)習(xí)也是從這部分開始的理澎。

以一個(gè)簡(jiǎn)單的模型為例,有兩個(gè)輸入分別為x曙寡、y糠爬,一個(gè)輸出z。運(yùn)算過程為z=(x+y)*k;

第一個(gè)重要的設(shè)置就是解算法举庶,這里一定要設(shè)置為離散的定步長(zhǎng)算法执隧,并設(shè)置步長(zhǎng)。因?yàn)樗械目刂破鲀?nèi)部都會(huì)有一個(gè)模數(shù)遞減器户侥,用來實(shí)現(xiàn)一個(gè)步長(zhǎng)的精確定時(shí)镀琉。大部分控制一個(gè)步長(zhǎng)都設(shè)置為10ms。

在模型設(shè)置中的代碼生成選項(xiàng)蕊唐,選取代碼生成的模板屋摔。本次使用的時(shí)EmbeddedCoder,所以選擇與其對(duì)應(yīng)的ert.tlc替梨。特別注意的是由于生成的代碼不會(huì)使用Simulink的編譯工具進(jìn)行編譯钓试,所以需要勾選Generate Code Only,這樣就只會(huì)生成C文件與h文件副瀑。

點(diǎn)擊Build Model按鈕或者使用快捷鍵Ctrl+B進(jìn)行生成代碼亚侠,生成的代碼會(huì)有一個(gè)報(bào)告,包含模型的配置信息俗扇。在左邊的框中提示了本次生成代碼的文件硝烂,點(diǎn)擊可以對(duì)代碼進(jìn)行查看。生成ert_main.c文件包含了一些模型的初始化并調(diào)用模型的主函數(shù)铜幽,正常開發(fā)過程中這個(gè)文件是不會(huì)被用到滞谢。Main函數(shù)正常都在芯片開發(fā)環(huán)境中編寫。接口與調(diào)度這部分內(nèi)容會(huì)在后面的文章中詳細(xì)敘述除抛,敬請(qǐng)關(guān)注狮杨。GenerateCode.c文件則就是存放Simulink模型生成代碼的文件,還有若干個(gè)h文件和Simulink自帶的引用文件到忽。

GenerateCode_Step函數(shù)中橄教,就是Simulink模型生成C語言代碼,可以看到這里的輸入與輸出都是以結(jié)構(gòu)體的形式進(jìn)行表達(dá)的喘漏,k值則是在WorkPlace中直接賦值护蝶。這樣的代碼可讀性比較低,接下來就對(duì)模型進(jìn)行更多的優(yōu)化設(shè)置翩迈。

在Simulink數(shù)據(jù)管理器中使用mpt.Signal添加4個(gè)變量持灰,分別命名為x、y负饲、z堤魁、k設(shè)置數(shù)據(jù)類型喂链、存儲(chǔ)方式等,并且對(duì)k賦予初始值妥泉。

選中信號(hào)線并右鍵進(jìn)入properites【屬性】對(duì)話框椭微,在SignalName中輸入剛剛創(chuàng)建的變量名,并勾選Signal name must resolveto Simulink signal object盲链。

設(shè)置后的模型效果赏表,可以看到這時(shí)候信號(hào)線上多了個(gè)關(guān)聯(lián)圖標(biāo)并再次對(duì)模型生成代碼。

生成后的代碼就可以看到與第一次生成的相比匈仗,那幾個(gè)晦澀難懂的結(jié)構(gòu)體已經(jīng)被具體的變量名取代了瓢剿。以上這個(gè)部分很重要,這是后續(xù)接口層開發(fā)的要點(diǎn)悠轩。

函數(shù)的封裝

手工寫過代碼的朋友一定有這樣的經(jīng)驗(yàn)间狂,盡可能的要把相同邏輯的代碼用一個(gè)函數(shù)封裝起來。這樣既可以很方便地調(diào)用代碼火架,也能夠減少代碼冗余提高執(zhí)行效率鉴象。同樣的使用Simulink建模也需要考慮這個(gè)問題。

對(duì)剛剛的模型進(jìn)行簡(jiǎn)單的封裝何鸡,并復(fù)制一個(gè)出來纺弊。兩個(gè)子系統(tǒng)中的邏輯都是z=(x+y)*k,區(qū)別僅僅是輸入與輸出不同骡男。

右鍵對(duì)Subsystem模塊屬性進(jìn)行設(shè)置淆游,勾選【Treat as atomic unit】設(shè)置為原子子系統(tǒng),并自定義一個(gè)函數(shù)名隔盛。

生成代碼后可以看到犹菱,左邊兩個(gè)Subsystem均調(diào)用了同一個(gè)函數(shù)。

生成代碼的設(shè)置

生成代碼的設(shè)置除了上面的選擇編譯模板一定要配置外吮炕,下面這幾個(gè)選項(xiàng)也是需要注意的腊脱。

如果比較細(xì)心的朋友會(huì)發(fā)現(xiàn)前面生成報(bào)告的硬件信息為Intel->x86-64 (Windows64),在模型設(shè)置中可以對(duì)設(shè)備進(jìn)行指派龙亲,設(shè)置芯片的廠家陕凹、型號(hào)、各數(shù)據(jù)類型的數(shù)據(jù)長(zhǎng)度鳄炉、甚至字節(jié)序杜耙。

另外這部分是很容易被忽略的,這里可以根據(jù)不同的C語言標(biāo)準(zhǔn)來生成代碼迎膜,支持C99和C89標(biāo)準(zhǔn)泥技。做嵌入式開發(fā)的朋友一定要根據(jù)自己的開發(fā)環(huán)境來選擇浆兰,如使用code warrior 5.2的朋友一定要選擇C89磕仅,選擇C99就會(huì)出現(xiàn)編譯錯(cuò)誤的問題珊豹。

更多內(nèi)容

更多的基礎(chǔ)設(shè)置及細(xì)節(jié)問題可以向思想索取Matlab官方培訓(xùn)視頻及思想對(duì)該視頻的學(xué)習(xí)筆記ppt

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市榕订,隨后出現(xiàn)的幾起案子店茶,更是在濱河造成了極大的恐慌,老刑警劉巖劫恒,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贩幻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡两嘴,警方通過查閱死者的電腦和手機(jī)丛楚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憔辫,“玉大人趣些,你說我怎么就攤上這事》∧” “怎么了坏平?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)锦亦。 經(jīng)常有香客問我舶替,道長(zhǎng),這世上最難降的妖魔是什么杠园? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任顾瞪,我火速辦了婚禮,結(jié)果婚禮上抛蚁,老公的妹妹穿的比我還像新娘玲昧。我一直安慰自己,他們只是感情好篮绿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布孵延。 她就那樣靜靜地躺著,像睡著了一般亲配。 火紅的嫁衣襯著肌膚如雪尘应。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天吼虎,我揣著相機(jī)與錄音犬钢,去河邊找鬼。 笑死思灰,一個(gè)胖子當(dāng)著我的面吹牛玷犹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洒疚,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歹颓,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼坯屿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起巍扛,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤领跛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后撤奸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吠昭,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年胧瓜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矢棚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡府喳,死狀恐怖幻妓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劫拢,我是刑警寧澤肉津,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站舱沧,受9級(jí)特大地震影響妹沙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熟吏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一距糖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牵寺,春花似錦悍引、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至黎休,卻和暖如春浓领,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背势腮。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工联贩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捎拯。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓泪幌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子祸泪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,098評(píng)論 1 32
  • 機(jī)器學(xué)習(xí)術(shù)語表 本術(shù)語表中列出了一般的機(jī)器學(xué)習(xí)術(shù)語和 TensorFlow 專用術(shù)語的定義吗浩。 A A/B 測(cè)試 (...
    yalesaleng閱讀 1,964評(píng)論 0 11
  • 無止境的復(fù)合增長(zhǎng)注定了社會(huì)階層的必然分化,也注定了社會(huì)矛盾不管對(duì)于任何一種社會(huì)經(jīng)濟(jì)體制都必然尖銳浴滴。而新技術(shù)的發(fā)...
    南瓜不加糖閱讀 4,127評(píng)論 0 0
  • 從大學(xué)畢業(yè)到現(xiàn)在我一直從事SEO優(yōu)化崗位升略,幾年時(shí)間,經(jīng)歷了大大小小的上百次面試邀請(qǐng)屡限,其中的心酸只有自己知道品嚣。比如,...
    風(fēng)中尋夢(mèng)閱讀 176評(píng)論 2 5
  • 以下皆為舉例說明 選擇器靈活使用钧大,可以使得選擇元素更加精準(zhǔn)和快速翰撑;還有一種選擇器,可以在ID和類中指明元素前綴啊央,比...
    sky丶星如雨閱讀 271評(píng)論 0 0