打印
[STM32]

关于STM32的地址空间(寻址空间)问题

[复制链接]
3038|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
堂堂菜鸟|  楼主 | 2013-12-16 14:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
            现在主要的问题是对 ”地址空间“ 这个概念不太理解,觉得很抽象,举几个例子,希望各位朋友能给出详细一点的解释(本人比较笨),十分感谢!
           
1,M3的地址空间是4GB,里面分为” 代码区(0.5GB)、SRAM(0.5GB)、外设(0.5GB)“等等,就拿外设区来说,地址范围是
0x4000 0000--0x5FFF FFFF,这0.5GB究竟是一个实体的存储空间还是虚拟的表示寻址能力的范围? 如果是虚拟的,为什么这些外设的寄存器确实是在这个范围内的,比如GPIO相应的一些寄存器?

2, 这些外设的寄存器  和 ARM自身的寄存器(R0,R1,R2...)  在物理层面是同一种寄存器吗?  有什么区别?

3,PC机32位处理器的寻址范围也是4GB,为什么我们的笔记本需要很大的内存(2G以上),而ARM 片上的内存却只有100K左右,我的意思是 同样是32位处理器,为什么ARM的内存  如此之小?

以上的问题  困扰了我一周,在网上搜了资料,感觉说的也很抽象,希望这里有人不要嫌我菜鸟。。帮我耐心解答,再次感谢。

相关帖子

沙发
原野之狼| | 2013-12-16 15:20 | 只看该作者
本帖最后由 原野之狼 于 2013-12-16 15:22 编辑

1,M3的地址空间是4GB,里面分为” 代码区(0.5GB)、SRAM(0.5GB)、外设(0.5GB)“等等,就拿外设区来说,地址范围是
0x4000 0000--0x5FFF FFFF,这0.5GB究竟是一个实体的存储空间还是虚拟的表示寻址能力的范围? 如果是虚拟的,为什么这些外设的寄存器确实是在这个范围内的,比如GPIO相应的一些寄存器?

这个是物理地址空间,至于为什么是这个区间,规定罢了。
而要深究这个地址空间的问题,你需要去了解一下地址总线相关的东西,看ARM公司的手册即可,当然需要有《数电》的基础,有《微机原理》的基础就更棒了。



2, 这些外设的寄存器  和 ARM自身的寄存器(R0,R1,R2...)  在物理层面是同一种寄存器吗?  有什么区别?

它们是两码事!
前者位于总线的地址空间,是core之外的。
而后者属于core之内的。
你仔细看看处理器手册的系统框图就能看得到,它们处于不同的拓扑位置。


3,PC机32位处理器的寻址范围也是4GB,为什么我们的笔记本需要很大的内存(2G以上),而ARM 片上的内存却只有100K左右,我的意思是 同样是32位处理器,为什么ARM的内存  如此之小?

看看CM3芯片的应用范围吧,虽说可以有4GB的寻址空间,但是基于其应用定位,没必要搞这么多。
还有就是你要明白ARM核和各半导体厂家造的基于该核的芯片是咋个关系。



综上,LZ主要还是没有把数字电路的基础打扎实,以及没有把处理器的工作原理弄明白,才会有这么多的疑问,所以接下来,你懂的...

使用特权

评论回复
板凳
堂堂菜鸟|  楼主 | 2013-12-16 15:43 | 只看该作者
原野之狼 发表于 2013-12-16 15:20
1,M3的地址空间是4GB,里面分为” 代码区(0.5GB)、SRAM(0.5GB)、外设(0.5GB)“等等,就拿外设区来说 ...

谢谢你的耐心回答!总体大概清楚了,还有一些地方不太明白:

1,这个物理空间和存储空间是否是一个东西,比如拿SRAM区来说,里面只用到了一小部分(bit-band区和别名区),剩下的都是保留区域,我想知道已经用作SRAM的部分和保留的部分是否是完全不同的结构,我的理解不知道合不合适,就是说这0.5G空间就好比盖房子的一块地,只有一小块地盖上了房子(即有存储的结构),剩下的可以用来盖房子,只是还没有盖,这样比喻合适吗?

2,我看《STM32权威指南》,里面说 这4G空间的最高0.5G是  M3内核的“闺房”,包含了系统级组件,内部外部私有外设总线,我的理解是这0.5G区域依然是您刚刚所说的core外的总线地址空间,对不对?

3,这个问题我明白了,嘿。

使用特权

评论回复
地板
原野之狼| | 2013-12-16 16:00 | 只看该作者
我个人认为,技术性的东西用“比喻”来描述是不怎么合适的,在弄懂了某项技术之后,通过“比喻”能够起到加深映像的作用,但是若没有弄明白而去理解所谓的“比喻”,那是会带来非常大的误导作用的。

A1、"我想知道已经用作SRAM的部分和保留的部分是否是完全不同的结构"
这个我也不知道该怎么答,因为这条与我们的应用设计基本上没有啥关系,芯片设计者需要关心这个问题。作为应用开发工程师,我们只需遵照规矩办事即可,比如说保留地址就不要去操作它。

A2、core外空间

A3、...

使用特权

评论回复
5
堂堂菜鸟|  楼主 | 2013-12-16 16:12 | 只看该作者
原野之狼 发表于 2013-12-16 16:00
我个人认为,技术性的东西用“比喻”来描述是不怎么合适的,在弄懂了某项技术之后,通过“比喻”能够起到加 ...

十分感谢!
:):)

使用特权

评论回复
6
xlsbz| | 2013-12-16 20:02 | 只看该作者
我觉得C语言指针学懂了,那么你这些问题就不会提出来了

使用特权

评论回复
7
堂堂菜鸟|  楼主 | 2013-12-19 09:24 | 只看该作者
xlsbz 发表于 2013-12-16 20:02
我觉得C语言指针学懂了,那么你这些问题就不会提出来了

嘿,C语言指针会用   但是学的不深

使用特权

评论回复
8
xlsbz| | 2013-12-19 20:40 | 只看该作者
堂堂菜鸟 发表于 2013-12-19 09:24
嘿,C语言指针会用   但是学的不深


没什么深不深的  就一句话

*地址  = 值;

使用特权

评论回复
9
xlsbz| | 2013-12-19 20:41 | 只看该作者
i =0;
相当于

*(i的地址) = 0;
懂这个 指针就会了。指针也就这么深

使用特权

评论回复
10
xlsbz| | 2013-12-19 20:48 | 只看该作者
如果芯片腿是你一楼说的GPIOA.1,  假设它的地址 0x5678;

这个腿连接到一个灯上

那么 * 0x5678 = 1;那么灯亮
那么 * 0x5678 = 0;那么灯灭

当然直接 * 0x5678 =1,一般来讲编译器会报错。
这时候 要想为什么报错呢?

再想为什么有2维指针?
没有5维、6维呢?

使用特权

评论回复
11
rocdove| | 2013-12-19 22:14 | 只看该作者
1、要明白需求
2、要明白为何如此设计
3、要学会变通

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

43

帖子

0

粉丝