基于时间的调度例模型

优化内存使用的时间计数器

此示例示出了如何优化的内存量,所述代码生成器分配用于时间计数器。的示例优化存储器,其存储两个事件之间经过的时间,时间的间隔。

代码生成表示时间计数器为无符号整数。时间计数器的字大小是基于模型的配置参数的设置应用程序生命周期(天),它指定的时间的预期最大持续时间的应用程序运行。您可以使用此参数,以防止时间计数器溢出。默认大小为64位。

位的一个时间计数器采用数量取决于的设置应用程序生命周期(天)参数。例如,如果在1 kHz的速率时间计数器递增,以避免溢出,计数器有以下的比特数:

  • 寿命<0.25秒:8位

  • 寿命<1分钟:16位

  • 寿命<49天:32位

  • 寿命>50天:64位

64位时间计数器不溢出590万年前。

开放范例模型

打开示例模型rtwdemo_abstime

该模型由三个子系统组成SS1SS2SS3。在数学和数据类型窗格中,应用程序生命周期(天)参数设置为默认值,这是INF

三个子系统包含需要经过时间作为输入来计算其输出值的离散时间积分器。子系统变化如下:

  • SS1 - 主频为1千赫兹。不需要时间计数器。采样时间类型用于触发端口参数设置为定期。经过的时间内联为0.001。

  • SS2 - 主频为100赫兹。需要一个时间计数器。基于第1天的寿命,一个32位的计数器存储的经过时间。

  • SS3 - 主频为0.5赫兹。需要一个时间计数器。基于第1天的寿命,16位计数器存储经过的时间。

模拟模型

模拟模型。默认情况下,该模型被配置以不同的颜色来显示采样时间。三个子系统的离散采样时间显示为红色,绿色和蓝色。触发子系统是蓝绿色。

生成代码和报告

1.创建用于构建和检查过程中的临时文件夹。

2.配置模型的代码发生器以使用GRT系统目标文件和寿命的INF天。

3.建立模型。

###启动构建过程:rtwdemo_abstime ###的构建过程的顺利完成:rtwdemo_abstime

回顾生成的代码

打开生成的源文件rtwdemo_abstime.c

结构tag_RTM_rtwdemo_abstime_T {常量char_T *的ErrorStatus;/ * *定时:​​以下子结构包含关于*为模型中的定时信息的信息。* / {结构uint32_t的clockTick1;uint32_t的clockTickH1;uint32_t的clockTick2;uint32_t的clockTickH2;STRUCT {uint16_T TID [3];uint16_T CLIMIT [3];} TaskCounters;}时序; }; /* Block states (default storage) */ extern DW_rtwdemo_abstime_T rtwdemo_abstime_DW; /* Zero-crossing (trigger) state */ extern PrevZCX_rtwdemo_abstime_T rtwdemo_abstime_PrevZCX; /* External inputs (root inport signals with default storage) */ extern ExtU_rtwdemo_abstime_T rtwdemo_abstime_U; /* External outputs (root outports fed by signals with default storage) */ extern ExtY_rtwdemo_abstime_T rtwdemo_abstime_Y; /* Model entry point functions */ extern void rtwdemo_abstime_initialize(void); extern void rtwdemo_abstime_step(int_T tid); extern void rtwdemo_abstime_terminate(void); /* Real-time Model object */ extern RT_MODEL_rtwdemo_abstime_T *const rtwdemo_abstime_M; /*- * The generated code includes comments that allow you to trace directly * back to the appropriate location in the model. The basic format * is /block_name, where system is the system number (uniquely * assigned by Simulink) and block_name is the name of the block. * * Use the MATLAB hilite_system command to trace the generated code back * to the model. For example, * * hilite_system('') - opens system 3 * hilite_system('/Kp') - opens and selects block Kp which resides in S3 * * Here is the system hierarchy for this model * * '' : 'rtwdemo_abstime' * '' : 'rtwdemo_abstime/SS1' * '' : 'rtwdemo_abstime/SS2' * '' : 'rtwdemo_abstime/SS3' */ #endif /* RTW_HEADER_rtwdemo_abstime_h_ */

