把ARM Cortex M3上的一段代码移植到DSP TMS320F28016上时,发现这个定点DSP中没有UINT8的类型,只有16位和32位的整数。定义一个char实际上也是占用一个字(16位)。并且每一个内存地址对应的也是一个字(2个字节)。
typedef union unCanFrameData
{
BYTE abyData[8];
WORD awdData[4];
UINT32 auiData[2];
// UINT64 uiData;
}UN_CAN_FRAME_DATA;
typedef struct stCanFrame_t
{
UINT32 uiId;
ST_CAN_FRAME_INFO stFrameInfo;
UN_CAN_FRAME_DATA unData;
}ST_CAN_FRAME;
通过调试发现,UN_CAN_FRAME_DATA实际上占用8个字,即abyData[0]和awdData[0]对应同一地址,abyData[1]和awdData[1]对应同一地址。而不是之前想的那样,abyData[0]和abyData[1]共用一个字,与awdData[0]共用内存。
这样就违背了union的初衷。程序只好换一种写法,以适应定点DSP的思维方式。