使用二进制格式分配变量 - 0B 在 ARM Keil uVision 中导致错误

问题描述

我正在使用 keil uvision 4.7 版使用 TM4C123GH6PM 微控制器进行项目。当我以二进制格式为变量赋值时,如下所示:

unsigned char tmp = 0b11000011;

然后我构建项目,出现如下错误

应为“;”

当我将格式更改为十六进制 - 使用 0X- 或十进制时,错误消失。

Keil uVision 中的编译器不支持二进制格式吗?

解决方法

ANSI C 没有指定二进制文字的语法。 Keil 编译器遵循 ANSI C 标准,他们的手册通常会记录任何偏差或扩展。

可以在此处找到之前对此的讨论Why doesn't C have binary literals?

,

Keil Arm v5 (ARMCC) 编译器不支持二进制文字。但是 Keil Arm V6 (ARMCLANG) 编译器确实支持二进制文字。 Arm v6 编译器选项可用于 Keil MDK v5.12 及更高版本。您可能需要移植一些代码以切换编译器版本 (Migration Guide)。

,

打开“目标选项”--> 切换到“C/C++”选项卡--> 在“其他控件”文本框中添加 --gnu

int a = 0b101010; 这样的代码编译没有错误。

我使用的是 MDK 5.18 和 ARMCC V5.06 update1 (build 61)