AVR的C/C++中的数组不断追加
array in C/C++ for AVR keeps appending
在C中,我有一个数组等待从传感器接收字节,保存在缓冲区中,然后像这样打印出来:
unsigned char responseFrame[300];
int main(void) {
UART_init();
while(1) {
receive(responseFrame);
myLog(responseFrame, sizeof(responseFrame));
}
}
我通过以下操作填充数组:
void receive(unsigned char *rcv_buff) {
uint8_t recv_data;
for (int i=0; i<300; i++){
USART1_Flush();
rcv_buff[i] = USART1_RX();
}
}
然后我用以下方法打印出缓冲区中的内容:
// Logs this output to the serial port; used for debugging
void myLog(unsigned char *msg, int size) {
for (int i=0; i<size; i++) {
USART0_TX(msg[i]);
}
}
这会打印出数组,但当接收到另一次字节迭代时,所有内容都会被附加,所以假设我首先接收{0xFF,0xFF},第一次迭代的输出是:
0xFF 0xFF, 0x00, 0x00 ... 0x00
但在下一次迭代中,假设接收到{0x0A,0x0A},在输出中,我看到的是:
0xFF, 0xFF, 0x0A, 0x0A, 0x00, 0x00 ... 0x00
注意:省略号只是说有更多的0x00被打印出来,直到我们基本上达到数组的大小。
为什么要从数组的开头进行追加而不是覆盖?
这是我的USART0_TX和USART1_RX函数:
void USART0_TX(uint8_t myData) {
// Wait if a byte is being transmitted
while( !(UCSR0A & (1<<UDRE0)) );
// Transmit data
UDR0 = myData;
};
uint8_t USART1_RX(void) {
// Wait until recv buffer is full
while( !(UCSR1A & (1<<RXC1)) );
// Return recvd data
return UDR1;
};
这是我用来刷新USART1 RX:的代码
//USART1 flush, clears USART1 buffer
void USART1_Flush( void )
{
unsigned char dummy;
while ( UCSR1A & (1<<RXC1) ) dummy = UDR1;
}
我相信名为"Flush"的函数实际上是一个"Poll"函数,用于查找要出现的字符(这是正常用法,请等待字符出现)。使用RXC1的逻辑显示为反转。试着看看这个看起来很专业的AVR驱动程序(就像你正在做的那样,它有一个民意调查选项):
usart.c
另一个评论良好的受访驱动程序(有很多评论的小驱动程序):avr-uart驱动程序
相关文章:
- 使用 swig 追加到字节数组
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 使用 sprintf 追加到字符数组
- 问:Apache Arrow 数组生成器不安全追加
- 将数据追加到C++中的数组
- 将数组追加到向量中
- 追加到 C++ 数组
- 如何将元素追加到数组 c++
- 追加到动态内存中的数组
- 通过重载运算符 [] 追加到数组
- 将字符数组追加到字符串 C++
- 如何在 C# 中将整个数组追加到字符串
- AVR的C/C++中的数组不断追加
- 追加在 C++ 中的数组链表中不起作用
- 追加到具有可用空间的字符数组
- C++字符串数组追加的目标C++崩溃
- C++ 追加到数组
- 追加/打印/插入数组c++函数问题
- c++轻可追加数组容器
- 追加到数组的开头