色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

MATLAB ? 來源:djl ? 2019-09-16 15:41 ? 次閱讀

一直以來,工程師都手工編寫 C 語言實現算法再通過編譯器編譯為機器代碼。能否使用編碼器MATLAB 這樣的高級語言翻譯成 C 語言?大多數工程師認為這是可行的——理論來說。

但實際上是否可行?

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

面向工業流程或只是處于研發階段?

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

- 對比 MATLAB 和 C 代碼 -

以下面這個簡單的 MATLAB 乘法函數為例。

function c = myMult (a, b)

% Multiply two inputs

c = a * b;

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

#include "myMult.h"

doublemyMult (doublea,doubleb)

{

return a *b;

}

正如所見,生成的代碼清楚地與 MATLAB 代碼相映射。

同樣的 MATLAB 代碼,當給定兩個矩陣輸入時,在生成的 C 代碼中會包含三層嵌套的 for 循環:

#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 )];

}

}

}

}

推薦

- 三步迭代工作流程 -

上述簡單的函數可以在一個步驟中實現。但是對于更多的實際項目來說,我們推薦使用三步迭代工作流程的結構化方法:

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

準備好需要生成代碼的算法。檢驗并修改 MATLAB 代碼來引入生成 C 代碼的要素,使用支持代碼生成的 MATLAB 語言和函數。

使用默認設置測試 MATLAB 代碼生成時的可讀性。通過生成并執行 MEX 文件來檢查運行中的錯誤。如果運行成功,則進行下一步。如果不成功,則重復第一步直到能生成一個 MEX 函數。

生成 C 代碼或保留第二步的 MEX 函數。你可以通過迭代 MATLAB 代碼來優化生成的 C 代碼(外觀、內存和速度)或 MEX 函數(性能)。

MATLAB Coder app 會引導你在MATLAB環境中完成這一迭代過程:

分析你的 MATLAB 代碼,提供輸入數據的類型和大小

生成一個 MEX 函數,測試你的 MATLAB 代碼是否準備好

執行 MEX 函數,檢查運行錯誤

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

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

左:自動檢測不支持代碼生成的特征和函數。

右:自動分析和建議輸入數據的類型和大小。

- 實際生成代碼的限制 -

當你準備好代碼生成的 MATLAB 算法時,你需要考慮到 MATLAB 和 C 代碼的差別導致的限制,包括:

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

數組語言。MATLAB 提供豐富的數組運算集,可以簡化數值算法的代碼。C 代碼則需要用明確的 for 循環表達同樣的算法。

動態類型。MATLAB 可以在運行時自動地確定數據類型和大小。C 語言要求對所有變量和函數進行明確的類型聲明。

多態性。MATLAB 函數可以支持多種不同輸入類型,而 C 語言要求固定的類型聲明。在頂層,你必須明確預期的 C 函數聲明。

這里詳細說明多態性。多態性可以根據你的輸入給一行 MATLAB 代碼賦予不同的意義。例如,圖中的函數可以表示標量乘法,向量點積,或者矩陣乘法。另外,你的輸入可以是不同的數據類型(邏輯值,整形,浮點數,定點數),也可以是實數或復數。

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

MATLAB 強大的算法開發環境體現于當你創建算法時,不需要考慮實現的具體細節。但是,對于等效的 C 代碼,你不得不明確操作的含義。例如上述案例,MATLAB 代碼可以被翻譯成一行返回 B*C 的值的 C 代碼:

doublefoo (doubleb,doublec)

{

return b * c;

}

或者,它可以被翻譯成 11 行由 3 層 for 循環組成的將兩個矩陣相乘的 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 )];

}

}

}

}

- 多核代碼生成和其他優化方法 -

在 MATLAB 中,迭代過程互相獨立的 for 循環可以簡單地通過將 for 替換為 parfor 實現并行運行。MATLAB Coder 使用 Open Multiprocessing (OpenMP)應用程序接口來支持 parfor 循環中的共享內存和多核代碼生成。OpenMP 被很多 C 編譯器(例如 Microsoft Visual Studio Professional)支持 。

