嵌入式数据结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序的执行与嵌入式编码
这一节主要描述的是主要数据结构的代码生成和嵌入式编码器实时车间。他也总结概括了由文件和头文件构成的编码器实时车间嵌入式的程序,还有描述了怎么找到他们。另外,这一节将描述如何生成实时嵌入式编码器车间项目,从最高水平下降到定时器中断水平。本章节包含下列主题:(略)
一:代码模块的数据结构
实时模型数据结构
实时嵌入式编码在车间实时模型数据结构中封装关于根模型的信息。我们把数据结构的实时模型叫做运转计时器(简称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代码模块
你写的代码生成的模型与接口代码通常包括一个定制的主要模块(基于主程序提供嵌入式
编码器实时车间),可能还包括中断处理程序,设备驱动模块和其他S-functions,和其他管理或支持代码。
我们建议你为你自己的代码模块建立一个工作目录。你的工作目录应该在MATLAB的路径。你也必须修改实时嵌入式编码模板基本程序结构以及实用编译方法和车间系统目标文件,使得建设进程可以找到你的源和目标文件。
生成主程序
产生一个例子主程序选择控制是否需要ert_main.c生成。这个选项位于插入代码生成的选择(3)范畴的实时车间方格仿真参数对话框,如下图。
默认情况下,会产生一个例子主程序。当生成一个例子主程序被选中时,这个目标的弹出式菜单操作系统被激活。这个菜单让您选择下列选项:
1 BareBoardExample:产生一个bare-board主程序设计控制下运行的实时时钟,不包含实时操作系统。
2 VxWorksExample:产生一个完整的注释的例子用来显示如何在VxWorks实时操作系统部署代码。
不管你选择哪些目标操作系统ert_main.c都包括:
1 主函数
2 任务调度的代码块,决定如何及何时执行每次计算步骤的模型
主程序的运行和调度算法主要取决于雇佣你的模型是否单频或者多频,也取决于你的模型的求解模式(SingleTasking与多任务)。这些在“程序执行”2-9页中有详细地描述。
程序的执行
接下来的章节描述程序所产生的实时嵌入式编码器车间的执行,从最高水平下降到定时器中断等级
单独的程序执行
默认情况下,实时车间嵌入式编码程序自动生成程序而不需要外部实时执行的或者操作的系统。我们称这种程序作为独立的程序。一个单独的程序需要一些最小可改性来适应目标硬件;这些修改,随后的章节描述。单独的程序支持单个或多个样本率。
生成一个单独的程序: