DSP28016每个内存地址对应的都是16位(2字节),没有8位的整数

来源:互联网 发布:镭射切割编程 编辑:程序博客网 时间:2024/06/13 12:56

把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的思维方式。