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

6678 BIOS 下如何定义某一段或者某一自定义存储空间为Non cacheable

TI的工程师你们好!

自制的一块6678板子,多核跑程序时出现问题,定义在共享内存内的变量,其他核心无法正确读取数据

在BIOS内,我从共享内存内开辟了一段1K的空间,名字叫做MSMC_DATA.

在cfg内,使用如下指令定义一个新段ShareData并放入MSMC_DATA.内

Program.sectMap[".ShareData"] = new Program.SectionSpec();
Program.sectMap[".ShareData"].loadSegment = "MSMC_DATA";

在程序内,使用DATA_SECTION将共享变量放入到ShareData段内

#pragma DATA_SECTION (TrackingInf1, ".ShareData")//sharedata is confided in the cfg file
volatile TrackingInf TrackingInf1;

但是当程序运行过程中,如果TrackingInf1发生了改变,其他核心并不能正确读取变量的值,

所以是不是应该将其存储空间(MSMC_DATA)或者段(ShareData)定义为Noncacheable?

具体需要如何操作?是在cfg文件内进行还是在Main函数中?

如果有更好的解决办法又该如何处理?

shiyan sun:

回复 Andy Yin1:

谢谢你的回复!

不过我是在MSMC内开的共享空间,这个空间一部分开成non cache的话好像需要使用XMC进行空间映射

觉得这么做太麻烦了,最后就用MessageQ进行数据交互了

现在我的ShareRegion在共享L2内,只要我的结构体内不含有数组指针的话

我用MessageQ传结构体就不要进行Cache一致性维护了吧!

自定义的结构体如下

typedef struct TrackingMessage{

 MessageQ_MsgHeader  header; Uint32 X_locationori; Uint32 Y_locationori; Uint32 Boxori; Uint32 X_location; Uint32 Y_location; Uint32 Box; Uint32 Index; Uint32 CountMin; Uint32 CountIn; Uint32 status;} TraMsg;

shiyan sun:

回复 shiyan sun:

最后自己解决了,使用MessageQ,如果自定义结构体内不含有字符串指针之类的,就不需要进行Cache一致性维护,

MessageQ会自行帮你同步数据,之后熟悉了指针操作之后发现数据发送都没有问题

赞(0)
未经允许不得转载:TI中文支持网 » 6678 BIOS 下如何定义某一段或者某一自定义存储空间为Non cacheable
分享到: 更多 (0)