[elektro] C kérdés

hg12345 hg12345 at freemail.hu
Mon Jun 8 14:29:54 CEST 2015


Hi, azt hitem érthető amit írtam... Röviden közvetlenül a C nem kezeli az átvitel "C" a status regiszterben.Ezért ha kiszeretnél shiftelni egy változót (regisztert) akkor azt a ZERO flagre vezeti vissza, ez nem jár sok plusz munkával csak feleslegesen shiftel (ez manapság nem gond, mert mindegy, hogy mennyi a shift egy lépésben megteszi) de utána van egy maszkolás és egy feltételes elágazás. A maszkoláshoz egy másik regiszter is igénybe kell venni. Ez se probléma, de pont ebben az esetben a két színkódból csak ez egyiket tudja regiszterben tartani!Ez minimum 2 vagy 3 utasítással több mint kéne. Egy nagyobb méretű kijelző esetén másodpercenként több millió utasítás....Maga a részlet összesen két lépésből áll asm-ben, egy shiftelés és "C" szerinti ugrás......  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]


More information about the Elektro mailing list