自動生成的代碼支持哪些硬件平臺?前面我們提到了Target Support Package,今天我們再來看看另外兩處引發這個問題的地方。
M配置參數中的硬件實施
硬件實施(Hardware Implementation)設置里給出了代碼生成支持的各種處理器,如下圖所示,我們可以選擇Freescale的MPC 55xx系列的單片機,也可以選擇Infineon的TriCore等等,從這個列表來看,基本上涵蓋了我們平時可以接觸到的大多數單片機。
不過,產品開發過程中,不少公司會跟半導體公司同步,使用半導體公司開發過程中的最新單片機,也有的時候,我們在使用一些比較小眾的單片機,這樣一來,這個列表就可能難以做到面面俱到。所以就有用戶做翻遍了這個列表依然沒有找到自己使用的芯片之后,會跟我們抱怨代碼生成不支持他們使用的單片機。
我們來仔細看一下這個列表,在我們選中一款處理器之后Device details下面都有哪些內容,首先是Number of bits,這里給出了各種數據類型對應的字長,比如char,short,float,double,pointer等,不同的單片機這些數據可能是不同的,比如,對于C語言中的數據類型char,多數情況下都會定義為8個位,而TI的C2000系列的MCU卻把char定義為16個位。long就更是多種多樣了,有的處理器里被定義為32bits,也有的被定義為64bits,TI的C6000 DSP里long是40bits。代碼生成之后,在rtwtypes.h文件里會有這些基本數據類型的定義。如下所示:
typedef signed char int8_T;
typedef unsigned charuint8_T;
typedef shortint16_T;
typedef unsigned shortuint16_T;
typedef intint32_T;
typedef unsigned intuint32_T;
typedef floatreal32_T;
typedef doublereal64_T;
Largest atomic size,最大原子尺寸,定義了整型的最大原子尺寸,同時也給出是否支持浮點類型以及單精度、雙精度浮點的選項。
還有一些,類似于字節順序之類的選項,用以選擇Little Endian還是Big Endian。
如果能從上述列表中找到我們正在使用的處理器,在代碼生成之前有必要將這個選項設置成跟我們一致的處理器。如果這個列表中找不到呢?是否就意味著代碼生成不支持你們的處理器呢?
答案是否定的,我們可以注意一下,在Device vendor下拉菜單的最下面可以找到Custom Processor選項,我們已經知道,針對不同的處理器,在生成的代碼里,有必要做出區分的也就是各種類型的字長、是否支持浮點等設置,既然如此,對于列表中不存在的處理器,只需要在選中Custom Processor之后做一些相關設置即可。
如下圖,在選擇了Custom Processor之后,前面我們提到的各種信息都變成可編輯狀態。
通過人為設置這些選項,可以滿足那些列表中不存在的處理器的要求,所以從這個意義上來講,代碼生成工具支持所有處理器,即便是在現有列表里找不到的處理器,也可以通過自己定制的方式定制字長等信息,實現對這款處理器的支持。
M配置參數中的代碼替換選項
在配置參數里,還有一個可能引起用戶困惑的地方,那就是代碼替換選項(Code Replacement)。在有些版本的MATLAB里面,配置參數:
Configuration Parameters > Code Generation > Interface > Code replacement library
選項里,也列出了不少處理器,下圖是來自于MATLAB R2016b的選項。
這里我們看到了一些ARM處理器,TI的某些處理器等等:
這個選項的目的是為了實現代碼優化,比如,通常我們做除法運算都是通過除法運算符“/”實現,x/y實現x除以y的運算,而有的半導體廠商可能通過專門的除法運算接口,比如divide(x, y),通過這個接口運算,編譯之后的代碼在速度上可能會比x/y更快。
半導體公司如果提供類似一些指令級的優化,通常可以通過代碼替換的方式實現,以剛才提到的除法運算為例,如果半導體公司對某些運算做了優化,并封裝成庫文件的形式,在代碼生成之后,生成的代碼里就沒有“/”實現的除法運算,而是通過divide()實現。
除了半導體公司可能提供這類優化之外,用戶也可以自己做類似的優化,對于一些運算量很大的運算,我們經常使用查表的方式實現,比如,算法中有sine運算,但速度可能難以滿足我們的要求,在工程上,我們通常使用查表的方式實現sine運算,我們也可以通過制作代碼替換庫,并讓算法代碼中不出現標準數學庫里的sin()運算,而是my_sine()等自己定義的由查表實現的運算。
當然,如果我們對速度沒有要求,我們可以無視這個代碼替換選項。
不管替換與否,我們不難看出:
從這個層面上,代碼生成工具也是支持所有處理器的。
很多人關心生成的代碼是否支持某某處理器的疑問,基本上是來自于上述三個原因吧。
-
處理器
+關注
關注
68文章
19400瀏覽量
230742 -
代碼
+關注
關注
30文章
4821瀏覽量
68890
發布評論請先 登錄
相關推薦
評論