0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

MATLAB ? 來源:djl ? 2019-09-17 16:54 ? 次閱讀

Simulink 模型的自動代碼生成?

簡單來說,在我們的 “大” 項目中,需要實現(xiàn)很多算法,其中比如 myfilter。

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

現(xiàn)在不手寫C了,而是搭建Simulink框圖。對那些算法比C語法熟悉的人來說,這是個福音。

算法實現(xiàn)方便,測試方便

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

Simulink 模型的測試驗證非常重要,然而這里不討論。

總之,算法沒問題之后,通過自定代碼生成工具Coder“翻譯”成C代碼,跟手寫的一樣.c.h,還可以控制函數(shù)原型、數(shù)據(jù)定義、文件結(jié)構(gòu)、甚至注釋......

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

把自動生成的源文件集成到原來的項目文件中。

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

由各種編譯器,把它們編譯成不同的可執(zhí)行文件,最后運行在不同的環(huán)境。

比如這里就是通過 VS 編譯成 exe,很簡單吧。

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

所以

對于代碼生成的任務來說

重點在如何生成自己想要的C代碼

但經(jīng)常會有人問,Coder支持哪些板子?

看下面這張嵌入式軟件的偽代碼的簡單示意圖。

Simulink 算法模型通過 Coder 生成的是藍色部分,標準C;跟硬件打交道的底層驅(qū)動黑色部分,是手寫代碼。

既然叫Coder,所以本質(zhì)上,它的本職工作就是Simulink模型到C代碼這個步驟,就結(jié)束了。至于C要通過什么編譯器跑到什么硬件上,跟Coder沒多大關(guān)系。

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

那么

為什么會有人問這個問題呢?

Build Process

Coder除了把模型翻譯成代碼的本職工作以外,還額外張羅了一些Build的任務,把C代碼變成可執(zhí)行文件。

為什么說張羅,而不說完成呢,因為Coder本身并沒有編譯的功能,它會后臺調(diào)用你安裝了的編譯器來實現(xiàn) ,看下圖。

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

比如默認下,Coder會調(diào)用VC,使用它內(nèi)置的相應的main文件模板,然后編譯。這就是為什么每次生成代碼,在當前目錄下就會 “莫名其妙” 的生成一個exe程序。如果你不喜歡,那也可以 “Generate code only”。

如果是上面沒列的編譯器,自己也可以把它集成進來,比如構(gòu)造個Template makefile,描述怎么編譯鏈接變成可執(zhí)行文件。

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

好像還是沒解釋所謂硬件支持的問題?

I/O Drive blocks

剛才說的是后臺可以調(diào)用編譯器,構(gòu)造main文件,生成了可執(zhí)行文件,下載到硬件。

在很久很久以前,代碼生成工具為一些板卡提供了I/O驅(qū)動模塊庫,TIC2000/5000/6000,等等。

然后可以做什么?

看下面這張圖,兩端的In/Out就換成圖中的硬件驅(qū)動模塊。舉例的板卡的驅(qū)動庫我沒裝,暫時拿Arduino的庫示意一下,提供了很多下圖中紅框類似的模塊。

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

那么,中間用Simulink/Stateflow搭好算法,兩頭的輸入輸出端口連接上這些硬件驅(qū)動模塊,后臺又做好了編譯工具鏈的支持,就可以實現(xiàn)傳說中的支持某款硬件:一鍵下載到硬件上運行了。

如果使用這種方式來開發(fā)產(chǎn)品,這樣看上去感覺真的很美好~

但是,目測,要做的額外的工作也非常多,所有的要用到的驅(qū)動都需要包裹成Simulink Block的形式,要自動生成所需要的main文件,等等,這也是不小的工作量。

做產(chǎn)品開發(fā),使用哪種 “集成” 方式,仁者見仁。

現(xiàn)在就Coder工具來說,這部分 “對硬件的支持” 從Coder里剝離了,變成了免費的Hardware Support Package下載。用來做做算法的原型測試也不錯。

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

另一個經(jīng)常會問的問題:

代碼生成工具的效率怎么樣?

雖然Coder習慣叫代碼生成工具,但它實際上是個代碼翻譯工具,把Simulink模型“翻譯”成C代碼。

其實就跟金山詞霸,谷歌翻譯一樣,基于你寫的中文翻譯成英文。

