const
и volatile
Квалификаторы типовВ C используется квалификатор типа const
для предотвращения назначения новым значениям переменной кода в приложении. В приложении, где внешний исполнитель (например, аппаратное устройство) может манипулировать значением переменной, используется ключевое слово volatile
для предотвращения оптимизации кода сборки компилятором таким образом, чтобы нарушалась целостность значения переменной. Также можно использовать volatile
чтобы предотвратить исключение компилятором хранилища для const
данные, например параметр, значение которого необходимо настроить во время выполнения.
Чтобы применить квалификаторы к отдельному элементу данных в модели, включая пользовательскую структуру, созданную с помощью невиртуальной шины или структуры параметров, примените соответствующий предопределенный класс хранения непосредственно к элементу данных. Класс хранения предотвращает исключение ресурсов хранения для элемента данных при оптимизации, такой как поведение параметров по умолчанию. Пример см. в разделе Квалификаторы типов. Сведения об оптимизации, предотвращаемой непосредственно применяемым классом хранения, см. в разделе Как сгенерированный код хранит внутренний сигнал, состояние и данные параметров.
Если предопределенные классы хранения не соответствуют вашим требованиям, можно создать собственный пользовательский класс хранения. Чтобы пользовательский класс хранения применил квалификаторы, в конструкторе пользовательских классов хранения установите раздел «Память» в соответствующий раздел встроенной памяти или в созданный раздел памяти. Дополнительные сведения см. в разделе Создание классов хранения с помощью пользовательского конструктора классов хранения.
Квалификаторы можно применить к категории данных модели по умолчанию, например к параметрам или состояниям. При добавлении блоков в модель новые элементы данных в этих категориях содержат указанные квалификаторы. Дополнительные сведения см. в разделе Настройка генерации кода по умолчанию для данных.
Если предопределенные классы хранения не соответствуют вашим требованиям, вы можете создать свой собственный, используя Embedded Coder Dictionary. В словаре для нового класса хранения установите соответствующие флажки в разделе Квалификаторы. Дополнительные сведения см. в разделе Создание определений кодов для использования в редакторе сопоставлений кодов.
const
Корректность аргументов функций точек входаКогда внешний код вызывает сгенерированную функцию точки входа и передает const
данные через аргумент (формальный параметр) функции, чтобы сделать соответствующий аргумент в определении функции const
, настройте интерфейс функции начального уровня выполнения (шаг).
Чтобы настроить интерфейс функции начального уровня шага для модели, см. раздел Настройка имени и аргументов для отдельных функций шага.
Чтобы настроить пошаговый интерфейс функции начального уровня для блока функции Simulink, см. раздел Настройка интерфейсов функции начального уровня для блоков функции Simulink и вызывающей функции.
Сгенерированный код может определять и вызывать функции, отличные от функций точки входа модели. Например, можно настроить атомарную подсистему так, чтобы она отображалась в коде как отдельная функция. Кроме того, блоки таблиц подстановки, такие как n-D Lookup Table, обычно дают отдельные служебные функции.
Если созданный код определяет функцию, имеющую аргумент (формальный параметр), определение функции не применяется volatile
к аргументу. Поэтому, когда другой сгенерированный код или внешний код вызывает функцию и передает переменную-переменную в качестве значения аргумента, вызываемая функция неявно отбрасывает волатильность.
Если приложение выполняет вызываемую функцию при изменении значения изменяемых данных, функция может привести к неправильным результатам или неопределенному поведению. В частности, для данных таблицы поиска, которые вы подготавливаете для калибровки, применяя const
и volatile
убедитесь, что данные не откалиброваны, пока приложение выполняет утилиты поиска.