大家好,
我在调试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在c代码中进行了赋值,然后触发CLA执行任务,在CLA任务中执行Func1函数去读取变量a的值,发现此时a的值已经变成0了;
当我将Func1函数注释掉,直接去读a的值时又是正确的,而Func1函数只是执行一些if语句的判断。
所以在这里有一个疑问,有哪些原因会导致变量a在c代码中赋值而执行CLA时变量a的值是错误的,不再是c代码中写入的值。