“今日天朗氣清,看似極好的日子,私心想若能約上三五好友,結(jié)伴出游,陶冶性情,便是再好不過了。”

再厲害的谷歌翻譯,也翻譯不出這句人話:“今天不想上班。”

所以對于Coder來說,也是一樣,它的目標是C代碼如實的反映出你搭建的Simulink模型結(jié)構(gòu)所表達的信息。在考慮生成的C代碼效率如何時,也不能忽略Simulink模型搭建的效率如何?

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

Simulink Coder生成的C代碼主要用于加速桌面仿真、快速原型、以及HIL測試(被控對象模型也要生成C代碼)。Embedded Coder提供了更多的自定義的途徑,生成高效率的嵌入式C代碼。

但其實,對于我們用戶來說,這些Coder都是 “看不見” 的,沒有所謂打開Embedded Coder工具箱的說法。

我們只需要關(guān)心選擇哪一個系統(tǒng)目標文件(System tareget file)。罷了,下圖?!盁o責任瞎猜一句”,為什么這些后綴名是.tlc呢?因為Coder里面干翻譯這個活的叫TargetLanguageCompiler。

紅框外的.tlc只是針對各自不同的目標稍作了些修改,完成一些額外的事。比如ert_shrlib.tlc,多做了一個工作,把生成的.c.h變成.dll。

這一個小節(jié)說人話就是:選擇ert.tlc。

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

如果對于一些小算法你有什么高效率的實現(xiàn),也可以添加進來。比如說查表,比說說針對某個特殊器件的四則運算,到時候Coder就會替換你的實現(xiàn)方式。

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

當然,一些通用的提高代碼效率的方法,還是可以試試。讓 Coder 基于它的 “經(jīng)驗”,給你一些通用的建議:

關(guān)于利用Simulink模型自動生成C代碼的相關(guān)研究和分析

所以,對于代碼生成的任務來說,除了選擇ert.tlc,點個按鈕之外,再考慮下數(shù)據(jù)管理、代碼結(jié)構(gòu)、文件結(jié)構(gòu)......

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5087

    文章

    19145

    瀏覽量

    306134
  • C代碼
    +關(guān)注

    關(guān)注

    1

    文章

    89

    瀏覽量

    14321
