【问题标题】:how to use generated code from matlab如何使用matlab生成的代码
【发布时间】:2016-08-30 21:50:26
【问题描述】:

我想在 Matlab 中使用 C 编码器。这将 m 代码转换为 C 代码。 我使用一个简单的函数来添加 5 个数字。 生成代码时,有很多 C 和 H 文件。 当然,您可以选择您需要的代码并将其导入您的代码中,但这不是本练习的重点,因为当 matlab 代码变得更加困难时,这将不再可能。

Matlab 提供一个 main.c 文件和一个 .mk 文件。

/* 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;

}

当我在树莓派上运行它时

gcc -o test1 main.c

它给了我对所有函数的未定义引用... 任何想法出了什么问题?

【问题讨论】:

  • 你的意图是什么?您希望在 pi 上构建代码并在那里运行,还是在 PC 上构建(交叉编译)代码然后在 pi 上运行?
  • 是的。我正在从 adc 读取值,并希望使用在 Matlab 中生成的 C 代码对此数据执行 fft。但我想从一个简单的例子开始来理解工作流程
  • 所以代码将在PC上生成,并在RPI上编译
  • 好的,现在可以了!在 matlab 中,您可以选择“将所有函数放在 1 个文件中”。因此,您会从 matlab 中的原始 m 文件中获得 1 个包含所有功能的 c 文件。您可以只编写一个 main 并将所有 c 和头文件放在同一目录中,然后将它们包含在您的代码中。相当混乱,但它有效:)

标签: c matlab matlab-coder


【解决方案1】:

您还需要编译其他 C 文件以及您的 main.c。如果main.c 与生成的代码在同一目录中,您应该可以这样做:

gcc -o test1 *.c

如果生成的代码在另一个目录中,那么你可以这样做:

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

【讨论】:

    【解决方案2】:

    您必须使用生成的 makefile(mk 文件)来构建它,以便它与正确的 Matlab 库链接 - 这是定义这些函数的地方:

    $ make -f test.mk
    

    【讨论】:

    • 这给了我这个错误:'som_rtw.mk:264: *** target pattern contains no '%'。停止。'当我检查 .mk 文件中的第 264 行时,它说: %.obj : $(MATLAB_ROOT)/rtw/c/src/%.c $(CC) $(CFLAGS) -Fo"$@" $(subst / ,\,"$
    • 你是不是在windows下生成了C-Code,现在只把mk和c-file传给了Raspberry?如果是这样,那么显然无法编译,因为缺少通用的 MATLAB 接口文件(见上一行,它试图在 $(MATLAB_ROOT)/rtw/c/src/ 中查找文件)
    • 如果你试图在另一个系统上编译代码而不是它生成的系统,你需要复制所有文件。但是,您需要针对您正在编译的平台使用 MATLAB 库。请参阅www-rohan.sdsu.edu/doc/matlab/toolbox/compiler/ch05ge19.html - 特别是独立应用程序需要为每个将执行编译器生成的代码的平台购买 MATLAB C/C++ 数学库。
    • 我在 Windows 中生成代码,但我选择该代码用于带有 ARM Cortex 芯片的设备。然后我将所有文件放在树莓派上的一个目录中并运行 make 命令,这给了我错误
    • Pi 上将没有您需要的库。上述库的链接适用于产品 MATLAB Compiler,而不是 MATLAB Coder。可以使用packNGo打包代码等文件。
    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 2011-09-17
    • 2017-12-06
    • 1970-01-01
    • 2021-05-13
    • 2017-07-06
    • 2017-05-11
    • 2010-12-10
    相关资源
    最近更新 更多