C char数组地址问题

时间:2014-04-08 22:54:37

标签: c arrays struct char

我在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;

}

欢迎任何帮助

最诚挚的问候, 史蒂夫曼斯菲尔德

1 个答案:

答案 0 :(得分:0)

感谢大家的投入。我刚刚对硬件进行了一些挖掘,发现我使用的TI DSP不支持字节操作。它的最小操作是一个字(2个字节)。即使我将数组声明为char数组,但当我写入数组时,它会将其写为整数。如果我想处理字节操作,我将不得不向左移动第一个字符8位,然后向下移动下一个字符,然后将其写入数组。就像每个人总是说的那样,如果硬件出现问题 - 用软件修复它!

最诚挚的问候, 史蒂夫曼斯菲尔德