【问题标题】:C sfunction & RTLABMATLAB中的Cs函数
【发布时间】:2013-11-21 08:55:04
【问题描述】:

我写了一个 C 函数并将其用作 simulink 块。没关系。答案是 10^-14 左右的错误(在 matlab 环境中)...现在我想连接到 RT_LAB,运行我的模型是实时的。

要在 RT_LAB 中执行一个 simulink 模型,我们有 3 个步骤: 1. 编译模型。 2. 加载它。 3.执行模型。因此,如果您有一个无效的模型 U 应该在第一步中出现错误(就像我在完成模型之前所做的那样),我的模型现在编译没有错误,我加载它,但是当我执行它时,答案无效(有没有错误,但也不是有效答案)。

当 RT_LAB 编译模型时,它会将模型转换为 C 代码。我认为这部分可能有问题,生成错误的 C 代码。这里有人用过 RT_LAB 吗? 如何找到问题所在?

【问题讨论】:

  • 你不能使用正确的标点和间距吗?有那么难吗?
  • 对不起。我会尝试更多:)。

标签: c matlab real-time simulink


【解决方案1】:

我这样定义我的函数:

void my_fun (int input1,float *input2,....,long double *output1,....)
{
/*

my codes....

*/

return;
}

在 C Sfunnction 中,我们的输入和输出是一种在 "simstruc.h" 中定义的指针,其中使用 int_T 代替 int Sfuntion 或使用 real_T 代替 float、double 或 long double,我注意到所有Sfunction 中的默认函数是static void,没有return,所以我将编写代码的方式更改为:

static void my_fun (int_T input1,real_T *input2,....,real_T *output1,....)
    {
    /*

    my codes....

    */

    }

这就是我的案例的答案。作为结论,如果您只是编写用于在 MATLAB 环境中使用的 Sfuntion,那么选择第一种或第二种类型的头函数编写没有区别,但是如果您想要要编译它 vie RTLAB,你必须小心选择第二种方法。

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2013-12-27
    • 2023-03-05
    • 2019-06-21
    相关资源
    最近更新 更多