大家好、
以下是客户需要您帮助的问题:
我在 调试 CPU1和 CPU1.CLA 的共享变量时遇到问题。
/*CPU1 .c file */
#pragma SET_DATA_SECTION("cla_shared")
int32_t a = 10;
#pragma SET_DATA_SECTION()
//
// Configure LSRAMs
//
MemCfg_setLSRAMControllerSel(MEMCFG_SECT_LS0, MEMCFG_LSRAMCONTROLLER_CPU_CLA1);
MemCfg_setCLAMemType(MEMCFG_SECT_LS0, MEMCFG_CLA_MEM_DATA);
MemCfg_setLSRAMControllerSel(MEMCFG_SECT_LS1, MEMCFG_LSRAMCONTROLLER_CPU_CLA1);
MemCfg_setCLAMemType(MEMCFG_SECT_LS1, MEMCFG_CLA_MEM_DATA);
/*CPU1 .cmd file */
CLA_SCRATCHPAD_SIZE = 0x100;
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start
CLAscratch :
{ *.obj(CLAscratch)
. += CLA_SCRATCHPAD_SIZE;
*.obj(CLAscratch_end) } > RAMLS1
.scratchpad : > RAMLS1
.bss_cla : > RAMLS1
cla_shared : >> RAMLS1
/*CPU1 CLA shared.h */
extern int32_t a;
/*CPU1_CLA .cla file */
void Func1(void);
以上是我的项目代码的近似配置。 当为变量时 A 在 CLA 和 CPU 共享 LSRAM 中定义、 A 指定单个 PHI 地址、然后触发 CLA 以执行任务。 执行 CLA 任务中的 Func1函数以读取变量的值 A ,并找到 A 已在此时变为0。
当我注释掉 Func1函数并直接读取 A 而 Func1函数仅执行一些 if 语句判断,这同样是正确的。
Func1在.cla 文件中定义、并直接由.cla 文件中的 CLAtask1 ()函数调用。 优化级别为3。 如果将其关闭、存储器将溢出。
为什么会发生这种情况?
--
谢谢、此致
耶鲁