Если у вас есть Embedded Coder® лицензия, можно контролировать, является ли MATLAB® Coder™ заменяет умножения на степени двойки на знаковые левые побитовые сдвиги. Некоторые стандарты кодирования, такие как MISRA®, не допускать побитовые операции с целыми числами со знаком.
По умолчанию MATLAB Coder заменяет умножение на степени двойки со знаком слева сдвигов. Вот пример сгенерированного кода C, который использует слева со знаком сдвига для умножения на восемь.
i <<= 3;
Чтобы увеличить вероятность генерации MISRA C:2012 совместимого кода, отключите замену умножения на степени двойки со знаковыми левыми сдвигами. Вот пример сгенерированного кода C, который не использует слева со знаком сдвига для умножения на восемь:
i = i * 8;
На странице Generate Code, чтобы открыть диалоговое окно Generate, щелкните стрелу Generate.
Установите Build type в одно из следующих значений:
Source Code
Static Library (.lib)
Dynamic Library (.dll)
Executable (.exe)
Нажмите More Settings.
На вкладке Code Appearance установите или снимите флажок Use signed shift left for fixed-point operations and multiplication by powers of 2.
Создайте объект строения кода для 'lib'
, 'dll'
, или 'exe'
. Для примера:
cfg = coder.config('lib','ecoder',true); % or dll or exe
Установите EnableSignedLeftShifts
свойство к true
или false
. Для примера:
cfg.EnableSignedLeftShifts = false;