2024年3月13日发(作者:)

程序的执行与嵌入式编码

这一节主要描述的是主要数据结构的代码生成和嵌入式编码器实时车间。他也总结概括了

由文件和头文件构成的编码器实时车间嵌入式的程序,还有描述了怎么找到他们。另外,这一

节将描述如何生成实时嵌入式编码器车间项目,从最高水平下降到定时器中断水平。本章节包

含下列主题:(略)

一:代码模块的数据结构

实时模型数据结构

实时嵌入式编码在车间实时模型数据结构中封装关于根模型的信息。我们把数据结构的实时

模型叫做运转计时器(简称rtm)。

为了减少内存需求,rtm只包含响应你模型的信息。例如,相关领域的数据只有在拥有

MAT-file具有代码生成选项时启用。Rtm可能也包含有关时间,结算器,还有模型数据的特殊模

型的rtM相关信息,例如:输入,输出,声明,参数。

由于默认,rtM包含一个错误状态,在此时你的代码就可以监视或者设置。如果你不需要日志

或监控你的应用程序错误状态,就选择错误状态实时抑制模型数据结构的选项。这将进一步减少

内存使用。选择此选项,也可能导致rtM从生成的代码中完全消失。

rtM符号的定义的生成代码如下:

•Structure definition (in model.h):

struct _RT_MODEL_model_Tag {

...

};

•Forward declaration typedef (in model_types.h):

typedef struct _RT_MODEL_model_Tag RT_MODEL_model;

•Variable and pointer declarations (in model.c):

RT_MODEL_model model_M_;

RT_MODEL_model *model_M = &model_M_;

•Variable export declaration (in model.h):

extern RT_MODEL_model *model_M;

栈宏

实时车间提供的嵌入式编码器栈宏,使你的代码能够与rtM界面有接口。通过model.h,你的

代码可以使用宏,并可以进入他们引用的任何字段。

如果你的代码是连接到一个单一的模型,一般来说,你应该把rtM指向model_M,使用宏来访问

model_M,就像下面的代码片断。

#include "model.h"

const char *errStatus = rtMGetErrorStatus(model_M);

你的代码与rtMs的接口有多个,只需要把头文件对应于每个模型,就像下面的代码片断。

#include "modelA.h" /* Make model A entry points visible */

#include "modelB.h" /* Make model B entry points visible */

void myHandWrittenFunction(void)

{

const char_T *errStatus;

modelA_initialize(1); /* Call model A initializer */

modelB_initialize(1); /* Call model B initializer */

/* Refer to model A s rtM */

errStatus = rtmGetErrorStatus(modelA_M);

/* Refer to model B s rtM */

errStatus = rtmGetErrorStatus(modelB_M);

}

表2-1总结了rtM错误状态的语句。如果要查看其他适用于你的模型的有关于宏的rtm和生成的

代码,那么利用代码生成报告(见“生成一个代码生成报告3 - 10页);然后在报告中通过超链接

查看model.h。

数据结构

本节概述了头文件和代码模块是如何构成实时车间嵌入式编码程序的,并叙述了到哪儿能找

到它们。

注意:大多数情况下,最简单的方式找出并检查其生成的代码文件是使用嵌入式编码器实时

车间代码生成报告。这个代码生成报告提供了一个超链接表,让你查看生成的代码,在MATLAB

帮助浏览器。看“生成一个代码生成报告“的3至10页,以获得更多的资讯

生成的代码模块

在您的工作目录,嵌入式编码器实时车间创建一个目录用来存储生成的源代码。建立目录也

包含对象文件,一个基本程序结构以及实用编译方法,和其他文件过程中产生的代码生成的过

程。默认名称的目录是model_ert_rtw。

表2 - 2总结了结构的源代码由嵌入式编码器实时车间生成

User-Written代码模块

你写的代码生成的模型与接口代码通常包括一个定制的主要模块(基于主程序提供嵌入式