PIC elado
Miko Imre
imre.miko at siemens.com
Tue Apr 29 10:41:42 CEST 2003
Szia Istvan!
Nem azt akarom vitatni, hogy az AVR nem jo, es a PIC-et sem vedeni akarom,
de probaljuk meg realisan osszehasonlitani. Egyebkent mint emlitetted sokan
ternek at PIC-rol AVR-re. En is szeretnem melyebben megismerni az AVR-eket,
tehat felirhatsz a sorba, de az nem azt jelenti, hogy nem tenyszeruen vizsgaljuk a
kulonbsegeket.
Istvan Retaller wrote:
> >Egy olyan feladatnal, ahol sok valtozod van, ott mar mindent nem tarolhatsz
> >a regiszterekben.
>
> En speciel lebegopontos szorzoaritmetikat irtam, csak regiszterekben.
> Raadasul a feladat miatt a szokasos 3 helyett 4 byte volt az alap
> es 1 byte a kitevo. Eleg volt az operandusok es az eredmeny tarolasara is,
> hogy csak regisztereket hasznaltam.
Meg lehet irni, sot igy is kell tenned. De a szamokat amit a lebegopontos
aritmetikaban ossze akarsz szorozni, nyilvan nem a regiszterekben
keletkezik, tehat muvelet elott be kell tolteni a muvelet vegen el kell
menteni a memoriaban. Es ez nem csak AVR-nel van igy.
> >a PIC-nel egy operandusos muvelet (egy valtozo novelese)
> >
> > incf valtozo,f
> >
> >AVR-nel ha jol sejtem ugyanez:
> >
> > lds rega, cim
> > inc rega
> > sts cim, rega
>
> Hm. Es ha az AVR-ben hozzatartozik a valtozo inicializalasa, majd mentese,
> akkor a PIC-ben miert nincsen inicializalva es mentve...?
Mint irtad, hogy te szimulatort is irtal PIC-re, akkor tudnod kell, hogy PIC-nel
az incf utasitasban a valtozo operandus kozvetlen egy fileregiszter operandus
azaz a memoriaoperandus. Ahhoz, hogy megnoveljuk nem kell az adatot a
regiszterbe mozgatni, majd megnoveles utan ujra tarolni a memoriaban.
Megtehetem persze ezt:
movf valtozo,w
addlw 1
movwf valtozo
De minek, ha eleg a fenti
incf valtozo,f
AVR-nel visszont egy memoriaban levo ertek megnovelese mindig megkoveteli
a regiszterbe toltest, majd mentest. Ezek utan miben santit szerinted a
peldam?
> >ket operandusos muvelet (ket valtozo osszeadasa, es tarolas egy harmadikban a= b + c)
> >
> >PIC:
> > movf b,w
> > addwf c,w
> > movwf a
> >
> >AVR:
> > lds rega, a
> > lds regb, b
> > add rega, regb
> > sts c, rega
> >
>
> Ugyanaz. A PIC-ben nem toltod fel a regisztereket, az AVR-ben igen.
Dehogyisnem toltom.
Az elso utasitas a "b" valtozom betoltese, az utolso pedig az eredmeny ("a") elmentese.
A ket utasitas sor eredmenye teljesen azonos. A memoriaban levo ket valtozo erteket
osszeadja, es tarolja egy harmadikban.
> >Nezzuk ugy, hogy a += b;
> >
> >PIC:
> > movf b,w
> > addwf a,f
> >
> >
> >AVR:
> > lds rega, a
> > lds regb, b
> > add rega, regb
> > sts a, rega
> >
>
> Ez is inkorrekt. PIC-ben feltetelezed, hogy a regiszterek mar
> inicializalva vannak, az avr-ben meg nem.
Nem feltetelezem. Mivel PIC-ben csak W van mint regiszter, ezert a ket pelda teljesen
egyenrangu, mint azt mar fent irtam a PIC-nel vannak memoria operandusu utasitasok,
ha ilyet hasznalok, akkor azt elotte nem kell regiszterbe tolteni. De ezt te is tudod,
csak mintha megfeledkeztel volna rola.
> >> Egy Moricka-pelda:
> >> Negy portot olvasok be es az a+b*c-d fuggvenyt kell kiszamitanom.
> >> Ez hany utasitas, mennyi ido PIC-ben?, Tetelezzuk fel,
> >> hogy 8 bites a szorzas eredmenye, mert ha 16 bites, a PIC meg jobban
> >> lemarad. AVR-re igy nez ki:
> >> in rega,PORT_A
> >> in regb,PORT_B
> >> in regc,PORT_C
> >> in regd,PORT_D
> >> mul regb,regc
> >> add rega,R0
> >> add regd,rega
> >
> >Ha mar hw szorzo, akkor en a 18-as szeriat emlitem:
> >PIC18xxx -en:
> >
> >movf PORTB,w
> >mulwf PORTC
> >movf PORTD,w
> >subwf PRODL,w
> >addf PORTA,w
> >
>
> Ez mar majdnem korrekt, csak nem a pelda szerinti dolgot csinalja.
Kivancsi vagyok, szerinted mi a kulonbseg. Varom, hogy reszletezd.
> Nezd, kifejezetten a te kedvedert irom le ujra, hogy nekem tokmindegy,
> ki milyen processzorral dolgozik. Nekem jo tizeneves PIC-es mult utan
> nehezemre esett valtani, de belekenyszerultem. Annal is nehezebb volt,
> mert az elso PIC szimulatort, amit a Humansoft forgalmazott, en irtam,
> igy erosen kotodtem a PIC-hez.
> Aztan talaltam jobbat es maradtam.
Ebben megegyezhetunk, mindenki olyan MCU-t hasznal, amilyet akar. Az osszehasonlitasom
nem is ezert tettem. Csak azert, hogy ravilagitsak, hogy az ilyen ex has kifejezesek, mint amit
VF tett, hogy az AVR-en akar 100-szor, 1000-szer gyorsabban fut ugyanaz a dolog,
anelkul, hogy tenylegesen megirta volna mindkettore az a programot, elegge elrugaszkodik
a valosagtol.
> Azert abban is lehet valami, hogy aki PIC-rol AVR-re valtott, olyan
> tobb is van a listan.
> De olyanrol nem hallani, hogy valaki az AVR utan PIC-ezni kezdett. Akik
> mindkettoben dolgoztak, ott egy iranyu az elvandorlas.
Nem vitatom, mint irtam engem is erdekel az AVR, ennek ellenere bizonyos feladatokra
biztosan hasznalom jelenleg meg a PIC-et. Kesz moduljaim vannak, es abbol osszerakni
egy programot gyorsabb, mint most az AVR-en 0-rol kezdeni.
> >Es vegul, hogy ne csak kisarkitott peldakat hozzunk, lassunk egy eleg
> >gyakori muveletet egy 16 bites binaris szam BCD-ve alakitasat:
> >Ez PIC-en igy nez ki (32 word a programmemoriaban, 6 fileregiszter,
> >es 406 orajel hosszu):
> >Varom az AVR-es implementaciojat, hogy egy ropke oszehasonlitast
> >tegyunk.
VFX vette a faradsagot es kikereste az App note-ok kozul, tehat az
osszehasonlitas vegeredmenye:
PIC AVR
prog. mem. 32 25
data mem. 6 -
reg 1 ;-) 9
clock 406 751-768
A dologhoz, meg anyit, hogy a PIC-nel a input es output is a
memoriaban van, AVR-nel a regiszterekben, ezert van itt ekkora
elteres.
> Ez a feladatkituzes nagyon kedves, bizonyara sokan nekiugranak, hogy
> a kedvedert megirjak, de en lustabb vagyok.
Ez van. Realis osszehasonlitast nem akarsz tenni, csak a levegobe beszelni.
> En legfeljebb egy 32*32 bites, mul utasitasok mellozesevel kialakitott
> szorzorutint tudok felajanlani, hogy ird meg PIC-ben es hasonlitsuk
> ossze. Szerintem lesz annyi kedved, mint nekem a bin-bcd irasahoz.
A megirasahoz nincs kedvem nekem sem, de vettem a faradsagot es kikerestem
az app note-ok kozul:
32x32 Bit Unsigned Fixed Point Multiply 32x32 -> 64
Max timing: 856 clks
Min timing: 209 clks
Prog mem: 168
Data mem: 17
Aki keri, maganban elkuldom neki.
> Egyebkent sajnalatos, hogy az osszehasonlitasbol a sebessegek, a
> programmmemoria, RAM, korlatlan stackmelyseg es legfokeppen
> az _ar_ mind-mind kimaradtak. ;))
En az architektura kulonbsegere probaltam felhivni a figyelmet. Ezt is mind
meg lehetne tenni, de csak azutan, miutan a hasrauteses szorzoszamokkal valo
dobalozason tul tud lepni az ember. Az AVR egy ujabb csalad, mint a PIC
elvarhato tole, hogy jobb legyen, tobbent nyujtson, csak ne elvakultan
lassuk, hogy mennyivel.
Udv.
Imre
More information about the Elektro
mailing list