4个32位无符号整数,clockTick1clockTickH1clockTick2clockTickH2是用于存储子系统的经过时间计数器SS2SS3

启用优化和重新生成代码

1.重新配置模型到寿命设置为1天。

2.建立模型。

###启动构建过程:rtwdemo_abstime ###的构建过程的顺利完成:rtwdemo_abstime

查看再生码

结构tag_RTM_rtwdemo_abstime_T {常量char_T *的ErrorStatus;/ * *定时:​​以下子结构包含关于*为模型中的定时信息的信息。* / {结构uint32_t的clockTick1;uint16_T clockTick2;STRUCT {uint16_T TID [3];uint16_T CLIMIT [3];} TaskCounters;}时序;};/ *块状态(默认存储)* /的extern DW_rtwdemo_abstime_T rtwdemo_abstime_DW; /* Zero-crossing (trigger) state */ extern PrevZCX_rtwdemo_abstime_T rtwdemo_abstime_PrevZCX; /* External inputs (root inport signals with default storage) */ extern ExtU_rtwdemo_abstime_T rtwdemo_abstime_U; /* External outputs (root outports fed by signals with default storage) */ extern ExtY_rtwdemo_abstime_T rtwdemo_abstime_Y; /* Model entry point functions */ extern void rtwdemo_abstime_initialize(void); extern void rtwdemo_abstime_step(int_T tid); extern void rtwdemo_abstime_terminate(void); /* Real-time Model object */ extern RT_MODEL_rtwdemo_abstime_T *const rtwdemo_abstime_M; /*- * The generated code includes comments that allow you to trace directly * back to the appropriate location in the model. The basic format * is /block_name, where system is the system number (uniquely * assigned by Simulink) and block_name is the name of the block. * * Use the MATLAB hilite_system command to trace the generated code back * to the model. For example, * * hilite_system('') - opens system 3 * hilite_system('/Kp') - opens and selects block Kp which resides in S3 * * Here is the system hierarchy for this model * * '' : 'rtwdemo_abstime' * '' : 'rtwdemo_abstime/SS1' * '' : 'rtwdemo_abstime/SS2' * '' : 'rtwdemo_abstime/SS3' */ #endif /* RTW_HEADER_rtwdemo_abstime_h_ */

对于新设置应用程序生命周期(天)参数指示代码生成预留更少的存储器的时间的计数器。再生的代码包括:

  • 32位无符号整数,clockTick1,用于存储任务的经过时间SS2

  • 16位无符号整数,clockTick2,用于存储任务的经过时间SS3

相关信息

单速率模型(裸板,无OS)

该模型示出了代码生成配置用于裸板目标单速率离散时间模型(一个没有操作系统)。

开放范例模型

打开示例模型rtwdemo_srbb

