В этом примере показано, как сгенерировать код, который заменяет умножение степенями двойки с поразрядными сдвигами со знаком. Код, который содержит поразрядные сдвиги, выполняется быстрее, чем код, содержащий умножение степенями двойки.
Некоторые стандарты кодирования, такие как 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.
Откройте диалоговое окно Model Configuration Parameters и выберите вкладку Code Style. Параметр Replace multiplications by powers of two with signed bitwise shifts включен по умолчанию.
Сгенерируйте код для модели.
В bitwise_multiplication.c
файл, bitwise_multiplication
ступенчатая функция содержит этот код:
bitwise_multiplication_Y.Out1 = (int16_T)(bitwise_multiplication_U.In1 << 3);
Целое число со знаком, bitwise_multiplication_U.In1
, переключен три бита налево.
Откройте диалоговое окно Model Configuration Parameters и выберите вкладку Code Style.
Очистите параметр Replace multiplications by powers of two with signed bitwise shifts.
Сгенерируйте код для модели.
В bitwise_multiplication.c
файл, bitwise_multiplication
ступенчатая функция содержит этот код:
bitwise_multiplication_Y.Out1 = (int16_T)(bitwise_multiplication_U.In1 * 8);
Целое число со знаком bitwise_multiplication_U.In1
умножается на 8
.