Если у вас есть лицензия Embedded Coder ®, вы можете управлять тем, заменяет ли MATLAB ® Coder™ умножение на две степени подписанными левыми побитовыми сдвигами. Некоторые стандарты кодирования, такие как MISRA ®, не позволяют выполнять побитовые операции со подписанными целыми числами.
По умолчанию кодер MATLAB заменяет умножение на степени двух со знаком левого сдвига. Вот пример сгенерированного кода C, который использует сдвиг влево со знаком для умножения на восемь.
i <<= 3;
Для увеличения вероятности генерации кода, соответствующего MISRA C:2012, отключите замену умножения на мощности двух со подписанными левыми сдвигами. Вот пример сгенерированного кода C, который не использует сдвиг влево со знаком для умножения на восемь:
i = i * 8;
На странице «Создать код», чтобы открыть диалоговое окно «Создать», щелкните стрелку «Создать».![]()
Установите один из следующих типов построения:
Source Code
Static Library (.lib)
Dynamic Library (.dll)
Executable (.exe)
Щелкните Дополнительные параметры.
На вкладке Code Appearance (Внешний вид кода) установите или снимите флажок Use signed shift left для операций с фиксированной точкой и умножения на степени 2.
Создание объекта конфигурации кода для 'lib', 'dll', или 'exe'. Например:
cfg = coder.config('lib','ecoder',true); % or dll or exe
Установите EnableSignedLeftShifts свойство для true или false. Например:
cfg.EnableSignedLeftShifts = false;