stream 发表于 2007-6-15 16:58:53

教你如何使用RTW生成的C代码

熟悉Simulink的人都知道,用RTW工具直接 从模型中生成代码很容易,但是生成的代码比较复杂,如何使用是一个棘手的问题。RTW帮助文档也只解释了如何生产代码,而没有讲如何在VC环境下使用生成的代码。我在附件中上传了两个例子,第一个是在网上找到的,有源码和相关的教程,是英文写的,第二个是我自己根据第一个教程做出来的,版本上有差异,其他地方应该都是相通的,所以我没有写教程文档,所以大家学习的时候最好先看第一个例子和教程文档。我的运行和测试环境是Matlab6.5 和VC++6.0。

john_smith 发表于 2007-6-16 14:25:53

thanks
正好我对这方面感兴趣

foxtan 发表于 2007-6-30 12:01:28

谢谢!如何让RTW产生能在嵌入式目标板上运行C代码,不要matlab的库函数。比如;
将doc_leastsquarespolyfit_ref.mdl 用RTW产生C代码,里面就有几个函数需要用到库因此不能脱离matlab运行。

foxtan 发表于 2007-6-30 12:09:23

如何让RTW产生完整的代码。能在嵌入式目标板上编译运行

如何让RTW产生能在嵌入式目标板上运行C代码,不要matlab的库函数。比如;
将doc_leastsquarespolyfit_ref.mdl 。用ERT选项产生的C代码有几个函数:MWDSP_polyval_DD, MWDSP_qrdcD, MWDSP_qreslvD。我估计这几个函数都是在DSP库函数里。有没有办法弄出来?请教各位。
void doc_leastsquarespolyfit_ref_step(void)
{
/* Signal Processing Blockset Polyval (sdsppolyval2) - '<Root>/Polynomial Evaluation' - Output */
{
    MWDSP_polyval_DD( (const real_T *)
                     &doc_leastsquarespolyfit_ref_P.Constant_Value_d, (real_T
      *)doc_leastsquarespolyfit_ref_B.u, (const real_T *)
                     &doc_leastsquarespolyfit_ref_P.Constant_Value_p, 3, 32 );
}

autocontrol 发表于 2007-8-23 11:07:19

谢谢,我正要学习这些内容

hero1_1985 发表于 2007-8-25 13:04:13

在第一个和第二个不一样是因为matlab版本的原因
model.c

包括实现模型算法(MdlStart、MdlOutputs、MdlUpdate、MdlInitializeSizes 和 MdlInitializeSampleTimes)的所有代码的入口点。此外还包括模型注册代码
model_private.h 包括模型和子系统要求的本地定义和本地数据。模型中的子系统 .c 文件包含此文件。在将手写代码连接到模型时,无需包含 model_private.h。请注意:model_private.h 包含于 model.h 的下一级中。
model.h 定义模型数据结构以及到模型入口点和数据结构的显式接口。此外还提供通过访问器宏到实时模型数据结构 (model_rtM) 的接口。模型中的子系统 .c 文件包含 model.h。如果将手写代码连接到一个或多个模型的生成代码,应该在希望连接到的每个模型中都包含 model.h。
model_data.c(conditional)

model_data.c 只能有条件地生成。它包括对参数数据结构和常数模块 I/O 数据结构的声明。如果该模型中未使用此类数据结构,则不会生成 model_data.c。请注意:此类数据在外部的 model.h 中声明。
model_types.h 提供对实时模型数据结构和参数数据结构的前置声明。可复用函数的函数声明可能需要此类声明。模型中的所有子系统 .h 文件均包含 model_types.h。
rtmodel.h 包括 grt_main.c 和 grt_malloc_main.c 之类静态主程序模块必需的 #include 指令。由于此类模块并非创建于代码生成时,因此它们包括 rt_model.h,以便访问模型特定的数据结构和入口点。如果自行创建主程序模块,务必应包含 rtmodel.h。
model_pt.c (optional)提供能够使运行中的程序无需使用外部模式即可访问模型参数的数据类型。要了解如何生成和使用 model_pt.c 文件,请参阅 用于参数调优的 C API。
model_bio.c (optional)提供使代码能够访问模块输出的数据结构。要了解如何生成和使用 model_bio.c 文件,请参阅 通过模块输出进行信号监测。


如果连接了 Real-Time Workshop 先前版本所生成的手写代码,可能需要移除对不再生成的头文件的依赖性。请使用 #includemodel.h 指令,然后移除调用下列任何文件的 #include 指令:
model_common.h(由 model_types.h 和 model_private.h 取代)
model_export.h(由 model.h 取代)
model_prm.h(由 model_data.c 取代)
model_reg.h(由 model_.c 包含)

hcm608 发表于 2007-9-27 14:12:44

我采用楼主的model生成代码的时候产生了错误,我使用的是matlab6.5
Error executing build command: Error using ==> make_rtw
Error using ==> rtwgen
--> Error evaluating parameter 'Value' in block 'model/Constant': Undefined function or variable 'ad0buf'.
--> Error evaluating parameter 'Value' in block 'model/Constant1': Undefined function or variable 'Nepulse'.
--> Error evaluating parameter 'Value' in block 'model/Constant2': Undefined function or variable 'ad2buf'.

hero1_1985 发表于 2007-9-27 14:51:58

先给ad0buf,Nepulse,ad2buf附值

hcm608 发表于 2007-9-27 15:57:20

谢谢楼上的,附值了ad0buf=;
>> ad2buf=;
>> Nepulse = 1875
发现另一个错误:--> Data type mismatch. Input port 1 of block 'model/Controller' expects a signal of data type 'uint16'. However, it is driven by a signal of data type 'double'.
--> Data type mismatch. Output port 1 of block 'model/Constant1' is a signal of data type 'double'. However, it is driving a signal of data type 'uint16

数据类型不匹配,我是按VC++里面的数值给的

hcm608 发表于 2007-9-27 16:26:36

好像一般四个.h头文件哦
model.c
model_types.h
model_private.h
rtmodel.h

hero1_1985 发表于 2007-9-27 16:26:46

仔细看看英文文档,
ad2buf = uint16()
ad0buf = uint16()
Nepulse = uint16(1845)

hcm608 发表于 2007-9-27 16:34:51

非常感谢hero1_1985
能否加加QQ?
563194691

hcm608 发表于 2007-9-27 23:13:07

real_T 是什么数据类型,怎么给这种数据类型赋值呢?

hero1_1985 发表于 2007-9-28 08:31:13

:$ 我也是一知半解,好象储存的默认格式就是real_T,具体的再查查
在help里搜索Storage Class Options,有比较详细的解释。

[ 本帖最后由 hero1_1985 于 2007-9-28 08:44 编辑 ]

hanyuxing818 发表于 2008-2-26 16:39:27

好帖,正需要呢~!!!

hanyuxing818 发表于 2008-2-26 16:48:56

顺便想请教楼主这类老外的好东东是从网上什么地方找的啊?
非常感谢~!

mickeyhao66 发表于 2009-8-8 15:08:00

麻烦问下lz
example的例子 你在rtw中生成c代码后 手动修改过吗
我重做example的例子 编译代码和lz的一样 其它的c文件都一样 就是编译不能通过
麻烦高手指点下
做过的朋友可以讨论下 qq10377905

shxp_007 发表于 2010-5-24 15:26:13

非常感谢,多多交流。

太原亮2010 发表于 2010-5-31 11:41:37

我也做实时仿真部分 可以参考下

wenlu1024 发表于 2011-3-11 09:10:54

谢谢。。不会呢。。看看。。
页: [1] 2
查看完整版本: 教你如何使用RTW生成的C代码