你可以使用有 Embedded Coder 的 MATLAB Coder 來進一步優化代碼效率并定制生成的代碼。Embedded Coder 提供對生成的代碼的函數、文件和數據的細粒度控制的優化。

例如你可以使用存儲類來控制生成的代碼中全局變量的聲明和定義,并使用代碼生成模板來自定義生成的代碼中的橫幅和注釋。Embedded Coder 還可以通過使用代碼替換庫來提高代碼效率,代碼替換庫可以使用為 ARM Cortex-A 和 ARM Cortex-M 等流行的處理器而優化過的實現來替換某些運算符和函數。

- 測試生成的代碼 -

在開發 MATLAB 算法時,你可以創建單元測試來驗證算法是否能產生你預期的結果。使用 MATLAB 單元測試框架編寫的測試可以被用于驗證生成的代碼的運行情況是否與 MATLAB 算法一致。使用 Embedded Coder 你可以結合 SIL 和 PIL 在測試生成的獨立代碼或庫時實現單元測試的重用。

- 自動化工作流程 -

MATLAB Coder 保證了將 MATLAB 算法轉換為 C 代碼的自動化工作流程。這個工作流程可以花費更少的時間編寫和調試低C代碼,而有更多的時間用于開發、測試和調優設計。

通過 MATLAB 中的黃金參考,包括算法和測試平臺,你可以更快地將算法移植到 C 代碼中。MATLAB 單元測試以及 Embedded Coder 的 SIL 和 PIL 測試框架等自動化工具,可以讓你全面而系統地測試MATLAB 代碼和 C 代碼。無論你是在傳統 的PC端,Web 服務器,移動設備,還是嵌入式處理器上實現設計,MATLAB Coder 將幫助您更快地從 MATLAB 生成 C 代碼,并減少手工錯誤。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7067

    瀏覽量

    89108
  • 函數
    +關注

    關注

    3

    文章

    4333

    瀏覽量

    62687
  • C代碼
    +關注

    關注

    1

    文章

    89

    瀏覽量

    14307
