大家好,
我在调试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代码中写入的值。