Вопрос про адреса регистров

VeD
Offline
Зарегистрирован: 21.02.2016

Подскажите, кому известно, адрес регистра  UDR0 из UCSART0  микроконтроллера. 

Хочу сделать сравнение строк  if(strcmp(UDR0, "МОЯ СТРОКА")==0) делать что-то. Но почему то "МОЯ СТРОКА"  подчеркнута. 

если попробовать if(strcmp *((char *) адрес UDR0), "МОЯ СТРОКА")==0)  что то измениться или нельзя сравнивать  UDR0  со строками?

b707
Offline
Зарегистрирован: 26.05.2017

размер регистров USART - 1 символ, что вы там собрались со строкой сравнивать?

Вы какую-то фигню городите. Почему не читать USART как все нормальные люди, через буфер?

VeD
Offline
Зарегистрирован: 21.02.2016

да хочу считать надпись с терминала, сравнить эту надпись уже с заранее готовой строкой и если совпадают, делать какие-то действие. 

 

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

да хочу считать надпись с терминала, сравнить эту надпись уже с заранее готовой строкой и если совпадают, делать какие-то действие. 

 

ну и читайте надпись посимвольно в буфер - а уже буфер сравнивайте со строкой.

VeD
Offline
Зарегистрирован: 21.02.2016

так и сделал. при вводе строки с терминала. ничего не происходит.

#include <avr/io.h>
#include <string.h>
#include <avr/interrupt.h>
#include <avr/portpins.h>
#define BUFFSIZERX 32
#define BUFMASKRX (BUFFSIZERX-1)
volatile int rxIn=0;
char bufrx[BUFFSIZERX];

ISR(USART_RX_vect)
{
	bufrx[rxIn++]=UDR0;
	rxIn &=BUFMASKRX;
	UDR0=0;
	
}


void UART_Init(void)
{
	UCSR0B|=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
	UCSR0C|=(1<<UCSZ01)|(1<<UCSZ00);

	UBRR0 = 103;
}



int main(void)
{
	
	DDRB |=(1<<PB1);
	UART_Init();
	sei();

	while(1)
	{
if(strcmp(bufrx, "xxx")==0) PORTB |=(1<<PB1);
		

	}

}