您好!
我目前正在合并存储器、如下所示(RAM 和闪存)。 这是合并存储器的正确方法吗? 以这种方式合并存储器的任何缺点。
我们所做的是"增加电流块的长度、对下一个块进行注释"
存储器
{
第0页:/* 程序内存*/
/*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/
BOOT_RSVD :origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
RAML0 :origin = 0x008000、length = 0x004000 //片上 RAM 块 L0 */
/* RAML1 :origin = 0x008800,length = 0x000400 //片上 RAM 块 L1 */
/* RAML2 :origin = 0x008C00,length = 0x000400 //片上 RAM 块 L2 */
OTP :origin = 0x3D7800,length = 0x000400 //片上 OTP */
FLASHH :origin = 0x3D8000,length = 0x01C000 //片上闪存*/
/* FLASHG :origin = 0x3DC000,length = 0x004000 //片上闪存*/
/* FLASHF :origin = 0x3E0000,length = 0x004000 //片上闪存*/
/* FLASHE :origin = 0x3E4000、length = 0x004000 //片上闪存*/
/* FLASHD :origin = 0x3E8000、length = 0x004000 //片上闪存*/
/* FLASHC :origin = 0x3EC000,length = 0x004000 //片上闪存*/
FLASHA :origin = 0x3F4000,length = 0x003F80 //片上闪存*/
csm_RSVD :origin = 0x3F7F80,length = 0x000076 // FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 *
begin :origin = 0x3F7FF6,length = 0x000002/* FLASHA 的一部分。 用于"引导至闪存"引导加载程序模式。 *
CSM_PWL_P0 :origin = 0x3F7FF8,length = 0x000008 // FLASHA 的一部分。 FLASHA 中的 CSM 密码位置*/
FPUTABLES :origin = 0x3FD860,length = 0x0006A0 //引导 ROM 中的 FPU 表*/
IQTABLES :origin = 0x3FDF00,length = 0x000B50 //引导 ROM 中的 IQMath 表*
IQTABLES2 :origin = 0x3FEA50,length = 0x00008C //引导 ROM 中的 IQMath 表*
IQTABLES3 :origin = 0x3FEADC,length = 0x0000AA /*引导 ROM 中的 IQMath 表*/
ROM :origin = 0x3FF3B0,length = 0x000C10 //引导 ROM */
复位 :origin = 0x3FFFC0,length = 0x000002 //引导 ROM 的部分 */
向量 :origin = 0x3FFFC2,length = 0x00003E //引导 ROM 的部分 */
第1页:/* 数据存储器*/
/*内存(RAM/FLASK/OTP)块可被移动至 PAGE0以进行程序分配*/
/*寄存器保留在第1页 中*/
RAMM0 :origin = 0x000050、length = 0x0003B0 //片上 RAM 块 M0 *
RAMM1 :origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
/* RAML3 :origin = 0x009000,length = 0x001000 //片上 RAM 块 L3 */
/* RAML4 :origin = 0x00A000、length = 0x002000 //片上 RAM 块 L4 */
RAML5 :origin = 0x00C000、length = 0x002000 //片上 RAM 块 L5 */
RAML6 :origin = 0x00E000、length = 0x002000 //片上 RAM 块 L6 */
RAML7 :origin = 0x010000、length = 0x002000 //片上 RAM 块 L7 */
RAML8 :origin = 0x012000,length = 0x002000 //片上 RAM 块 L8 */
USB_RAM :origin = 0x040000、length = 0x000800 // USB RAM *
/* FLASHB :origin = 0x3F0000,length = 0x004000 //片上闪存*/
}
/*将段分配给内存块。
注:
DSP28_CodeStartBranch.asm 中用于重定向代码的 codestart 用户定义段
闪存时执行
ramfuncs 用户定义的段来存储将从闪存复制到 RAM 中的函数
*
部分
{
/*分配计划领域:*/
.cinit :> FLASHH, PAGE = 0
.pinit :> FLASHH, PAGE = 0
.text :> FLASHH, PAGE = 0
codestart :> begin, page = 0
ramfuncs :load = FLASHH,
运行= RAML0、
load_start (_RamfuncsLoadStart)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
PAGE = 0//、ALIGN (4)
{
--library=rts2800_fpu32_fast_f补 遗.lib
}
csmpasswds :>csm_PWL_P0,page = 0
csm_rsvd :>csm_RSVD, page = 0
/*分配未初始化的数据段:*/
.stack :>RAMM0, page = 1.
.ebss :> RAML5, PAGE = 1
.esysmem :>RAML5, page = 1.
/*将初始化段放入闪存中*/
/*要使 SDFlash 对这些内容进行编程、必须将它们分配到第0页*/
econst :> FLASHA, PAGE = 0
.switch :> FLASHA, PAGE = 0
/*分配 IQ 数学区域:*/
IQMath :> FLASHA, page = 0 /*数学代码*/
IQmathTables :>IQTABLES, PAGE = 0,TYPE = NOLOAD
/*分配 FPU 数学区域:*/
FPUmathTables :> FPUTABLES, PAGE = 0,TYPE = NOLOAD
DMARAML5 :>RAML5, PAGE = 1
DMARAML6 :>RAML6, PAGE=1
DMARAML7 :>RAML7, PAGE=1
DMARAML8 :>RAML8, PAGE = 1
/*如果调用 IQNexp()或 IQexp(),请取消注释以下部分
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
*
/*
IQmathTables2 :> IQTABLES2,PAGE = 0,TYPE = NOLOAD
{
IQMath.lib (IQmathTablesRam)
}
*
/*如果调用 IQNasin ()或 IQasin (),请取消注释以下部分
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
*
/*
IQmathTables3 :> IQTABLES3,PAGE = 0,TYPE = NOLOAD
{
IQMath.lib (IQmathTablesRam)
}
*
/*.reset 是编译器使用的标准段。 它包含*/
/* C 代码_c_int00起始地址。 /*
/*当使用引导 ROM 时,此部分和 CPU 矢量*/
/*不需要表。 因此、默认类型设置为 */
/* DSECT */
.reset :> reset, page = 0,type = DSECT
VECTORS :> VECTORS, PAGE = 0,TYPE = DSECT
}
此致、
Maulik Timbadiya
