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

CCS10.1使用全局结构体变量出现中断函数中修改了变量值、线程访问是为0问题

        原工程为CCS5.5的RTSC工程,平台为OMapl138的DSP程序;

        最近升级为CCS10.1平台,使用Import导入到新平台,修正了宏变量问题后,程序正确编译并且正常仿真。

        但是发现使用的一个全局结构体变量,在中断服务函数中进行修改后;在另外一个线程中进行读取访问时,读取的值为0;此时查看cache L1/L2值都是为正确值,但是内存中值为0;这是为何?该如何解决?

数据的访问是同一个程序的一个中断函数修改,另一个线程空闲时访问,同一个core内,应该是直接使用L1/L2的数据,而不是内存中的数据才对。

注:在ccs5.5版本是正确的访问到的。

 

Shine:

cache里的值和memory里的值不一样的话,可能是cache一致性问题引起的,看一下在另一个线程读取前有没有做cache的回写。

,

Kevin Le82:

ti-rtos的工程,同一个程序的一个中断函数写、一个线程读,需要回写?读取又从新重内存到cache?
没有跨越核、进程、外部设备,程序内部变量的访问而已。
旧版本的ccs5.5就没有这样的问题。不是应该访问到内存的时候,先查询L1/L2,再到内存吗?

,

Shine:

可以尝试把cache关掉看看是否还有这个问题。

,

Kevin Le82:

全局变量只在中断函数修改,只在线程读取值;使用volatile限定都不行,在ccs5.5/6.12版本上都是没有问题的,直接使用cache L1/L2里面的值,而不会使用内存里面的值

赞(0)
未经允许不得转载:TI中文支持网 » CCS10.1使用全局结构体变量出现中断函数中修改了变量值、线程访问是为0问题
分享到: 更多 (0)