【发布时间】:2014-05-21 21:39:12
【问题描述】:
我在 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;
}
欢迎任何帮助
最好的问候, 史蒂夫·曼斯菲尔德
【问题讨论】:
-
那是什么架构?是
CHAR_BIT8 吗? -
“写在单词边界上”是什么意思?插入的字符是您认为应该是双倍的索引,还是每个单词的高字节根本没有被修改,或者......?
-
SciaRxData = SciaRegs.SCIRXBUF.all;看起来不像 C。什么语言? -
语言是 C。我正在开发 TI DSP。 SciaRegs.SCIRXBUF.all 只是一个内存映射寄存器。我正在将 Rx 数据从 SCIRXBUF 移动到 SciaRxData。字节作为字放置在数组中,即 0048 0065 006C 006C 006F 而不是 4865 6C6C 6F00。所以是的,它被放置在索引的两倍。我将数组定义为 char 数组“字符串数组”并期望 C 处理正确的索引。
-
您是否有 char = int 的 typedef(或宏)。 sizeof(char) 说什么