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

对于C6678编程时,变量赋不上值的问题

这张图里面的核0的程序中UDP_buffer_pointer->flag = 1;单步运行到这句发现运行完这句UDP_buffer_pointer->flag 的值仍然是0而不是1(核1一直在循环中,当需要读取这个标志位为1,进入子函数);

目前我修改堆栈,仍然解决不了问题。请教一下各位,这是什么问题呢?谢谢咯

注:(核0运行UDP_buffer_pointer->flag = 1;在第一次赋值能为1,当被核1识别它为1后进入子函数,在子函数中核1将这个值又赋值为0;核0再运行UDP_buffer_pointer->flag = 1就不能赋值成功)

Andy Yin1:

这个值是在core0写,core1去读,如果存放在共享cacheable memory,涉及到cache一致性问题,core0写完后需要cache write back,core1读之前需要invalidate,并且存储地址及长度需要cache line对齐。请参考c66x cache user guide及multicore program guide。

Gangping Li:

回复 Andy Yin1:

谢谢Andy的回复,我这边利用CACHE_wbInvAllL1d(CACHE_WAIT);CACHE_setL1DSize(CACHE_L1_0KCACHE);已经对cache一致性做了处理;而且在标志位被核0改变后,核1是能读出来的,可是问题是核0运行UDP_buffer_pointer->flag = 1那个赋值语句不能对UDP_buffer_pointer->flag;UDP_buffer_pointer这个指针是指向一个结构体,是全局结构体指针;我打开memory view后发现UDP_buffer_pointer->flag的地址在0x01010100,这是一段保留区域;这证明了程序中全局结构体指针发生错乱;我想请问一下Andy,全局结构体指针被多个核使用时,要做什么样子的保护才不会发生指针错乱,其实这个全局指针在三个核中的用法都很简单;但是就是不知道为什么很多全局变量,全局指针等等被多核使用容易偏移或者出现错乱。

Gangping Li:

回复 Andy Yin1:

Andy,你好!我只对核1和核2进行了

CACHE_wbInvAllL1d(CACHE_WAIT); CACHE_setL1DSize(CACHE_L1_0KCACHE);这两句的处理;你说的core0写完后需要cache whrite back,这个不知道什么意思?我想有可能是因为我没有将核0进行cache whrite back处理

赞(0)
未经允许不得转载:TI中文支持网 » 对于C6678编程时,变量赋不上值的问题
分享到: 更多 (0)