在使用MC9S08DZ60 ,开发的过程中,发现其存储数据和一般想象的不大一样,具体说来如下。
比如我定义了结构体:
typedef struct input_data {
byte AirCleanerBlockWarningSwich : 2;//空滤器阻塞报警开关
byte CoolantLevelWanningSwich : 2;//冷却液位报警开关
byte OilPressureSwich : 2;//机油压力开关
byte BrakerFrayWarningSwich : 2;//刹车片磨损报警开关
byte PowertakeoffInplaceSignal : 2;//取力器到位信号
byte WheelsIntervaLockInplaceSignal : 2;//轮间闭锁到位信号
byte AxelIntervaLockInplaceSignal : 2;//轴间闭锁到位信号
byte AllwheelockInplaceSignal : 2; //全轮驱动闭锁到位信号
byte GearState : 4;//档位状态
byte TurningOilevelWarningSwich : 2;//转向油位报警开关
byte DplusSignal : 2;//发动机D+信号
byte SystemGroundBad : 2;//系统接地不良
byte ChassisTermalExceed : 2;//底盘过温
byte MainICError : 2;//主芯片故障
byte Reserved : 2;//备用
byte BCM2Temperature;//底盘环境温度 1Byte
byte POWER30[2];
byte undefined;//未定义 1Byte
} ST_INPUT_DATA, *PST_INPUT_DATA;
编译之后,其存储方式为:仿真可看到其存储方式为:
可以看到,首先定义的内容,比如AirCleanerBlockWarningSwich ,在第0字节,占2bit,原来设想的应该在字节的最高位,其实他却被安排到最低位,因此,编程的时候要特别注意这个问题。但是字节间的关系,还是按照我们想象的。
比如说定义数组 byte Data[4],还是Data[0],在最前的位置。