搜索
bottom↓
回复: 15

从硬件角度如何理解将代码拷贝到内存中运行?

[复制链接]

出0入0汤圆

发表于 2015-8-17 10:31:31 | 显示全部楼层 |阅读模式
本人做硬件的,一直无法理解软件工程师说的, 将Flash中的代码拷贝到内存中运行。
希望有大牛出来解释一下下,通俗易懂的最好啊。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入4汤圆

发表于 2015-8-17 10:46:09 | 显示全部楼层
本帖最后由 ibichao 于 2015-8-17 10:47 编辑

这东西没什么说的,换个地方,挪个窝而已,
比如茶壶里的水倒在茶杯中喝,
难道直接用茶壶喝就不行?当然可以,只是用茶壶不方便,体积大,散热又差。
同样道理,程序在flash中就JB不能运行?当然可以,只是速度慢,或有其它目的。

出0入0汤圆

发表于 2015-8-17 10:48:32 | 显示全部楼层
本帖最后由 磊磊映画 于 2015-8-17 10:51 编辑

1.跟做硬件做软件没关系吧?
2.单片机原理总学过吧,在单片机里面只能存放二进制代码,每次烧录程序都是往单片机的ROM里面写01010011010(例子),不同的01组合代表不同的指令。
3.以51单片机为例,单片机上电后PC寄存器固定从0000地址执行,有的指令就需要从rom中取常数,放到CPU里去运算处理。

出0入0汤圆

 楼主| 发表于 2015-8-17 11:10:12 | 显示全部楼层
ibichao 发表于 2015-8-17 10:46
这东西没什么说的,换个地方,挪个窝而已,
比如茶壶里的水倒在茶杯中喝,
难道直接用茶壶喝就不行?当然可 ...

,简单粗暴的解释,话糙理不糙。

出0入0汤圆

发表于 2015-8-17 11:15:02 | 显示全部楼层
我来按硬件的说法来讲一下为什么要进行这次代码的搬运哈:

一段程序在编译的时候,地址就是已经订下来的,特别是跳转语句和函数调用(当然也有与地址无关的,不考虑哈);那这段代码在编译后,它的运行地址就是已经确认的、是写死在ELF文件里面的、是不随你的意愿而能改变的,这个楼主是否可以理解哈?

这个地址一般都放在RAM里,理由是速度快,放在FLASH里面也是可以的,就是速度太慢,这个楼主是否可以理解?(还有一些初始化的不讲了,大家都明白)

那么现在的做法就是在FLASH里面写上一段代码,这段代码的作用就是初始化硬件和把放在FLASH的APP拷贝到RAM里面跑哈

完毕,楼主明白了吗?

出0入0汤圆

 楼主| 发表于 2015-8-17 11:17:28 | 显示全部楼层
磊磊映画 发表于 2015-8-17 10:48
1.跟做硬件做软件没关系吧?
2.单片机原理总学过吧,在单片机里面只能存放二进制代码,每次烧录程序都是往 ...

出0入0汤圆

 楼主| 发表于 2015-8-17 11:28:12 | 显示全部楼层
jm2011 发表于 2015-8-17 11:15
我来按硬件的说法来讲一下为什么要进行这次代码的搬运哈:

一段程序在编译的时候,地址就是已经订下来的, ...

看完后我的理解是:

本质上FLash存的是指令执行的地址,这些地址会被读入到内存中,最终CPU会读取这些地址来执行相应的操作。

不知道这样理解是否正确?

出0入0汤圆

发表于 2015-8-17 11:38:05 | 显示全部楼层
Falsh中存放的是指令和数据,有些指令有数据,有些没有。取得指令就解码,看看这个指令是否需要数据,需要就读取数据,而后根据指令该干吗就干吗。。。

出0入0汤圆

发表于 2015-8-17 13:17:05 | 显示全部楼层
因为RAM速度比外部快,所以CPU按照特定规则从RAM读取指令和数据,然后把结果回存或者输出。至于CPU是如何运作的,我觉得用FPGA验证一下代码,这样最形象。

出0入0汤圆

发表于 2015-8-17 13:53:59 | 显示全部楼层
wjfblack 发表于 2015-8-17 11:28
看完后我的理解是:

本质上FLash存的是指令执行的地址,这些地址会被读入到内存中,最终CPU会读取这些地 ...

这个应该是指令吧,不过你理解的步奏是对的,指令被读到RAM里面去,最终CPU会读取这些指令来执行相应的操作。
只要记住,这些指令里面可能包含着绝对相对的地址就可以了;

在编译的时候我们最后一步是链接,我们会把各个OBJ文件链接在一起,这个是通过链接命令LD来实现的;这个过程就是地址的重定位过程:)
通俗的说就是按照你定义的运行的地址(在xxx.ld文件里面指定),我们把跳转和函数的地址计算出来写进去哈;

出0入31汤圆

发表于 2015-8-17 14:52:13 来自手机 | 显示全部楼层
从硬件更好理解,只要能取到指令,代码在哪都能跑

出0入0汤圆

发表于 2015-8-17 14:53:42 | 显示全部楼层
学习楼上几位讲解

出0入59汤圆

发表于 2015-8-17 15:20:29 | 显示全部楼层
CPU 的寻址空间固定的,只要在这个范围内,都可以访问,不管是代码还是数据,flash还是ram
ram一般访问的速度比flash快一些,所以经常将存储在flash空间的代码搬移到ram空间运行以提高程序运行速度
但是代码编译链接时是又要求的,必须是采用间接寻址的位置无关方式编译链接

出0入0汤圆

 楼主| 发表于 2015-8-17 16:11:53 | 显示全部楼层
jm2011 发表于 2015-8-17 13:53
这个应该是指令吧,不过你理解的步奏是对的,指令被读到RAM里面去,最终CPU会读取这些指令来执行相应的操 ...

领教了。
你应该是软件工程师吧。

出0入0汤圆

 楼主| 发表于 2015-8-17 16:13:30 | 显示全部楼层
dykwai1 发表于 2015-8-17 15:20
CPU 的寻址空间固定的,只要在这个范围内,都可以访问,不管是代码还是数据,flash还是ram
ram一般访问的速 ...

多谢解答,加深了我的理解。

出0入0汤圆

 楼主| 发表于 2015-8-17 16:14:08 | 显示全部楼层
lans0625 发表于 2015-8-17 11:38
Falsh中存放的是指令和数据,有些指令有数据,有些没有。取得指令就解码,看看这个指令是否需要数据,需要 ...

回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 15:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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