RTOS Generator

Modeling testbed for a RTOS using a state machine

RTOS_base_model

Browsable image of the model.

  • To download OpenWebStart click on the links -
    Windows- Compatibility:Windows 10 or higher (*)
    macOS - Compatibility:macOS 10.15 (Catalina) or higher (*)
    Linux - Compatibility:Ubuntu 18.04 LTS or higher (*)
  • For an executable version,
  • Mouse over the icons to view parameters. Click on hierarchy and plotters to reveal content (if provided).
  • To simulate, click on Launch button, open downloaded file and click Run on the Java Security Page.
RTOS_base_modelmodel <h2>Traffic4</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Data_Structure_Name</td><td>&quot;Header&quot;</td><td>&quot;Header&quot;</td></tr><tr><td>Start_Time</td><td>Task_t</td><td>2.0E-6</td></tr><tr><td>Value_1</td><td>Task_t * 50.0</td><td>1.0E-4</td></tr><tr><td>Value_2</td><td>2.0</td><td>2.0</td></tr><tr><td>Random_Seed</td><td>123457L</td><td>123457L</td></tr><tr><td>Time_Distribution</td><td>Fixed (Value_1)</td><td>Fixed (Value_1)</td></tr><tr><td>_flipPortsVertical</td><td>true</td><td>true</td></tr><tr><td>_flipPortsHorizontal</td><td>false</td><td>false</td></tr><tr><td>_rotatePorts</td><td>180</td><td>180</td></tr></table> <h2>Instruction_Set</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Define some top level instruction types:\\nInteger (INT), Floating Point (FP) Memory (MEM), or Input/Output (IO)\\nFP and IO references MEM as a secondary action.  Integers reflect \\nexpected number of cycles per Task, not instruction.</td><td>Define some top level instruction types:\\nInteger (INT), Floating Point (FP) Memory (MEM), or Input/Output (IO)\\nFP and IO references MEM as a secondary action.  Integers reflect \\nexpected number of cycles per Task, not instruction.</td></tr><tr><td>Instruction_Set_Name</td><td>&quot;Processor_Macro_Instr&quot;</td><td>&quot;Processor_Macro_Instr&quot;</td></tr><tr><td>_explanation</td><td>ProcessorGenerator-&gt;Instruction_Set</td><td>ProcessorGenerator-&gt;Instruction_Set</td></tr><tr><td>Instruction_Set_Text</td><td>/* Macro Instruction Set.   */\\n   Mnew  Ww   Xx  Yy   Zz    ;   /* Label */\\n   INT    1                  ;\\n   FP     2                  ;\\n   MEM    3                  ;\\n   IO     4                  ;\\n\\n\\n\\n</td><td>/* Macro Instruction Set.   */\\n   Mnew  Ww   Xx  Yy   Zz    ;   /* Label */\\n   INT    1                  ;\\n   FP     2                  ;\\n   MEM    3                  ;\\n   IO     4                  ;\\n\\n\\n\\n</td></tr><tr><td>Record_Set_Name</td><td>&quot;Macro_Instr&quot;</td><td>&quot;Macro_Instr&quot;</td></tr></table> <h2>Script</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Block_Name</td><td>&quot;MyRTOS&quot;</td><td>&quot;MyRTOS&quot;</td></tr><tr><td>Optional_Parameters</td><td>/* First row contains Column Names.              */\\nParameter_Name                 Parameter_Value  \\nPath                           none             \\nRead_File                      none             \\nSelf_Start                     false            \\nParam_Script                   none             \\nListen_to_File                 none             \\nDuplicate_Input                true             \\nProfile                        0                \\nProfile_File                   none             \\nMaximum_Loops                  1000000          \\nBlock_Reference                Block_Name       \\nPort_Order_Array               {&quot;input&quot;}      \\n</td><td>/* First row contains Column Names.              */\\nParameter_Name                 Parameter_Value  \\nPath                           none             \\nRead_File                      none             \\nSelf_Start                     false            \\nParam_Script                   none             \\nListen_to_File                 none             \\nDuplicate_Input                true             \\nProfile                        0                \\nProfile_File                   none             \\nMaximum_Loops                  1000000          \\nBlock_Reference                Block_Name       \\nPort_Order_Array               {&quot;input&quot;}      \\n</td></tr></table> <h2>SystemResource4</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>This_Scheduler_Name</td><td>&quot;IO&quot;</td><td>&quot;IO&quot;</td></tr><tr><td>Parent_Scheduler_Name</td><td>&quot;Fld_Name_or_String_or_None&quot;</td><td>&quot;Fld_Name_or_String_or_None&quot;</td></tr><tr><td>Task_Context_Switch_Time</td><td>Context_Switch</td><td>1.0E-7</td></tr><tr><td>Round_Robin_Time_Slice</td><td>1.0E-3</td><td>1.0E-3</td></tr><tr><td>Clock_Rate_Mhz</td><td>Speed_Mhz</td><td>100.0</td></tr><tr><td>Max_Scheduler_Length</td><td>30</td><td>30</td></tr><tr><td>Time_Type</td><td>Relative Time</td><td>Relative Time</td></tr><tr><td>Scheduler_Type</td><td>FCFS + Preempt</td><td>FCFS + Preempt</td></tr><tr><td>Add_Scheduler_Times_to_DS</td><td>false</td><td>false</td></tr></table> <h2>Traffic3</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Data_Structure_Text</td><td>/* Text Template or File Path.       \\n   First row contains Field Names. */\\n   MyTime  Instruction                      Priority    ;     \\n   Task_t  {&quot;INT.1&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  2           ;  /* DS 1 */\\n   Task_t2 {&quot;INT.2&quot;,&quot;FP.1&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  2           ;  /* DS 2 */\\n   Task_t  {&quot;INT.3&quot;,&quot;FP.2&quot;,&quot;MEM.2&quot;,&quot;IO.3&quot;}  2           ;  /* DS 3 */\\n   Task_t  {&quot;INT.4&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.1&quot;}  2           ;  /* DS 4 */\\n   Task_t  {&quot;INT.5&quot;,&quot;FP.0&quot;,&quot;MEM.5&quot;,&quot;IO.0&quot;}  2           ;  /* DS 5 */\\n</td><td>/* Text Template or File Path.       \\n   First row contains Field Names. */\\n   MyTime  Instruction                      Priority    ;     \\n   Task_t  {&quot;INT.1&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  2           ;  /* DS 1 */\\n   Task_t2 {&quot;INT.2&quot;,&quot;FP.1&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  2           ;  /* DS 2 */\\n   Task_t  {&quot;INT.3&quot;,&quot;FP.2&quot;,&quot;MEM.2&quot;,&quot;IO.3&quot;}  2           ;  /* DS 3 */\\n   Task_t  {&quot;INT.4&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.1&quot;}  2           ;  /* DS 4 */\\n   Task_t  {&quot;INT.5&quot;,&quot;FP.0&quot;,&quot;MEM.5&quot;,&quot;IO.0&quot;}  2           ;  /* DS 5 */\\n</td></tr><tr><td>Time_Field</td><td>&quot;MyTime&quot;</td><td>&quot;MyTime&quot;</td></tr><tr><td>Probability_Field</td><td>&quot;Field_Name_or_None&quot;</td><td>&quot;Field_Name_or_None&quot;</td></tr><tr><td>Output_Expression</td><td>&quot;trigger = traffic&quot;</td><td>&quot;trigger = traffic&quot;</td></tr></table> <h2>Traffic2</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Data_Structure_Text</td><td>/* Text Template or File Path.       \\n   First row contains Field Names. */\\n   MyTime  Instruction                      Priority    ;     \\n   Task_t  {&quot;INT.1&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  1           ;  /* DS 1 */\\n   Task_t  {&quot;INT.2&quot;,&quot;FP.1&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  1           ;  /* DS 2 */\\n   Task_t  {&quot;INT.3&quot;,&quot;FP.2&quot;,&quot;MEM.2&quot;,&quot;IO.3&quot;}  1           ;  /* DS 3 */\\n   Task_t  {&quot;INT.4&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.1&quot;}  1           ;  /* DS 4 */\\n   Task_t  {&quot;INT.5&quot;,&quot;FP.0&quot;,&quot;MEM.5&quot;,&quot;IO.0&quot;}  1           ;  /* DS 5 */\\n</td><td>/* Text Template or File Path.       \\n   First row contains Field Names. */\\n   MyTime  Instruction                      Priority    ;     \\n   Task_t  {&quot;INT.1&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  1           ;  /* DS 1 */\\n   Task_t  {&quot;INT.2&quot;,&quot;FP.1&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  1           ;  /* DS 2 */\\n   Task_t  {&quot;INT.3&quot;,&quot;FP.2&quot;,&quot;MEM.2&quot;,&quot;IO.3&quot;}  1           ;  /* DS 3 */\\n   Task_t  {&quot;INT.4&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.1&quot;}  1           ;  /* DS 4 */\\n   Task_t  {&quot;INT.5&quot;,&quot;FP.0&quot;,&quot;MEM.5&quot;,&quot;IO.0&quot;}  1           ;  /* DS 5 */\\n</td></tr><tr><td>Time_Field</td><td>&quot;MyTime&quot;</td><td>&quot;MyTime&quot;</td></tr><tr><td>Probability_Field</td><td>&quot;Field_Name_or_None&quot;</td><td>&quot;Field_Name_or_None&quot;</td></tr><tr><td>Output_Expression</td><td>&quot;trigger = traffic&quot;</td><td>&quot;trigger = traffic&quot;</td></tr></table> <h2>Traffic</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>Data_Structure_Text</td><td>/* Text Template or File Path.       \\n   First row contains Field Names. */\\n   MyTime  Instruction                      Priority    ;     \\n   Task_t  {&quot;INT.2&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  0           ;  /* DS 1 */\\n   Task_t  {&quot;INT.2&quot;,&quot;FP.1&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  0           ;  /* DS 2 */\\n   Task_t  {&quot;INT.3&quot;,&quot;FP.2&quot;,&quot;MEM.2&quot;,&quot;IO.3&quot;}  0           ;  /* DS 3 */\\n   Task_t  {&quot;INT.4&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.1&quot;}  0           ;  /* DS 4 */\\n   Task_t  {&quot;INT.5&quot;,&quot;FP.0&quot;,&quot;MEM.5&quot;,&quot;IO.0&quot;}  0           ;  /* DS 5 */\\n</td><td>/* Text Template or File Path.       \\n   First row contains Field Names. */\\n   MyTime  Instruction                      Priority    ;     \\n   Task_t  {&quot;INT.2&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  0           ;  /* DS 1 */\\n   Task_t  {&quot;INT.2&quot;,&quot;FP.1&quot;,&quot;MEM.3&quot;,&quot;IO.4&quot;}  0           ;  /* DS 2 */\\n   Task_t  {&quot;INT.3&quot;,&quot;FP.2&quot;,&quot;MEM.2&quot;,&quot;IO.3&quot;}  0           ;  /* DS 3 */\\n   Task_t  {&quot;INT.4&quot;,&quot;FP.2&quot;,&quot;MEM.3&quot;,&quot;IO.1&quot;}  0           ;  /* DS 4 */\\n   Task_t  {&quot;INT.5&quot;,&quot;FP.0&quot;,&quot;MEM.5&quot;,&quot;IO.0&quot;}  0           ;  /* DS 5 */\\n</td></tr><tr><td>Time_Field</td><td>&quot;MyTime&quot;</td><td>&quot;MyTime&quot;</td></tr><tr><td>Probability_Field</td><td>&quot;Field_Name_or_None&quot;</td><td>&quot;Field_Name_or_None&quot;</td></tr><tr><td>Output_Expression</td><td>&quot;trigger = traffic&quot;</td><td>&quot;trigger = traffic&quot;</td></tr></table> <h2>xTimeyDataPlot</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>fillOnWrapup</td><td>true</td><td>true</td></tr><tr><td>legend</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>startingDataset</td><td>0</td><td>0</td></tr><tr><td>fileName</td><td>Enter Filename to save plot</td><td>&quot;Enter Filename to save plot&quot;</td></tr><tr><td>viewPlot</td><td>true</td><td>true</td></tr><tr><td>savePlot</td><td>false</td><td>false</td></tr></table> <h2>SystemResource2</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>This_Scheduler_Name</td><td>&quot;FP&quot;</td><td>&quot;FP&quot;</td></tr><tr><td>Parent_Scheduler_Name</td><td>&quot;Fld_Name_or_String_or_None&quot;</td><td>&quot;Fld_Name_or_String_or_None&quot;</td></tr><tr><td>Task_Context_Switch_Time</td><td>Context_Switch</td><td>1.0E-7</td></tr><tr><td>Round_Robin_Time_Slice</td><td>1.0E-3</td><td>1.0E-3</td></tr><tr><td>Clock_Rate_Mhz</td><td>Speed_Mhz</td><td>100.0</td></tr><tr><td>Max_Scheduler_Length</td><td>30</td><td>30</td></tr><tr><td>Time_Type</td><td>Relative Time</td><td>Relative Time</td></tr><tr><td>Scheduler_Type</td><td>FCFS + Preempt</td><td>FCFS + Preempt</td></tr><tr><td>Add_Scheduler_Times_to_DS</td><td>false</td><td>false</td></tr></table> <h2>SystemResource</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>This_Scheduler_Name</td><td>&quot;INT&quot;</td><td>&quot;INT&quot;</td></tr><tr><td>Parent_Scheduler_Name</td><td>&quot;Fld_Name_or_String_or_None&quot;</td><td>&quot;Fld_Name_or_String_or_None&quot;</td></tr><tr><td>Task_Context_Switch_Time</td><td>Context_Switch</td><td>1.0E-7</td></tr><tr><td>Round_Robin_Time_Slice</td><td>1.0E-3</td><td>1.0E-3</td></tr><tr><td>Clock_Rate_Mhz</td><td>Speed_Mhz</td><td>100.0</td></tr><tr><td>Max_Scheduler_Length</td><td>30</td><td>30</td></tr><tr><td>Time_Type</td><td>Relative Time</td><td>Relative Time</td></tr><tr><td>Scheduler_Type</td><td>FCFS + Preempt</td><td>FCFS + Preempt</td></tr><tr><td>Add_Scheduler_Times_to_DS</td><td>false</td><td>false</td></tr></table> <h2>SystemResource3</h2><table border="1"><tr><td><b>Parameter</b></td><td><b>Expression</b></td><td><b>Value</b></td></tr><tr><td>Block_Documentation</td><td>Enter User Documentation Here</td><td>Enter User Documentation Here</td></tr><tr><td>This_Scheduler_Name</td><td>&quot;MEM&quot;</td><td>&quot;MEM&quot;</td></tr><tr><td>Parent_Scheduler_Name</td><td>&quot;Fld_Name_or_String_or_None&quot;</td><td>&quot;Fld_Name_or_String_or_None&quot;</td></tr><tr><td>Task_Context_Switch_Time</td><td>Context_Switch</td><td>1.0E-7</td></tr><tr><td>Round_Robin_Time_Slice</td><td>1.0E-3</td><td>1.0E-3</td></tr><tr><td>Clock_Rate_Mhz</td><td>Speed_Mhz</td><td>100.0</td></tr><tr><td>Max_Scheduler_Length</td><td>30</td><td>30</td></tr><tr><td>Time_Type</td><td>Relative Time</td><td>Relative Time</td></tr><tr><td>Scheduler_Type</td><td>FCFS + Preempt</td><td>FCFS + Preempt</td></tr><tr><td>Add_Scheduler_Times_to_DS</td><td>false</td><td>false</td></tr></table>

"This model highlights a simple RTOS using schedulers as the resouces with a reentrant kernel, ISR Tick, and ISR. Schedulers perform preemptive execution of tasks, no dynamic priority.

This model focuses on profile of software, as opposed to detailed instructions, in terms of integer, floating point, memory, or IO level. The Instruction_Set block is used with a slightly different notation, so the uEngine can lookup the macro-level instruction."