Atmel AVR programozas

VF vf at elte.hu
Sat Dec 28 15:06:29 CET 2002


Thus spake VFX:

> Hali!

Hi!

> Ezzel nem ertek egyet. Ha nem szurja be a nullat, akkor nem
> warningolhat! hanem kapasbol error-t kell mondjon. Hiszen ekkor a
> programod futaskeptelen lesz. A 0 beszurasaval es egyideju Warning!
> uzenettel a program futaskepes marad es felhivja a figyelmet a
> hianyossargra.

Az igaz hogy futaskeptelen lesz, de lehet hogy en pont azt akarom.
Mert pl azt a kodreszletet at kell majd masolni valahova ahol futni
fog, vagy meg kell keresni a memoriaban, stb... Lehet hogy az AVR
eseten ezek nagyon mondvacsinalt peldak, de ha megis ilyenre lenne
szuksegem, a fordito alkalmatlan lenne a feladatra, megkotne a kezem,
feleslegesen. Termeszetesen egy warning indokolt.
 Egy sokkal fontosabb problema, hogy adatot sem lehet paratlan cimre
helyezni a Studio assemblereben. Pl van ket .db sor, ket sztring.
Normalis fordito egymas utan el tudja helyezni a sztringeket, es lehet
hogy a masodik paratlan cimen lesz, ami nem kene hogy problemat
okozzon. A Studio assemblere beszur egy 0-t, feleslegesen novelve a
kod meretet. Olyan strukturakat pedig, melyet Istvan mutatott egyik
elozo leveleben, csak nagyon bonyolult modon lehetne csinalni: ugy
at kene helyezgetni az adatokat, hogy minden sorban paros szamu adat
legyen. Ezzel az erovel akar forditas utan kezzel be lehet irni a
konstansokat a .hex fajlba... Pont arra lenne jo a fordito, hogy az
ilyen problemakat megoldja, nem arra hogy ujakat csinaljon.
 Termeszetesen trukkozessel, az adatstrukturak masfajta felepitesevel,
vagy programbol lekezelve a beszurt felesleges bajtokat megoldhato a
problema, de oda az elegancia, es esetleg a kod is teljesen feleslegesen,
a fordito benasaga miatt nagyobb meretu lehet, ami miatt esetleg nem
is fer bele a flash-be!

Az elegans megoldas a kovetkezo lett volna: a kompatibilitas erdekeben
meg kellene tartani a low() es high() fuggvenyeket, melyek a szokasos
modon word cimmel szamolnak. Kell viszont csinalni ket uj fuggvenyt,
melyek a byte cimet adjak vissza. Valamint teljesen meg kell szuntetni
a 0 byte beszurasat, esetleg ez egy szukseg eseten bekapcsolhato opcio
lehetne. Warningot pedig csak akkor kene adni, ha utasitas esne paratlan
cimre. Ebben az esetben a koder szukseg eseten beszurhat egy even vagy
cnop 0,2 direktivat, ugy, ahogy minden normalis assemblerben.
 Az m68k eseten pont ugyanez a helyzet: csak paros cimrol tud utasitast
vegrehajtani. Sot, az MC68020 elotti procik word/long adatot is csak paros
cimen tudnak elerni. Ennek ellenere nincs elbenazva egyik fordito sem...

> amugy ez konnyen kikuszobolheto, ha jo a struktura egy
> 
> adiw ZL,1
> andi ZL,254 
> 
> utasitas parossal. Ha Z paratlan akkor adiw utan paros lesz, az and

Ez ketsegtelen, azonban a fordito benasaga miatt 4 bajttal hosszabb lett
a program, es minden paratlan hosszu sor utan egy bajttal az adatterulet.
Meretes tablazat eseten akar tobb 100 byte is mehet a levesbe, es mindez
a kocsog fordito miatt!

> UDV. VFX.
> http://www.vfx.hu

-- 
Valenta Ferenc <vf at elte.hu>   Visit me at http://ludens.elte.hu/~vf/
"Lassan irom ezt a levelet, mert tudom, hogy nem tudsz gyorsan olvasni."





More information about the Elektro mailing list