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的长度,因此报错了。
求证实以及官方相关资料。