各位专家,大家好!
请帮忙解答一下,我的情况是这么样。
6678使用4个核,core0~core3;
core0,运行NDK网络程序;
core1~core3,运行处理程序,core1的程序不同;其中core2与core3的程序是同一个程序,通过coreNum实现不同的处理,同时Platform中通过修改L2SRAM的全局地址区分两个核的程序空间,将所有section均映射到L2SRAM.
core0不使用cache,core1~core3使用cache;
4个核的cmd映射为:core0是evm6678的ndk例程,core~core3均通过PLATFORM的L2SRAM映射到自己的LOCAL SRAM地址,比如core1为0x11800000,core2为0x12800000,core3为0x13800000;
现在的问题是:
通过仿真下载调试:
20次下载并同时运行,均正常工作;
烧写到FLASH后的结果:
a, 4个核,core1~core3均把cache设置为0K,即不使用cache,每次4个核都能正常启动并运行;
b, 4个核,core1~core2均把cache设置为32K,core3的cache设置为0K,每次4个核都能正常启动并运行;
c, 4个核,core1~core3均把cache设置为32K,每次4个核都能正常启动但是运行一会有core1~core3有随机的运行几秒就停止的情况出现,脸上仿真器看,停止的core已经abort,每次都出现到相同的位置,到一条死循环的指令:abort() at exitc:109 0x00869e80;
附带:设置成cache 0k的代码
/* Cache */
CACHE_setL1PSize(CACHE_L1_0KCACHE);
CACHE_setL1DSize(CACHE_L1_0KCACHE);
CACHE_setL2Size(CACHE_0KCACHE);
CACHE_invAllL1p(CACHE_WAIT);
CACHE_wbInvAllL1d(CACHE_WAIT);
CSL_XMC_invalidatePrefetchBuffer();
_mfence();
_mfence();
附带:设置成cache 32k的代码
/* Cache */
CACHE_setL1PSize(CACHE_L1_32KCACHE);
CACHE_setL1DSize(CACHE_L1_32KCACHE);
CACHE_setL2Size(CACHE_0KCACHE);
CACHE_invAllL1p(CACHE_WAIT);
CACHE_wbInvAllL1d(CACHE_WAIT);
CSL_XMC_invalidatePrefetchBuffer();
_mfence();
_mfence();
感谢各位专家,分析一下,小弟非常感谢!