ATNEL tech-forum
https://forum.atnel.pl/

Zapis do eeprom.
https://forum.atnel.pl/topic16072.html
Strona 1 z 1

Autor:  henryxxl [ 26 sie 2016, o 20:53 ]
Tytuł:  Zapis do eeprom.

Witam.
Usiłuję zapisać zmienną do wewnętrznej pamięci eeprom atmegi32. Mój problem polega na tym że kompilator wskazuje cały czas na błąd w linijce
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Obrazek
Oto cały program:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  janusz17 [ 26 sie 2016, o 21:01 ]
Tytuł:  Re: Zapis do eeprom.

Zmienna w pamięci EEPROM musi być deklarowana jako zmienna globalna, a więc przed funkcją main().

Autor:  wojtekr51 [ 26 sie 2016, o 21:07 ]
Tytuł:  Re: Zapis do eeprom.

A ten "przydomek" EEMEM powinien być raczej za nazwą zmiennej, i do tego nie inicjalizuje się w ten sposób zmiennych w pamięci EEPROM.

edit:
Inicjalizację możesz zrobić przez funkcję eeprom_write_byte(). Odczytując bajt powinieneś jako argument funkcji eeprom_read_byte() podać adres tej zmiennej, a jej wartość zostanie zwrócona przez funkcję.

Tu masz coś co pewnie się przyda:
http://www.atmel.com/webdoc/AVRLibcReferenceManual/group__avr__eeprom.html

Autor:  QuadMan [ 26 sie 2016, o 21:11 ]
Tytuł:  Re: Zapis do eeprom.

Witam,

Przecież kompilator "napisał" Ci o co mu chodzi - chce argumentu typu uint8_t* w funkcji eeprom_write_byte(...)
popraw linie:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a... i to co Kolega janusz17 Ci napisał.

A tak "poza konkursem ;-)", linia
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

jest tez błędna - OCR0 to przecież rejestr 8 bitowy.

Pozdrawiam, QuadMan.

Dopisane:

wojtekr51 napisał(a):
A ten "przydomek" EEMEM powinien być raczej za nazwą zmiennej....


W tym wypadku kolejność specyfikatorów nie ma znaczenia.

wojtekr51 napisał(a):
....i do tego nie inicjalizuje się w ten sposób zmiennych w pamięci EEPROM.


Może eleganckie to nie jest, choć merytorycznie poprawne i działać będzie.

Dopisane2:

Kolego wojtekr51 źle zrozumiałem Twoją wypowiedź dotyczącą inicjalizacji zmiennych w pamięci EEPROM - myślałem, że chodzi Ci o stworzenie struktury z danymi dla EEPROMA, bo to że aby zmienna fizycznie znalazła się w pamięci EEPROM, trzeba wywołać funkcję eeprom_write_byte(...) to dla mnie oczywistość.

Pozdrawiam serdecznie QuadMan.

Autor:  henryxxl [ 26 sie 2016, o 21:20 ]
Tytuł:  Re: Zapis do eeprom.

Panowie nie spodziewałem się takiej szybkiej odpowiedzi. Jutro jak wrócę do domu biorę się za testowanie. Jeszcze wiele przedemną jeżeli chodzi o programowanie c avr ale idę cały czas do przodu;)
Pozdrawiam miłego wieczoru ;)

Autor:  mirekk36 [ 26 sie 2016, o 21:30 ]
Tytuł:  Re: Zapis do eeprom.

henryxxl napisał(a):
uint8_t EEMEM a=1 ;
czas_trwania_podkladania = eeprom_read_byte(a);

Nie baw się w takie bezsensowne podejście do EEPROM w procku bo to cię tylko na manowce sprowadzi i coraz większe kłopoty - tak się nie robi ... chcesz zobaczyć jak wygodnie się posługiwać EEPROMEM w procku

to koniecznie obejrzyj to:

http://mirekk36.blogspot.com/2012/11/av ... iazek.html

i rób to jak należy ;) mówię ci

Autor:  wojtekr51 [ 26 sie 2016, o 23:22 ]
Tytuł:  Re: Zapis do eeprom.

Z ciekawości sprawdziłem sobie jak to jest z tą inicjalizacją EEPROMA. Rzeczywiście da się zainicjalizować przy definiowaniu zmiennej. I stwierdziłem że obojętne jest z której strony będzie specyfikator.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
(Zawsze dawałem specyfikator z prawej strony i bezpośrednio do nazwy zmiennej chciałem dopisać wartość, co skutkowało błędem. Teraz wiem czemu myślałem że tak się nie da :oops: )

Kompilator tworzy plik z rozszerzeniem .eep w którym jest utworzony obraz pamięci EEPROM. Jeżeli chcemy to wgrywamy również go do mikrokontrolera.

A to jak powinno się właściwie jeść tę potrawę jaką jest eeprom, najlepiej tłumaczy pan Mirek. Tu na razie tylko sobie smakujemy. ;)

Autor:  henryxxl [ 27 sie 2016, o 11:19 ]
Tytuł:  Re: Zapis do eeprom.

Oglądam właśnie poradniki i mam problem z dzieleniem programu. Przed dzieleniem działał a po dzieleniu nie wykonują się działania z common.c
program liczy sekundy i wyświetla je na ekranie (zmienna czas);
Proszę o naprowadzenie w czym tkwi problem ;)
main
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

common.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

common.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  wojtekr51 [ 27 sie 2016, o 11:56 ]
Tytuł:  Re: Zapis do eeprom.

Popatrz na plik main.c linia 44 ;)

Autor:  henryxxl [ 27 sie 2016, o 14:38 ]
Tytuł:  Re: Zapis do eeprom.

kolego wojtekr51 aż mi wstyd;)
Teraz usiłuję zapisać do eeprom wartość zmiennej czas_trwania_podkladania i przy uruchomieniu odczytać tą wartość z epprom ale wyskakują mi błędy w main (linijka 41 i 106) i common.h (linijka 19). Nie wiem czego nie zrozumiałem w poradniku że coś źle robię.
main
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

common.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

common.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  wojtekr51 [ 27 sie 2016, o 16:23 ]
Tytuł:  Re: Zapis do eeprom.

W pliku common.h linia 19 nieprawidłowo zdefiniowałeś makro. Jego nazwa jest identyczna jak element wyżej zdefiniowanego typu strukturalnego TCFG. I podpowiem że dobrą praktyką jest pisanie nazw makrodefinicji wielkimi literami.

Autor:  henryxxl [ 27 sie 2016, o 16:44 ]
Tytuł:  Re: Zapis do eeprom.

Po usunięciu 19 linijki wyskoczył mi błąd w 14 linijce main błąd: "'czas_dzialania' undeclared here (not in a function)".
Pozdrawiam ;0

Autor:  wojtekr51 [ 27 sie 2016, o 20:11 ]
Tytuł:  Re: Zapis do eeprom.

No oczywiście że wyskoczył. :roll: :D Makrodefinicja którą usunąłeś definiowała, jaka liczba ma być podstawiona w miejsce nazwy "czas_dzialania", gdzie właśnie teraz wyskoczył błąd. Wpisz w to miejsce bezpośrednio liczbę, lub gdy takich miejsc jest więcej, przywróć definicję makro którą usunąłeś, tylko zmień jej nazwę.

Polecam koledze poćwiczyć język C od podstaw. ;)

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/