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 3030 15
REKLAMA
  • #1 13245853
    adambehnke
    Poziom 24  
    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  
    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  
    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  
    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....
  • Pomocny post
    #6 13247254
    pbuhne
    Poziom 15  
    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?
  • REKLAMA
  • #10 13247367
    pbuhne
    Poziom 15  
    Zawsze możesz zainstalować sobie Atmel Studio - jest darmowe i używać jedynie symulatora.
  • REKLAMA
  • #13 13247428
    dondu
    Moderator na urlopie...
    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  
    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.
REKLAMA