我是嵌入式系统编程的新手。我正在使用8051芯片组的设备上工作。我在示例程序中注意到,在定义变量时,有时它们使用关键字xdata。像这样...

静态无符号字符xdata PatternSize;

而其他时候,省略xdata关键字。

我的理解是xdata关键字指示编译器将该变量存储在外部闪存中。

在什么情况下应该将变量与xdata一起存储在外部?访问这些变量需要更长的时间,对吗?在硬重置设备后,使用xdata存储的值不会保留吗?

另外,我知道static关键字意味着该变量将在每次对其定义的函数的调用中保持不变。是否必须将static和xdata一起使用?

最佳答案

8051体系结构具有三个独立的地址空间,核心RAM使用8位地址,因此最多可以为256个字节,XDATA是具有读写功能的16位地址空间(64 KB),而程序空间是16位地址空间具有执行和只读数据功能。由于其较小的地址范围和与内核的紧密耦合,因此在代码空间和访问周期方面对内核RAM进行寻址更加有效

最初的8051内核具有片上微型RAM(地址空间为256字节,但某些变体具有实际存储器中的一半),而XDATA则指代片外数据存储器(与程序存储器相对)。但是,大多数现代的8051架构设备都具有片上XDATA和程序存储器。

因此,当性能至关重要时,您可以使用核心内存,而对于较大的内存对象,则可以使用XDATA。但是,在大多数情况下,编译器应为您做出此决定(查看编译器手册,它将详细描述如何分配内存)。指令集使在内核内存中实现堆栈变得高效,而静态和动态分配的数据通常会在XDATA中更合理地分配。如果编译器具有XDATA关键字,则它将覆盖编译器的策略,并且仅应在编译器的策略因某种原因失败时使用,因为这会降低代码的可移植性。

[edit]还请注意,核心存储器包含一个32字节的位可寻址区域,位寻址指令将8位地址用于该区域以直接访问各个位。该区域存在于256byte字节可寻址核心内存中,因此位和字节均可寻址[/edit]

关于c - 什么时候使用xdata?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2043888/

10-09 10:16