[elektro] C kérdés
hg12345
hg12345 at freemail.hu
Mon Jun 8 16:37:34 CEST 2015
Kipróbáltam a ciklus belsejét, kicsit lassabb (5%) mint az eredeti, (de már mindent regiszterből kezel.ha nem kell minden bitért külső memóriához fordulni, 10% gyorsulás... { if ((xi&0x7)==0 ) //new byte read
{ shift=0x80;
pixel=*p++;
}
LCD_HW_OUT_DATA (( pixel & shift) ? pcolor : bcolor );
shift>>=1;
}de még így is több utasításból áll mint lehetne. Info <info at kiralyelektronika.hu> írta:
> uint i = xsize * ysize;
> byte b = 0;
> while (i--) {
> if (!(b)) { b = 1; p++; }
> LCDOUT((*p & b) ? pcolor : bcolor);
> b <<= 1;
> }
>
> Ha a fordító látja, hogy xs vagy ys 8 többszöröse, ki kell
> raknia a ciklust 8-as blokkos utasításcsoportokra.
> Ha nem teszi rossz a fordítód.
>
>> void LCD_BmpC1(uint16_t x,
>> uint16_t y, uint16_t xsize, uint16_t ysize, uint16_t pcolor,
>> uint16_t bcolor, uint8_t *p ) //2 color BMP
>> {
>> unsigned int shift;
>> unsigned int xi,yi;
>> unsigned int color;
>> LCD_SetWindows(x,y,x+xsize-1,y+ysize-1); //blokk beállítása
>> LCD_HW_CS_CLR;
>> for(yi=0;yi<ysize;yi++)
>> { for(xi=0;xi<xsize;xi++)
>> { if ((xi&0x7)==0 ) //new byte read
>> { shift=*p++; }
>> shift<<=1;
>> color=bcolor;
>> if ((((unsigned char*)&shift)[1])&0x01)
>> color=pcolor;
>> LCD_HW_OUT_DATA(color);
>> }
>> }
>> // LCD_HW_CS_SET;
>> LCD_SetDisplayEnd();
>> }A legtömörebb kódot -O3 és -Otime adja, de amit produkál, amit
>> csinál annál jobbat nem nehéz csinálni. A fenti kódot nem lehet
>> megcsinálni DMA-val, kivéve ha olyan DMA van a rendszerben ami kezel
>> a shitet és mellé még lookup táblát is
>> használ.----------------------------------------------------------------------------------------------------------------------------------------------------Nem
>> akarom felülírni a C kódot, amit fordít az teljesen megfelelő
>> számomra.De néhány sor miatt elegendő lehetne egy fele sebességű
>> uC-rel is. Az esetemben egy járatosabb uC típus lenne.
>> Lajos Rancz <lajos.rancz at gmail.com> írta:
>>>Helló!
>>>
>>>Ebből nem sokat lehet érteni.
>>>
>>>Üdv
>>>
>>>
>>>
>>>2015. június 8. 12:34 hg12345 írta, <hg12345 at freemail.hu>:
>>>
>>>> Hi, van megoldás, hogy C forrás szinten ASM betét nélkül a C-t
>>>> használja.Egy kétszínű BMP/FONT képet éni maximális teljesítménnyel
>>>> megjeleníteni.Bizonyos sebesség felett már nem a kiküldés korlátozza a
>>>> megjelenítési sebességet, hanem a program.Maga a kép kishiftelő
>>>> algoritmusban van a nulla tesztelés visszavezetése miatt kb 30-40%
>>>> tartalék... jó lenne ezt kihasználni. ASM betétben nem gond, de
>>>> szimpatikusabb lenne hordozható kivitelben. Ismereteim szerint ez nem
>>>> lehetséges, de a remény hal meg utoljára...........
>>>> -----------------------------------------
>>>> elektro[-flame|-etc]
>>>-----------------------------------------
>>> elektro[-flame|-etc]
>> -----------------------------------------
>> elektro[-flame|-etc]
>
>-----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list