仿真发现变量值与位值对应不上
变量是这样定义的:struct DI_FUNC diSelectFunc; // 是否有DI端子选择了相应的功能
struct DI_FUNC
{
union DI_FUNC1f1;
union DI_FUNC2f2;
};
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,很奇怪的现象。
数据长度不一致导致的联合体中all用的是32位的数据DI_FUNC1_BITS结构体中使用的是16位的数据
把uint16换成uint32应该就没问题了 联合体的变量要小心,大家共用内存结构单元,一个变了影响另一个。
设法将所有联合体变量改成结构体变量,如果变量值与位值对应上,那就是联合体的变量相互影响了 mylovemcu 发表于 2020-1-2 18:59
数据长度不一致导致的联合体中all用的是32位的数据DI_FUNC1_BITS结构体中使用的是16位的数据
把uint16 ...
是这个问题,感谢
页:
[1]