Я хотел бы обсудить Matlab / Simulink / EmbeddedCoder с точки зрения синхронизации данных.Я обнаружил, что невозможно использовать операцию отключения прерывания для защиты общих данных.На самом деле, когда дело доходит до синхронизации данных, есть 2 подхода:
использовать блок Simulink RateTransition - в этом случае, если ISR должен вносить изменения в совместно используемые данные, это своего родасохранить его невозможно, особенно в случае, когда прерывание происходит непредсказуемо между двумя последовательными выполнениями периодической задачи.
использовать библиотеку VxWorks vxlib1 и особенно TaskSync способен решить эту проблему,однако в сгенерированном коде он добавляет дополнительную задачу, использует семафоры ... это сложная система Во многих случаях второе решение даже невозможно, поскольку многие простые системы используют упрощенные ОС, которые даже не поддерживают семафоры.Даже если это не так, в моем понимании, простое блокирование системы (DI) сделало бы большую работу!
Существует вариант 2. и это возможнопоменять VxWorks на vxlib1.Это разрешено и вполне нормально, но с этой общей функцией должно быть просто, готовое решение, верно?
Есть ли у вас какой-либо другой опыт решения этой проблемы?Можно ли просто отключить прерывания?Можно ли создать код для общих данных без какой-либо защиты?Я буду рад услышать о вашем опыте!