关于flash程序考到内存运行以及CMD文件有些疑惑

2019-08-05 14:49发布

大家好,关于flash程序考到内存运行以及CMD文件有些疑惑,请教一下,盼指点,不胜感激!
l        CMD文件配置:
SECTIONS
{
   ……
   ramfuncs            : LOAD = FLASHD,
                         RUN = RAML0,
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
                         PAGE = 0
……
}
l        #pragma CODE_SECTION(InitFlash, "ramfuncs");
void InitFlash(void)
{
   EALLOW;
   FlashRegs.FOPT.bit.ENPIPE = 1;
   FlashRegs.FBANKWAIT.bit.RANDWAIT = 5;
   FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5;
   FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF;
   FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF;
   EDIS;
   asm(" RPT #7 || NOP");
}
l        DSP281x_GlobalPrototypes.h中:
extern void InitFlash(void);
void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr);
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;
l        主程序中:
MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd ,&RamfuncsRunStart );
InitFlash();
初步理解:MemCopy将段ramfuncs的起始地址(FLASHD-0x3EC000)到接收地址的程序拷入内存RAML0(origin=0x008000,length=0x001000,4K×16位)进行运行。
疑问:
1. 段Ramfuncs定义为InitFlash函数,是否仅InitFlash函数导入内存运行呢?从一些资料上看,好像是整个flash程序拷入内存运行,是这样吗?如果这样的话,内存RAML0只有4K×16位的空间,是否要求Ramfuncs中的程序不超过4K×16位?具体是哪些程序拷入内存运行,以及这些程序的大小是否受4K×16位的限制,如果查看拷入内存程序的大小呢?
2. 调试中发现190K大小的TOF.out烧入flash无法运行;编写了一个最简单的指示灯循环点亮的程序,build生产106K的TOF.out,烧入flash运行正常,加MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd ,&RamfuncsRunStart ); InitFlash();函数执行速度快,不加则慢些。对程序的大小限制摸不准了,是否只要TOF.out<256K(128K×16位),均可以写入falsh?
3. 另外仿真器内存调试时,190K大小的TOF.out可以load进去执行正常,而DSP只有18K×16位的ram(M0、M1、L0、L1、H0),程序是load到仿真器去了吗?
4. CMD文件中,内存的M0(1K×16位)、M1(1K×16位)、L1(4K×16位)、H0(4K×16位,一半)用来存储数据,内存的L0(4K×16位)、H0(4K×16位,另一半)用来存储程序。M0存储数据段.stack(函数传递变量或局部变量占用的空间)。L1存储数据段.ebss(大寄存器模式时的全局变量和静态变量预留空间)。H0存储数据段.esystem(动态存储分辨预留空间。如果有far函数,此空间被相应占用,没有,次空间保留为0。Far函数什么意思?)。L0存储程序段ramfuncs(ramfuncs包含哪些程序,如何控制大小?)。
5. 全局静态数组是否存储在L1(4K×16位),那么定义Uint16型数组时最大只能到4096?
6. 假设一个数组中有8K字节固定的数据,全局静态变量没法定义并赋值的话,存到flash里面怎么操作呢?之前C语言51开发通过unsigned char code table[1000]={1,2,3,……1000};DSP中如何实现呢?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
zhangmangui
1楼-- · 2019-08-05 18:27
问题好多啊
zhangmangui
2楼-- · 2019-08-05 20:23
问题好多啊

一周热门 更多>