打印

问一个最基本的问题,也是我一直没搞清楚的问题

[复制链接]
4348|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jhbang|  楼主 | 2011-12-8 17:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
lgnativs| | 2011-12-8 17:07 | 只看该作者
冯.诺依曼结构是在从ram中取指令执行,包括arm体系的内核;哈福结构,cpu直接执行程序存储器的指令,包括51体系的内核;

使用特权

评论回复
板凳
wangjun403| | 2011-12-8 17:42 | 只看该作者
我感觉51内核还是冯.诺依曼结构,虽然它的数据存储和程序存储是分开的

使用特权

评论回复
地板
lxyppc| | 2011-12-8 17:47 | 只看该作者
实际上看你怎么想了,不必过于纠结

使用特权

评论回复
5
dengm| | 2011-12-8 18:14 | 只看该作者
一般在rom中运行, 如 PC 的bios

使用特权

评论回复
6
jhbang|  楼主 | 2011-12-9 09:22 | 只看该作者
还是不太清楚,有没有一个清楚的说法,或者举出哪些是从RAM中取指令的,哪些是从ROM中取指令的。

使用特权

评论回复
7
wzf3151| | 2011-12-9 10:31 | 只看该作者
这个问题在各自的处理器资料里都会提到

使用特权

评论回复
8
Tinnal| | 2011-12-9 11:46 | 只看该作者
我感觉51内核还是冯.诺依曼结构,虽然它的数据存储和程序存储是分开的
wangjun403 发表于 2011-12-8 17:42


51是哈弗结构。区别是两者中的那一个的根本是:数据存储地址空间和程序存储地址空间是否分开,也就是说能不能在读入指令的同时操作数据。

使用特权

评论回复
9
Tinnal| | 2011-12-9 11:54 | 只看该作者
当程序被下载到flash中,程序运行时,是先把代码复制到ram中然后从ram中取指令开始运行,还是直接从flash中取指令运行?
jhbang 发表于 2011-12-8 17:00


对51这类单片机来说,程序是接在flash上运行的。RAM只用来存数据,不存程序,程序也不会装到ram。
你可以看看当前的单片机的ram大小,flash大小,想装到ram里也装不下。

对于ARM这类高端的CPU就不一样,因为有了大而快的SDRAM或DDR内存。
1. 如果采用的是NOR FLASH这种线性Flash,程序是可以在flash上跑,也可以先拷贝到RAM里头跑。但考虑到运行速度,一般还是会先拷贝到SDRAM。
2. 如果是采用Nand Flash, 因为是非线性的,程序没法在上面运行,那就只能拷贝到ram再运行了。

具体程序在那跑,怎么跑?其实都是在设计CPU时考虑的。根据设计的要求,使用的场合等等做不同的考虑,不同的实现。对使用者而言,多看datasheet是关键。

使用特权

评论回复
10
Tinnal| | 2011-12-9 12:05 | 只看该作者
一般在rom中运行, 如 PC 的bios
dengm 发表于 2011-12-8 18:14



PC需要烧写在ROM中的BIOS来引导系统,因为PC的所有软件都是存放在硬盘里的,而硬盘是非线性的,没法直接由硬盘读取指令。因为只能通过BIOS先初始化内存等关键设备,然后把硬盘里头的程序读到内存,然后重内存运行。PC一般采用3段式引导。

第一段,BIOS从硬盘加载MRB到内存并运行。
第二段,MRB选择特定引导分区的引导程序到内存并运行。(这一阶段是为了支持多系统的,不同系统可以安在不同的分区)。
第三段,因特定分区的引导程序加在系统的核心到内存,并运行。
到这,系统就运行起来了,以后对硬件的使用的管理就交给系统的其一个部件——文件子系经管理了。这就是我们常说的FAT、NTFS等。

使用特权

评论回复
11
Tinnal| | 2011-12-9 12:10 | 只看该作者
还是不太清楚,有没有一个清楚的说法,或者举出哪些是从RAM中取指令的,哪些是从ROM中取指令的。
jhbang 发表于 2011-12-9 09:22


51是不会在RAM读取指令的!不同CPU的情况不一样,你要多看datasheet。你可以告诉我你现在关注的CPU吗?

使用特权

评论回复
12
jhbang|  楼主 | 2011-12-9 12:45 | 只看该作者
ARM

使用特权

评论回复
13
jhbang|  楼主 | 2011-12-9 12:46 | 只看该作者
我现在主要用的是M3系列和ARM7系列

使用特权

评论回复
14
jhbang|  楼主 | 2011-12-9 13:26 | 只看该作者
ARM一般的片子,flash都会比RAM大很多,如何能将程序先复制到RAM中再运行呢?

使用特权

评论回复
15
Tinnal| | 2011-12-9 13:35 | 只看该作者
M3系列是在MCU内置的FLASH里跑的。
ARM7没有带Flash,接可以接nor Flash, 让程序在FLash里面跑,也可以把程序拷么内存跑,看你接的内存大小。如果接的是Nand Flash就是能拷贝到内存跑。

使用特权

评论回复
16
Tinnal| | 2011-12-9 13:37 | 只看该作者
14# jhbang
使用ARM7的话,我们一般会搭配BootLoader,先启动它,然后由他去进行后序的拷贝。

使用特权

评论回复
17
Tinnal| | 2011-12-9 13:37 | 只看该作者
14# jhbang
使用ARM7的话,我们一般会搭配BootLoader,先启动它,然后由他去进行后序的拷贝。

使用特权

评论回复
18
jhbang|  楼主 | 2011-12-9 13:43 | 只看该作者
我记得STM32F103有两个引引,BOOT0、B00T1,通过控制这两个引脚,即可以在RAM中跑,也可以在flash中跑。

使用特权

评论回复
19
Tinnal| | 2011-12-9 13:47 | 只看该作者
BootLoader的启动又有两种情况,
一种情况是你有nor Flash,那好办,直接就能运行BoolLoader,程序都运行起来了,接下去你想怎拷都得。
另一种情况是你只有Nand FLash,这就只能靠具体的CPU产家了,如三星、ATMEL。因为没有它们,你连一条指令都执行不了。
三星做法:三星在用户通过硬接线,告诉它要在NandFlash启后时,在上电后,会把NandFlash的第一块数据拷贝到内部的SRAM运行。接下去,你的BoolLoader就得见机行事了,SRAM只有4K,三星是拷不完整的,赶紧他SDRAM内存初始化掉,然后自己拷个完整的。
ATMEL:ATMEL里头有个类似与BIOS的ROM在CPU里头,是出厂就写好程序的,CPU启动时会先运行里头的引导程序。引导程序如果识别到NandFLash,会做和三星类似的事情,把NandFlash的第一块数据拷贝到内部的SRAM运行,接下去你要做的,也一样。

使用特权

评论回复
20
Tinnal| | 2011-12-9 14:00 | 只看该作者
18# jhbang

我知到你疑惑什么,是不是为什么还支持,从内存sram启动是吧。很简单呀,因为我调试的时候就会把程序通过仿真器址接下到sram。然后重sram开始跑,这样调试很方便。这种方式是为了调试而不是产品发部的,等我把程序调完了,我就会把程序烧到所CPU内部,然后先择0 1 这种方式。

使用特权

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

本版积分规则

8

主题

164

帖子

1

粉丝