Witam,
staram się wyświetlić na konsoli terminalowej dane jakie odbiera uC z modułu GPS zgodnego z NMEA0183.
Zmiany jakie przeprowadziłem w pliku uart.c:
- dopisałem funkcję char *getstring(int item) zwracającą bufor danych UART do programu głównego
- zmodyfikowałem obsługę przerwania SIGNAL(SIG_UART_RECV) dopisując następujący kawałek kodu na koniec funkcji:
I jeszcze poniżej main:
A oto jaką bzdurę zwraca terminal:
Program powinien rozróżniać, czy linia nie została już wyświetlona ponieważ przed każdym wyświetleniem danych z bufora, są one porównywane z danymi, które wyświetlono w poprzednim cyklu.
Kolejnym problemem jest, iż program się restartuje bez przyczyny - widać to na zrzucie ekranu.
Wszelkie sugestie i uwagi mile widziane.
Pozdrawiam,
staram się wyświetlić na konsoli terminalowej dane jakie odbiera uC z modułu GPS zgodnego z NMEA0183.
Zmiany jakie przeprowadziłem w pliku uart.c:
- dopisałem funkcję char *getstring(int item) zwracającą bufor danych UART do programu głównego
char *getstring(int item)
{
while(semafor);
if(item==0) return znak2;
else return znak3;
}
- zmodyfikowałem obsługę przerwania SIGNAL(SIG_UART_RECV) dopisując następujący kawałek kodu na koniec funkcji:
unsigned char tmptail;
if(UART_RxHead!=UART_RxTail)
{
tmptail = (UART_RxTail + 1) & UART_RX_BUFFER_MASK;
UART_RxTail = tmptail;
data = UART_RxBuf[tmptail];
if(UDR=='$') {index=0;} //if znak $ w UDR
znak[index]=data;
if(znak[index]==0x0A) //if znak LF
{
znak[index]='\0';
int i;
semafor=1;
for(i=0;i<=index;i++) znak2[i]=znak[i];
semafor=0;
}
index++;
}
I jeszcze poniżej main:
#define F_CPU 16000000
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <string.h>
#include "uart.h"
#define UART_BAUD_RATE 9600
int main(void)
{
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
sei();
uart_puts_P("\n\r---------------Program started---------------\n\r");
char a[83]="dummy",b[83]="dummy2";
for(;;)
{
strcpy(a,getstring(0));
if(strcmp(b,a)!=0)
{
uart_puts(a);
uart_putc('\r');
uart_putc('\n');
strcpy(b,a);
}
}
}
A oto jaką bzdurę zwraca terminal:
Program powinien rozróżniać, czy linia nie została już wyświetlona ponieważ przed każdym wyświetleniem danych z bufora, są one porównywane z danymi, które wyświetlono w poprzednim cyklu.
Kolejnym problemem jest, iż program się restartuje bez przyczyny - widać to na zrzucie ekranu.
Wszelkie sugestie i uwagi mile widziane.
Pozdrawiam,