2016-12-07 87 views
0

我目前正試圖用一個C。我對此很新,請耐心等待。Matlab的legacy_code工具 - /在Matlab/Simulink的基於C++代碼庫由Matlab的legacy_code工具來編寫一個包裝函數的捕捉數組

我偶然發現了這個問題,我得到的類成員,其返回數組。

我所做的在現在是遵循Matlab的遺留代碼的例子,尤其是這一個:

Integrate External C++ Object Methods

據我所看到的,legacy_code工具需要一個包裝函數被纏一個方法調用,所以基本上我可以在這個包裝函數中以任何必要的方式操作被調用的返回值。這遠沒有問題。

但是,我不能肯定如何接收來自所調用的方法的信息陣列的然後通過這個數組Matlab/Simulink仿真。

例如一個方法的返回值是一個指向一組信息的指針,讓我們假設,我們知道它所持有的有效信息的長度。

/* Simple example */ 

uint8_t* BUS::answerRcvd() 
{ 
    static int r[10]; 
    int i; 


    srand((unsigned)time(NULL)); 

    for (i = 0; i < 10; ++i) 
    { 
     r[i] = rand(); 
    } 

    return r; 
} 

有沒有一種方法創建一個包裝功能,從而將收到的信息的數組,並沿着它傳遞MATLAB的一種方法?

也許會有來處理數組作爲例如一種可能性uint8_t的單值(如果繼續使用給定的例子),並在普通的matlab函數中傳遞這些值?

[a,b,c] = function() 

我很樂意提供任何建議,非常感謝您提前。

回答

1

好吧,看起來像我找到了解決我的問題。

作爲包裝函數其可以使用下面的圖案

void myfunc(double u1, double u2, double u3, double *y1, double *y2) 
{ 
    *y1=u1; 
    *y2=(u2+u3)/2; 
} 

此包裝功能然後由傳統代碼工具(LCT),爲隨後接口:

def = legacy_code('initialize') 
def.OutputFcnSpec = 'void myfunc(double u1, double u2, double u3, double y1[1], double y2[1])' 

這麼簡單。在C/C++代碼中使用指針命名法/語法,在Matlab上使用數組命名法/語法。

我希望這會幫助像我這樣的人需要一種解決方案來與傳統代碼接口,這些代碼不僅應該接受多個輸入,還應該接受多個輸出。

事後tuuse指針選項是很明顯的,但如果你不這樣做沒什麼兩樣怎麼教你的LCT如何與它的接口,它很容易成爲一個累人的任務。

+0

鏈接到相應的Matlab文檔: http://de.mathworks.com/help/simulink/sfg/integrating-existing-c-functions-into-simulink-models-with-the-legacy-code-tool html的 – RaEyE