logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Optymalizacja kodu AVR-GCC

gothye 25 Cze 2009 17:34 2359 4
REKLAMA
  • #1 6702433
    gothye
    Poziom 33  
    Witam

    staram sie zoptymalizować program w C aby jak najmniejszy był i chce przepisać stan PINU do zmiennej (w tym przypadku tablica )

    wygląda to tak :

    	if(bit_is_clear(PINB, PB0))
    	{
    		in[0] = 0 ;	
    	}else{
    		in[0] = 1 ;
    	}
    
    	if(bit_is_clear(PINB, PB1))
    	{
    		in[1] = 0 ;	
    	}else{
    		in[1] = 1 ;
    	}
    	
    	if(bit_is_clear(PINB, PB2))
    	{
    		in[2] = 0 ;	
    	}else{
    		in[2] = 1 ;
    	}


    w bascom mogłem to łatwo w pętli for wykonać ,ale niewiem jak sie w C za to zabrać aby w pętli sprawdzić wszystkie piny na porcie B i przepisać ich stan do tablicy :(
  • REKLAMA
  • REKLAMA
  • #3 6702466
    gothye
    Poziom 33  
    dzieki :!: działa świetnie :)
    a jak wyglądałby kod który by przepisywał z tablicy na bit portu działającego jako wyjście ?
  • REKLAMA
  • Pomocny post
    #4 6702664
    Brutus_gsm
    Poziom 25  
    for(i=0;i<sizeof(tablica[]);i++)
    {
    if(tablica[i])
       PORTD|= 1<<i;
    else
       PORTD&=~(1<<i);
    }


    Spróbuj tego. Napisałem na szybko jeśli się gdzieś pomyliłem, to przepraszam. Ale powinno działać.
  • #5 6704057
    BoskiDialer
    Poziom 34  
    uint8_t i, pbcache, mask;
    for(i=0,pbcache=0,mask=1; i<8; i++,mask<<=1)
      if(out[i])
        pbcache |= mask;
    PORTB = pbcache;

    Jeśli zagwarantuje się, że zmienna "mask" ma 8 bitów, to można warunek "i<8" zamienić na samo "mask", zależnie co zostanie lepiej zoptymalizowane.
REKLAMA