我在C中遇到问题,在结构中寻址char数组。当我在数组中写入字符时,它将它们写入字边界而不是字符边界。这是结构声明。
typedef struct RxBuffer {
int Status;
int ByteCount;
int Index;
char Data[SCI_BUFFER_LENGTH];
} RxBuffer;
这是实际写入的代码,
RxBuffer SciaRxBuffer;
char SciaRxData;
int LoopBackCrFlag;
int RxDataReady;
interrupt void scia_rx_isr()
{
// Get Rx Data and first LoopBack
SciaRxData = SciaRegs.SCIRXBUF.all; // Read data
SciaRegs.SCITXBUF = SciaRxData; // Send loop back Tx data
// Check to see if carriage return
if (SciaRxData == CR)
{
// Set the loopback flag so Line-feed is transmitted
LoopBackCrFlag = TRUE;
}
//!
//! Problem is right here. SciaRxData is being written into
//! SciaRxBuffer.Data[SciaRxBuffer.ByteCount++] on Word
//! boundaries instead of byte boundaries.
//!
// Stuff RxBuffer & Mark as busy
SciaRxBuffer.Data[SciaRxBuffer.ByteCount++] = SciaRxData;
SciaRxBuffer.Status = RX_BUSY;
if (SciaRxData == CR)
{
SciaRxBuffer.Status = RX_READY;
SciaRxBuffer.Index = 0;
RxDataReady = TRUE;
}
// Clear Overflow and interrupt flags
SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1; // Clear Overflow flag
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1; // Clear Interrupt flag
// Issue the PIE ack
PieCtrlRegs.PIEACK.all|=0x100;
}
欢迎任何帮助
最诚挚的问候, 史蒂夫曼斯菲尔德
答案 0 :(得分:0)
感谢大家的投入。我刚刚对硬件进行了一些挖掘,发现我使用的TI DSP不支持字节操作。它的最小操作是一个字(2个字节)。即使我将数组声明为char数组,但当我写入数组时,它会将其写为整数。如果我想处理字节操作,我将不得不向左移动第一个字符8位,然后向下移动下一个字符,然后将其写入数组。就像每个人总是说的那样,如果硬件出现问题 - 用软件修复它!
最诚挚的问候, 史蒂夫曼斯菲尔德