В этом примере показано, как симулировать и сгенерировать код для асинхронных событий в многозадачной системе в реальном времени.
Откройте модель rtwdemo_async_mdlreftop
в качестве примера.
Передачи данных происходят между одной задачей считывания и одной задачей записи.
Операция чтения или операция записи на переменной размера байта являются атомарными.
Когда две задачи взаимодействуют, только один может вытеснить другой.
Для периодических задач задача с более быстрым уровнем имеет более высокий приоритет, чем задача с более медленным уровнем. Задача с более быстрым уровнем вытесняет задачи с более медленными уровнями.
Задачи работают на одном процессоре. Квантование времени не позволено.
Процессы не разрушают и перезапускают, особенно в то время как данные передаются между задачами.
Симулируйте модель. По умолчанию модель сконфигурирована, чтобы отобразить шаги расчета различными цветами. Дискретные шаги расчета для ввода и вывода кажутся красными и зелеными, соответственно. Константы являются пурпурным. Асинхронные прерывания являются фиолетовыми. Блоки Перехода Уровня, которые являются гибридом (шаги расчета ввода и вывода могут отличаться), кажутся желтыми.
Сгенерируйте код и отчет генерации кода для модели. Асинхронный блок Interrupt и сгенерированный код блока Task Sync для примера RTOS (VxWorks). Однако можно изменить блоки, чтобы сгенерировать код для другой среды выполнения.
1. Создайте временную папку для сборки и инспекционного процесса.
2. Создайте модель.
Откройте сгенерированный исходный файл rtwdemo_async_mdlreftop.c
. Код инициализации соединяет и включает ISR isr_num1_vec192
для прерывания 1 и ISR isr_num2_vec193
для прерывания 2.
В сгенерированном исходном файле rtwdemo_async_mdlreftop.c
, рассмотрите код для isr_num1_vec192
ISRs и
isr_num2_vec293
. Каждый ISR:
Отключает прерывания.
Сохраняет контекст с плавающей точкой.
Вызывает код, сгенерированный для подсистемы, соединенной с блоком модели Inport, на который ссылаются, который получает прерывание.
Восстанавливает контекст с плавающей точкой.
Повторно включает прерывания.
Блок Task Sync генерирует следующий код завершения.