2016-05-05 7 views
1

Ich möchte den C-Coder in Matlab verwenden. Dies übersetzt einen M-Code in C-Code. Ich benutze eine einfache Funktion, die 5 Zahlen hinzufügt. Wenn der Code generiert wird, gibt es viele C- und H-Dateien. natürlich könnten Sie einfach den Code wählen, den Sie brauchen, und ihn in Ihren Code importieren, aber das ist nicht der Sinn dieser Übung, da dies nicht mehr möglich sein wird, wenn der Matlab-Code schwieriger wird.wie generierten Code von Matlab zu verwenden

Matlab liefert eine main.c-Datei und eine .mk-Datei.

/* Include Files */ 
#include "rt_nonfinite.h" 
#include "som.h" 
#include "main.h" 
#include "som_terminate.h" 
#include "som_initialize.h" 

//Declare all the functions 

int main(int argc, const char * const argv[]){ 
(void)argc; 
(void)argv; 

float x1=10; 
float x2=20; 
float x3=30; 
float x4=40; 
float x5=50; 
float result; 

/* Initialize the application. 
You do not need to do this more than one time. */ 
som_initialize(); 


main_som(); 

result=som(x1,x2,x3,x4,x5); 
printf("%f", result); 

som_terminate(); 
return 0; 

}

Wenn ich dies auf einem Himbeer-pi laufen mit

gcc -o test1 main.c 

Es gibt mir undefinierte Referenzen auf alle Funktionen ... Irgendwelche Ideen, was falsch gelaufen ist?

+1

Was ist deine Absicht? Möchtest du den Code auf dem Pi erstellen und ihn dort ausführen, oder (kompilieren) den Code auf dem PC erstellen und dann einfach auf dem Pi ausführen? –

+0

Ja. Ich lese Werte von einem adc und möchte ein fft auf diese Daten mit C-Code in Matlab generiert durchführen. Aber ich möchte mit einem einfachen Beispiel beginnen, um den Workflow zu verstehen – wietjes

+0

So wird der Code auf einem PC generiert und auf dem RPI kompiliert – wietjes

Antwort

1

Sie haben es mit der erzeugten Make-Datei zu bauen (die mk-Datei), so dass es verknüpft mit den richtigen Matlab Bibliotheken - das ist, wo diese Funktionen definiert sind:

$ make -f test.mk 
+0

Das gibt mir diesen Fehler: 'som_rtw.mk:264: *** Zielmuster enthält keine'% '. Halt.' Wenn ich Zeile 264 in der .mk-Datei überprüfe, heißt es:% .obj: $ (MATLAB_ROOT)/rtw/c/src /%. C \t $ (CC) $ (CFLAGS) -Fo "$ @" $ (subst /, \, "$ <") – wietjes

+1

Haben Sie den C-Code unter Windows erzeugt und nur die mk- und c-Datei nach Raspberry übertragen? Wenn ja, dann ist es offensichtlich unmöglich zu kompilieren, da die allgemeinen MATLAB Interface Dateien fehlen (siehe in der obigen Zeile, es versucht Dateien innerhalb von $ (MATLAB_ROOT)/rtw/c/src/zu finden) – tim

+0

Wenn Sie versuchen, die Code auf einem anderen System als es erzeugt wurde, müssen Sie alle Dateien kopieren. Sie benötigen jedoch die MATLAB-Bibliothek für die Plattform, für die Sie kompilieren. Siehe http://www-rohan.sdsu.edu/doc/matlab/toolbox/compiler/ch05ge19.html - besonders Stand-alone-Anwendungen erfordern, dass die MATLAB C/C++ Math Library für jede Plattform gekauft wird, auf der der Compiler generierte Code ist wird durchgeführt. – ThomasH

0

Sie auch die anderen C-Dateien kompilieren zusammen mit Ihrem main.c. Wenn main.c im selben Verzeichnis wie der generierte Code ist, sollten Sie in der Lage sein, nur tun:

gcc -o test1 *.c 

Wenn der generierte Code in einem anderen Verzeichnis ist, dann können Sie so etwas wie:

gcc -o test1 /path/to/code/*.c -I/path/to/code main.c