目前正在Keil uVision中将一个大型C语言项目从ARM 5迁移到ARM 6编译器。其中一个文件是第三方文件。让我难倒的一个错误是error: use of undeclared identifier '__Vectors'
.在同一文件中,有一些用于各种编译器的#define
指令,对于 Keil 情况,它只有
#elif (defined __CC_ARM)
extern unsigned char __Vectors
适用于 ARM 5。ARM 6 现在基于 clang,所以我想知道这是否是问题所在,如果是这样,新的 __Vectors
关键字应该定义为什么。
我使用的是最新版本(版本 5.2.0(的 CMSIS 和最新版本的特定 STM 设备支持。
第三方文件的问题在于它没有必要的 ARM 6 编译器#define
情况,这与 ARM 5 的#elif (defined __CC_ARM)
不同。
缺少的行是:
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
extern unsigned char __Vectors;
似乎是对中断向量表的引用。
它不是试图"定义一个关键字";它是声明一个外部变量。变量通常来自链接器脚本,因此您需要在那里挖掘。
如果代码不使用变量,你当然可以删除它,但也许它以某种方式操作中断向量表,因此需要访问它。