Cytat:
Używam BrayTerminal v1.9b. Zaznaczanie CR+LF nic nie daje.
Nie miałeś zaznaczać opcji "CR+LF", tylko "+CR" pomiędzy polem tekstowym do wpisywania znaków do wysłania a przyciskiem "-> Send". Za to opcja "CR=CR+LF" nie ma być zaznaczona. Przy takim ustawieniu mój kod powinien działać. Jeśli nie będzie, zrób screenshot'a okna terminala i pokaż, jak go skonfigurowałeś. Podaj też dokładny kod, jaki kompilujesz.
EDIT:
@krru:
Twój kod też powinien działać. Zapomniałeś tylko o tym, że trzeba wyzerować w odpowiednim miejscu zmienną 'blen'. Jest nawet nieco prostszy od mojego, przy czym ja pisałem mój kod z myślą o późniejszej modyfikacji fragmentu:
if(znak==0x0D)
{
// akcję wykonujemy tylko, gdy przesłany został jeden znak
if(strlen(bufor)==1)
{
// "OK" wysyłamy, jeśli odebrany, jedyny znak to '1'
if(bufor[0]=='1') printf("OK\n");
}
// zerowanie bufora
for(i=0;i<MAX_LENGTH;i++)
bufor[i]=0x00;
i = 0;
} /* if(znak==0x0D) */
na coś takiego:
.........
if(znak==0x0D)
{
// przekształcenie ciągu znaków na numer komendy
int command = atoi(bufor);
switch(command)
{
case 1:
printf("OK\n");
break;
case 2:
// zrób coś innego
break;
case 3:
// zrób jeszcze coś innego
break;
case 15:
// to już komenda dwucyfrowa
break;
default:
printf("unknown command");
}
// zerowanie bufora
for(i=0;i<MAX_LENGTH;i++)
bufor[i]=0x00;
i = 0;
} /* if(znak==0x0D) */
// itd.
W ten sposób można obsłużyć praktycznie dowolną liczbę komend, pod warunkiem, że przesyłane ciągi znaków będą zawierały tylko cyfry (żeby nie wdawać się w szczegóły działania funkcji atoi()) + znak końca transmisji (0x0D) i nie będzie ich więcej niż 4 (właściwie to nawet 5, ale to już ma swoje ograniczenia związane z pojemnością zmiennej typu
int).
Ja z kolei zapomniałem o zabezpieczeniu przed przesyłaniem zbyt długich ciągów znaków. W miejscu:
else /* if(znak!=0x0D) */
bufor[i++] = znak;
powinno być:
else if(i<MAX_LENGTH-1) /* if((znak!=0x0D) && (i<MAX_LENGTH-1)) */
bufor[i++] = znak;
żeby nie przekroczyć rozmiaru tablicy.
Nie zmienia to faktu, że podczas przesyłania mniejszej ilości znaków kod powinien działać prawidłowo.