使用Si金宝appmulink®基于时间的多任务调度来模拟和生成单个模型层次结构中捕获的应用程序算法的代码。该模型是为嵌入式系统设计和配置的,旨在在单核、多任务平台上执行。该模型基于模型配置和速率单调调度算法进行仿真和生成的代码执行。
打开示例模型rtwdemo_multirate_multitasking
.该模型被配置有注释,以显示彩色编码的采样时间。看到他们,打开模型后,按更新图按Ctrl + d.按显示图例Ctrl + J..
import块的示例时间In1_1s
和In2_2s
分别设置为1秒和2秒。
为了提供速率的明确划分,采样时间为子系统SS1
和SS2
被设置为1。
速率转换块模型一个显式的速率转换。或者,通过选择模型配置参数,指示Simulink金宝app为您插入速率转换块自动处理速率转换数据传输.
类型设置为固定步
.
求解设置为离散(不连续状态)
.
将每个离散的比率视为一个单独的任务选择。
金宝appSimulink®根据模型配置对模型进行仿真。此模型生成的代码实现相同的执行语义。金宝appSimulink传播并使用Inport块样本时间来排序基于单核、多任务执行平台的块执行。
对于这个模型,采样时间图例示出了一个隐式速率分组。红色代表了最快的速度离散。绿色代表第二快分离速率。黄色代表两种速率的混合物。
生成的代码在模型中进行调度。本例中为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
.
将输入数据写入模型Inport块生成的代码中。
调用生成的入口点函数。
从模型Outport块生成的代码中读取数据。
输入端口:
rtU。In1_1s
数据类型的real_T
用的1维
rtU.In2_2s
数据类型的real_T
用的1维
入口点函数:
初始化入口点函数,空隙rtwdemo_multirate_multitasking_initialize(无效)
.在启动时,调用这个函数一次。
输出和更新入口点(step)函数,空白rtwdemo_multirate_multitasking_step0(空白)
.在该模型中最快的速度定期调用此函数。对于这种模式,调用函数的每一秒。为了实现实时执行,附加此功能的计时器。
输出和更新的入口点函数,空白rtwdemo_multirate_multitasking_step1(空白)
.在模型中的第二个最快的速度定期调用此函数。对于这种模式,调用函数每两秒钟。为了实现实时执行,附加此功能的计时器。
输出端口:
而无。着干活
数据类型的real_T
用的1维
而无。Out2
数据类型的real_T
用的1维