exponenta event banner

Заменить умножение на полномочия двух со знаком побитовых сдвигов

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

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

Пример

Чтобы заменить умножение на степени двух побитовыми сдвигами, создайте следующую модель. В этой модели сигнал типа Data int16 подает в арифметический блок Shift. В диалоговом окне «Параметры арифметического блока сдвига» параметру «Биты для сдвига» > «Направление» присвоено значение Left. Параметр Bits to shift > Number имеет значение 3. Этот параметр соответствует значению 8 или возведению 2 в степень 3.

Создать код со подписанными побитовыми сдвигами

  1. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters) и перейдите на вкладку Стиль кода (Code Style). Параметр Заменить умножения на степени двух со знаком побитовых сдвигов включен по умолчанию.

  2. Создайте код для модели.

В bitwise_multiplication.c файл, bitwise_multiplication пошаговая функция содержит следующий код:

bitwise_multiplication_Y.Out1 = (int16_T)(bitwise_multiplication_U.In1 << 3);

Целое число со знаком, bitwise_multiplication_U.In1, сдвигается на три бита влево.

Создание кода с умножением на мощности двух

  1. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters) и перейдите на вкладку Стиль кода (Code Style).

  2. Снимите флажок Заменить умножение на степени двух со знаком параметра побитовых сдвигов.

  3. Создайте код для модели.

В bitwise_multiplication.c файл, bitwise_multiplication пошаговая функция содержит следующий код:

bitwise_multiplication_Y.Out1 = (int16_T)(bitwise_multiplication_U.In1 * 8);

Целое число со знаком bitwise_multiplication_U.In1 умножается на 8.

Связанные темы