收藏 人收藏

    評論

    相關推薦

    STM32CubeMX生成代碼,是怎樣的HAL架構?

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

    Simulink與 MATLAB 的結合使用 Simulink中的信號處理方法

    在工程和科學研究中,信號處理是一個重要的領域,涉及到信號的采集、分析、處理和生成MATLAB 提供了豐富的信號處理工具箱,而 Simulink 提供了一個直觀的圖形界面,使得復雜的信號處理系統可以
    的頭像 發表于 12-12 09:25 ?362次閱讀

    探索設計稿自動生成Flutter代碼的技術方案

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

    如何自動生成verilog代碼

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

    Matlab/Simulink/Stateflow建模開發及仿真測試

    matlab 模擬仿真 熟悉Matlab/Simulink/Stateflow建模開發及仿真測試,熟悉V模型開發流程。 熟悉自動代碼生成,能夠編寫或者配置自動
    發表于 10-24 17:23

    新的 MathWorks 硬件支持包支持從 MATLAB 和 Simulink 模型到高通 Hexagon 神經處理單元架構的自動化代碼生成

    ? 和 Simulink? 模型的自動化代碼生成流程。在提高數據準確度和標準合規性的同時,也提升開發人員的工作流效率。使用 MathWorks 軟件和基于模型的設計,工程師能夠
    的頭像 發表于 09-23 11:59 ?284次閱讀

    hex文件如何查看原c語言代碼

    是處理器可以直接執行的指令,而 C 語言代碼則是人類可讀的高級編程語言代碼。 然而,如果你想要從 .hex 文件中獲取一些有用的信息或者對程序進行分析,你可以考慮以下幾種方法: 反匯編
    的頭像 發表于 09-02 10:37 ?2426次閱讀

    探討AI編寫代碼技術,以及提高代碼質量的關鍵:靜態代碼分析工具Perforce Helix QAC &amp; Klocwork

    令軟件開發人員夜不能寐的事情比比皆是。如今,他們最關心的問題不再是如何用自己喜歡的語言(CC++、Erlang、Java 等)表達最新的算法,而是人工智能(AI)。 本文中,我們將介紹AI編寫代碼
    的頭像 發表于 06-05 14:10 ?409次閱讀

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

    的問題 — 這些自動生成代碼真的有效嗎?大模型也會犯錯,我們肯定不希望把看似正確的錯誤結果交給用戶,所以需要一個能精確驗證模型生成答案的考官。 近期,芯華章提出了一種對大模型生成
    發表于 05-16 13:41 ?343次閱讀
    ISEDA首發!大語言模型<b class='flag-5'>生成</b>的<b class='flag-5'>代碼</b>到底好不好使

    cubemx總是生成不了MDK項目,怎么解決?

    我在matlab里面就能生成這個的MDK項目,但單獨在cubemx里面就不能生成MDK項目,但能生成IAR的項目。試了很多方法,重裝了,換了
    發表于 04-15 07:31

    【鴻蒙】NAPI 框架生成工具實現流程

    NAPI 框架生成工具 可以根據用戶指定路徑下的 ts(typescript)接口文件一鍵生成 NAPI 框架代碼、業務代碼框架、GN 文件等。在開發 JS 應用與 NAPI 間接口時
    的頭像 發表于 02-28 17:00 ?699次閱讀
    【鴻蒙】NAPI 框架<b class='flag-5'>生成</b>工具實現流程

    生成SPWM波形的方法

    生成SPWM波形的方法? SPWM波形產生是一種常見的數字信號生成技術,用于控制交流電子設備的輸出電壓或電流的形狀,使其接近正弦波。 SPWM波形是由一系列的脈沖信號組成,每個脈沖信號的寬度由一個
    的頭像 發表于 02-06 13:52 ?3019次閱讀

    RL78的代碼生成器發布說明

    電子發燒友網站提供《RL78的代碼生成器發布說明.pdf》資料免費下載
    發表于 01-30 09:48 ?0次下載
    RL78的<b class='flag-5'>代碼</b><b class='flag-5'>生成</b>器發布說明

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

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

    單片機代碼自動生成器程序

    單片機代碼自動生成器是一種能夠幫助開發人員快速生成單片機代碼的工具。它利用了現代計算機技術和算法,能夠根據用戶提供的輸入和需求,自動生成符合
    的頭像 發表于 01-08 14:12 ?3288次閱讀
    主站蜘蛛池模板: 擼擼擼麻豆密臀AV| 国产美女一区二区| 差差差差差差差差免费观看| 簧片在线观看| 最近中文字幕无吗免费高清| 免费精品一区二区三区AA片| 草莓视频在线播放视频| 午夜影院老司机| 久久视热频国只有精品| 亚洲精品久久久久中文字幕二区| 久久精品国产96精品亚洲| 亚洲国产成人爱AV在线播放丿| 久久99re7在线视频精品| 亚洲蜜桃AV色情精品成人| 国产黄大片在线视频| 受被三个攻各种道具PLAY| 高hbl双性浪荡古代| 日本久久久久久久做爰片日本| 国产国拍精品AV在线观看| 一本道久在线综合道| 青青伊人久久| 国产1769一七六九视频在线| 亚洲日本天堂在线| 欧美性猛交AAA片| 国语对白老女人8av| 亚洲精品国产AV成人毛片| 两个洞一起插哦!好刺激| 夫妻主vk| 2019夜夜| 日本国产成人精品无码区在线网站 | 又黄又湿免费高清视频| 久久精品成人免费网站| 伧理片午夜伧理片| 一个人在线观看免费高清视频| 久久深夜视频| 国产福利高清在线视频| 97ganmeizi| 日本精品久久久久中文字幕 1 | 精品无码人妻一区二区免费AV| jizz丝袜| 重口味av|