TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28388D: 关于CPU和CLA共享变量的读写问题

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是否被正确放置在了相关段,相关段的分配是否符合预期。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28388D: 关于CPU和CLA共享变量的读写问题
分享到: 更多 (0)