在使用28377D过程中,使用controlSUITE中的cmd文件 2837xD_RAM_CLA_lnk_cpu1.cmd ;原本的.text空间不够,将段.text写为
这样的话,编译运行都是对的,但是去掉中间的几个的话,比如下面中去掉RAMD0和RAMD1后
编译链接都是对的,运行时,第一次点run,停留在初始点,第二次点run,就跑飞了,单步发现每次都是初始化完成后,停留在了同一个地方。
找了好久也没找到相关的文档描述,想请教一下,cmd中,段.text对RAM分配有什么要求,或者是应该按照什么规则来配置?
谢谢!
Brian Wang0:
你这种情况应该是把text文件放到了数据空间里了,我看了一下这个cmd文件。
默认情况下只有RAMD0|RAMD1|RAMLS4_LS5属于PAGE0
MEMORY{PAGE 0 : /* BEGIN is used for the "boot to SARAM" bootloader mode */
BEGIN : origin = 0x000000, length = 0x000002 RAMM0 : origin = 0x000122, length = 0x0002DE RAMD0 : origin = 0x00B000, length = 0x000800 RAMD1 : origin = 0x00B800, length = 0x000800 /*RAMLS4 : origin = 0x00A000, length = 0x000800*/ /*RAMLS5 : origin = 0x00A800, length = 0x000800*/ RAMLS4_LS5 : origin = 0x00A000, length = 0x001000 RESET : origin = 0x3FFFC0, length = 0x000002
在使用28377D过程中,使用controlSUITE中的cmd文件 2837xD_RAM_CLA_lnk_cpu1.cmd ;原本的.text空间不够,将段.text写为
这样的话,编译运行都是对的,但是去掉中间的几个的话,比如下面中去掉RAMD0和RAMD1后
编译链接都是对的,运行时,第一次点run,停留在初始点,第二次点run,就跑飞了,单步发现每次都是初始化完成后,停留在了同一个地方。
找了好久也没找到相关的文档描述,想请教一下,cmd中,段.text对RAM分配有什么要求,或者是应该按照什么规则来配置?
谢谢!
yanwei zhang:
回复 Brian Wang0:
我已经把对于的RAM分配到PAGE0了,附件是我改的cmd,麻烦帮我看看
// The user must define CLA_C in the project linker settings if using the// CLA C compiler// Project Properties -> C2000 Linker -> Advanced Options -> Command File// Preprocessing -> –define#ifdef CLA_C// Define a size for the CLA scratchpad area that will be used// by the CLA compiler for local symbols and temps// Also force references to the special symbols that mark the// scratchpad are.CLA_SCRATCHPAD_SIZE = 0x100;–undef_sym=__cla_scratchpad_end–undef_sym=__cla_scratchpad_start#endif //CLA_C
MEMORY{PAGE 0 : /* BEGIN is used for the "boot to SARAM" bootloader mode */
BEGIN : origin = 0x000000, length = 0x000002 RAMM0 : origin = 0x000122, length = 0x0002DE
RAMD0_1 : origin = 0x00B000, length = 0x001000/* RAMD1 : origin = 0x00B800, length = 0x000800*/ RAMLS0 : origin = 0x008000, length = 0x000800 RAMLS1 : origin = 0x008800, length = 0x000800 RAMLS2 : origin = 0x009000, length = 0x000800
RAMLS3 : origin = 0x009800, length = 0x000800 RAMLS4 : origin = 0x00A000, length = 0x000800
RAMLS5 : origin = 0x00A800, length = 0x000800 RAMGS0_2 : origin = 0x00C000, length = 0x003000/* RAMGS1 : origin = 0x00D000, length = 0x001000 RAMGS2 : origin = 0x00E000, length = 0x001000*/ RESET : origin = 0x3FFFC0, length = 0x000002
PAGE 1 :
BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */
RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */
RAMGS3 : origin = 0x00F000, length = 0x001000 RAMGS4 : origin = 0x010000, length = 0x001000 RAMGS5 : origin = 0x011000, length = 0x001000 RAMGS6 : origin = 0x012000, length = 0x001000 RAMGS7 : origin = 0x013000, length = 0x001000 RAMGS8 : origin = 0x014000, length = 0x001000 RAMGS9 : origin = 0x015000, length = 0x001000 RAMGS10 : origin = 0x016000, length = 0x001000 RAMGS11 : origin = 0x017000, length = 0x001000 RAMGS12 : origin = 0x018000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ RAMGS13 : origin = 0x019000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ RAMGS14 : origin = 0x01A000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */ RAMGS15 : origin = 0x01B000, length = 0x001000 /* Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices. */
CANA_MSG_RAM : origin = 0x049000, length = 0x000800 CANB_MSG_RAM : origin = 0x04B000, length = 0x000800
CLA1_MSGRAMLOW : origin = 0x001480, length = 0x000080 CLA1_MSGRAMHIGH : origin = 0x001500, length = 0x000080
CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400}
SECTIONS{ codestart : > BEGIN, PAGE = 0 .text : >>RAMLS0|RAMLS1|RAMLS2|RAMLS3|RAMLS4|RAMD0_1|RAMGS0_2, PAGE = 0 .cinit : > RAMM0, PAGE = 0 .pinit : > RAMM0, PAGE = 0 .switch : > RAMM0, PAGE = 0 .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */
.stack : > RAMM1, PAGE = 1 .ebss : > RAMGS3, PAGE = 1 .econst : > RAMGS3, PAGE = 1 .esysmem : > RAMGS4, PAGE = 1
/* CLA specific sections */ Cla1Prog : > RAMLS5, PAGE=0
CLADataLS0 : > RAMLS0, PAGE=0 CLADataLS1 : > RAMLS1, PAGE=0
Cla1ToCpuMsgRAM : > CLA1_MSGRAMLOW, PAGE = 1 CpuToCla1MsgRAM : > CLA1_MSGRAMHIGH, PAGE = 1
#ifdef __TI_COMPILER_VERSION__ #if __TI_COMPILER_VERSION__ >= 15009000 .TI.ramfunc : {} > RAMM0, PAGE = 0 #else ramfuncs : > RAMM0 PAGE = 0 #endif#endif
/* The following section definitions are required when using the IPC API Drivers */ GROUP : > CPU1TOCPU2RAM, PAGE = 1 { PUTBUFFER PUTWRITEIDX GETREADIDX }
GROUP : > CPU2TOCPU1RAM, PAGE = 1 { GETBUFFER : TYPE = DSECT GETWRITEIDX : TYPE = DSECT PUTREADIDX : TYPE = DSECT }
#ifdef CLA_C /* CLA C compiler sections */ // // Must be allocated to memory the CLA has write access to // CLAscratch : { *.obj(CLAscratch) . += CLA_SCRATCHPAD_SIZE; *.obj(CLAscratch_end) } > RAMLS1, PAGE = 0
.scratchpad : > RAMLS1, PAGE = 0 .bss_cla : > RAMLS1, PAGE = 0 .const_cla : > RAMLS1, PAGE = 0#endif //CLA_C}
/*//===========================================================================// End of file.//===========================================================================*/
在使用28377D过程中,使用controlSUITE中的cmd文件 2837xD_RAM_CLA_lnk_cpu1.cmd ;原本的.text空间不够,将段.text写为
这样的话,编译运行都是对的,但是去掉中间的几个的话,比如下面中去掉RAMD0和RAMD1后
编译链接都是对的,运行时,第一次点run,停留在初始点,第二次点run,就跑飞了,单步发现每次都是初始化完成后,停留在了同一个地方。
找了好久也没找到相关的文档描述,想请教一下,cmd中,段.text对RAM分配有什么要求,或者是应该按照什么规则来配置?
谢谢!
Brian Wang0:
回复 yanwei zhang:
指定某RAMLS作为CLA的程序或数据空间需要通过设置memcfgregs寄存器,将该区域的拥有权向CLA开放,不知道您有没有进行这一步。
详情请看数据手册关于cla memory的部分