当我访问我的微控制器中的内存值时,为什么它指向我的数据值的末尾?
When I'm accessing memory values in my microcontroller why is it pointing to the end of my data value?
我试图在我的微控制器内存中获取地址的值。地址位于 0x1fff7000
,这是内存块的开始(因此之前的任何内容都是未定义的)。在我的代码中,我有 char *ptr = (char *)BASE_ADDR;
,其中 #define BASE_ADDR ((uint32_t)0x1FFF7000)
。我在 0x1FFF7000
的价值是 0x12345678
,我 100% 知道它在那里。
在 GDB 中,我正在做 (gdb) p/x *ptr
,我的 return 值为 = 0x78
。为什么它在 0x78
而不是 returning 0x12345678
甚至 0x12
?
定义为uint32_t *ptr = (volatile char *)BASE_ADDR;
然后读取。
(char *) 可以引用-128到127之间的值。
另请阅读字节顺序。 https://en.wikipedia.org/wiki/Endianness
正如我在您的其他问题中所写的那样 - 在您对 uC 进行编程之前,您需要学习一些基础知识。按位运算、字节顺序等
因为你有一个小端system/mcu,这意味着首先存储最低有效字节。在您的示例中,存储为 32 位整数的 0x12345678
将在内存中看起来像 78 56 34 12
作为原始数据。
我试图在我的微控制器内存中获取地址的值。地址位于 0x1fff7000
,这是内存块的开始(因此之前的任何内容都是未定义的)。在我的代码中,我有 char *ptr = (char *)BASE_ADDR;
,其中 #define BASE_ADDR ((uint32_t)0x1FFF7000)
。我在 0x1FFF7000
的价值是 0x12345678
,我 100% 知道它在那里。
在 GDB 中,我正在做 (gdb) p/x *ptr
,我的 return 值为 = 0x78
。为什么它在 0x78
而不是 returning 0x12345678
甚至 0x12
?
定义为uint32_t *ptr = (volatile char *)BASE_ADDR;
然后读取。
(char *) 可以引用-128到127之间的值。
另请阅读字节顺序。 https://en.wikipedia.org/wiki/Endianness
正如我在您的其他问题中所写的那样 - 在您对 uC 进行编程之前,您需要学习一些基础知识。按位运算、字节顺序等
因为你有一个小端system/mcu,这意味着首先存储最低有效字节。在您的示例中,存储为 32 位整数的 0x12345678
将在内存中看起来像 78 56 34 12
作为原始数据。