Замените умножение на степени двойки на подписанные битовые сдвиги

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

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

Пример

Чтобы заменить умножение на степени двойки битовыми сдвигами, создайте следующую модель. В этой модели сигнал Data type int16 поступает в арифметический блок Shift. В диалоговом окне Shift Arithmetic Block Parameters параметр Bits to shift > Direction установлен в Left. Параметр Bits to shift > Number установлен в 3. Этот параметр соответствует значению 8 или повышает 2 до степени 3.

Сгенерируйте код с подписанными битовыми сдвигами

  1. Откройте диалоговое окно Model Параметры Конфигурации и выберите вкладку Code Style. Параметр Replace multiplications by powers of two with signed bitwise shifts включен по умолчанию.

  2. Сгенерируйте код для модели.

В bitwise_multiplication.c файл, bitwise_multiplication Функция step содержит этот код:

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

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

Сгенерируйте код с умножением на степени двойки

  1. Откройте диалоговое окно Model Параметры Конфигурации и выберите вкладку Code Style.

  2. Очистите параметр Replace multiplications by powers of two with signed bitwise shifts.

  3. Сгенерируйте код для модели.

В bitwise_multiplication.c файл, bitwise_multiplication Функция step содержит этот код:

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

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

Похожие темы