přístup na byty v int C
Richard Kaliciak
hw.kaliciak na stonline.sk
Pátek Listopad 1 14:26:20 CET 2013
Ahoj Andy,
este sa vratim k tomu tvojmu prikladu:
void Delay(unsigned long int Cycles)
while(Cycles--)
;
nebude to tym, ze ta premenna Cycles je ulozena v zasobniku? Skus ju
definovat lokalne, napr.
void Delay(unsigned long int Cycles)
{ unsigned long int lCycles;
lCycles = Cycles;
while(lCycles--)
;
}
Riso.
Am 31.10.2013 11:28, schrieb Andrej Jancura:
> Dobry den,
>
> starsie verzie prekladaju i++ tak, ze tam je skutocne incfsz a cela
> konstrukcia ma 8 instrukcii a to na 35 rocnej architekture PIC16. Cize
> tak ako ste to odhadol, ten princip. Preco novsie verzie pouzivaju tu
> sialenu konstrukciu neviem, ale da sa vytusit, ze za tym mozu byt
> rozne dovody. Ono je aj tak celkom zaujimave filozofovanie, preco ten
> kompilator negeneruje najoptimalnejsi kod, a to aj v platenej verzii.
> Rozoberat to zbytocne nechcem, lebo problem pristupu k typu int cez
> byty sa tu rozoberal uz aspon tri krat a vzdy sme skoncili pri
> kompilatore C... A poznamkami preco je PIC16 na nic. Tym nechcem
> povedat, ze novsie cipy nie su dobre, ale mozu byt aj ine prakticke
> dovody, preco robit so zabehnutymi typmi.
>
> Tymto by som rad tuto diskusiu z mojej strany uzavrel.
>
> A.
>
>
> Dňa 31. októbra 2013 0:19, Radek Benedikt <benedikt na lphard.cz
> <mailto:benedikt na lphard.cz>> napísal(-a):
>
> > 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.
>
> Drobne upresneni naokraj:
> Ta jednotka je taky 32bitova, ono to neni zas tak nebezne,
> pricitat 0 +
> carry k casti promenne. Pravda, sice je obcas videt preskoc
> nasledujici
> instrukci(e), kdyz neni prenos a tou nasledujici instrukci je
> inkrement
> casti promenne. Opravuji se, dost (vetsina ?) procesoru
> nenastavuje pri
> inkrementu prenos a protoze se pricita jednicka k vicebitove promenne,
> tak je mozne testovat byte na nulu. Takze preskoc nasledujici
> instrukci(e) neni-li nula. A to celkem trikrat, takze to nebude kratsi
> nez priklad nahore. A tusim ze to nebude na PICu ani rychlejsi. To by
> musel mit podmineny skok, ne jen preskok.
>
> Radek (benedikt2hw.cz <http://benedikt2hw.cz>)
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
> Hw-list na list.hw.cz <mailto: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ší informace o konferenci Hw-list