matlab轉C語言的操作步驟(1)——基本操作

以求3x3矩陣的逆矩陣爲例:

先看看在matlab中的運行結果:

文章的最後,我們會看看轉換出的C語言函數,在單片機上的運行結果。

 

 

新建一個.m文件(這個文件必須是函數文件,如下圖所示,而不能是腳本文件。而且matlab還有要求,函數名和文件名必須一致),在.m文件中把求逆函數寫好,如下:

在matlab'主窗口的app中找到coder工具,如下:

彈出如下界面,要求我們輸入要轉換的.m文件中所有的函數名。你可以一個個的輸入函數名,也可以瀏覽出那個m文件,這個coder工具會自動識別出函數名。再點擊右下角next,如下圖:

彈出如下窗口,這個窗口要求我們指定函數的形參類型。有兩種方法,第一種方法:在下面的第1個輸入框中,輸入被轉函數的測試語句,這條語句可以有兩種選擇:①直接代入一組合理的形參,調用該函數,②選擇一個調用該函數的m腳本;

然後點擊Autodefine Input Types按鈕,matlab會根據你寫的或選的測試代碼自動確定出形參的類型,如下圖中,我寫的測試語句中,形參爲3x3矩陣,matlab自動把C語言的形參設置成了3x3的double數組,當然,你也可以把第二個框中的double改成single,也即C語言中的float。第二種方法,直接手工指定形參類型,如下圖第2個框所示。

如果被轉的函數中還調用了全局變量,點擊下圖的add global,把全局變量的名稱和類型都填寫上。

點擊next

彈出下圖:點擊check for issues按鈕,matlab會檢測一下你寫的m函數能否轉換成C函數,如果不能,會給出report,告訴你爲什麼不能轉,哪一行代碼導致的不能轉,把bug修改完之後,點擊clear Mex清除剛纔的結果(如果正確的話則不會顯示這個按鈕),再點擊check for issues按鈕重新檢查即可。如果檢測沒問題,右下角的next按鈕就亮了,並閃爍,你可以點擊next了。

 

點擊下圖的generate按鈕,即可生成C函數。在這個界面中,你也可以先選擇一下工具鏈,

 

轉換完之後,如下圖所示。連m文件中的註釋都帶過來了,有意思。

由上圖可見,3X3的double矩陣,轉成C語言之後,是按double [9]來存儲的。矩陣形式的返回值,是從形參地址輸出的。

 

直接把這個函數拷貝到單片機工程中,如下,把運行的結果從串口打印出來:

運行結果如下:

這個結果和直接在matlab中運行的結果一毛一樣,說明轉換出的求逆函數確實沒問題。

需要注意的是,如果你輸入的源矩陣是奇異陣(行列式值爲0)或者接近奇異,在mallab中求逆時會出現錯誤提示,或警告提示,但是轉成C之後,這些錯誤就不會再有提示了。建議把可能會引發bug的地方,直接在m文件中用防護語句都檢測好,再轉換。如下:

轉出的C函數如下:

由於在單片機中編程,沒有bool類型,也沒有true、false定義,我們直接在單片機中定義一個即可:

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章