[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