ATNEL tech-forum https://forum.atnel.pl/ |
|
Zapis do eeprom. https://forum.atnel.pl/topic16072.html |
Strona 1 z 1 |
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: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. i 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 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. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. 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 język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
common.h język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
common.c |
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 język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
common.c język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
common.h |
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ł. 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/ |