以下是DTS文件的摘录。 LINUX /拱/的PowerPC /引导/ DTS / [board_name] .dts
memory {
device_type = "memory";
reg = <0x00000000 0x40000000>; // 1GB at 0
};
嵌入式设备有1 GB的内存。
0x40000000 = 1073741824(十进制)。
我得到1 GB的唯一方法是当我计算1073741824作为字节。
这意味着1073741824字节= 1GB。
这是否意味着0x00000000指向RAM中的一个字节数据? 换句话说,RAM中的每个字节都有一个地址。
为什么会这样?我们读了8位块?为什么不说一句话?
答案 0 :(得分:5)
TL; DR :RAM访问不是字节大小的块,即使每个字节在RAM中可独立寻址(有自己的地址)。
第一个真正成功的微处理器,是“数字革命”的主流,是8bit,因此8bit的基本数据块的传统一直持续到今天。在具有8位CPU的第一代微处理器中,RAM中的每个字节都被单独读取/写入。
下一代是使用大于8位的内部CPU寄存器开发的。它们通常是8位(16/32/64)的倍数,因为这允许它们从RAM一次读取多个完整字节。任何从RAM读取地址X的尝试都会导致获取2/4/8字节(在16/32/64位CPU上),即RAM中包含地址X的字并且仅保留适当的字节并根据需要存储到内部CPU寄存器中。
接下来,随着CPU缓存的出现,RAM开始以缓存行大小的块读取(并写入)。它们甚至比寄存器的大小还要大。这将减少因数据位置而从RAM读取数据的延迟。
有关详细信息,请查看由Ulrich Drepper撰写的全面article on CPU and memory。
答案 1 :(得分:0)
您可能还会注意到内存地址(Arm DDR,PRU DDR,共享PRU DDR等)以及内存偏移都是以字节为单位,而不是处理器指令。 Bit Pusher