Part Number:TMS320F28388D
大家好,
我在调试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: > RAMLS1cla_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代码中写入的值。
Yale Li:
Func1放置及运行在哪里?
,
TFTMing:
放置在.cla文件定义,且在.cla文件的CLAtask1()函数直接调用
,
Yale Li:
有没有调整编译器的优化等级试一下
,
TFTMing:
目前的优化等级是3,然后我把它关了的话内存会溢出
,
Yale Li:
看一下这个帖子是否有帮助:
TMS320F280039C: Why are the variable in the CLA task code not updating as expected
,
TFTMing:
我看了一下,这贴子说的是无法在 expressions window更新变量值,我的问题是我在 expressions window能看到有更新值,但实际CLA在调用函数读取的时候的值为0
,
Yale Li:
请把这里修改一下,更严谨一些,我们把各种因素排除一下。
以及这里:
如果section只被分配给1个memory,单个 ’>‘ 就可以了。
也请检查一下map文件,a是否被正确放置在了相关段,相关段的分配是否符合预期。
TI中文支持网







