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][ATMEGA] - Zapis tablicy stringów do pamięci EEPROM

adambehnke 31 Sty 2014 21:35 3153 15
REKLAMA
  • #1 13245853
    adambehnke
    Poziom 24  
    Posty: 882
    Pomógł: 23
    Ocena: 40
    Witam

    Mam pytanie odnośnie metody zapisu stringów(char) do pamięci eeprom. Najlepiej abym mógł zapisywać i odczytywać całe zestawy danych.
    Robię dość skomplikowany budzik i chciałbym zapisywać do eeprom ustawienia.
    Skleciłem po wielkich potach coś takiego:

    SETTINGS.h

    typedef struct
    {
    	uint8_t GODZINA;
    	uint8_t MINUTA;
    	uint8_t POWTORKI;
    	uint8_t GLOSNOSC;
    	uint8_t WLACZNIK;
    	char MUZYCZKA[10];
    }ustawienia_budzienia;
    
    
    
    extern ustawienia_budzienia ustawienia;
    
    
    ustawienia_budzienia BUDZIK_PON;
    ustawienia_budzienia BUDZIK_WTO;
    ustawienia_budzienia BUDZIK_SRO;
    ustawienia_budzienia BUDZIK_CZW;
    ustawienia_budzienia BUDZIK_PIA;
    ustawienia_budzienia BUDZIK_SOB;
    ustawienia_budzienia BUDZIK_NIE;
    ustawienia_budzienia BUDZIK_SP1;
    ustawienia_budzienia BUDZIK_SP2;
    
    
    void Odczyt_ustawien_budzikow(void);
    void Zapis_ustawien_budzikow(void);




    	   ustawienia_budzienia ustawienia;
    	   ustawienia_budzienia ustawieniaEEPROM EEMEM;




    void Odczyt_ustawien_budzikow(void){
    
    	eeprom_read_block(&ustawienia,&ustawieniaEEPROM,sizeof(ustawienia_budzienia));
    
    }
    
    void Zapis_ustawien_budzikow(void){
    
    	eeprom_write_block(&ustawienia,&ustawieniaEEPROM,sizeof(ustawienia_budzienia));
    
    }




    Ale niestety to nie działa. To znaczy mogę zmieniać wartości zmiennych ale nie działa albo zapis do eeprom albo odczyt. Bo po odczycie mam same zera zamiast danych które były teoretycznie zapisywane.
    Proszę o wskazanie błędów jakie robię bo nie mam już siły albo jestem zbyt "tępy" aby to załapać.

    Moderowany przez dondu:

    SYNTAX - Wklejając kod programu używaj proszę znacznika SYNTAX. Składnia jest wtedy kolorowana i łatwo kod analizować, a dodatkowo posty są krótkie.

  • REKLAMA
  • REKLAMA
  • Pomocny post
    #3 13246827
    el2010tmp
    Poziom 25  
    Posty: 713
    Pomógł: 97
    Ocena: 43
    Spróbuj tak:
    odczyt
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    zapis
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #4 13247178
    pbuhne
    Poziom 15  
    Posty: 51
    Pomógł: 17
    A w jaki sposób sprawdzasz odczytane dane z eeprom? Miej na uwadze fusebit EESAVE. Bo domyślnie ten fusebit jest wyzerowany ( mam tu na myśli ATMEGA8), więc za każdym razem gdy wgrywasz program do mikrokontrolera pamięć EEPROM jest kasowana.

    Sprawdziłem Twój kod w symulatorze no i działa.
  • #5 13247231
    adambehnke
    Poziom 24  
    Posty: 882
    Pomógł: 23
    Ocena: 40
    Tu nie chodzi o kasowanie eeprom podczas programowania. I dobrze że jest ustawione kasowanie eeprom podczas programowanie bo przynajmniej nie pozostają tu żadne smieci i widzę czy coś zapisało czy nie. Nie następuje programowy zapis lub odczyt eepromu.

    Moim zdaniem problem leży tu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Albo niewłaściwie zabrałem się za struktury.

    Dodano po 55 [sekundy]:

    pbuhne napisał:
    Sprawdziłem Twój kod w symulatorze no i działa.
    A w jakim symulatorze było to sprawdzane? Przyznam że ubolewam nad brakiem symulatora w eclipse....
  • REKLAMA
  • Pomocny post
    #6 13247254
    pbuhne
    Poziom 15  
    Posty: 51
    Pomógł: 17
    Symulator w Atmel Studio 6.0. Twoje funkcje u mnie działają poprawnie, tzn dane z jednej są kopiowane do drugiej. To kopiowanie jest "bezmyślne" w sensie że, kopiuje obszar pamieci bajt po bajcie, bez znaczenia jest typ zmiennej. Może problem tkwi w dobieraniu się do pól struktury?
  • #10 13247367
    pbuhne
    Poziom 15  
    Posty: 51
    Pomógł: 17
    Zawsze możesz zainstalować sobie Atmel Studio - jest darmowe i używać jedynie symulatora.
  • #11 13247409
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    pbuhne napisał:
    Zawsze możesz zainstalować sobie Atmel Studio - jest darmowe i używać jedynie symulatora.

    Jeżeli będzie chciał utrudniać sobie życie, to jest to dobry sposób.
  • REKLAMA
  • #13 13247428
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    Ręczne tworzenie makefile, to epoka WinAVR i Programmers Notepad ... zamierzchłe czasy :)

    Stosowanie Eclipse miało uzasadnienie w powyższej epoce. Można było także znaleźć uzasadnienie do jego stosowania w epoce AVR Studio, który miał symulator, ale nie miał bajerów edytorskich Eclipse - wtedy był wybór - coś za coś.

    Aktualnie gdy Eclipse i Atmel Studio są porównywalne w zakresie edytora i jego bajerów, stosowanie środowiska nie zawierającego symulatora, czyli Eclipse jest trudne do uzasadnienia.

    Oczywiście przyzwyczajenia są ważne i czasami są argumentem nie do podważenia.
    Jednak zawsze należy zważyć za i przeciw, ale w długim okresie, a nie krótkim.
  • Pomocny post
    #16 13248167
    ryba884
    Poziom 19  
    Posty: 273
    Pomógł: 33
    Ocena: 49
    Pliki źródłowe możesz śmiało skompilować pod Atmel Studio/AVR Studio. Tylko musisz stworzyć nowy projekt i dodać pliki ze źródełkami do niego. Działa bezproblemowo.

Podsumowanie tematu

✨ W dyskusji poruszono temat zapisu i odczytu tablicy stringów do pamięci EEPROM w kontekście mikrokontrolerów ATmega. Użytkownik zaprezentował strukturę danych dla ustawień budzika, a następnie zadał pytanie dotyczące implementacji funkcji do zapisu i odczytu tych ustawień. Odpowiedzi sugerowały użycie funkcji `eeprom_read_block` i `eeprom_write_block`, a także zwrócono uwagę na znaczenie fusebitu EESAVE, który może wpływać na zachowanie pamięci EEPROM podczas programowania. Użytkownicy wymienili doświadczenia z symulatorami, wskazując na Atmel Studio jako bardziej odpowiednie środowisko do testowania kodu w porównaniu do Eclipse. Podkreślono również, że pliki źródłowe można skompilować w Atmel Studio, ale projekty stworzone w Eclipse są niekompatybilne.
Wygenerowane przez model językowy.
REKLAMA