TC65 prenos dat a filesystem
Ondřej Janovský
ondrej.janovsky@alarex.cz
Pondělí Srpen 11 22:02:05 CEST 2008
Dobry vecer,
zkusim par postrehu:
1. filesystem - nepouzivejte, pokud nemusit ... je velmi pomaly, hodi
se jen pro data, ktera nechcete ztratit po vypnuti. Pokud s nim delate,
udelejte si pomocne metody a ctete vzdy po vetsich blocich, ne byte po byte.
2. poskladat si data, nez je poslete pres OutputStream metoda
write(byte[] b) do CSD spojeni - dobry napad. Udelejte si buffer z
bytoveho pole, o nejake vetsi delce a ten pouzivejte na kompletaci dat.
Nealokujte zbytecne nove buffery s kazdou novou zpravou, vyuzijte jeden
stale existujici.
3. predpokladam ze pouzivate vice vlaken, takze si vlakno, ktere zrovna
nemusi vykonavat nejakou cinnost na chvilku uspavejte
Thread.sleep(50). Ostatni dostanou vice casu. Nebo si jej zastavte
pomoci synchronizaci - napriklad: nemusim cist seriovy port, kdyz zrovna
cpu data do GSM-CSD (seriak na TC65 ma interni buffer, takze se to da
zvladat i bez ztraty dat nebo pouzijte CTS/RTS) ...
Nastavovani priorit u vlaken neni legrace, u mne nevedlo k dobrym vysledkum.
4. GarbageCollector - zjednodusene - pousti se automaticky, pokud
dochazi volna pamet pro alokaci novych objektu/promennych, nebo kdyz je
cas ... uspane thready atp. Kdyz chcete, aby se volal co nejmene v
nevhodne chvile, pak si optimalizujte kod:
a) snazte se vytvaret objekty/promenne s dlouhou platnosti a znovu je
pouzit, nez neustale tvorit nove.
b) nedelte kod do spousty metod - jejich volani je prace se zasobnikem,
alokace lokalnich promennych, uvolnovani .... Musite si vybrat mezi
citelnosti a vykonnosti kodu.
c) pokud vite, co delate (zrovna jste uvolnil nejake objekty), pak si
zavolejte GC rucne. Vyplati se u objektu udelat objekt=null; coz GC pomuze.
Pri vyse popsanem se vam pres CSD podari poslat data vcelku, aniz by se
zadrhla.
Oja
nevrklap@volny.cz wrote:
> Diky za reakci,
>
> zkusim to napsat jeste jednou. Mam aplikaci v TC65 ktera ma pres GSM
> na vyzvani sypat data do programu na vzdalenem PC. Ta aplikace v PC
> je komercni produkt, nelze ji zmenit ani se podivat jak je napsana.
>
> Protokol prenosu je vcelku jednoduchy - hlavicka, data, ukonceni a checksum.
>
> Problem nastane kdyz jeden blok dat dojde do aplikace v PC rozdelen (v
> case) na vice casti. On ten PC program si tam "nejak" prida znak "konec
> bloku" ktery zapocte do checksumu. Ale ja netusim, ze data nedojdou
> vcelku a on si tam neco prida a tudiz mnou vygenerovany checksum mu
> nesedi...
> Asi to zni trochu divoce, ale dle pozorovani to tak zatim vypada.
>
> Zrejme to pujde vyresit tim, ze si data predpripravime v RAM a pak posleme
> (doted je jeste cteme z filesystemu), ale muze se stat, ze treba zasahne
> vyssi moc (garbage collector?) a data vcelku nedojdou...?
>
> P.
>
>
>
>
> To nezalezi na priorite, ale na pouzitem protokolu a dalsich mnoha faktorech.
> Pokud to mate v TCP, tak ocekavat, ze data budou chodit v takovych blocich,
> jak jste si je tam z PC nasazel, je programatorska chyba. Naopak je
> treba v aplikaci zaridit, ze data BUDOU chodit po castech. Neni na tom
> nic tezkeho, proste napriklad poslete hlavicku 2 byte delka, pak vlastni
> data, pak 2 byte CRC a na druhe strane prijmete hlavicku a prijimate
> data tak dlouho, az mate vsechny data + CRC.
>
>
> _______________________________________________
> 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