陈颖频的科学网博客分享 http://blog.sciencenet.cn/u/s110500617

博文

论MCU(单片机)与CPU程序运行驻地之区别

已有 4821 次阅读 2015-1-9 22:23 |系统分类:教学心得|关键词:学者

   早在本科期间,讲授单片机的老师就会用类比的方法教我们,RAM(随机存取存储)和ROM(随机只读存储)类似于电脑的内存和硬盘,甚至不少大型IT公司的面试题中也潜意识地有这样的类比,园丁仔细对比单片机教材和微处理器教材,从代码运行的驻地角度思考了这个类比。
   我认为,这样的类比是完全站不住脚的,单片机中的RAM实际上是非常小的,以51单片机为例,只有区区256字节,在如此小的空间里,如果要像计算机内存一样去执行代码,显然是不现实的,在经典的单片机教材中记载,这宝贵的256个字节中,还有128个字节是特殊功能寄存器的地址,用于用户配置寄存器,这些地址显然不可能被用户改为代码所在地址,那么代码也就不可能运行在这128个地址上,而后128个字节也是极其有限的资源,做过单片机实验的同学都知道,Keil软件编译出来的代码往往动辄上千字节,光是存储这上千字节,单片机可怜的128个用户字节就不可能做到,何谈在RAM上运行程序?显然单片机的RAM与计算机的内存,根本不是一个概念,而且也没有可比拟的地方,单片机程序其实是烧写在FLASH上的,FLASH存储器又被称为code存储器,是用来存储单片机代码和运行该代码的真正驻地,如果要类比,也应该是单片机的FLASH和计算机的内存类比才是对的。
   但是单片机的FLASH和CPU的内存其实还是有一定区别的,首先,我们知道,微处理器代码通常一开始存储在硬盘上,由于CPU的数据吞吐速度远高于硬盘速度,所以通常将任务(或者说进程)的代码分轻重缓急有序地放入内存运行,事实上,较为高档的单片机,如ARM9体系架构的S3C2440之类的单片机也是采取类似的操作,例如其上电开机之后Bootloader要复制部分硬盘的代码到内存中,运行部分汇编代码后跳入C代码,这个过程就和计算机的BIOS如出一辙。
    所以,高档微处理器(含CPU)的内存与低档微处理器的FLASH可以类比,但并不一样,关键区别在于两点,第一点:代码是否可以搬运,高档处理器的代码要从硬盘中搬运到内存,显然可以搬运,而低档单片机则不能搬运代码,直接在FLASH上运行,此其一,其二,代码是否可以驻地运行,从刚才的讨论中可以看到,单片机代码不能搬运,那么就是说只能在驻地运行,也就是在FLASH上运行,而高档微处理器,由于CPU速度快,硬盘速度慢,故而必须将欲运行的代码搬运(或者说复制)到内存中运行,这就是MCU与CPU代码运行的主要区别。所以,对于低端单片机,其FLASH其实同时充当了计算机的硬盘角色,用于存储代码,同时充当了内存角色,用于运行代码。
     值得注意的是,在计算机体现架构中,除了硬盘和内存,其实还有一种更加高速的存储器,叫Cache(高速缓存器),通常内存可以再细分为高速缓存和低速内存,通常CPU上的内存都是由随机存取存储器(RAM)构成,但是上文已经详细讨论过单片机的RAM与微处理器的内存了,只能这么说,物理媒质类似,但是功能上,完全不同!

     



https://m.sciencenet.cn/blog-684084-857917.html

上一篇:傅立叶变换家族族谱(CFS、CFT、DFS、DTFT、DFT、FFT、Z)
下一篇:自创的多线程的进程模拟函数

2 张忆文 彭真明

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-3-28 23:21

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部