DSP

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

2019-07-13 10:19发布

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