chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

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

MATLAB ? 來源:djl ? 2019-09-16 15:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

但實際上是否可行?

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

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

MATLAB Coder 的使用技巧和最佳實踐可以直接回答以上問題,這里還將分享行業(yè)將 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 循環(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 )];

}

}

}

}

推薦!

- 三步迭代工作流程 -

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

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

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

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

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

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

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

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

執(zhí)行 MEX 函數,檢查運行錯誤

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

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

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

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

- 實際生成代碼的限制 -

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

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

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

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

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

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

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

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

doublefoo (doubleb,doublec)

{

return b * c;

}

或者,它可以被翻譯成 11 行由 3 層 for 循環(huán)組成的將兩個矩陣相乘的 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 中,迭代過程互相獨立的 for 循環(huán)可以簡單地通過將 for 替換為 parfor 實現并行運行。MATLAB Coder 使用 Open Multiprocessing (OpenMP)應用程序接口來支持 parfor 循環(huán)中的共享內存和多核代碼生成。OpenMP 被很多 C 編譯器(例如 Microsoft Visual Studio Professional)支持 。

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

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

- 測試生成的代碼 -

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

- 自動化工作流程 -

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

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

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

    關注

    8

    文章

    7332

    瀏覽量

    94659
  • 函數
    +關注

    關注

    3

    文章

    4416

    瀏覽量

    67440
  • C代碼
    +關注

    關注

    1

    文章

    90

    瀏覽量

    15173
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    國民技術發(fā)布N32Cube芯片配置與初始化代碼生成工具

    1月30日,國民技術(NSING)正式發(fā)布N32Cube——芯片配置與初始化代碼生成工具,讓時鐘、引腳與外設的配置一目了然、輕松上手!
    的頭像 發(fā)表于 02-02 15:26 ?468次閱讀
    國民技術發(fā)布N32Cube芯片配置與初始化<b class='flag-5'>代碼</b><b class='flag-5'>生成</b>工具

    如何將Primus生成的波形文件導入MATLAB

    VCD 文件及其查看器,如 GTKWave,擅長記錄和展示波形,而 MATLAB 擅長對復雜數據進行計算、分析和可視化。在項目設計開發(fā)階段,有時候,我們需要將 EDA 工具生成的波形數據,導入到 MATLAB 中進行更深入的分析
    的頭像 發(fā)表于 12-23 14:22 ?539次閱讀

    使用Simulink自動生成浮點運算HDL代碼(Part 1)

    引言 想要實現浮點運算功能,如果自己寫Verilog代碼,需要花費較多的時間和精力。好在Simulink HDL Coder工具箱提供了自動代碼生成技術。下圖展示了HDL Coder如何生成
    發(fā)表于 10-22 06:48

    HarmonyOSAI編程編輯區(qū)代碼生成

    CodeGenie提供Inline Edit能力,支持在編輯窗口中通過自然語言進行問答,基于上下文智能生成代碼片段,提升代碼可讀性。 當前有以下兩種方式喚醒Inline Edit對話框: 在
    發(fā)表于 08-20 15:24

    請問如何使用 PinConfigure 工具生成 GPIO 代碼文件和 OrCAD/Protel IC 組件?

    的位置; 4. 點擊生成代碼,生成設置好的GPIO初始代碼(.c文件); 5. 單擊“運行 NuCAD”以
    發(fā)表于 08-18 07:32

    電動汽車用異步電動機混合控制系統(tǒng)的研究

    Matlab 和 DSP之間的連接工具 Real TimeWorkshop 生成混合控制的C語言程序,并編譯、下載和調試,最終控制一臺小功率鼠籠式異步電動機,驗證了混合控制方案的可行性。 純分享帖,點擊下方
    發(fā)表于 07-24 11:51

    無刷電機小波神經網絡轉子位置檢測方法研究

    MATLAB/SIMULINK工具對該方法進行驗證,實驗結果表明該方法在全程速度下效果良好。 純分享帖,點擊下方附件免費獲取完整資料~~~ *附件:無刷電機小波神經網絡轉子位置檢測方法
    發(fā)表于 06-25 13:06

    用CubeMX生成代碼時會將main.c文件中的漢字變成亂碼,怎么解決?

    使用CubeMX生成代碼時,經常會遇到原main.c文件中的漢字全部變成亂碼,如下圖所示: 將這些亂碼字符重新修改后,只要再次用CubeMX生成
    發(fā)表于 06-23 08:02

    OptiSystem應用:用MATLAB組件實現振幅調制

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

    怎么利用matlab得到95%,80%和70%的置信區(qū)間,并生成不同區(qū)間下的功率誤差貝塔分布?

    matlab仿真 matlab新手,怎么利用matlab得到95%,80%和70%的置信區(qū)間,并生成不同區(qū)間下的功率誤差貝塔分布
    發(fā)表于 04-09 01:21

    (專家著作,建議收藏)電機的數學研究方法

    本魯企圖系統(tǒng)地説明電機主要的、最新的數學研究方法。本需的材料在足夠的程度上已包括用于研究電機過渡狀態(tài)和穩(wěn)定 狀態(tài)的獨特范圓。這些材料應用已經廣泛流行的最新數學分析作為它 的湛礎。電機過渡狀態(tài)和穩(wěn)定狀
    發(fā)表于 04-01 15:02

    直流電機控制方法Matlab仿真研究

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

    為什么MotorControl Workbench無法生成代碼?

    我使用MotorControl Workbench5.4.4生成單電機驅動代碼,使用正交編碼器精度1024,檢查引腳沒問題后,進入生成頁面,識別到STM32CubeMX版本為6.12.1,選擇編譯器為Keil5,Pack包選項選
    發(fā)表于 03-14 06:28

    cubemx生成HAL庫+FreeRTOS,當編寫程序時卻代碼無法自動提示怎么解決?

    時,發(fā)現它提示stm32f1xx.h文件未被找到,但這整個工程是cubemx生成的,文件路徑下有這個文件,并且也在C/C++中添加了這個文件所在的路徑,并且編譯時也沒提示錯誤,在網上也找不到解決
    發(fā)表于 03-12 08:21

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

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