加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

DSP2812 关于FLASH TO RAM

发布时间:2020-12-15 06:26:05 所属栏目:百科 来源:网络整理
导读:ramfuncs: LOAD= FLASHD ,PAGE=0 ? ?? ?? ?? ? RUN= RAM L0,PAGE=0 ? ?? ? LOAD_START(_RamfuncsLoadStart), ? ?? ?? ?? ? LOAD_END(_RamfuncsLoadEnd), ? ?? ?? ?? ? RUN_START(_RamfuncsRunStart) 初始化 FLASH 时,会有这么一段CMD链接代码,其中, Ramfu

ramfuncs: LOAD=FLASHD,PAGE=0
? ?? ?? ?? ? RUN=RAML0,PAGE=0
? ?? ? LOAD_START(_RamfuncsLoadStart),
? ?? ?? ?? ? LOAD_END(_RamfuncsLoadEnd),
? ?? ?? ?? ? RUN_START(_RamfuncsRunStart)

初始化FLASH时,会有这么一段CMD链接代码,其中,
RamfuncsLoadStart、RamfuncsLoadEnd、RamfuncsRunStart应该是定义成extern 全局变量,
但它们的赋值语句在哪啊!?或者说它们到底是多少?
请高手们不吝赐教!!

?

这个就是定义和赋值语句,extern只是个外部声明。真正的拷贝是用拷贝函数进行的? ? ? ??
MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
可以去查看CCS的帮助文档
LOAD_START(sym)??? ? ? ? Define sym with load-time start address of related allocation unit.

ramfuncs: 是一个段名,
LOAD=FLASH,PAGE=0
/*这句的意思是说,我在PAGE=0的FLASH中分出一段,名字叫ramfuncs。
我想用这个段来保存一些东西(在这里用来保存程序)。
RUN=RAML0,PAGE=0
/*这句的意思是说,当运行放在ramfuncs中的程序时,我想把这些程序搬到PAGE=0中的RAML0中再运行(因为在FLASH运行有点慢),
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart)
/*搬运的工作是由MemCopy完成,可是要告诉MemCopy,从哪里开始搬呢! 想一想,应该是从FLASH的起始地址开始搬(也就是_RamfuncsLoadStart等于FLASH的起始地址),要搬多少呢?当然是根据放在ramfuncs中的程序的长度,(也就是_RamfuncsLoadEnd等于_RamfuncsLoadStart+程序的长度,你放在ramfuncs中的东西越多,_RamfuncsLoadEnd越大,)。
要搬到什么地方呢?当然是RAML0的起始地址,(也就是_RamfuncsRunStart=RAML0的起始地址),

_RamfuncsLoadStart,
_RamfuncsLoadEnd,
_RamfuncsRunStart,
是由编译器生成的,

在CSS自带的例子,有一个叫FLASH的例子,可以用软件仿真一下,看看上面三个的值!
以上纯属个人理解,仅供参考

赵利国对于? ?? ?

ramfuncs: LOAD=FLASHD,PAGE=0?
? ?? ?? ?? ? RUN=RAML0,0)">? ?? ? ????LOAD_START(_RamfuncsLoadStart),?
? ?? ?? ?? ? LOAD_END(_RamfuncsLoadEnd),0)">? ?? ?? ?? ? RUN_START(_RamfuncsRunStart)的认识

首先、LOAD=FLASH是指,把ramfuncs这个段装载到FLASHD这个位置(即allocation).

其次、RUN=RAML0,PAGE=0表示ramfuncs这个段将在RAML0这个位置(即allocation)运行.

LOAD_START(_RamfuncsLoadStart)首先表示定义了RamfuncsLoadStart这个变量,

其次LOAD_START又将装载(LOAD)ramfuncs这个段的区域(即FLASHD的一个区域)的开始(START)地址赋给了RamfuncsLoadStart;LOAD_END则将装载(LOAD)ramfuncs这个段的区域的结束地址赋给了RamfuncsLoadEnd。

而RUN_START,将ramfuncs这个段运行空间(即RAML0的一个区域)的首地址赋给了RamfuncsRunStart。从而才有了后面的.

在这里LOAD_START就决定要从FLASH 复制到RAM程序的首地址,而RUN_START决定了要复制到RAM中的运行的?目的首地址。从MemCopy()函数开始从FLASH装载区首地址将程序依次复制到运行区相应地址。

#pragma CODE_SECTION(epwm1_timer_isr,"ramfuncs");

#pragma CODE_SECTION(epwm2_timer_isr,sans-serif; font-size:14px"> #pragma CODE_SECTION(epwm3_timer_isr,sans-serif; font-size:14px"> MemCopy(&RamfuncsLoadStart,&RamfuncsRunStart);

其中

void MemCopy(Uint16 *SourceAddr,Uint16* SourceEndAddr,Uint16* DestAddr)

{

??? while(SourceAddr < SourceEndAddr)

??? {

?????? *DestAddr++ = *SourceAddr++;

??? }

??? return;

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读