C6678采用NOR FLASH多核启动,完成8个核的多核启动,最后生成的.dat文件大约14.3 MB,测试过程中发现10次中大概有1~3次会跑死,剩下的可以正常启动并完成相应功能。我们是在启动时,让8个核先启动起来,等到所有核启动起来之后核0继续执行相关后续的代码,但是会在后续的执行中跑死。正常用仿真器load程序是没有错的,请问大概会有是什么问题,或者多核启动的过程中有哪些细节的问题需要注意的。
cmd文件如下:
-c //automate initializate variable in run-time
-stack 0x8000
-heap 0x20000
/* Memory Map for C6678EVM */
MEMORY
{
VECTORS: origin = 0x00800000 length = 0x00000200 /* 中断向量 *////////
BOOT_CORE0: origin = 0x00800200 length = 0x000000C0 ///////
L2: origin = 0x008002C0 length = 0x00077D40 /* 512KB L2/SRAM *////////
SHRAM: origin = 0x0C000000 length = 0x00400000 /* 4MB Multicore shared Memmory128KB给加载程序使用*/
Descriptor_DDR3: origin = 0x80000000 length = 0x01000000
DDR3: origin = 0x81000000 length = 0x1f000000 /* DDR3 512M end 0x9FFFFFFF */
}
SECTIONS
{
.csl_vect > SHRAM
.text > SHRAM
.DDRText{MulticoreBoot.obj(.text)}>SHRAM
.stack > L2 /*local variable*/
.bss > SHRAM
.cio > L2 /*printf*/
.const > SHRAM
.data > SHRAM
.switch > SHRAM
.sysmem > SHRAM
.far > SHRAM
.args > SHRAM
.ppinfo > SHRAM
.ppdata > SHRAM
.core0_section > SHRAM
/* COFF sections */
.pinit > SHRAM
.cinit > SHRAM
/* EABI sections */
.binit > SHRAM
.init_array > SHRAM
.neardata > SHRAM
.fardata > SHRAM
.rodata > SHRAM
.c6xabi.exidx > SHRAM
.c6xabi.extab > SHRAM
platform_lib > Descriptor_DDR3
vecs > VECTORS
QMSS_Data.linkingRAM1 > SHRAM
QMSS_Data.Descriptor_SL2 > SHRAM
PacketData.buffer_SL2 > Descriptor_DDR3
QMSS_Data.Descriptor_LL2 > L2
PacketData.buffer_LL2 > Descriptor_DDR3
QMSS_Data.Descriptor_DDR > Descriptor_DDR3
PacketData.buffer_DDR > Descriptor_DDR3
.myboot
{
*.*<boot.obj>(.text)
} > BOOT_CORE0
}
Andy Yin1:
一般出问题多的是在使用ccs时通过gel文件进行了DDR初始化,而在加载时由于没有运行gel导致DDR没有初始化可能导致问题,还有就是加载时需要预留LL2最后一段memory给RBL,在加载起来之后可以使用。先查一下程序出问题时每个core的具体状态,如每个core都是运行到哪个地方开始出错的。