在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

分享使用 MATLAB 生成 C 代碼的方法和研究

MATLAB ? 來(lái)源:djl ? 2019-09-16 15:41 ? 次閱讀

一直以來(lái),工程師都手工編寫(xiě) C 語(yǔ)言實(shí)現(xiàn)算法再通過(guò)編譯器編譯為機(jī)器代碼。能否使用編碼器MATLAB 這樣的高級(jí)語(yǔ)言翻譯成 C 語(yǔ)言?大多數(shù)工程師認(rèn)為這是可行的——理論來(lái)說(shuō)。

但實(shí)際上是否可行?

生成的代碼是可讀性如何?效率如何?執(zhí)行速度如何?

面向工業(yè)流程或只是處于研發(fā)階段?

MATLAB Coder 的使用技巧和最佳實(shí)踐可以直接回答以上問(wèn)題,這里還將分享行業(yè)將 MATLAB 生成 C 代碼的成功經(jīng)驗(yàn)和應(yīng)用案例(包括 Delphi、Baker Hughes、iSonea、dorsaVi 等)。

- 對(duì)比 MATLAB 和 C 代碼 -

以下面這個(gè)簡(jiǎn)單的 MATLAB 乘法函數(shù)為例。

function c = myMult (a, b)

% Multiply two inputs

c = a * b;

給定標(biāo)量輸入,MATLAB Coder 可以生成下面的 C 代碼:

#include "myMult.h"

doublemyMult (doublea,doubleb)

{

return a *b;

}

正如所見(jiàn),生成的代碼清楚地與 MATLAB 代碼相映射。

同樣的 MATLAB 代碼,當(dāng)給定兩個(gè)矩陣輸入時(shí),在生成的 C 代碼中會(huì)包含三層嵌套的 for 循環(huán):

#include "myMult.h"

void myMult (const doublea[12],const doubleb[20],doublec[15],)

{

inti0;

inti1;

inti2;

for(i0 = 0; i0 < 3; i0++)? {

for(i1 = 0; i1 < 5; i1++)? {

c[i0 + 3 * i1] = 0.0;

for(i2 = 0; i2 < 4; i2++)? {

c[i0 + 3 * i1] += a[i0 + 3 * i2] * b[i2 + (i1 << 2 )];

}

}

}

}

推薦!

- 三步迭代工作流程 -

上述簡(jiǎn)單的函數(shù)可以在一個(gè)步驟中實(shí)現(xiàn)。但是對(duì)于更多的實(shí)際項(xiàng)目來(lái)說(shuō),我們推薦使用三步迭代工作流程的結(jié)構(gòu)化方法:

分享使用 MATLAB 生成 C 代碼的方法和研究

準(zhǔn)備好需要生成代碼的算法。檢驗(yàn)并修改 MATLAB 代碼來(lái)引入生成 C 代碼的要素,使用支持代碼生成的 MATLAB 語(yǔ)言和函數(shù)。

使用默認(rèn)設(shè)置測(cè)試 MATLAB 代碼生成時(shí)的可讀性。通過(guò)生成并執(zhí)行 MEX 文件來(lái)檢查運(yùn)行中的錯(cuò)誤。如果運(yùn)行成功,則進(jìn)行下一步。如果不成功,則重復(fù)第一步直到能生成一個(gè) MEX 函數(shù)。

生成 C 代碼或保留第二步的 MEX 函數(shù)。你可以通過(guò)迭代 MATLAB 代碼來(lái)優(yōu)化生成的 C 代碼(外觀(guān)、內(nèi)存和速度)或 MEX 函數(shù)(性能)。

MATLAB Coder app 會(huì)引導(dǎo)你在MATLAB環(huán)境中完成這一迭代過(guò)程:

分析你的 MATLAB 代碼,提供輸入數(shù)據(jù)的類(lèi)型和大小

生成一個(gè) MEX 函數(shù),測(cè)試你的 MATLAB 代碼是否準(zhǔn)備好

執(zhí)行 MEX 函數(shù),檢查運(yùn)行錯(cuò)誤

等效的命令行函數(shù)提供同樣的功能,因此你可以生成代碼作為腳本或函數(shù)的一部分。

分享使用 MATLAB 生成 C 代碼的方法和研究

左:自動(dòng)檢測(cè)不支持代碼生成的特征和函數(shù)。

右:自動(dòng)分析和建議輸入數(shù)據(jù)的類(lèi)型和大小。

- 實(shí)際生成代碼的限制 -

當(dāng)你準(zhǔn)備好代碼生成的 MATLAB 算法時(shí),你需要考慮到 MATLAB 和 C 代碼的差別導(dǎo)致的限制,包括:

