变量是这样定义的: struct DI_FUNC diSelectFunc; // 是否有DI端子选择了相应的功能 struct DI_FUNC { union DI_FUNC1 f1; union DI_FUNC2 f2; }; struct DI_FUNC1_BITS { Uint16 noFunc:1; // 0 Uint16 fwd:1; // 1 Uint16 rev:1; // 2 Uint16 tripleLineCtrl:1; // 3 Uint16 fwdJog:1; // 4 Uint16 revJog:1; // 5 Uint16 closePwm:1; // 6 Uint16 emergencyStop:1; // 7 Uint16 errorReset:1; // 8 Uint16 externalErrOpenIn:1; // 9 Uint16 up:1; // 10 Uint16 down:1; // 11 Uint16 clearUpDownFrq:1; // 12 Uint16 localOrRemote:1; // 13 Uint16 diOrComm:1; // 14 Uint16 multiSet:4; // 15:18 Uint16 accDecTimeSrc:2; // 19:20 Uint16 runPause:1; // 21 Uint16 pidPauseI:1; // 22 Uint16 pidPause:1; // 23 Uint16 pidDirRev:1; // 24 Uint16 pidChg:1; // 25 Uint16 rsvd1:5; // 26:30 Uint16 frqOk:1; // 31 }; union DI_FUNC1 { Uint32 all; struct DI_FUNC1_BITS bit; }; 仿真时diSelectFunc.f1.all和bit对不上,也不存在没有更新的问题,bit位变化时显示值会变化。 现在发现从bit15出现问题,比如说变量值第15位是1,但对应的bit位第15位却是0,很奇怪的现象。 |
把uint16换成uint32应该就没问题了
评分
查看全部评分
设法将所有联合体变量改成结构体变量,如果变量值与位值对应上,那就是联合体的变量相互影响了
是这个问题,感谢