Jak na to v C - dekodovani prikazu

Josef Stengl ok1ced@nagano.cz
Čtvrtek Září 25 00:10:02 CEST 2008


Tohle jsem psal tolikrát, ale dávno tomu jest, že už nevím jak :-)

No znaky v bufferu to je takové neurčité. Co to vlastně je za znaky  a co znamenají?
Jsou to znaky nebo to je řetězec?
pokud se jedná o jednotlivé náhodné znaky budeš si muse vystačit se switchem.

swich (znak)
{
	case 'a' : jedna();
		break;
	case 'b' : dva();
		break;
	....
}
a přidávat case

pokud jsou znaky v bufferu jako příkaz jak nehezky
if (strcmp("jedna", buffer) == 0)
{
	jedna();
}
else if strcmp("dva", buffer) == 0)
{
	dva();
}
a přidávat else if. Tedy ale je to ošklivé řešení.

Podle mě nejlépe, ale jen pokud buffer dokážete převádět na po sobě jdoucí čísla od nuly (například přijde příkaz COMMAND 0) tak můžete zkusit pole pointrů na funkce

int (*afpi[])() =
{
	&jedna,
	&dva
};

vytvoříte tím pole pointrů na funkce, které musí mít stejnou návratovou hodnotu a parametry funkce. Toto omezení předchozí možnosti nemají.
volá se to snad afpi[n]();

pokud se jedná o znakovou komunikaci, tak začít můžete od '0' a skončit '~ ' odečíst '0' a máte znaky na 78 příkazů (0-77).

viz:	
The declaration
         int (*apfi[3])(int *x, int *y);
declares an array apfi of three pointers to functions returning int. Each of these functions has two parameters that are pointers to int. The identifiers x and y are declared for descriptive purposes only and go out of scope at the end of the declaration of apfi.

Tedy doufám že jsem moc nekecal.
ced



Va_Sm wrote:
> Zdravim,
> jsem postaven pred nasledujici problem. Jak nejlepe naprogramovat v 
> C(pro MCU 51) rozpoznavani prikazu. Mam bufferu obsahujici prijate znaky 
> a ma otazka zni, jak nejlepe vyresit dekdoveni prikazu z toho bufferu. 
> Jde mi o snadne prirazovani dalsich rozpoznatelnych prikazu. Jak tedy 
> program napsat, aby byla snadna moznost rozsireni?
> dekuji
> Smidl
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list