Если у вас есть лицензия 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;