Выбор типов данных для основных операций

Ограничьте размеры слова типа данных

Если возможно, ограничьте размеры слова типа данных с фиксированной точкой в своей модели так, чтобы они были равны или меньше, чем целочисленный размер вашего целевого микроконтроллера. Это приводит к меньшему количеству математических инструкций в микроконтроллере и уменьшает ROM и время выполнения.

Эта рекомендация строго применяется к глобальным переменным, которые используют глобальный RAM. Например, блоки Unit Delay имеют дискретные состояния, которые имеют те же размеры слова как их сигналы ввода и вывода. Эти дискретные состояния являются глобальными переменными, которые используют глобальный RAM, который является дефицитным ресурсом на многих встраиваемых системах.

Для временных переменных, которые только занимают регистр центрального процессора или складывают местоположение кратко, место, занимавшее long менее очень важно. Однако в зависимости от операции, использования long переменные в математических операциях могут быть дорогими. Сложение и вычитание длинных целых обычно требуют того же усилия как добавление и вычитание регулярных целых чисел, так, чтобы операция не была беспокойством. В отличие от этого умножение и деление с длинными целыми могут потребовать значительно большего и более медленного кода.

Избегайте масштабирований фиксированной точки со смещением

Каждый раз, когда возможно, избегайте использования чисел фиксированной точки со смещением. В определенных случаях, если вы выбираете смещения тщательно, можно избежать значительных увеличений ROM и время выполнения. Обратитесь к Рекомендациям для Арифметики и Масштабирующийся для получения дополнительной информации о том, как выбрать соответствующие смещения в случаях, где это необходимо; например, если вы взаимодействуете через интерфейс с аппаратным устройством, которое имеет встроенное смещение. В общем случае однако более безопасно избегать использования чисел фиксированной точки со смещением в целом.

Входные параметры к интерполяционным таблицам являются важным исключением к этой рекомендации. Если вход интерполяционной таблицы и связанные входные данные используют то же смещение, то нет никакого штрафа, сопоставленного с ненулевым смещением для той операции.

Перенеситесь и вокруг на пол или самый простой

Для большей части фиксированной точки и целочисленных операций, программное обеспечение Simulink® предоставляет вам опции о том, как обработано переполнение и как округлены вычисления. Традиционный рукописный код, специально для приложений управления, почти всегда не использует “усилие” округление режима. Например, чтобы уменьшать точность переменной, та переменная смещена право. Для беззнакового целого и дополнительных целых чисел со знаком two, переключая право эквивалентно округлению на пол. Чтобы получить результаты, сопоставимые с или лучше, чем, что вы ожидаете от традиционного рукописного кода, вы должны вокруг на пол в большинстве случаев.

Первичным исключением к этому правилу является округляющееся поведение деления целого числа со знаком. Язык C оставляет это поведение округления незаданным, но для большинства целей “никакое усилие” режим не кругло, чтобы обнулить. Для деления без знака, все неотрицательно, так округляется на пол и округление, чтобы обнулить, идентичны.

Можно повысить эффективность кода путем устанавливания значения Параметров конфигурации Модели> Аппаратная реализация> детали Устройства>, деление Целого числа со знаком округляется к параметру, чтобы описать, как производственная платформа обрабатывает округление для деления со знаком. Для блоков Product, которые делают только деление, устанавливая параметр Integer rounding mode на округляющийся режим вашей производственной платформы, дает лучшие результаты. Можно также использовать Simplest округление режима на блоках, где это доступно. Для получения дополнительной информации обратитесь к Округлению Режима: Самый Простой.

Опции для переполнения, обрабатывающего также, оказывают большое влияние на КПД вашего сгенерированного кода. Используя программное обеспечение, чтобы обнаружить ситуации с переполнением и насыщать результаты требует, чтобы код был намного больше и медленнее по сравнению с простым игнорированием переполнения. Когда переполнение проигнорировано для беззнакового целого и дополнительных целых чисел со знаком two, результаты обычно переносят 2 Н по модулю, где N является количеством битов. Необработанное переполнение, которое повторяется, очень нежелательно для многих ситуаций.

Однако из-за размера кода и потребностей скорости, традиционный рукописный код содержит очень мало насыщения программного обеспечения. Как правило, масштабирование фиксированной точки очень тщательно установлено так, чтобы переполнение не происходило в большинстве вычислений. Код для этих вычислений безопасно игнорирует переполнение. Чтобы получить результаты, сопоставимые с или лучше, чем, что вы ожидали бы от традиционного рукописного кода, параметр Saturate on integer overflow не должен быть выбран для блоков Simulink, делающих те вычисления.

В проекте может быть несколько мест, где переполнение может произойти, и защита насыщения необходима. Традиционный рукописный код включает насыщение программного обеспечения для этих немногих мест, где это необходимо. Чтобы получить сопоставимый сгенерированный код, параметр Saturate on integer overflow должен только быть выбран для нескольких блоков Simulink, которые соответствуют этим подверженным риску вычислениям.

Вторичное преимущество использования самых эффективных опций для обработки переполнения и округления - то, что вычисления часто уменьшают от нескольких операторов, требующих нескольких линий кода С к маленьким выражениям, которые могут быть свернуты в нисходящие вычисления. Сворачивание выражения является методом оптимизации кода, который производит преимущества, такие как минимизация потребности сохранить промежуточные расчеты во временных буферах или переменных. Это может уменьшать размер стека и сделать его более вероятно, что вычисления могут быть эффективно обработаны с помощью только регистры центрального процессора. Автоматический генератор кода может тщательно применить выражение, сворачивающееся через части модели, и часто видеть оптимизацию, которая не может быть очевидной. Автоматическая оптимизация этого типа часто позволяет сгенерированному коду превышать КПД типичных примеров рукописного кода.

Ограничьте использование пользовательских классов памяти

В дополнение к совету, упомянутому в Переносе и Вокруг на Пол или Самый Простой, чтобы получить максимальные преимущества выражения, сворачивающего вас также, должен убедиться, что Storage class установлен в Auto для сигналов в вашей модели. Когда вы выбираете установку кроме Auto, необходимо назвать сигнал, и отдельный оператор создается в сгенерированном коде. Поэтому только используйте установку кроме Auto когда это необходимо для глобальных переменных.

Для получения дополнительной информации об установке Storage class сигналов, смотрите, Конфигурируют Данные сигнала для генерации кода C.