问题描述
我正在使用 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)