使用Si金宝appmulink®基于时间的多任务调度来模拟和生成在单个模型层次结构中捕获的应用程序算法代码。该模型是为一个嵌入式系统设计和配置的,旨在在单核多任务平台上执行。模型仿真和生成的代码执行基于模型配置和速率单调调度算法。
打开示例模型rtwdemo_multirate_multitasking
.该模型被配置为使用注释显示颜色编码的示例时间。要查看它们,在打开模型后,按下按钮更新图表Ctrl + D.要显示图例,请按Ctrl + J.
导入块的示例时间In1_1s
和In2_2s
分别为1秒和2秒。
为子系统提供一个清晰的速率划分和采样时间魔法石,第1章
和SS2
设置为1。
速率转换块模拟一个显式的速率转换。或者,通过选择模型配置参数,指示Simulink金宝app为您插入速率转换块自动处理速率转换的数据传输.
类型设置为固定步
.
解算器设置为离散(无连续状态)
.
将每一个离散的速率视为一个单独的任务选中。
金宝appSimulink®基于模型配置对模型进行仿真。该模型生成的代码实现了相同的执行语义。金宝appSimulink传播并使用import块样本时间来基于单核多任务执行平台对块执行进行排序。
对于这个模型,样本时间图例显示了一个隐含的速率分组。红色表示最快的离散率。绿色代表第二快的离散速率。黄色表示两种速率的混合。
生成的代码在模型中调度子程序。在本例中,为导入块的速率In2_2s
绿速率是一个子速率。生成的代码可以在以不同速率运行的任务之间正确地传输数据。
隐性利率分组的好处:
金宝appSimulink并不对模型施加架构约束。在模型中创建一个没有强加软件架构约束的模型。
执行框架不需要底层函数调度和速率之间的数据传输的详细信息。因此,简化了模型的接口需求。执行框架使用生成的接口代码写入输入、调用模型步骤函数和读取输出。
代码生成器基于多任务执行语义跨速率优化代码。
金宝appSimulink强制数据传输约束以实现速率单调调度:
数据传输发生在单个读任务和单个写任务之间。
当两个任务之间进行数据传输时,只有一个任务可以抢占另一个任务。
对于周期性任务,速度快的任务优先级高于速度慢的任务。另外,速度较快的任务会抢占速度较慢的任务。
任务在单个处理器上运行。
时间切片,即使用一个定义的时间段,在此期间任务可以在抢占式多任务系统中运行,是不允许的。
进程不会崩溃和重新启动,特别是在任务之间的数据传输期间。
对字节大小的变量的读写操作是原子的。
执行框架与外部设备进行通信以读取和写入模型输入。例如,使用Simulink S-Function模块对外部设备进行建模。金宝app用算法的其余部分为这些块生成代码。
打开嵌入式编码器然后,生成代码和代码生成报告。示例模型生成一个报告。
从代码生成报告中,检查生成的代码。
ert_main.c
是模型的一个示例主程序(执行框架)。该代码通过调用入口点函数来控制模型代码的执行rtwdemo_multirate_multitasking_step0
和rtwdemo_multirate_multitasking_step1
.使用这个文件作为编写执行框架的起点。
rtwdemo_multirate_multitasking.c
包含实现模型算法的代码的入口点。这个文件包括速率调度代码。
rtwdemo_multirate_multitasking.h
声明模型数据结构和模型入口点和数据结构的公共接口。
rtwtypes.h
定义生成代码所需的数据类型、结构和宏。
打开并检查代码接口报告。使用报告中的信息为执行框架编写接口代码:
通过添加指令来包含生成的头文件# include rtwdemo_multirate_multitasking.h
.
将输入数据写入模型导入块生成的代码中。
调用生成的入口点函数。
从生成的代码中读取模型Outport块的数据。
输入端口:
rtU。In1_1s
的数据类型real_T
维数为1
rtU。In2_2s
的数据类型real_T
维数为1
入口点函数:
初始化入口点函数,空白rtwdemo_multirate_multitasking_initialize(空白)
.在启动时,调用此函数一次。
输出和更新入口点(步进)功能,空白rtwdemo_multirate_multitasking_step0(空白)
.以模型中最快的速度周期性地调用这个函数。对于这个模型,每秒钟调用一次函数。为了实现实时执行,将此功能附加到计时器上。
输出和更新入口点功能,空白rtwdemo_multirate_multitasking_step1(空白)
.以模型中第二快的速度周期性地调用这个函数。对于这个模型,每两秒钟调用一次函数。为了实现实时执行,将此功能附加到计时器上。
输出端口:
而无。着干活
的数据类型real_T
维数为1
而无。Out2
的数据类型real_T
维数为1