如上图,我想知道,红框内的地址是什么地址?怎么知道程序中某个变量是存在哪个地址里面的? 蓝框内的值, 又是什么,我数过蓝框内一共有十八组数的,但是PC的内存应该是32位的吧? 位数不对啊
我希望知道的是内存窗口对我们调整程序有什么帮助, 我觉得这个很多新手都想知道的,希望有高手举出简单例子出来, 不胜感激.
这里的c:0x0000表示的是CODE代码就是机器码了。
在地址栏送D:0X0000表示的就是RAM的数据了。
里面红框内的是ROM地址;
还有,51的PC值是16位的,并不是你说的32位,它是指向程序的下一个执行地址;
51的程序的ROM是一个16位的地址,但是它装载的数(程序)却是8位的,这一点很重要;
一般来说,我们在做单片机时,使用的内存指的是RAM,这个概念也很重要;
我们使用的变量是在RAM里面的,我们想要了解那些变量是如何在RAM中变化,这就是我们调试程序的主要方法;
在KEIL中,我们可以通过各种窗口观察变量的变化,例如:在VIEW菜单下面就有许多窗口可以选择;
具体的做法建议LZ看看手册
引用: 引用 1 楼 azmao 的回复:
这里的c:0x0000表示的是CODE代码就是机器码了。
在地址栏送D:0X0000表示的就是RAM的数据了。
谢谢, 你的意思是, 红框内的是指令(例如mov之类的), 然后红框中的是单片机ram的数据?
C:XXXX 这个是地址啥的
那个框内的东西,就是具体空间存放的内容
如果是ROM区,那么内容就是指令
如果是RAM区,那么就是数据
引用: 引用 4 楼 lbing7 的回复:
C:XXXX 这个是地址啥的
那个框内的东西,就是具体空间存放的内容
如果是ROM区,那么内容就是指令
如果是RAM区,那么就是数据
那我怎么区分我图片上的那个内存窗口的c:XXXX是在rom区还是在ram区?
c:xxxx就是rom
d:xxxx就是ram
不过这是一般情况,有的单片机自己有定义,你得看手册
如果你真的想用KEIl作为开发工具,请认真看看期用户手册。
引用: 引用 5 楼 javaglory 的回复:
引用 4 楼 lbing7 的回复:
C:XXXX 这个是地址啥的
那个框内的东西,就是具体空间存放的内容
如果是ROM区,那么内容就是指令
如果是RAM区,那么就是数据
那我怎么区分我图片上的那个内存窗口的c:XXXX是在rom区还是在ram区?
哈哈,看数据手册,看你的单片机的RAM区多大,ROM区多大
这个东西就是个地址啊。你要用仿真器才行的吧,没有硬件估计不行。其实这个就是内存地址的问题。
楼主加油,以前我搞单片机可不会用这个啊。现在后悔啊。
c:xxxx一般是rom,d:xxxx一般是直接寻址ram ,i:xxxx一般是间接寻址ram。具体要参照该单片机的datasheet,注意双映射等问题。
引用: 引用 12 楼 lbing7 的回复:
引用 11 楼 anchorite27 的回复:
c:xxxx一般是rom,d:xxxx一般是直接寻址ram ,i:xxxx一般是间接寻址ram。具体要参照该单片机的datasheet,注意双映射等问题。
LS说的寻址方式好像不太那啥
那个指令应该是编址空间
C是ROM区
P是片外低128BYTE
I和D好像是一个东西,就是片内低128BYTE
X就是片外的
其他没问题,但“I和D好像是一个东西,就是片内低128BYTE”是不准确的,比如c8051fxxx系列某些单片机有256字节ram,其中高128字节为双映射,要访问高128字节的内容,就必须分清是I还是D。“片内低128BYTE,I和D是一个东西”,即其逆命题是正确的。大家探讨:)