c - 当我访问微控制器中的内存值时,为什么它指向我的数据值的末尾?
问题描述
我试图在我的微控制器的内存地址中获取值。地址在0x1fff7000
,这是内存块的开始(所以之前的任何东西都是未定义的)。在我的代码中,我有char *ptr = (char *)BASE_ADDR;
where #define BASE_ADDR ((uint32_t)0x1FFF7000)
。我的价值0x1FFF7000
是0x12345678
,而且我 100% 知道它就在那里。
在 GDB 中,我正在做(gdb) p/x *ptr
,我的返回值为$6 = 0x78
. 为什么它在0x78
而不是返回0x12345678
甚至0x12
?
解决方案
因为您有一个 little-endian system/mcu,这意味着首先存储最低有效字节。在您的示例中0x12345678
,存储为 32 位整数的 将看起来像78 56 34 12
内存中的原始数据。
推荐阅读
- java - 在 JavaFX / fxml 中打开新窗口,但我不希望它打开新场景
- java - AlertDialog 按钮区域背景颜色 Android
- angular - 如何在切换之前为组件设置动画
到下一个组件? - c# - IntPtr 分配的变量正在触发“使用未分配的变量”,为什么会发生这种情况?
- c# - MS Bot 框架中意图的对话管理
- abap - 更改 ABAP 报告中的列名
- c++ - 为什么这个 operator< 重载函数对 STL 算法不可见?
- django - 如何在 Django REST 框架的 ListAPIView 中使用多个值过滤一个字段?
- vue.js - 为什么加入时未触发 onstream(RTCMulticonnection)?
- azure-language-understanding - 我们可以在 LUIS 列表模型的同义词中使用正则表达式吗?