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

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

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

Пример

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

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

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

  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. Очистите параметр Replace multiplications by powers of two with signed bitwise shifts.

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

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

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

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

Похожие темы