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

似乎遇到了C2000结构体对齐问题?

eCAN MSGID定义如下

/* eCAN Message ID (MSGID) bit definitions */
struct CANMSGID_BITS { // bits description
    Uint16 EXTMSGID_L:16; // 0:15
    Uint16 EXTMSGID_H:2; // 16:17
    Uint16 STDMSGID:11; // 18:28
    Uint16 AAM:1; // 29
    Uint16 AME:1; // 30
    Uint16 IDE:1; // 31

};

如果改成如下代码,EXTMSGID_L减少1位,EXTMSGID_H增加1位

/* eCAN Message ID (MSGID) bit definitions */
struct CANMSGID_BITS { // bits description
    Uint16 EXTMSGID_L:15; // 0:15
    Uint16 EXTMSGID_H:3; // 16:17
    Uint16 STDMSGID:11; // 18:28
    Uint16 AAM:1; // 29
    Uint16 AME:1; // 30
    Uint16 IDE:1; // 31

};

编译器报错如下:

<Linking>
"D:\work\VIENNA\MR220\trunk\DSP\DYDSP_U15\cmd\DSP2833x_Headers_nonBIOS.cmd", line 126: error: run placement fails for object "ECanaMboxesFile", size 0x140 (page 1).
Available ranges:
ECANA_MBOX size: 0x100 unused: 0x100 max hole: 0x100"D:\work\VIENNA\MR220\trunk\DSP\DYDSP_U15\cmd\DSP2833x_Headers_nonBIOS.cmd", line 132: error: run placement fails for object "ECanbMboxesFile", size 0x140 (page 1).
Available ranges:
ECANB_MBOX size: 0x100 unused: 0x100 max hole: 0x100

猜测是遇到了结构体对齐问题,C2000最小单位为16位,第一种情况结构体占用2个16位字,第二种情况占用3个16位字,但是cmd文件中限制了MSGID的长度,因此报错了。

求证实以及官方相关资料。

赞(0)
未经允许不得转载:TI中文支持网 » 似乎遇到了C2000结构体对齐问题?
分享到: 更多 (0)