Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
嵌入式技术综合讨论
片上执行和运行时加载的疑问
发布于 2013-04-17 01:04:05 浏览:4765
订阅该版
最近想到一个不懂的问题: 有的程序可以在ROM上直接执行,相对于需要加载到RAM中才能运行的程序而言,前者这种程 序是不是就不占用RAM的地址空间?而后者程序需要占用RAM的空间,如此在加载的过程中这 个程序的地址是在什么时候确定的?其次,他在加载时候的地址空间和ZI段末尾的未使用的 RAM空间是否会重叠?这些问题弄不清楚,因为加载的时候占用RAM,而ZI段后未使用的空间 会被在RTT中来做为动态内存,所以考虑到是否会出现重叠。
查看更多
6
个回答
默认排序
按发布时间排序
geniusgogo
认证专家
2013-04-17
这家伙很懒,什么也没写!
有的CODE是放在外部SPI FALSH上的,运行时加载,那么是一次性加载?这样有可能RAM不够。 分段加载?那分段加载的地址怎么确定?
geniusgogo
认证专家
2013-04-17
这家伙很懒,什么也没写!
JENNIC 5148芯片,外部SPI FALSH,内部128KRAM,程序放在SPI FLASH中,莫非就是默存所说的PIC? ``` 默存 1:09:30 现在主流CPU,都是统一地址空间。 所以ROM和RAM位于同一个地址空间中,只是分别占用一段地址。 默存 1:10:40 以stm32单片机比为例。 片内FLASH地址是固定的。0x8000000开始。 Romeo 1:10:46 ARM920T的程序放在nand中,需要加载到RAM中运行,也就是统一编址后顺序排列在RAM中的地址空间中? 默存 1:11:09 统一地址空间和独立地址空间你明白么? 默存 1:11:22 扯远了,就说你这个问题 Romeo 1:12:19 这个我的理解的是不同的存贮器 统一地址空间是 每个存储器的地址是相互连续编址的 独立的就是每个都有自己的0-MAX地址空间 对么? 默存 1:12:56 不是这个意思,不要扯这个了,我时间有限。 但说你这个问题。 默存 1:13:07 具体点说 默存 1:13:49 如果你是编译一个具体的 linux程序。加载920t里。预编译的程序放在nand上,那么地址在编译的时候就是确定的。 默存 1:14:42 Linux下时候完整的虚拟内存的,每个程序都独立的战友完整的地址空间。所以加载的地址(虚拟地址)就是编译时确定的地址。 默存 1:15:59 Linux是有完整的虚拟内存的,每个程序都独立的占有完整的地址空间。所以只需要把nand上编译的程序加载到 编译时的地址上去(这个地址由内核利用物理RAM映射出一个虚拟地址) 默存 1:17:05 第二个问题,加载时使用的地址是 heap。 跟ZI没啥关系。ZI是编译时确定的 默存 1:19:54 总的来说,编译程序时,一定会指定一个地址。别管这个程序是在linux上运行还是裸机上运行。 加载的时候都是加载到这个地址上上运行。 有linux时,linux利用物理内存映射出一个编译地址的虚拟内存出来。 裸机的时候,或者你自己手动初始化MMU,把物理RAM映射成自己程序编译地址。或者干脆修改编译是GCC的链接参数,指定地址就是实际物理RAM地址 默存 1:19:59 好了,就说这么多了。 Romeo 1:22:59 有MMU可以不考虑这么多,没有MMU那 加载地址如何对应到物理地址?还是这种情况下最少加载一个段,而每个段都是使用的相对地址? Romeo 1:23:30 因为加载一个程序 有可能RAM装不下整个程序 Romeo 1:23:50 所以程序在RAM中不能一次性加载进来 默存 1:23:51 没MMU,那就修改gcc参数,保证生成的程序地址就是物理RAM的地址 默存 1:24:07 上面是方法1. Romeo 1:24:07 RAM物理地址不够啊 默存 1:24:21 方法2. 是把代码编译成PIC。地址无关代码。 默存 1:24:28 这样就可以加载到任意地方 Romeo 1:24:42 PIC 果然 , 一语惊人 默存 1:25:04 以后不要说自己看过《连接装载库》和《程序员自我修养》 默存 1:25:07 看了等于白看。 Romeo 1:25:33 嗯 ,我是不确定是不是会真的这么做 默存 1:25:35 这个地方,自己补一下《操作系统设计与实现》 存储器那一章。 基础太差了 Romeo 1:25:42 好 Romeo 1:25:44 在看 默存 1:26:07 忙,我敢论文 Romeo 1:26:07 突然看这书就生出疑问了 Romeo 1:26:10 好 叨扰了 ```
aozima
2013-04-17
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
spi flash xip ?
geniusgogo
认证专家
2013-04-17
这家伙很懒,什么也没写!
需要加载啊!
myxiaoniao
2016-08-02
这家伙很懒,什么也没写!
>需要加载啊! --- 那肯定是mcu硬件映射了spi flash到可以直接访问的地址空间了,相当于程序看到的就是直接访问的地址,和动态加载不是一回事
撰写答案
登录
注册新账号
关注者
0
被浏览
4.8k
关于作者
geniusgogo
这家伙很懒,什么也没写!
提问
42
回答
157
被采纳
7
关注TA
发私信
相关问题
1
开新板块了! 迅速占领第一帖!
2
有想玩点阵做电子钟的没?手上有屏
3
LED点阵屏硬件保护研究笔记
4
USB相关、Android、Arduino
5
Arduino即将发布ARM平台新产品
6
关于开关电源的同步整流技术
7
rt_thread_wizard使用教程
8
[转]开源如何盈利
9
FM3系列MCU的IO操作笔记。
10
转一个xoolhaha 的寻一起开发的帖子
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
2024 RT-Thread睿赛德开发者大会共探商业共赢的开源生态
2
rt-thread 小内存算法源码分析
3
env中添加lvgl软件包后,keil编译包--c99错误
4
【NXP-MCXA153】 定时器驱动移植
5
GD32F450 看门狗驱动适配
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
Debug
中断
编译报错
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
20
个答案
2
次被采纳
红枫
8
个答案
2
次被采纳
踩姑娘的小蘑菇
7
个答案
2
次被采纳
三世执戟
7
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
12
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部