收藏 人收藏

    評論

    相關(guān)推薦

    Simulink與 Simscape的結(jié)合使用

    。用戶可以利用 Simulink 進行系統(tǒng)建模、仿真、測試和驗證,以及生成代碼。 Simscape 簡介 Simscape 是一個用于創(chuàng)建基于物理的
    的頭像 發(fā)表于 12-12 09:31 ?379次閱讀

    Simulink模型仿真與分析技巧

    1. 模型構(gòu)建基礎(chǔ) 1.1 理解系統(tǒng)需求 在開始構(gòu)建模型之前,明確系統(tǒng)的需求和目標是至關(guān)重要的。這包括了解系統(tǒng)的動態(tài)特性、輸入輸出關(guān)系以及預期的性能指標。 1.2 選擇合適的模塊 Simulink
    的頭像 發(fā)表于 12-12 09:23 ?832次閱讀

    探索設(shè)計稿自動生成Flutter代碼的技術(shù)方案

    的工具和方法,最后嘗試大模型生成flutter代碼在項目中的實踐。 一、美團的探索 美團在2021年3月25日發(fā)表了一篇關(guān)于設(shè)計稿自動
    的頭像 發(fā)表于 11-08 10:09 ?952次閱讀
    探索設(shè)計稿<b class='flag-5'>自動</b><b class='flag-5'>生成</b>Flutter<b class='flag-5'>代碼</b>的技術(shù)方案

    如何自動生成verilog代碼

    介紹幾種自動生成verilog代碼的方法。
    的頭像 發(fā)表于 11-05 11:45 ?355次閱讀
    如何<b class='flag-5'>自動</b><b class='flag-5'>生成</b>verilog<b class='flag-5'>代碼</b>

    Matlab/Simulink/Stateflow建模開發(fā)及仿真測試

    matlab 模擬仿真 熟悉Matlab/Simulink/Stateflow建模開發(fā)及仿真測試,熟悉V模型開發(fā)流程。 熟悉自動代碼生成,能
    發(fā)表于 10-24 17:23

    代碼解析工具與自動化流程圖生成解決方案

    ? 摘要:CasePlayer2是一款強大的源代碼解析工具,專門設(shè)計用于分析ANSI C、C、C++以及匯編語言源
    的頭像 發(fā)表于 10-10 13:40 ?263次閱讀

    新的 MathWorks 硬件支持包支持從 MATLAB 和 Simulink 模型到高通 Hexagon 神經(jīng)處理單元架構(gòu)的自動代碼生成

    ? 和 Simulink? 模型自動代碼生成流程。在提高數(shù)據(jù)準確度和標準合規(guī)性的同時,也提升開發(fā)人員的工作流效率。使用 MathWork
    的頭像 發(fā)表于 09-23 11:59 ?290次閱讀

    關(guān)于Makefile自動生成-autotools的使用

    的Makefile并非日常任務,但遇見需要構(gòu)建大型軟件項目時,利用工具自動生成Makefile就顯得尤為關(guān)鍵。接下來,我們將重點介紹一款自動化構(gòu)建工具——Autoto
    的頭像 發(fā)表于 07-25 15:50 ?1523次閱讀
    <b class='flag-5'>關(guān)于</b>Makefile<b class='flag-5'>自動</b><b class='flag-5'>生成</b>-autotools的使用

    ISEDA首發(fā)!大語言模型生成代碼到底好不好使

    在大模型席卷一切、賦能百業(yè)的浪潮里,“碼農(nóng)”也沒能獨善其身。各種代碼自動生成的大模型,似乎描繪了一個人人都能像資深工程師一樣寫
    發(fā)表于 05-16 13:41 ?345次閱讀
    ISEDA首發(fā)!大語言<b class='flag-5'>模型</b><b class='flag-5'>生成</b>的<b class='flag-5'>代碼</b>到底好不好使

    【大語言模型:原理與工程實踐】揭開大語言模型的面紗

    大語言模型(LLM)是人工智能領(lǐng)域的尖端技術(shù),憑借龐大的參數(shù)量和卓越的語言理解能力贏得了廣泛關(guān)注。它基于深度學習,利用神經(jīng)網(wǎng)絡框架來理解和生成自然語言文本。這些模型通過訓練海量的文本數(shù)
    發(fā)表于 05-04 23:55

    Vivado 使用Simulink設(shè)計FIR濾波器

    的Add source中可選擇Add or Create DSP Sources,直接將模型文件(.mdl或.slx)添加至工程中,綜合的時候,系統(tǒng)將自動調(diào)用matlab分析模型文件,
    發(fā)表于 04-17 17:29

    Simulink自動生成代碼現(xiàn)階段的學習筆記

    在車載控制器的軟件開發(fā)中,simulink的身影幾乎隨處可見,主要是在控制算法和控制邏輯的實現(xiàn)。平時看同事點點點就生成代碼了,看起來很簡單,但是實際操作起來確各種磕磕絆絆。 下面記錄了一下步驟作為現(xiàn)階段的學習筆記吧。
    的頭像 發(fā)表于 04-17 10:56 ?3967次閱讀
    <b class='flag-5'>Simulink</b><b class='flag-5'>自動</b><b class='flag-5'>生成</b><b class='flag-5'>代碼</b>現(xiàn)階段的學習筆記

    在做simulink+tasking自動代碼生成時,編譯找不到底層文件是為什么?

    在做simulink+tasking自動代碼生成時,編譯找不到底層文件,將文件添加進去后,會出現(xiàn)RT或NRT等重復定義
    發(fā)表于 02-20 08:06

    Meta推出最新版AI代碼生成模型Code Llama70B

    Meta近日宣布了其最新版本的AI代碼生成模型Code Llama70B,并稱其為“目前最大、最優(yōu)秀的模型”。這一更新標志著Meta在AI代碼
    的頭像 發(fā)表于 01-30 18:21 ?1469次閱讀

    DC2100B/A能不能支持MATLAB/simulink自動代碼生成

    1、硬件方面,微控制器是主要有幾種,計算能力如何,可以支持類似MPC的算法嗎?能不能擴展DSP的控制器? 2、軟件方面,能不能支持MATLAB/simulink自動代碼生成?
    發(fā)表于 01-11 06:56