[elektro] C kérdés
Info
info at kiralyelektronika.hu
Mon Jun 8 18:50:49 CEST 2015
Nyilván, hisz' nem ezt írtam.
A compare with zero és a compare with value más.
És nem is tudom minek oda az a 7.
> 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]
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list