我有一個 simulink 作業 simulink 模式,其中有一些 s-function,我想用 c 匯出這段代碼并編譯它。我已經嘗試匯出和編譯一個簡單的模式并且它可以作業,但是當我嘗試編譯我的專案的匯出代碼時,我得到了很多錯誤,比如
error: #error Unrecognized use
error: #error Must define one of RT,nNRT, MATLAB_MEX_FILE, SL_INTERNAL, or FIPXT_SHARED_MODULE
error: #error Unhandled case
error: ‘mxArray’ does not name a type mxArray **dlgParams; /* The S-function parameters
error: ‘mxArray’ has not been declared mxArray **)
error: ‘mxArray’ does not name a type mxArray *propVal;
error: ‘RTWSfcnInfo’ does not name a type; did you mean ‘RTWLogInfo’? RTWSfcnInfo sfcnInfo
我使用的主要設定是:
Code generation system target file --> grt.tlc
language --> C
Pack code and artifact --> <name_zip>
Tool chain GNU gcc/g | gmake (64-bit Linux)
default parameter behavior --> tuanble
code interface packaging --> nonreusable function
external mode --> chcked
standar math library --> c 03(ISO)
single output/update function --> checked
i used a fixed step size solver
我使用的是 Ubuntu 18。
源代碼成功生成問題是當我嘗試編譯代碼時。生成代碼后,我會得到一個包含所有源代碼的 zip 檔案夾以及一些我在制作 CMakeLists.txt 時包含的外部頭檔案。我還嘗試使用 .mk 檔案直接編譯代碼,但也遇到了一堆錯誤。這個問題是用 s-function 解決的,因為我構建了一個簡單的 simulink 模式,其源是一個實作動態模型和輸出的 s-function,當我生成代碼并編譯它時,我得到了同樣的錯誤。我還嘗試制作一個沒有 s-function 的簡單模式,這很有效。那么是否有任何可匯出的 s-function 設定
uj5u.com熱心網友回復:
最后我找到了一個我在這里發布的答案,以防其他人遇到我同樣的問題。
我的解決方案是:
首先,一旦您生成了包含所有源代碼和頭檔案的 zip 檔案,打開它并在 Matlab 作業區加載檔案 buldinfo.mat,然后在 Matlab shell 中運行
packNGo(buildInfo)
通過這種方式,您可以生成一個包含所有源代碼和標題的新 .zip,此 .zip 與以前的不同,因為它是扁平的,沒有嵌套檔案夾。
在這個檔案夾中有一個名為 define.txt 的檔案,其中包含一個變數串列,所有這些變數都應該作為標志傳遞給編譯器。例如,在我的情況下,我使用 CMakelists.txt 來設定我使用的這些標志
set(CMAKE_CXX_FLAGS "-Wall -Wextra -DMODEL=test_sum_gain -DNUMST=2 -DNCSTATES=2 -DRT -DUSE_RTMODEL -DON_TARGET_WAIT_FOR_START=0 -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTID01EQ=1 -DEXT_MODE=1 -DMAT_FILE=0 -DONESTEPFCN=1 -DTERMFCN=1 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0")
這取決于您編譯源代碼的方式,但無論如何您應該設定這些變數,我沒有錯,它們只是預編譯器的指令。
這兩件事對我有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/426545.html
