Witam
Zrobiłem sobie taki interpretator poleceń, że jak po USART przyjdzie komenda (string zakończony odpowiednimi znakami) to zmienna read_line jest ustawiana na 1 , a następnie funkcja strncmp(...) porównuje odebrany string (bufor) z wpisaną na stałe komendą, jeśli wynik, któregoś z porównań będzie prawidłowy, to wykona sie żadany kod i program skoczy do etykiety poczatek, żeby nie tracić niepotrzebnie czasu na dalsze sprawdzanie. Moje pytanie jest takie czy znacie jakieś inne bardziej optymalne sposoby na taki interpreter? U mnie problemem jest to ,że jak będzie do sprawdzenia kilkadziesiąt lub więcej komend i zostanie odebrana akurat ta komenda która znajduje sie na końcu to program i tak będzie musiał sprawdzić wszystkie porównaia powyżej.
Zrobiłem sobie taki interpretator poleceń, że jak po USART przyjdzie komenda (string zakończony odpowiednimi znakami) to zmienna read_line jest ustawiana na 1 , a następnie funkcja strncmp(...) porównuje odebrany string (bufor) z wpisaną na stałe komendą, jeśli wynik, któregoś z porównań będzie prawidłowy, to wykona sie żadany kod i program skoczy do etykiety poczatek, żeby nie tracić niepotrzebnie czasu na dalsze sprawdzanie. Moje pytanie jest takie czy znacie jakieś inne bardziej optymalne sposoby na taki interpreter? U mnie problemem jest to ,że jak będzie do sprawdzenia kilkadziesiąt lub więcej komend i zostanie odebrana akurat ta komenda która znajduje sie na końcu to program i tak będzie musiał sprawdzić wszystkie porównaia powyżej.
while(1)
{
poczatek:
if(read_line)
{
read_line=0;
wynik=strncmp(bufor,"komenda1",8);
if(wynik==0)
{
//wykonuje jakies operacje
goto pocztek;
}
wynik=strncmp(bufor,"komenda2",8);
if(wynik==0)
{
//wykonuje jakies operacje
goto pocztek;
}
wynik=strncmp(bufor,"komenda3",8);
if(wynik==0)
{
//wykonuje jakies operacje
goto pocztek;
}
}
}