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

[WinAVR] tablica struktur jak zdefiniować?

pawelvod 22 Mar 2011 19:31 1434 5
  • #1 9309612
    pawelvod
    Poziom 18  
    Mam deklarację struktury w nagłówku:
    typedef struct{
    			uint8_t pin;
    			uint8_t licznik;
    			uint8_t faza;
    		} przycisk;

    Jak zdefiniować wewnątrz funkcji tablicę z 4 elementami wartościami? Tzn:?
    SIGNAL (SIG_OVERFLOW0){
    	static przycisk tablicaPrzyciskow[4] /* = {jak tutaj nadać wartości domyślne zmiennej pin i faza}*/;
    }

    Oczywiście można napisać
    tablicaPrzyciskow[0].pin = 3;
    ale wtedy przy każdym wejściu w przerwanie będzie wykonywane przypisanie. Jednocześnie gdy deklaruję tablicę w nagłówku i próbuję zdefiniować jej wartości w samym nagłówku wyskakuje błąd kompilacji.
  • Pomocny post
    #2 9309767
    skynet_2
    Poziom 26  
    np.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Powinieneś nadać wartości wszystkim zmiennym w strukturze, inaczej kompilator może wywalić ostrzeżenia.
  • #3 9310570
    hotdog
    Poziom 26  
    inicjalizuj zmienne, tak jak napisał Tobie skynet. Ponieważ jest to zmienna statyczna, inicjalizacja nastąpi tylko raz w startupie (kod wykonywany przed main).

    Wygląda to bardzo podobnie, jak by to była zmienna globalna, tylko że sam kompilator ogranicza jej widoczność.
  • Pomocny post
    #4 9310960
    michalko12
    Specjalista - Mikrokontrolery
    skynet_2 napisał:
    np.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Powinieneś nadać wartości wszystkim zmiennym w strukturze, inaczej kompilator może wywalić ostrzeżenia.


    Jest jedna wada tego rozwiązania, zmieni się definicja struktury dojdą nowe elementy lub co gorsza zostaną poprzestawiane i wtedy nie trudno o błąd.
    Można to zrobić tez na inny sposób np.:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 9316847
    pawelvod
    Poziom 18  
    W moim przypadku to:
    volatile	przycisk tablica_przyciskow[4] = 	{
    													{.pin = KEY_UP},
    													{.pin = KEY_DOWN},
    													{.pin = KEY_OK},
    													{.pin = KEY_CANCEL}		
    												};
    

    dzięki za pomoc.
REKLAMA