Анализируйте данные о выполнении кода

После SIL или PIL симуляции, можно анализировать методы использования данных времени выполнения от coder.profile.ExecutionTime и coder.profile.ExecutionTimeSection классы.

  1. Открытый rtwdemo_sil_topmodel.

  2. На Configuration Parameters> Code Generation> панель Verification, задайте профильные опции:

    • Установите флажок Measure task execution time.

    • Задайте Workspace variable, например, myExecutionProfile.

    • От Save options выпадающий список выберите All data.

  3. Запустите SIL симуляцию.

Программное обеспечение генерирует переменную myExecutionProfile рабочей области, coder.profile.ExecutionTime объект.

Чтобы получить общее количество секций кода, которые имеют профильные данные, используйте Sections метод.

>> no_of_Sections = myExecutionProfile.Sections

no_of_Sections = 

  1×2 ExecutionTimeTaskSection array with properties:

    Name
    Number
    ExecutionTimeInTicks
    SelfTimeInTicks
    TurnaroundTimeInTicks
    TotalExecutionTimeInTicks
    TotalSelfTimeInTicks
    TotalTurnaroundTimeInTicks
    MaximumExecutionTimeInTicks
    MaximumExecutionTimeCallNum
    MaximumSelfTimeInTicks
    MaximumSelfTimeCallNum
    MaximumTurnaroundTimeInTicks
    MaximumTurnaroundTimeCallNum
    NumCalls
    ExecutionTimeInSeconds
    Time
Получить coder.profile.ExecutionTimeSection объект для профилируемой секции кода, используйте метод Sections.
>> FirstSectionProfile = myExecutionProfile.Sections(1)
SecondSectionProfile = myExecutionProfile.Sections(2)

FirstSectionProfile = 

  ExecutionTimeTaskSection with properties:

                            Name: 'rtwdemo_sil_topmodel_initialize'
                          Number: 1
            ExecutionTimeInTicks: 1188
                 SelfTimeInTicks: 1188
           TurnaroundTimeInTicks: 1188
       TotalExecutionTimeInTicks: 1188
            TotalSelfTimeInTicks: 1188
      TotalTurnaroundTimeInTicks: 1188
     MaximumExecutionTimeInTicks: 1188
     MaximumExecutionTimeCallNum: 1
          MaximumSelfTimeInTicks: 1188
          MaximumSelfTimeCallNum: 1
    MaximumTurnaroundTimeInTicks: 1188
    MaximumTurnaroundTimeCallNum: 1
                        NumCalls: 1
          ExecutionTimeInSeconds: 5.4000e-07
                            Time: 0


SecondSectionProfile = 

  ExecutionTimeTaskSection with properties:

                            Name: 'rtwdemo_sil_topmodel_step [0.1 0]'
                          Number: 2
            ExecutionTimeInTicks: [1×101 uint64]
                 SelfTimeInTicks: [1×101 uint64]
           TurnaroundTimeInTicks: [1×101 uint64]
       TotalExecutionTimeInTicks: 70316
            TotalSelfTimeInTicks: 70316
      TotalTurnaroundTimeInTicks: 70316
     MaximumExecutionTimeInTicks: 2448
     MaximumExecutionTimeCallNum: 2
          MaximumSelfTimeInTicks: 2448
          MaximumSelfTimeCallNum: 2
    MaximumTurnaroundTimeInTicks: 2448
    MaximumTurnaroundTimeCallNum: 2
                        NumCalls: 101
          ExecutionTimeInSeconds: [1×101 double]
                            Time: [101×1 double]

Используйте coder.profile.ExecutionTimeSection методы, чтобы извлечь профильную информацию для конкретной секции кода. Например, используйте Name получить имя профилируемой задачи.

>> name_of_section = SecondSectionProfile.Name

name_of_section =

rtwdemo_sil_topmodel_step [0.1 0]

Если таймер не калибруется, и вы знаете уровень таймера, например, 2,2 ГГц, можно использовать coder.profile.ExecutionTime метод TimerTicksPerSecond калибровать таймер:

>> myExecutionProfile.TimerTicksPerSecond = 2.2e9;
>> SecondSectionProfile = myExecutionProfile.Sections(2);

Похожие темы