不要對自動生成的代碼做任何手工修改,凡是想在代碼中實現的,一定要通過模型和相關配置實現。
是的,我依然堅持這條堅持了近10年的原則。
那么問題來了,有人說有些算法速度太慢,比如sine運算,如果使用math庫里提供的sine運算,可能很多應用都接受不了,怎么破?
我們今天就來看看工具提供給我們的代碼替換功能。
通常,在工程上,對于速度要求比較高的應用里,我們不會使用數學庫里的sin()做正弦運算的,更多的時候,我們會使用查表的方式,把信號變化范圍你的數據做成表格,做sine運算時就調用這張表格。我們這里也假設用戶可以自己寫一個查表函數,函數原型如下:
double mysin(double x)
也可能會有人告訴我單片機上我們也不適用double數據類型的,好吧,我這里偷懶,就不再去設置數據類型了,設置數據類型這事大家都會做。
假設有模型如下:
選擇系統目標文件為ert.tlc,默認設置下,生成的代碼如下:
testcr_Y.Out1 = sin(testcr_U.In1);
我們的目標是:
將代碼中的sin()替換成mysine()。
如何操作?
1. 首先做MATLAB命令窗里運行如下命令:crtool
2. 在上述界面下,Tables List里面增加myTable,然后鼠標右鍵在myTable上選擇New Entry,繼續選擇Math Function,然后就是做Math Function列表里選擇sin,在最右側的面板里設置Replacement prototype,比如我們這里將名字設置為mysine。
3. 做完上述設置之后,保存為myTable.m。
4. 再使用上述界面的File菜單下的Generate Registration File生成注冊文件myTableReg。
5. 回到MATLAB命令窗,運行sl_refresh_customizations。
至此,我們已經創建了代碼替換表,并且將其注冊到MATLAB系統。
下面打開模型文件,只需做如下設置:
Configuration Parameters面板下選擇Code Generation,然后選擇Code replacement library,選中myTableReg。
現在,再去生成代碼,你將得到的就是這樣一行代碼:
testcr_Y.Out1 = mysine(testcr_U.In1);
這里面需要注意的是路徑問題不要出錯,還有函數的形成以及返回值的類型要和模型里的相關模塊保持一致。
-
數據
+關注
關注
8文章
7080瀏覽量
89177 -
信號
+關注
關注
11文章
2794瀏覽量
76880 -
代碼
+關注
關注
30文章
4801瀏覽量
68735
發布評論請先 登錄
相關推薦
評論