內(nèi)存分配。在 MATLAB 中,內(nèi)存分配是自動(dòng)的。在 C 代碼中,內(nèi)存分配則是手動(dòng)的——可以是靜態(tài)(static),動(dòng)態(tài)(malloc),或者堆棧(局部變量)。

數(shù)組語(yǔ)言。MATLAB 提供豐富的數(shù)組運(yùn)算集,可以簡(jiǎn)化數(shù)值算法的代碼。C 代碼則需要用明確的 for 循環(huán)表達(dá)同樣的算法。

動(dòng)態(tài)類(lèi)型。MATLAB 可以在運(yùn)行時(shí)自動(dòng)地確定數(shù)據(jù)類(lèi)型和大小。C 語(yǔ)言要求對(duì)所有變量和函數(shù)進(jìn)行明確的類(lèi)型聲明。

多態(tài)性。MATLAB 函數(shù)可以支持多種不同輸入類(lèi)型,而 C 語(yǔ)言要求固定的類(lèi)型聲明。在頂層,你必須明確預(yù)期的 C 函數(shù)聲明。

這里詳細(xì)說(shuō)明多態(tài)性。多態(tài)性可以根據(jù)你的輸入給一行 MATLAB 代碼賦予不同的意義。例如,圖中的函數(shù)可以表示標(biāo)量乘法,向量點(diǎn)積,或者矩陣乘法。另外,你的輸入可以是不同的數(shù)據(jù)類(lèi)型(邏輯值,整形,浮點(diǎn)數(shù),定點(diǎn)數(shù)),也可以是實(shí)數(shù)或復(fù)數(shù)。

分享使用 MATLAB 生成 C 代碼的方法和研究

MATLAB 強(qiáng)大的算法開(kāi)發(fā)環(huán)境體現(xiàn)于當(dāng)你創(chuàng)建算法時(shí),不需要考慮實(shí)現(xiàn)的具體細(xì)節(jié)。但是,對(duì)于等效的 C 代碼,你不得不明確操作的含義。例如上述案例,MATLAB 代碼可以被翻譯成一行返回 B*C 的值的 C 代碼:

doublefoo (doubleb,doublec)

{

return b * c;

}

或者,它可以被翻譯成 11 行由 3 層 for 循環(huán)組成的將兩個(gè)矩陣相乘的 C 代碼:

void myMult (const doublea[12],const doubleb[20],doublec[15],)

{

inti0;

inti1;

inti2;

for(i0 = 0; i0 < 3; i0++)? {

for(i1 = 0; i1 < 5; i1++)? {

c[i0 + 3 * i1] = 0.0;

for(i2 = 0; i2 < 4; i2++)? {

c[i0 + 3 * i1] += a[i0 + 3 * i2] * b[i2 + (i1 << 2 )];

}

}

}

}

- 多核代碼生成和其他優(yōu)化方法 -

在 MATLAB 中,迭代過(guò)程互相獨(dú)立的 for 循環(huán)可以簡(jiǎn)單地通過(guò)將 for 替換為 parfor 實(shí)現(xiàn)并行運(yùn)行。MATLAB Coder 使用 Open Multiprocessing (OpenMP)應(yīng)用程序接口來(lái)支持 parfor 循環(huán)中的共享內(nèi)存和多核代碼生成。OpenMP 被很多 C 編譯器(例如 Microsoft Visual Studio Professional)支持 。

你可以使用有 Embedded Coder 的 MATLAB Coder 來(lái)進(jìn)一步優(yōu)化代碼效率并定制生成的代碼。Embedded Coder 提供對(duì)生成的代碼的函數(shù)、文件和數(shù)據(jù)的細(xì)粒度控制的優(yōu)化。

例如你可以使用存儲(chǔ)類(lèi)來(lái)控制生成的代碼中全局變量的聲明和定義,并使用代碼生成模板來(lái)自定義生成的代碼中的橫幅和注釋。Embedded Coder 還可以通過(guò)使用代碼替換庫(kù)來(lái)提高代碼效率,代碼替換庫(kù)可以使用為 ARM Cortex-A 和 ARM Cortex-M 等流行的處理器而優(yōu)化過(guò)的實(shí)現(xiàn)來(lái)替換某些運(yùn)算符和函數(shù)。

- 測(cè)試生成的代碼 -

在開(kāi)發(fā) MATLAB 算法時(shí),你可以創(chuàng)建單元測(cè)試來(lái)驗(yàn)證算法是否能產(chǎn)生你預(yù)期的結(jié)果。使用 MATLAB 單元測(cè)試框架編寫(xiě)的測(cè)試可以被用于驗(yàn)證生成的代碼的運(yùn)行情況是否與 MATLAB 算法一致。使用 Embedded Coder 你可以結(jié)合 SIL 和 PIL 在測(cè)試生成的獨(dú)立代碼或庫(kù)時(shí)實(shí)現(xiàn)單元測(cè)試的重用。