open_system('rtwdemo_srbb'

该模型使用一个样本的时间和当更新发生图被配置成显示取样时间的颜色。运行轨迹块In1_1s和In2_1s指定1秒采样时间,这是由模型配置参数的设置强制定期采样时间约束

该模型被配置有注释,以显示彩色编码的采样时间。看到他们,打开模型后,按更新图按Ctrl + d。显示图例,按按Ctrl + J。因为模型被配置有一个采样时间,模型显示为红色,这是表示该模型中的最快的离散采样时间的颜色。

多速率建模在单任务模式(裸板,无OS)

该模型示出了用于构造用于单任务上的裸电路板的目标(一个没有操作系统)一个多速率离散时间模型生成的代码。

开放范例模型

打开示例模型rtwdemo_mrstbb

open_system('rtwdemo_mrstbb'

该模型包含两个采样时间。运行轨迹块1和运行轨迹块2指定1秒和2秒的采样时间,分别,其通过模型配置参数的设置强制定期采样时间约束。求解器设置为单任务操作。率过渡块,因此,不包括在内,因为不会发生抢占在不同的采样时间执行块之间。

该模型被配置有注释,以显示彩色编码的采样时间。看到他们,打开模型后,按更新图按Ctrl + d。显示图例,按按Ctrl + J。红色代表模型最快离散采样时间,绿色表示第二速度最快,并且黄色代表混合样品倍。

多速率建模多任务模式(裸板,无OS)

该模型示出了用于构造用于多任务裸板目标(一个没有操作系统)一个多速率离散时间模型生成的代码。

开放范例模型

打开示例模型rtwdemo_mrmtbb

open_system('rtwdemo_mrmtbb'

探索范例模型

该模型包含两个采样时间。运行轨迹块1和运行轨迹块2指定1秒和2秒的采样时间,分别,其通过模型配置参数的设置强制定期采样时间约束。解算器被设置为多任务操作,这意味着需要的速率过渡块,以确保数据的完整性,当1秒任务抢占2-第二任务被执行。正确率转换总是由Simulink和Simulink的编码器执行。万博1manbetx该模型指定一个明确的速率转换块。可替代地,这个块可被自动设定的Simulink模型配置参数插入万博1manbetx自动数据传输速率处理过渡

该模型是在图更新配置为显示采样时间的颜色。看到他们,打开模型后,按更新图按Ctrl + d。显示图例,按按Ctrl + J。红色代表模型最快离散采样时间,绿色表示第二速度最快,并且黄色代表混合样品倍。

数据传输假设

任务间的数据传输操作的依据:

  • 一个单一的阅读任务和一个写作任务之间进行数据转换。

  • 一个字节的大小可变的读出或写入是原子的。

  • 当两个任务通过数据转换交互,其中只有一个能够抢占其他。

  • 对于周期性任务,更快的速度任务比速度较慢任务更高的优先级;更快的速度永远任务抢占速度较慢任务。

  • 任务在一个处理器上运行。时间分片是不允许的。

  • 流程不死机和重新启动(尤其是当数据在任务之间传输)

多速率建模多任务模式(VxWorks®OS)

本实施例中用于配置用于多任务操作系统目标(VxWorks®)多速率离散时间模型生成代码。该模型包含两个采样时间。运行轨迹块1和运行轨迹块2指定1秒和2秒的采样时间,分别,其通过模型配置参数的设置强制定期采样时间约束。解算器被设置为多任务操作,这意味着需要速率转变块,以确保数据的完整性,当1秒任务抢占2-第二任务被执行。万博1manbetx的Simulink和代码生成器执行正确率转换。该模型指定一个明确的速率转换块。另外,您也可以指示的Simulink通过设置模式配置参数插入此块万博1manbetx你自动数据传输速率处理过渡

该模型被配置有注释,以显示彩色编码的采样时间。发现它们,打开模型后,按下Ctrl + d更新图。显示图例,按下Ctrl + J。红色代表模型最快离散采样时间,绿色表示第二速度最快,并且黄色代表混合样品倍。

例如型号

模型='rtwdemo_mrmtos',open_system(模型);

贸易确定性和数据完整性,以提高系统性能

该模型示出了在多速率使用时,多任务模型在速率转换块的操作模式的差异。对于速率转换模块灵活的选项,让您选择最适合您的应用模式。您可以交易决定和数据完整性的水平,以提高系统性能。

开工率转换块模式

确保数据的完整性和确定性(DetAndInteg):数据传送,使得对于所述信号(包括一个宽的信号的所有元素)的所有数据字节都来自同一时间步长。此外,确保了从其中的数据被从一个速率转移到另一个的相对采样时间(延迟)总是相同的。仅使用ANSI-C代码,不需要目标具体的“临界区”的保护。

确保完整性(IntegOnly):数据传送,使得对于所述信号(包括一个宽的信号的所有元素)的所有数据字节都来自同一时间步长。然而,从数据中的一个传递到下一个,其数据被转移的相对采样时间(延迟)可以变化。在这种模式下,该代码读/写的数据被比在DetandInt模式下运行更频繁。在最坏的情况下,延迟相当于DetandInt模式,但迟迟不那么这是很重要的一些应用。另外,从异步速率此模式支持数据传万博1manbetx送到/其中DetandInt模式不能支持。仅使用ANSI-C代码,不需要目标具体的“临界区”的保护。

不执行数据一致性操作(无):对于这种情况下,速率转变块不生成的代码。其中标量数据类型的原子访问保证,并且当数据的相对时间值是不重要的,此模式是在某些应用中是可接受的。此模式不引入任何延迟。

数据传输假设

任务间的数据传输操作的依据:

  • 一个单一的阅读任务和一个写作任务之间进行数据转换。

  • 一个字节的大小可变的读出或写入是原子的。

  • 当两个任务通过数据转换交互,其中只有一个能够抢占其他。

  • 对于周期性任务,更快的速度任务比速度较慢任务更高的优先级;更快的速度永远任务抢占速度较慢任务。

  • 所有任务在一个处理器上运行。时间分片是不允许的。

  • 流程不死机/重启(尤其是当数据在任务之间传输)

模型rtwdemo_ratetrans

open_system('rtwdemo_ratetrans'

模型rtwdemo_ratetrans示出了在下面的速率转变块的操作模式的差异。

速率转换块DetAndIntegF2S

确定性和数据完整性(快到慢过渡):

  • 块输出用作一个持久数据缓冲器。

  • 数据被写入到输出以较慢的速度,但速度更快的上下文中进行

  • 通过速度较慢所看到的数据始终是值当两个速度越来越慢速度上次执行。通过更快的速率(和相关联的数据更新)速率较慢运行时任何后续步骤不被较慢速率看出。

速率转换块DetAndIntegS2F

确定性和数据完整性(慢到快过渡):

  • 使用两个持久性数据缓冲器,一个内部缓冲器和块输出。

  • 内部缓冲器被复制到在所述较慢的速率输出,但更快的速率上下文期间进行。

  • 内部缓冲器被以较慢的速率和较慢速率上下文期间写入。

  • 的数据表明快速速率看到的是总是延迟,即数据是从慢速率代码的前面的步骤。

速率转换块IntegOnlyF2S

数据完整性只(快到慢过渡):

  • 块输出用作一个持久数据缓冲器。

  • 数据被写入,如果标志指示它不是在正在读取的过程中更快的速率上下文中缓冲。

  • 该标志被设置,并且数据被从缓冲器到对缓慢的速率输出复制,则该标记被清除则。这是一个额外的副本相比于确定性的情况下。

  • 数据所看到的更慢的速率可以从较快的速率比从当较慢的速率更近的步骤和执行二者更快的速率。

速率转换块IntegOnlyS2F

只有数据完整性(慢到快过渡):

  • 使用两个持久性数据缓冲区,都是内部缓冲区。

  • 其中2个缓冲区总是复制到输出以更快的速度。

  • 一项所述的2-缓冲器中的较慢的速率被写入和较慢速率上下文中,然后将活性缓冲器进行切换。

  • 由速度更快看到的数据可以比确定性情况更近一些。特别是,当两个慢,更快的速度有自己的点击率,更快的速度将看到从慢率前值。但是,对于更快的速率后续步骤可能会看到的更新值(当较慢的速率来更新所述非活性缓冲液和切换活动缓冲器标记。

速率转换块NoneF2S

当确定性和数据的完整性免除的速率转变块中不产生代码。

速率转换块NoneS2F

当确定性和数据的完整性免除的速率转变块中不产生代码。

bdclose('rtwdemo_ratetrans');

相关话题