我是嵌入式系统编程的新手。我正在开发一个使用 8051 芯片组的设备。我在示例程序中注意到,在定义变量时,有时会使用关键字 xdata。像这样...
静态无符号字符 xdata PatternSize;
而其他时候 xdata 关键字被省略。
我的理解是 xdata 关键字指示编译器将该变量存储在外部闪存中。
在什么情况下我应该使用 xdata 在外部存储变量?访问这些变量需要更长的时间,对吗?使用 xdata 存储的值在设备硬重置后不会保留,不是吗?
另外,我知道 static 关键字意味着该变量将在每次调用它所定义的函数时持续存在。static 和 xdata 是否必须一起使用?
8051架构具有三个独立的地址空间,核心RAM使用8位地址,因此最大可达256字节,XDATA是具有读/写能力的16位地址空间(64Kbytes),程序空间是16位地址空间具有执行和只读数据能力。由于其地址范围较小且与内核紧密耦合,因此对内核 RAM 进行寻址在代码空间和访问周期方面更加高效
最初的 8051 内核具有微型片上 RAM(地址空间为 256 字节,但某些变体的实际内存只有一半),而 XDATA 指的是片外数据存储器(与程序存储器相对)。然而,大多数现代 8051 架构器件都具有片上 XDATA 和程序存储器。
因此,当性能至关重要时,您可能会使用核心内存,而对于较大的内存对象,您可能会使用 XDATA。然而,在大多数情况下,编译器应该为您做出这个决定(检查您的编译器手册,它将详细描述如何分配内存)。指令集使得在核心内存中实现堆栈变得高效,而静态和动态分配的数据通常在 XDATA 中分配更合理。如果编译器有 XDATA 关键字,那么它将覆盖编译器的策略,并且仅当编译器的策略因某种原因失败时才应使用,因为它会降低代码的可移植性。
[编辑] 另请注意,核心存储器包括一个 32 字节位可寻址区域,位寻址指令使用该区域中的 8 位地址来直接访问各个位。该区域存在于 256 字节可寻址核心内存中,因此位和字节均可寻址[/编辑]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)