- 自動(dòng)化工作流程 -

MATLAB Coder 保證了將 MATLAB 算法轉(zhuǎn)換為 C 代碼的自動(dòng)化工作流程。這個(gè)工作流程可以花費(fèi)更少的時(shí)間編寫(xiě)和調(diào)試低C代碼,而有更多的時(shí)間用于開(kāi)發(fā)、測(cè)試和調(diào)優(yōu)設(shè)計(jì)。

通過(guò) MATLAB 中的黃金參考,包括算法和測(cè)試平臺(tái),你可以更快地將算法移植到 C 代碼中。MATLAB 單元測(cè)試以及 Embedded Coder 的 SIL 和 PIL 測(cè)試框架等自動(dòng)化工具,可以讓你全面而系統(tǒng)地測(cè)試MATLAB 代碼和 C 代碼。無(wú)論你是在傳統(tǒng) 的PC端,Web 服務(wù)器,移動(dòng)設(shè)備,還是嵌入式處理器上實(shí)現(xiàn)設(shè)計(jì),MATLAB Coder 將幫助您更快地從 MATLAB 生成 C 代碼,并減少手工錯(cuò)誤。

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

    關(guān)注

    8

    文章

    7246

    瀏覽量

    91214
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4372

    瀏覽量

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

    關(guān)注

    1

    文章

    90

    瀏覽量

    14692
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    OptiSystem應(yīng)用:用MATLAB組件實(shí)現(xiàn)振幅調(diào)制

    本案例展示了在OptiSystem中調(diào)用MATLAB代碼實(shí)現(xiàn)振幅調(diào)制。 一、建模目標(biāo) 案例中,我們生成兩束功率為0dBm,頻率分別為192.7THz、191THz的載波,合束之后經(jīng)過(guò)自定義脈沖的調(diào)制
    發(fā)表于 06-13 08:46

    直流電機(jī)控制方法Matlab仿真研究

    針對(duì)無(wú)刷直流電機(jī)的控制方法進(jìn)行了深入研究 。根據(jù)無(wú)刷直流電機(jī)實(shí)際物理模型建立相應(yīng)的數(shù)學(xué)模型,電機(jī)使用雙閉環(huán)進(jìn)行控制 。根據(jù)電機(jī)的實(shí)際工作特點(diǎn),使用模糊自適應(yīng) PID 算法替代常規(guī) PID 算法建立
    發(fā)表于 03-27 12:15

    為什么MotorControl Workbench無(wú)法生成代碼

    我使用MotorControl Workbench5.4.4生成單電機(jī)驅(qū)動(dòng)代碼,使用正交編碼器精度1024,檢查引腳沒(méi)問(wèn)題后,進(jìn)入生成頁(yè)面,識(shí)別到STM32CubeMX版本為6.12.1,選擇編譯器為Keil5,Pack包選項(xiàng)選
    發(fā)表于 03-14 06:28

    STM32CubeMX用于STM32配置和初始化C代碼生成

    電子發(fā)燒友網(wǎng)站提供《STM32CubeMX用于STM32配置和初始化C代碼生成.pdf》資料免費(fèi)下載
    發(fā)表于 02-26 17:32 ?658次下載

    OptiSystem應(yīng)用:用MATLAB組件實(shí)現(xiàn)振幅調(diào)制

    本案例展示了在OptiSystem中調(diào)用MATLAB代碼實(shí)現(xiàn)振幅調(diào)制。 一、建模目標(biāo) 案例中,我們生成兩束功率為0dBm,頻率分別為192.7THz、191THz的載波,合束之后經(jīng)過(guò)自定義脈沖的調(diào)制
    發(fā)表于 02-14 09:39

    自動(dòng)駕駛測(cè)試場(chǎng)景庫(kù)的構(gòu)建及評(píng)價(jià)方法之場(chǎng)景生成方法研究

    ? 自動(dòng)駕駛測(cè)試場(chǎng)景庫(kù)的構(gòu)建及評(píng)價(jià)方法(二) 場(chǎng)景生成方法研究 一、研究背景 ? 智能網(wǎng)聯(lián)汽車(chē)面臨多維度安全挑戰(zhàn),其中預(yù)期功能安全是重要組成部分。在當(dāng)前階段,智能網(wǎng)聯(lián)汽車(chē)產(chǎn)業(yè)正處于前所
    的頭像 發(fā)表于 01-22 10:51 ?1339次閱讀
    自動(dòng)駕駛測(cè)試場(chǎng)景庫(kù)的構(gòu)建及評(píng)價(jià)<b class='flag-5'>方法</b>之場(chǎng)景<b class='flag-5'>生成方法</b><b class='flag-5'>研究</b>

    STM32CubeMX生成代碼,是怎樣的HAL架構(gòu)?

    需要注意,CubeMX只是一個(gè)初始化工具,它只是幫你完成了HAL庫(kù)外設(shè)和時(shí)鐘的初始化,具體程序的編寫(xiě)還需要查閱HAL庫(kù)的說(shuō)明,使用相關(guān)函數(shù)實(shí)現(xiàn)你想實(shí)現(xiàn)的功能。CubeMX生成代碼包含了豐富的注釋
    的頭像 發(fā)表于 01-01 21:01 ?701次閱讀
    STM32CubeMX<b class='flag-5'>生成</b>的<b class='flag-5'>代碼</b>,是怎樣的HAL架構(gòu)?

    Simulink與 MATLAB 的結(jié)合使用 Simulink中的信號(hào)處理方法

    在工程和科學(xué)研究中,信號(hào)處理是一個(gè)重要的領(lǐng)域,涉及到信號(hào)的采集、分析、處理和生成MATLAB 提供了豐富的信號(hào)處理工具箱,而 Simulink 提供了一個(gè)直觀(guān)的圖形界面,使得復(fù)雜的信號(hào)處理系統(tǒng)可以
    的頭像 發(fā)表于 12-12 09:25 ?1359次閱讀

    PWM信號(hào)生成方法 PWM調(diào)制原理講解

    PWM(脈沖寬度調(diào)制,Pulse Width Modulation)是一種重要的模擬信號(hào)電平數(shù)字編碼方法,在電子技術(shù)和控制領(lǐng)域具有廣泛應(yīng)用。以下是對(duì)PWM信號(hào)生成方法和PWM調(diào)制原理的介紹: PWM
    的頭像 發(fā)表于 11-28 16:34 ?4427次閱讀

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

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

    如何自動(dòng)生成verilog代碼

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

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

    matlab 模擬仿真 熟悉Matlab/Simulink/Stateflow建模開(kāi)發(fā)及仿真測(cè)試,熟悉V模型開(kāi)發(fā)流程。 熟悉自動(dòng)代碼生成,能夠編寫(xiě)或者配置自動(dòng)
    發(fā)表于 10-24 17:23

    代碼解析工具與自動(dòng)化流程圖生成解決方案

    ? 摘要:CasePlayer2是一款強(qiáng)大的源代碼解析工具,專(zhuān)門(mén)設(shè)計(jì)用于分析ANSI CCC++以及匯編語(yǔ)言源代碼,并自動(dòng)化地
    的頭像 發(fā)表于 10-10 13:40 ?821次閱讀

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

    ? 和 Simulink? 模型的自動(dòng)化代碼生成流程。在提高數(shù)據(jù)準(zhǔn)確度和標(biāo)準(zhǔn)合規(guī)性的同時(shí),也提升開(kāi)發(fā)人員的工作流效率。使用 MathWorks 軟件和基于模型的設(shè)計(jì),工程師能夠
    的頭像 發(fā)表于 09-23 11:59 ?534次閱讀

    hex文件如何查看原c語(yǔ)言代碼

    是處理器可以直接執(zhí)行的指令,而 C 語(yǔ)言代碼則是人類(lèi)可讀的高級(jí)編程語(yǔ)言代碼。 然而,如果你想要從 .hex 文件中獲取一些有用的信息或者對(duì)程序進(jìn)行分析,你可以考慮以下幾種方法: 反匯編
    的頭像 發(fā)表于 09-02 10:37 ?4563次閱讀
    主站蜘蛛池模板: 日日噜噜噜夜夜爽爽狠狠 | 亚洲理论视频 | 亚洲第一在线播放 | 男人天堂网2021 | 亚洲欧美网| 美女免费视频是黄的 | 起碰成人免费公开网视频 | 黄色美女网站在线观看 | 欧美成人3d动漫在线播放网站 | 久久婷婷五综合一区二区 | 国产精品29页| 国产日韩精品欧美一区色 | 视频在线观看高清免费大全 | 亚洲国产高清人在线 | 最新sss华人 | 欧美亚洲h在线一区二区 | 成人二区 | 丁香色婷婷 | 亚洲性夜 | 女性一级全黄生活片 | 久久国产精品网 | 一级美女片| 毛片综合| 999久久精品国产 | 人人爱人人爽 | 午夜免费在线观看 | 一区二区三区国模大胆 | 夜夜做夜夜爽 | 手机看片国产免费 | 亚洲一区欧美二区 | 三级毛片免费 | 五月天婷婷电影 | 午夜视频在线网站 | 亚洲jizzjizz在线播放久 | 国产精品丝袜在线观看 | 教官的好爽好深h片段 | 天天操狠狠 | 特级深夜a级毛片免费观看 特级生活片 | 亚洲色图27p | bt 电影天堂 | 欧美伊人久久大香线蕉综合69 |