不要對自動生成的代碼做任何手工修改,凡是想在代碼中實現的,一定要通過模型和相關配置實現。
是的,我依然堅持這條堅持了近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文章
7256瀏覽量
91850 -
信號
+關注
關注
11文章
2852瀏覽量
78273 -
代碼
+關注
關注
30文章
4900瀏覽量
70725
發布評論請先 登錄
AI時代:不可替代的“人類+”職業技能
貼片電阻和插件電阻可以替換嗎?

若想使用ADS8422IBPFBT是要怎么替換或運作?
TAS5630PHD這個型號跟TAS5630BPHD是不是一樣?可以直接替換嗎?
代碼整潔之道-大師眼中的整潔代碼是什么樣

OPA4330能替換LMV324嗎?
20.0-電磁桿的組裝和實物介紹“這個是就是你想要的“-智能車電磁組 電磁循跡小車

評論