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

Jak zoptymalizować kod na ATtiny48 używając makrodefinicji do LED?

motorolae365ok 06 Kwi 2012 10:53 972 4
  • #1 10762909
    motorolae365ok
    Poziom 20  
    Witam,
    zastanawiam się czy można ten kod zoptymalizować wykorzystując do tego makro.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    LEDx_PORT i LEDx_PIN to #define z przypisanymi portami i nr pinow.


    probowałem zrobić coś takiego:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    ale nie działa. Ktoś może coś zasugerować bo oszczędność kodu na attiny48 będzie dla mnie cenna.
  • #2 10762954
    gaskoin
    Poziom 38  
    Możesz spróbować stablicować porty i przesunięcia, jeśli masz RAMu trochę i napisać funkcję tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #3 10763022
    motorolae365ok
    Poziom 20  
    Niestety nie działa. Chyba nie do końca Cię zrozumiałem. Zrobiłem tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Z tym wskaznikiem przy portDiody się nie kompilowało.
  • #4 10763068
    gaskoin
    Poziom 38  
    Łaskawie byś przeczytał komunikaty kompilatora. Najlepiej napisać, że nie działa i nie zastanawiać się dlaczego.

    Tablica z portami nie ma być typu uint8_t tylko volatile uint8_t *. To ma być tablica wskaźników na te porty więc mają tam być ich adresy.

    A ustawienia nie mają być jako LED_PIN tylko 1 << LED_PIN. Przecież napisałem wyżej, że kompilator dla avr źle generuje kod dla zmiennych przesunięć a Ty na przekór i tak zrobiłeś ze zmiennym przesunięciem.
  • #5 10763813
    motorolae365ok
    Poziom 20  
    Ok dzięki teraz działa.
REKLAMA