[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