Re: Re: přístup na byty v int C

Andrej Jancura aj.hwlist na gmail.com
Středa Říjen 30 11:58:52 CET 2013


No ja mam takyto kus kodu pre pic16xxx:

void Delay(unsigned long int Cycles)
   while(Cycles--)
    ;

asm:
                   movlw    1
                   movwf    Delay
                   clrf    Delay+1
                   clrf    Delay+2
                   clrf    Delay+3
                   subwf    Delay na Cycles,f
                   movf    Delay+1,w
                   skipc
                   incfsz    Delay+1,w
                   subwf    Delay na Cycles+1,f
                   movf    Delay+2,w
                   skipc
                   incfsz    Delay+2,w
                   subwf    Delay na Cycles+2,f
                   movf    Delay+3,w
                   skipc
                   incfsz    Delay+3,w
                   subwf    Delay na Cycles+3,f
                   incf    Delay na Cycles& (0+127),w
                   skipnz
                   incf    (Delay na Cycles+1)& (0+127),w
                   skipnz
                   incf    (Delay na Cycles+2)& (0+127),w
                   skipnz
                   incf    (Delay na Cycles+3)& (0+127),w
                   btfsc    3,2
                   return
                   goto

V 1.12 je podla mna ten kod este dlhsi. Pre increment je ta rutina podobna.

A.



Dňa 30. októbra 2013 11:29, Jaromir Sukuba <jarin.hw na gmail.com> napísal(-a):

> Presvedcil som sa: XC1.12
>
> unsigned long i;
> ...
> i++;
>
> 0xFFEA: MOVLW 0x1
> 0xFFEC: ADDWF i, F, ACCESS
> 0xFFEE: MOVLW 0x0
> 0xFFF0: ADDWFC 0x8, F, ACCESS
> 0xFFF2: MOVLW 0x0
> 0xFFF4: ADDWFC 0x9, F, ACCESS
> 0xFFF6: MOVLW 0x0
> 0xFFF8: ADDWFC 0xA, F, ACCESS
>
> Cize celkom pochopitelny kus "assembleru". Nulovanie W po kazdej
> inkrementacii je predpokladam dan za free verziu kompilatora - pouziva
> sa vseobecne pripocitanie 32-bitovej konstanty k premennej, bez ohladu
> na to, ze jedno z nich je skratka jednotka.
> Andy, ako to robis, ze uplne bezne veci u teba skratka nefunguju?
> Rozmyslam, ze by som ta zamestnal ako beta-testera.
>
>
>
>
> Dňa 30. októbra 2013 11:12, Andrej Jancura <aj.hwlist na gmail.com>
> napísal/a:
> > Ahoj,
> >
> > nemusis sa hned citit dotknuty vsetkym co napisem. Pozri ja som to
> pochopil
> > tak, ze aj ked uniony nie su podla normy a cez pointre mi nikdy takato
> > konverzia nechodila, lebo kompilator vrestal, myslim si, ze mozes pisat
> kod
> > tak, aby si bol podla normy a sucasne vygenerujes optimalny kod v asm.
> Taky
> > ako by si ho napisal v pure asm.
> >
> > Tie konstrukcie si ale musis najst sam a pozriet ako sa co preklada. A v
> > pripade PicC a XC8 je kazda C konstrukcia generovana inym kodom. Mozes
> sa o
> > tom presvedcit napr. ked si das unsigned long int i, a v programe mas
> i++...
> > Neviem sice ako posledna xc1.21, ale nejaka 1.12 to generovala takou
> > rutinou, kde som prvy krat v zivote skonstatoval, ze neviem pochopit co
> ten
> > kus asembleru robi. Predchadzajuca verzia kompilatora totiz pouzivala
> > klasicky incfsz...
> >
> > Zial uz som dlho nic s tymto nerobil, pretoze som bol znechuteny tym, ze
> aj
> > ked som vygeneroval z C kod ako keby bol z asembleru v app. note, aj tak
> mi
> > to poriadne nechodilo na hw. Avsak medzicasom som prisiel na par trikov,
> ale
> > to sa zda, ze je cisto hw zalezitost a treba pouzit iny algoritmus
> obsluhy
> > hw.
> >
> > A.
> >
> >
> > Dňa 30. októbra 2013 9:57, Jan Waclawek <konfera na efton.sk> napísal(-a):
> >
> >> Lenze type punning nie je podla normy; resp. z normy priamo vyplyva, ze
> >> obe
> >> metody maju normou nedefinovany vysledok.
> >>
> >> Ako som bol pisal, ak mas pocit, ze nieco treba mat urcite napisane
> >> nejakym
> >> sposobom, netreba zbytocne vahat a treba ist do asm. To zase u tych
> ARMov
> >> nie je uplne trivialne, ale u 8-bitov sa to priamo nuka. Uznavam, ze nie
> >> kazdy kompilator ma taku uzasnu podporu pre inline asm ako gcc a
> uznavam,
> >> ze u gcc to zase pada na hubu kvoli mizernej dokumentacii...
> >>
> >> wek
> >>
> >>
> >>
> >> ----- Original Message ---------------
> >> >Ahoj,
> >> >
> >> >to si mozes dovolit na tvojej F4... Ale na cipe s 8K-16K instrukcii je
> >> >kazdy trik dobry. Ono aj ked to pises podla normy, tak sa to da napisat
> >> >rozne, tak aby si mal minimalny vygenerovany kod.
> >> >
> >> >
> >> >2013/10/29 Jan Waclawek <konfera na efton.sk>
> >> >
> >> >> Ak "sa to napise" tak, ako norma predpisuje, tak na optimalizaciach
> >> >> nezalezi.
> >> >>
> >> >> A o to tu ide.
> >> >>
> >> >> wek
> >> >>
> >> >>
> >> >> ----- Original Message ---------------
> >> >> >No ja bych rekl, ze vic zalezi na zapnutych optimalizacich, nez jak
> se
> >> >> >to napise...
> >> >>
> >>
> >> _______________________________________________
> >> HW-list mailing list  -  sponsored by www.HW.cz
> >> Hw-list na list.hw.cz
> >> http://list.hw.cz/mailman/listinfo/hw-list
> >
> >
> >
> > _______________________________________________
> > HW-list mailing list  -  sponsored by www.HW.cz
> > Hw-list na list.hw.cz
> > http://list.hw.cz/mailman/listinfo/hw-list
> >
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20131030/1e07d07d/attachment.htm>


Další informace o konferenci Hw-list