关于结构体嵌套中的数组,该怎么处理
关于结构体嵌套中的数组
看了几个小时了,还是没弄明白,现在把相关的定义都贴出来,请各位帮忙
[code=C/C++][/code]#define ECCSMSG8 (*((struct eccsmsg8 *)(CANDATA[ECCSMSG8_DEF].DATA)))
#define ECCSMSG8_DEF 14
struct candata
{
struct dataflg FLG;
uchar8 COUNT;
uchar8 DATA[8];
};
#define CANDATA ((struct candata *)&vCANDATA_bios)
uchar8 CANDATA_bios[37][10] ;
struct eccsmsg8
{
uchar8 DTCCODE_L; /* DT0 */
uchar8 DTCCODE_H; /* DT1 */
uchar8 ENSTNG :1; /* DT2 bit7 */
uchar8 ECMNG :1; /* DT2 bit6 */
uchar8 ETCNG :1; /* DT2 bit5 */
uchar8 FCNG :1; /* DT2 bit4 */
uchar8 CANNGF :1; /* DT2 bit3 */
uchar8 :1; /* DT2 bit2 */
uchar8 ECSMSG8C :2; /* DT2 bit1-0 */
uchar8 :8; /* DT3 */ /* [192]M */
uchar8 :8; /* DT4 */ /* [192]M */
uchar8 :6; /* DT5 bit7-2 */ /* [192]M */
uchar8 ISSAP :1; /* DT5 bit1 */ /* [192]M */
uchar8 SPTMD_LMP :1; /* DT5 bit0 */ /* [192]M */
uchar8 IDSTSTB :1; /* DT6 bit7 */ /* [192]M */
uchar8 IDSTSTS :1; /* DT6 bit6 */ /* [192]M */
uchar8 ISACT :1; /* DT6 bit5 */ /* [192]M */
uchar8 ISBRKREQ :1; /* DT6 bit4 */ /* [192]M */
uchar8 ISINDMD :2; /* DT6 bit3-2 */ /* [192]M */
uchar8 ISMSKSW :1; /* DT6 bit1 */ /* [192]M */
uchar8 CHRGLREQ :1; /* DT6 bit0 */ /* [192]M */
uchar8 SHARE_ECO_BOOST :8; /* DT7 */ /* [206]M */
};
vCANDATA_bios[14][9]即ECCSMSG8.SHARE_ECO_BOOST,是怎么得来的?
------解决方案--------------------
恭喜终于悟了
------解决方案--------------------
看了几个小时了,还是没弄明白,现在把相关的定义都贴出来,请各位帮忙
[code=C/C++][/code]#define ECCSMSG8 (*((struct eccsmsg8 *)(CANDATA[ECCSMSG8_DEF].DATA)))
#define ECCSMSG8_DEF 14
struct candata
{
struct dataflg FLG;
uchar8 COUNT;
uchar8 DATA[8];
};
#define CANDATA ((struct candata *)&vCANDATA_bios)
uchar8 CANDATA_bios[37][10] ;
struct eccsmsg8
{
uchar8 DTCCODE_L; /* DT0 */
uchar8 DTCCODE_H; /* DT1 */
uchar8 ENSTNG :1; /* DT2 bit7 */
uchar8 ECMNG :1; /* DT2 bit6 */
uchar8 ETCNG :1; /* DT2 bit5 */
uchar8 FCNG :1; /* DT2 bit4 */
uchar8 CANNGF :1; /* DT2 bit3 */
uchar8 :1; /* DT2 bit2 */
uchar8 ECSMSG8C :2; /* DT2 bit1-0 */
uchar8 :8; /* DT3 */ /* [192]M */
uchar8 :8; /* DT4 */ /* [192]M */
uchar8 :6; /* DT5 bit7-2 */ /* [192]M */
uchar8 ISSAP :1; /* DT5 bit1 */ /* [192]M */
uchar8 SPTMD_LMP :1; /* DT5 bit0 */ /* [192]M */
uchar8 IDSTSTB :1; /* DT6 bit7 */ /* [192]M */
uchar8 IDSTSTS :1; /* DT6 bit6 */ /* [192]M */
uchar8 ISACT :1; /* DT6 bit5 */ /* [192]M */
uchar8 ISBRKREQ :1; /* DT6 bit4 */ /* [192]M */
uchar8 ISINDMD :2; /* DT6 bit3-2 */ /* [192]M */
uchar8 ISMSKSW :1; /* DT6 bit1 */ /* [192]M */
uchar8 CHRGLREQ :1; /* DT6 bit0 */ /* [192]M */
uchar8 SHARE_ECO_BOOST :8; /* DT7 */ /* [206]M */
};
vCANDATA_bios[14][9]即ECCSMSG8.SHARE_ECO_BOOST,是怎么得来的?
------解决方案--------------------
恭喜终于悟了
------解决方案--------------------
- C/C++ code
#define ECCSMSG8 (*((struct eccsmsg8 *)(CANDATA[ECCSMSG8_DEF].DATA)))//这里是将ECCSMSG8定义地址CANDATA[14].DATA类型为eccsmsg8的结构 #define ECCSMSG8_DEF 14 struct candata { struct dataflg FLG;//这个结构不知道是什么样的,不过如果套你现在的结果这个结构应该是占一个byte uchar8 COUNT; uchar8 DATA[8]; }; #define CANDATA ((struct candata *)&vCANDATA_bios)//将CANDATA定义为地址是vCANDATA_bios类型为candata的结构 uchar8 vCANDATA_bios[37][10] ;//这里是不是打错了少了个字母v我加上了 struct eccsmsg8//这个结构就是一个位定义的结构总共占了8个byte { uchar8 DTCCODE_L; /* DT0 */ uchar8 DTCCODE_H; /* DT1 */ uchar8 ENSTNG :1; /* DT2 bit7 */ uchar8 ECMNG :1; /* DT2 bit6 */ uchar8 ETCNG :1; /* DT2 bit5 */ uchar8 FCNG :1; /* DT2 bit4 */ uchar8 CANNGF :1; /* DT2 bit3 */ uchar8 :1; /* DT2 bit2 */ uchar8 ECSMSG8C :2; /* DT2 bit1-0 */ uchar8 :8; /* DT3 */ /* [192]M */ uchar8 :8; /* DT4 */ /* [192]M */ uchar8 :6; /* DT5 bit7-2 */ /* [192]M */ uchar8 ISSAP :1; /* DT5 bit1 */ /* [192]M */ uchar8 SPTMD_LMP :1; /* DT5 bit0 */ /* [192]M */ uchar8 IDSTSTB :1; /* DT6 bit7 */ /* [192]M */ uchar8 IDSTSTS :1; /* DT6 bit6 */ /* [192]M */ uchar8 ISACT :1; /* DT6 bit5 */ /* [192]M */ uchar8 ISBRKREQ :1; /* DT6 bit4 */ /* [192]M */ uchar8 ISINDMD :2; /* DT6 bit3-2 */ /* [192]M */ uchar8 ISMSKSW :1; /* DT6 bit1 */ /* [192]M */ uchar8 CHRGLREQ :1; /* DT6 bit0 */ /* [192]M */ uchar8 SHARE_ECO_BOOST :8; /* DT7 */ /* [206]M */ }
------解决方案--------------------
楼主,我收回我的话额,其实我不是很懂……可否给我讲讲这个问题啊。我有两个疑问,第一,关于强制转换,它把CANDATA_bios这个二维数组转换成struct candata结构体型的,由于二维数组的空间比这个结构体大,它转换以后,那是不是把所有的二维数组空间都转换成结构体啊,还是只转换一个就行?第二,转换以后,原先的二维数组和转换之后的空间怎么对应的呢?谢谢……
------解决方案--------------------
遇到宏多的。。。预编译工具是个好东西。。。