2250|1

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

ti 28335—程序从flash复制到ram里的两种情况:部分复制和全部复制 [复制链接]

微处理器从内存RAM中取指令的速度要比从flash中取指令要快好多倍,但是RAM的缺陷限制了其不能存储用户程序代码,因为RAM掉电会丢失数据,但是其速度要快,而flash内信息掉电不丢失,因此可以保存用户编程的代码,但是其运算速度使得在一些实时性要求高或者对时间要求苛刻的场合不能满足要求。如果能够将两者有机的结合到一起,从而可以解决这两者之间的矛盾。
从片内flash搬运到RAM中的方法有两种不同的选择,一种是将flash中部分代码搬运到RAM中运行;另一种便是将flash的所有程序代码都搬运到RAM中运行。前者利用#pragma CODE_SECTION(cpu_timer0_isr, "ramfuncs");来声明将所要搬运的函数在flash上电初始化时自动将声明的函数搬运到RAM的ramfuncs段中,此方法也可以将所有的函数代码都搬运到RAM中,但是,这无疑有点麻烦,有多少个函数就需要写多少条这样的语句,而且也只是搬运了函数代码,其他的初始化数据段没有搬运,但是这种方法可以在用户程序太大以至于RAM中无法将所有代码都容纳下的情况下,将部分主要的要求时间苛刻的函数搬运到RAM中运行以提高系统性能,例如一些中断函数。第二种方法可以在用户编写代码都能被RAM所容纳下的情况下提高系统整体的性能,将flash代码全部搬运到RAM中。但是当代码不能被RAM所容纳时此方法编不在可行,只有硬件外扩RAM才行。下面就介绍一下这两种方法的具体实现方法:
方法一:
1、 cmd定义:
ramfuncs            : LOAD = FLASHJ,  PAGE = 0
                         RUN = RAMH0,  PAGE = 0
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart)

2、定义变量(装载或运行的起始地址)
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;

3、把要拷贝到RAM里的函数(eva_timer1_isr,eva_timer2_isr...)定义到段ramfuncs
  #pragma CODE_SECTION(eva_timer1_isr, "ramfuncs");
  #pragma CODE_SECTION(eva_timer2_isr, "ramfuncs");
  #pragma CODE_SECTION(evb_timer3_isr, "ramfuncs");
// 声明中断函数
  interrupt void eva_timer1_isr(void);
  interrupt void eva_timer2_isr(void);
  interrupt void evb_timer3_isr(void);
  interrupt void evb_timer4_isr(void);
//初始化flash 控制寄存器函数为
void InitFlash(void)
{
        //函数内容省略,可参考TI提供的函数即可
}
4、在主函数中执行调用以下函数   
    MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,  &RamfuncsRunStart);

      InitFlash();
至此便将声明的中断函数在flash上电初始化时自动搬运到RAM中运行。

方法二:
1、参考博文:DSP28335—把TMS320F28XXX的程序段从flash复制到ram中运行

2、参考论文《基于DSP28335程序移植方法的研究与实现》 有助于理解系统启动过程及FLASH引导模式

最新回复

您好,请教下一下,关于28377D型号,也是一样的代码操作吗?这个memcopy函数,debug模式编译成功,但是release模式编译会报错,您知道是什么原因吗?  详情 回复 发表于 2024-9-26 10:39
 
点赞(1) 关注(1)

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
您好,请教下一下,关于28377D型号,也是一样的代码操作吗?这个memcopy函数,debug模式编译成功,但是release模式编译会报错,您知道是什么原因吗?
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表