打印

问:程序在FLASH中运行时动态加载部分程序到RAM

[复制链接]
4592|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ppiigg|  楼主 | 2007-7-25 07:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人现在遇到一个问题,由于降低成本,程序是放在片内FLASH中运行的,但是当满足某一条件时,要把部分在FLASH中的函数调入片内RAM中执行,以加快运行速度,平时那部分程序是放在FLASH中不运行的,为了节省RAM空间。
请问这种情况应该很写和配置代码?谢谢!

相关帖子

沙发
将军令| | 2007-7-25 08:52 | 只看该作者

ARM好像没有这么玩的,这个好像是覆盖执行

ARM好像没有这么玩的,这个好像是覆盖执行 

使用特权

评论回复
板凳
平常人| | 2007-7-25 08:55 | 只看该作者

这种要求正是ARM产品应用中的一个特点

LZ应该从你使用的开发环境的说明书中找答案。

使用特权

评论回复
地板
cuittao| | 2007-7-25 18:37 | 只看该作者

运行域转移


运行域转移

使用特权

评论回复
5
ppiigg|  楼主 | 2007-7-26 18:09 | 只看该作者

楼上能说得详细点吗?

cuittao能说得详细一点吗?或者告诉我应该看哪些资料,谢谢了

使用特权

评论回复
6
yddoo| | 2007-7-27 09:37 | 只看该作者

对不住公司,上班时间回你这个问题。

但是不小心看到了,忍不住要显摆一下。
但是不小心看到了,忍不住要显摆一下。

楼主是想把runtime中某一块在某一时刻拷贝到RAM中运行.这种方法是很普通而常用的办法,注:与CPU无关.

比如: 板载只有一块FLASH,为了能够在线升级系统,那就得rewrite flash中的内容,对flash操作时,相关操作程序一般来

说不得不放在其他地方执行.大概就出现了楼主所述的要求.

但楼主的真实情况不得而知.

试举例两种或能解楼主之惑:
A:static link
--1.ram_function:不管这个程序什么时候执行,程序在常量初始变量的初始化时,一并将程序从ROM中拷到RAM中,而被

拷的程序在编译时就编译在指定的RAM空间,只不过存于ROM中.
--2.需要使用时,再将程序拷贝到RAM中.
   A中两类,均为编译时指定程序各段空间在RAM中,不可以拷贝到随意的目标空间.

B dynamic.
--1. 你得熟悉你的编译器如何生成可重定位或为位置无关代码, 此类代码均不用直接地址寻址.目标代码量比非位置

无关代码要大.
--如果楼主设计的系统中支持动态联接(如LINUX上运行.elf的程序,当然它也是很大的。),以上所述全是废话。
    

使用特权

评论回复
7
tsb0574| | 2007-7-29 16:14 | 只看该作者

yddoo兄,再说得详细点!!就拿MDK来举例吧!!谢谢!!

使用特权

评论回复
8
yddoo| | 2007-7-30 10:54 | 只看该作者

MDK是不是REALVIEW那个,我不用那个.

你看你编译器的帮助吧.

使用特权

评论回复
9
农民讲习所| | 2007-7-30 13:48 | 只看该作者

可以考虑运行时加载

使用函数指针,将指针开始的数据拷贝到RAM,直到RET指令出现。

使用特权

评论回复
10
wangharry| | 2007-7-31 11:34 | 只看该作者

我一直在调试但始终无法进行

使用特权

评论回复
11
JunZe| | 2007-7-31 14:33 | 只看该作者

这个具体怎么实现呢?

 农民讲习所
可以考虑运行时加载 
使用函数指针,将指针开始的数据拷贝到RAM,直到RET指令出现。 
 

使用特权

评论回复
12
yddoo| | 2007-8-1 08:51 | 只看该作者

__ramfunc 或 relocation.

从 <拷贝到RAM,直到RET指令出现>来看, 农民同学大概说与某一种单片机联系在一起的.
我理解的没错的话.如果是ARM这类CPU是可以用LDR改PC值来返回的话,这么拷大概要小心一些点.
因为LDR 不是只用来返回的.不建议.

如果是用IAR,(typically, IAR for ARM), 在帮助文档里找: __ramfunc 或 relocation.
注意这是两种完全不同的方式.

使用特权

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

本版积分规则

1

主题

7

帖子

0

粉丝