Skocz do zawartości

Problem z wyjściem z pętli nieskończonej


Krawi92

Pomocna odpowiedź

O kurcze, gdy dałem sei na sam początek w sumie to działa xD

void snake_ir_keys(uint8_t adr,uint8_t cmd,uint8_t key_time);

volatile uint16_t timer1;
int main (){
	PORTD |= (1<<PD7);
	// konfiguracja timera//
	TCCR0 |= (1 << WGM01); // tryb ctc
	TCCR0 |= (1<< CS00)|(1<<CS02); // prescaler 1024
	OCR0 = 78;
	TIMSK |= (1 << OCIE0);

	sei();
	register_ir_event_callback(snake_ir_keys);
	check_and_load_defaults();
	USART_Init(__UBRR);
	ir_init();
	lcd_init();
	register_start_screen_callback(display_init);
	register_end_screen_callback(ekran_koncowy);
	snake_init(1);





	while(1){

Ale nie tak do końca działa. Czasem po pojedyńczym kliknięciu zaczyna się gra, czasem musze kliknąć kilka razy. 2-5x To też dziwne trochę. 

Link do komentarza
Share on other sites

4 minuty temu, Krawi92 napisał:

Ale nie tak do końca działa. Czasem po pojedyńczym kliknięciu zaczyna się gra, czasem musze kliknąć kilka razy. 2-5x

Rozumiem że masz program z pierwszego twojego postu? Pytam gdyż jest on poprawny. Co do trudności w dekodowaniu ramek z pilota, wiem że ta biblioteka działa prawidłowo, jesteś pewien że częstotliwości uP i te zdefiniowane w programie są poprawne? A czy w innym przypadku, kodzie dekodowanie jest poprawne? 

Link do komentarza
Share on other sites

Tak, właśnie podczas gry sterowanie działa ok, tylko teraz, przy początkowym ekranie jakoś dziwnie to zaskakuje. Raz za pierwszym razem, a czasem za 5.

void display_init( uint8_t usr_cnt ) {


	lcd_locate(0,0);
	lcd_str("****************");
	lcd_locate(1,0);
	lcd_str("*     SNAKE    *");
	lcd_locate(2,0);
	lcd_str("*  PRESS  KEY  *");
	lcd_locate(3,0);
	lcd_str("****************");
	while(1){
		IR_EVENT();
		if (1 == command )break;
		}
	lcd_cls();
	}

 

Link do komentarza
Share on other sites

Problem jest chyba inny, wpierw rejestrujesz obsługę callbacka tak jakby program był już w grze. Wiec w pierwszej kolejności ta funkcja zwrotna będzie skonsumowana. Ja bym to zrobił inaczej: wpierw callback ekranu powitalnego, a kiedy z tej funkcji wychodzisz, rejestrujesz tego "właściwego" na tym polega siła callbacków. 

Edytowano przez _LM_
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Zrobiłem tak, i jest to samo.


	// konfiguracja timera//
	TCCR0 |= (1 << WGM01); // tryb ctc
	TCCR0 |= (1<< CS00)|(1<<CS02); // prescaler 1024
	OCR0 = 78;
	TIMSK |= (1 << OCIE0);
	ir_init();
	lcd_init();
	USART_Init(__UBRR);
	sei();
	check_and_load_defaults();
	register_start_screen_callback(display_init);
	snake_init(1);
	register_end_screen_callback(ekran_koncowy);
	register_ir_event_callback(snake_ir_keys);

Nie mogę tak snake_init na samej górze, bo funkcje inicjalizujące snake'a wywołują callbacka na ekran początkowy

Link do komentarza
Share on other sites

(edytowany)

Nie rozumiem, jak IR_EVENT prowadzi do display_init. Ir event wywołuje zarejestrowana przeze mnie funkcje do obsługi klawiszy. 

Z tym udostępnieniem to tak średnio bo nie bardzo mogę wrzucić bibliotekę do obsługi IR. Resztę mogę. 

Edytowano przez Krawi92
Link do komentarza
Share on other sites

Bo za dużo na jeden raz. Poza tym brak bebugera z pewnością mocno utrudnia znalezienie problemu, za to wymusza pełne zrozumienie działania programu. Ciekawi mnie ten init węża. 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.