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

[C][Arduino] - Struktura do eeprom nie mogę tego załapać z przykładów

cepelia 27 Kwi 2014 10:14 3246 7
REKLAMA
  • #1 13546583
    cepelia
    Poziom 20  
    Posty: 341
    Pomógł: 40
    Ocena: 9
    Witam bardzo serdecznie, potrzebuję przerobić program który kiedyś działał na zwykłym EEPROM.write()...

    Niestety język C to troszkę mój kryptonit i za cholerę nie mogę się połapać w przykładach i dokumentacji jaką udało mi się do tej pory przeczytać...

    Otóż definiuję taką strukturę
    Kod: text
    Zaloguj się, aby zobaczyć kod

    w której pierwsza połowa to tag rfid, a druga to aktualna godzina w formacie unixtime ...

    Spotkałem się jeszcze z innym sposobem deklarowania struktury, mianowicie coś takiego
    Kod: text
    Zaloguj się, aby zobaczyć kod

    czy to tylko kwestia zapisu czy ma to jakieś inne znaczenie ???

    Teraz następna część problemu, czyli przypisanie zmiennych do struktury...
    próbowałem tak...

    Kod: text
    Zaloguj się, aby zobaczyć kod

    ale w żadnym tutku nie znalazłem niczego podobnego, choć moim zdaniem powinno to zadziałać jeśli nie to dlaczego ??

    no i dalej amba...

    jak zapisać taką strukturę do eeprom ??
  • REKLAMA
  • REKLAMA
  • #3 13547160
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    W C nie możesz podstawić wektora jedną instrukcją (strukturę możesz), kompilator zgłosi to jako ostrzeżenie.
  • #4 13548906
    cepelia
    Poziom 20  
    Posty: 341
    Pomógł: 40
    Ocena: 9
    No dobra zapisuję...

    ale nadal zawsze od początku...

    Kod: text
    Zaloguj się, aby zobaczyć kod


    jeśli dobrze rozumiem to struktura działa podobnie jak klasa... tak ??

    przypisanie zmiennych...

    Kod: text
    Zaloguj się, aby zobaczyć kod

    cała struktura ma 14 bajtów...

    zapis...

    Kod: text
    Zaloguj się, aby zobaczyć kod


    ale jak zrobić (ewentualnie który składnik inkrementować) żeby zapisywało się do następnego 14 bajtowego kawałka ??

    w EEPROM.write miałem zrobiony licznik w ostatnim bajcie i tam po każdym zapisie go zwiększałem a po transmisji do programu w kompie go kasowałem... teraz zachciało mi się bardziej elegancko zrobić...
  • REKLAMA
  • #5 13549722
    robiw
    Poziom 26  
    Posty: 2032
    Pomógł: 25
    Ocena: 133
    Zadeklarowałeś już typ:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    To teraz deklarujesz zmienną w RAMie i tablicę n-elementową w EEPROM:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I zapisujesz do EEPROMA dowolny element (np. 2.):

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    robiw
  • REKLAMA
  • #6 13550586
    cepelia
    Poziom 20  
    Posty: 341
    Pomógł: 40
    Ocena: 9
    Czemu zmienna do eepromu jest [10] skoro cała struktura ma [14] ??
  • #7 13550631
    Eagle
    Poziom 24  
    Posty: 536
    Pomógł: 57
    Ocena: 31
    cepelia napisał:
    Czemu zmienna do eepromu jest [10] skoro cała struktura ma [14] ??


    Chodzi ci o
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dziesięć struktur typu Tag_time_read z których każda ma rozmiar 14, razem powinno zająć około 140, pomijając wyrównanie.
  • #8 13611867
    cepelia
    Poziom 20  
    Posty: 341
    Pomógł: 40
    Ocena: 9
    Przepraszam że truję ale potrzebuję jeszcze pomocy...

    o ile mam ogarnięte zapisywania do eepromu w kontrolerze, to jeśli chodzi o zapisywanie do zewnętrznej pamięci jest słabo... mam coś takiego

    struktura... i zmienne

    Kod: text
    Zaloguj się, aby zobaczyć kod


    (notabene nie wiem jak wyczyścić Zmienna w ramie i cały czas mam te same dane nawet jak wyczyszczę eeprom to przy zapisie struktury wszystko wraca)

    mam też takie metody..

    Kod: text
    Zaloguj się, aby zobaczyć kod


    próbuję zapisać to w ten sposób...
    Kod: text
    Zaloguj się, aby zobaczyć kod


    odczytuję tak...
    Kod: text
    Zaloguj się, aby zobaczyć kod


    i teoretycznie powinienem dostać po kolei bajt po bajcie całą strukturę tak jak dostaje przy użyciu tego zapisu do eeprom'a e uc...

    Kod: text
    Zaloguj się, aby zobaczyć kod


    tu dostaje coś takiego...
    0 54
    1 54
    2 48
    3 48
    4 54
    5 66
    6 70
    7 56
    8 57
    9 51
    10 0
    11 234
    12 86
    13 120
    14 83
    15 54

    i tak ma być...

    a z zewnętrznego eeprom'a coś takiego...
    159 28
    160 255
    161 255
    162 255
    163 255
    164 28
    165 255
    166 255
    167 255
    168 255
    169 28
    170 255
    171 255
    172 255
    173 255
    174 28
    175 255
    176 255
    177 255
    178 255
    179 28
    180 255
    181 255
    182 255
    183 255
    184 28

    albo same 255...

    proszę pomóżcie mi bo już nie mam do tego siły... co robię źle albo czego źle używam...

Podsumowanie tematu

✨ Użytkownik ma problem z implementacją struktury w języku C do zapisu danych w EEPROM. Zdefiniował strukturę `Tag_time_read`, która zawiera tag RFID oraz czas w formacie unixtime. Wskazówki dotyczące przypisywania wartości do struktury oraz zapisu do EEPROM obejmują użycie funkcji `eeprom_write_block` oraz deklarację zmiennych w pamięci RAM i tablicy w EEPROM. Użytkownik pyta o sposób inkrementacji adresu zapisu w EEPROM oraz o metody zapisu do zewnętrznej pamięci, a także o czyszczenie zmiennych w RAMie. Odpowiedzi sugerują, że struktura działa podobnie do klasy, a także wyjaśniają, jak zorganizować pamięć EEPROM dla wielu struktur.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA