找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2001|回复: 9
收起左侧

51单片机C语言指针是怎么找到数据的?

[复制链接]
ID:1043747 发表于 2022-10-31 14:31 | 显示全部楼层 |阅读模式
单片机p1的值是0xff,是如何找到c:0x001c的呢?
版本:keil 5
2022-10-31_134658.png
回复

使用道具 举报

ID:624769 发表于 2022-10-31 17:08 来自触屏版 | 显示全部楼层
你声明的是通用指针,一共三个字节,你只显示一个字节自然只有0xff,代表类型的这个值了罗,0x00和0x1c就被藏了呗。
回复

使用道具 举报

ID:1043747 发表于 2022-10-31 17:36 来自触屏版 | 显示全部楼层
188610329 发表于 2022-10-31 17:08
你声明的是通用指针,一共三个字节,你只显示一个字节自然只有0xff,代表类型的这个值了罗,0x00和0x1c就被 ...

并没有看到隐藏啊
1667208976255..jpg
回复

使用道具 举报

ID:883242 发表于 2022-10-31 17:44 | 显示全部楼层
censv 发表于 2022-10-31 17:36
并没有看到隐藏啊

看汇编是藏在0x8里面,至于为什么显示0x90?可能是个bug。
回复

使用道具 举报

ID:624769 发表于 2022-10-31 17:49 | 显示全部楼层
censv 发表于 2022-10-31 17:36
并没有看到隐藏啊

哦,你这是名字问题,  KEIL 的动态解析不区分大小写,所以错误,你换个名字就好了, 比如 *Test1 之类的。
回复

使用道具 举报

ID:1043747 发表于 2022-10-31 19:22 来自触屏版 | 显示全部楼层
188610329 发表于 2022-10-31 17:49
哦,你这是名字问题,  KEIL 的动态解析不区分大小写,所以错误,你换个名字就好了, 比如 *Test1 之类的。

动态解析不区分大小写?求细说
回复

使用道具 举报

ID:624769 发表于 2022-10-31 21:04 | 显示全部楼层
censv 发表于 2022-10-31 19:22
动态解析不区分大小写?求细说

他把 p1  当作了  P1   显示地址为: 0x90
回复

使用道具 举报

ID:1043747 发表于 2022-10-31 22:06 来自触屏版 | 显示全部楼层
188610329 发表于 2022-10-31 21:04
他把 p1  当作了  P1   显示地址为: 0x90

喔,明白了,多谢
那为何右下角的栈变量能正确解析,不是一个解析方式吗?
回复

使用道具 举报

ID:624769 发表于 2022-11-1 11:12 | 显示全部楼层
censv 发表于 2022-10-31 22:06
喔,明白了,多谢
那为何右下角的栈变量能正确解析,不是一个解析方式吗?

不是, 悬浮显示是  KEIL 通过你的C语言代码,而进行的 时实转汇编的功能,“解析”出来的。
右下角的内存状态框,是“仿真”功能,通过编译后的单片机执行代码,模拟运行后出来的结果。

由于C语言编译的时候,大小写不同是不同的变量,生成的最终 单片机执行代码,是指向不同的地址。
而,汇编在编译的时候,大小写不同是同一个变量,所以,实施解析和 “仿真” 会有不同的结果。
所以,悬浮显示就当一个参考就好了,最终还是要看 内存状态框的变化。
回复

使用道具 举报

ID:1043747 发表于 2022-11-1 11:46 | 显示全部楼层
188610329 发表于 2022-11-1 11:12
不是, 悬浮显示是  KEIL 通过你的C语言代码,而进行的 时实转汇编的功能,“解析”出来的。
右下角的内 ...

多谢解答
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表