在MPLAB XC8 Compiler User Guide中,第162页上的示例(如下所示)将extern
关键字与@
说明符结合使用。考虑到我们自己指定地址,为什么需要这样做?它本身不会分配任何内存。
我能想到的唯一原因可能是外部变量在启动时未归零。但是,然后,C变量通常无论如何都包含垃圾,直到您明确分配它们为止。所以...我不知道。
也许与它在头文件中有关?为避免多个#include
语句引起某种“已声明变量”错误?
如果指针必须访问数据存储器中的对象,则需要定义另一个对象以充当虚拟目标。例如,如果要从数据存储器中的地址0x90开始以10个字节为单位计算校验和,则可以使用以下代码。
const char * cp; extern char inputData[10] @ 0x90; cp = &inputData; // cp is incremented over inputData and used to read values there
extern声明不占用任何内存,可以将其映射到现有对象的顶部。
没有区别。主要是选择显式还是隐式。
这仅是因为type和address声明仅需要inputData的声明。不需要物理对象。然后使用指针访问数据。
BTW这是一个示例,该编译器有多糟糕。