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

Atmega16/C - Nazywanie kolejnych elementów tablicy...

djmdp 04 Wrz 2010 20:15 923 2
REKLAMA
  • #1 8475813
    djmdp
    Poziom 16  
    Witam, mam takie ciekawe zagadnienie, które może się okazać banalne, lub skomplikowane, sam nie wiem. Otóż mam taką sytuację, że są parametry umieszczone w tablicy w eepromie , natomiast później chce się do nich odnosić bez użycia indeksu tablicy, lecz wczesniej w jakiś sposób definiując każdy z elementów i tutaj właśnie brak wiedzy jak podefiniować nazwy czyli:

    
    EEMEM uint8_t table[10]
    
    #define NAZWA_PIERWSZEGO_ELEMENTU  table[0];  ?????????
    #define NAZWA_X_ELEMENTU  table[x];  ??????????
    
    wywołanie:
    x=eeprom_read_byte(&NAZWA_PIERWSZEGO_ELEMENTU);
    


    Próbowałem do tego podejść inaczej, lecz też nie przyniosło to rezultatu, otóż przyporządkowując każdemu elementowi tablicy wskaźnik, lecz przy sporej ilości elementów nie dość że będzie dużo ramu na wskaźniki to jeszcze nie da się przypisać elementów tablicy wskaźnikom iteracyjnie. Gdybym mógł zrobić tablice wskaźników ze zdefiniowanymi nazwami poszczególnych elementów... wtedy for() i przypisuje w pętli, ma ktos pomysł na ten problem?
  • REKLAMA
  • #2 8476075
    mirekk36
    Poziom 42  
    A zastanowiłeś się co jak będzie rozwinięta twoja definicja tak skonstruowana ? .... o tak:

    x=eeprom_read_byte( &table[0]; ); 


    a chyba nie o to ci chodziło prawda ? widzisz teraz gdzie robisz błąd ? ;)

    w definicjach nie używaj nigdy średnika na końcu

    #define NAZWA_PIERWSZEGO_ELEMENTU  table[0]


    a potem będzie dobrze:

    x=eeprom_read_byte( &table[0] );
  • #3 8476933
    djmdp
    Poziom 16  
    nie nie, źle się zrozumieliśmy, nie mogę się posługiwać elementami tablicy za pomocą indeksu, czyli
    x=eeprom_read_byte(&table[0]);
    ja wiem, że to jest poprawna forma zapisu i że to działa, ale potrzebuje tak jak wcześniej opisałem używać nazwy wcześniej przyporządkowanej, tylko nie wiem jak ją przyporządkować, ja tylko sugerowałem że to będzie #define, ale naprawdę nie wiem, przy próbach takiej definicji mam błąd. Za pomocą wskaźnika wygląda to następująco:
    uint8_t *nazwa_elementu;
    nazwa_elementu=&table[0];
    x=eeprom_read_byte(&nazwa_elementu);

    Przy takim podejściu już posługuję się nazwą, z tym że jako wskaźnik w ramie, średnio dobre rozwiązanie, potrzebuje czegoś deklarowanego na etapie tworzenia programu, a nie zasobów pamięci, coś jak w strukturach czyli
    
    typedef struct{
    uint8_t cos;
    uint8_t cokolwiek;
    } struktura;
    struktura elementy;
    elementy.cos=x;
    elementy.cokolwiek=y;
    

    mniej więcej o takie przypisanie mi chodzi tylko nie wiem czy jest to możliwe, a jak już to jak to zrobić, szukam i szukam i nic.

    BOŻE ALE WSTYD!! SZKODA BYŁO POSTA ZAKŁADAĆ, JASNE ŻE TO SPRAWA ŚREDNIKA PO DEFINICJI, DZIĘKUJĘ ZA PODPOWIEDŹ!!! ZAMYKAMY:)
REKLAMA