C++ 比较UART寄存器UDR0与无符号字符数组
我使用RX0引脚通过USB端口接收到Arduino(ATmega2560)的串行通信。在接收函数中,我想将接收信息的寄存器C++ 比较UART寄存器UDR0与无符号字符数组,c++,arduino,avr,uart,usart,C++,Arduino,Avr,Uart,Usart,我使用RX0引脚通过USB端口接收到Arduino(ATmega2560)的串行通信。在接收函数中,我想将接收信息的寄存器UDR0与无符号字符pckaffe[4]进行比较。通过USB端口发送到Arduino的数据来自pc,如果一切正常,它应该发送无符号字符数组,这就是为什么我将UDR0与无符号字符pckaffe进行比较的原因 但是,在if语句中,编译器说的是“代码>错误”,ISO C++禁止指针和整数之间的比较[fime]。 为什么呢 unsigned char pckaffe[4] = {
UDR0
与无符号字符pckaffe[4]
进行比较。通过USB端口发送到Arduino的数据来自pc,如果一切正常,它应该发送无符号字符数组,这就是为什么我将UDR0
与无符号字符pckaffe
进行比较的原因
但是,在if语句中,编译器说的是“代码>错误”,ISO C++禁止指针和整数之间的比较[fime]。
为什么呢unsigned char pckaffe[4] = { 0x0C, 0x0A, 0x0F, 0x0E };
void USART_Receive(){
while(!(UCSR0A & (1<<RXC0)) );
if(UDR0 == pckaffe){
PORTB ^= (1 << PB1);
}
}
unsigned char pckaffe[4]={0x0C,0x0A,0x0F,0x0E};
无效USART_接收(){
而(!(UCSR0A&(1
为什么呢
unsigned char pckaffe[4] = { 0x0C, 0x0A, 0x0F, 0x0E };
void USART_Receive(){
while(!(UCSR0A & (1<<RXC0)) );
if(UDR0 == pckaffe){
PORTB ^= (1 << PB1);
}
}
pckaffe
是一个无符号字符指针,您试图将其与此处的整数进行比较
if(UDR0 == pckaffe)
pckaffe
是指向字符数组的指针,因此if语句将UDR0
(一个int
)的值与pckaffe
的地址进行比较,这是不兼容的类型
我想比较接收信息UDR0的寄存器与无符号字符pckaffe[4]
URD0
包含一个字节的数据。pckaffe[4]
-其中四个。您想如何比较它们
当然,如果(UDR0==pckaffe)
没有意义,pckaffe
不带索引会隐式转换为指向数组的指针。这会导致编译错误
也许你想要这样的东西:
unsigned char pckaffe[4] = { 0x0C, 0x0A, 0x0F, 0x0E };
unsigned int pckaffe_pos = 0;
void USART_Receive(){
while(!(UCSR0A & (1<<RXC0)) ); // Wait for next received byte
uint8_t data = UDR0; // Get received byte
if (data == pckaffe[pckaffe_pos]) { // Compare the byte with next position in the array
pckaffe_pos++; // if matches, increase position
if (pckaffe_pos >= 4) { // If all bytes matched
pckaffe_pos = 0; // reset the pointer
PORTB ^= (1 << PB1); // do something
}
} else if (data == pckaffe[0]) { // next byte does not match, but matches the first
pckaffe_pos = 1; // next byte assumed to be the second in the sequence
} else { // does not match anything
pckaffe_pos = 0; // wait for the first byte in the sequence
}
}
unsigned char pckaffe[4]={0x0C,0x0A,0x0F,0x0E};
无符号整数pckaffe_pos=0;
无效USART_接收(){
虽然(!(UCSR0A&(1)您应该了解数组和单个字节之间的差异。(即使在使用arduino读取函数时)顺便说一句:为什么不使用它?@datafiddler那么您是说UDR0一次只接收一位?这是否意味着我需要使用for循环?…并且您应该了解位和字节之间的差异…)SCNR。如果需要四个字节,则需要逐个读取它们。(即使使用ArduinoSerial.read();
)