назначение переменной с использованием двоичного формата - 0B вызывает ошибку в ARM Keil uVision

Я работаю над проектом с микроконтроллером TM4C123GH6PM, используя keil uvision версии 4.7. Когда я присваиваю значение переменной в двоичном формате, как показано ниже:

unsigned char tmp = 0b11000011;

а затем я создаю проект, появляется следующая ошибка:

ожидал ;

Когда я меняю формат на шестнадцатеричный, используя 0X- или десятичный, ошибка исчезает.

разве компилятор в Keil uVision не поддерживает двоичный формат?


person A.Mak    schedule 19.02.2021    source источник
comment
Что говорится в документации Keil?   -  person old_timer    schedule 19.02.2021


Ответы (3)


ANSI C не определяет синтаксис для двоичных литералов. Компиляторы Keil следуют стандарту ANSI C, и их руководство обычно записывает любые отклонения или расширения.

Предыдущее обсуждение этого вопроса можно найти здесь Почему в C нет двоичных литералов?

person Anakin    schedule 19.02.2021
comment
Спасибо за ваше разъяснение. Кажется, компилятор ARMCC не использует расширение для поддержки двоичного формата. - person A.Mak; 19.02.2021

Компилятор Keil Arm v5 (ARMCC) не поддерживает двоичные литералы. Но компилятор Keil Arm V6 (ARMCLANG) действительно поддерживает двоичные литералы. Опция компилятора Arm v6 доступна в Keil MDK v5.12 и более поздних версиях. Возможно, вам потребуется перенести часть кода для переключения версий компилятора (Руководство по миграции ).

person kkrambo    schedule 19.02.2021

Откройте «Параметры цели» --> переключитесь на вкладку «C/C++» --> добавьте --gnu в текстовое поле «Разное».

Коды типа int a = 0b101010; компилируются без ошибок.

Я использую MDK 5.18 и ARMCC V5.06 update1 (сборка 61)

person Alleria    schedule 21.04.2021