首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

【求助】xgate共享数据警告变量大小不对

【求助】xgate共享数据警告变量大小不对

各位大侠!请指教:
C下:
#pragma DATA_SEG SHARED_DATA
volatile canbox msgbox[7];
#pragma DATA_SEG DEFAULT

在cxgate下:
#pragma DATA_SEG SHARED_DATA
extern volatile canbox msgbox[7];
#pragma DATA_SEG DEFAULT

编译时提示我:
Symbol msgbox has different size in xg.xcgate.0 (112 bytes) and s12.c.o (105 bytes)

请多多指教,谢谢!
原因是XGATE的一个字必须从偶地址开始,而主处理器一个字则没有这种要求。比如定义一个结构体:
struct  
{
    unsigned int a;
    unsigned char b;
    unsigned int c;
}box;
假设地址是从0开始的,那么在主处理器中,box.a的地址是0,box.b的地址是2,box.c的地址是3,但到了XGATE中,box.a的地址是0,box.b的地址是2,到box.c的时候,因为xgate的字必须要从偶地址开始,地址就变成4了。因此,在主处理器中,box占用地址0-5的5个字节,而在XGATE中,box占用地址0-6的6个字节。
我用了个取巧的办法,假如a,b,c都是我们需要的数据,为了保证对齐,我在b和c之间插入了一个char 型,结构体就变成:
struct  
{
    unsigned int a;
    unsigned char b;
    unsigned char reserve;
    unsigned int c;
}box;
这样就保证了2边的地址大小一致,而又不需要修改原有代码。
学习了,还没用到带协处理器的
认真学习,真是太谢谢你了!
呵呵,相互学习
http://www.yingtop.comDVD播放器
很不错啊

减肥药排行榜
返回列表