Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 13 gru 2024, o 05:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 24 maja 2019, o 20:53 
Offline
Użytkownik

Dołączył(a): 21 sty 2019
Posty: 34
Pomógł: 0

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


Zależy mi na zapisaniu tych zmiennych do pamięci EEPROM, ale nie mogę sobie z tym poradzić. Eclipse wyrzuca mi Syntaxa i nie mam pojęcia co jest tego przyczyną. Na internecie o samym zastosowaniu eeprom_write_byte / eeprom_read_byte dużo nie znalazłem. Wiem, że można tworzyć różne funkcje do zapisów, sterować pilotami i w ogóle, ale ja jeszcze nie jestem na tak zaawansowanym poziomie i chcę poznać tą podstawę zapisu i odczytu z eeprom. Będę wdzięczny za odpowiedz :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2019, o 20:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 368
Lokalizacja: Gliwice
Pomógł: 34

W dziesiątej linii zamiast robić wywołanie funkcji to robisz deklarację.
Usuń to "void" z 10 linii.
Oczywiście wywołanie funkcji musisz zrobić w funkcji main lub w jakiejś innej.
A tu robisz jak wspomniałem pomieszanie deklaracji funkcji z wywołaniem - totalny miszmasz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2019, o 21:08 
Offline
Użytkownik

Dołączył(a): 21 sty 2019
Posty: 34
Pomógł: 0

deklaracja funkcji to było by void eeprom_write_byte();
?

------------------------ [ Dodano po: 2 minutach ]

wróć

void eeprom_write_byte(uint8_t* ,uint8_t);

------------------------ [ Dodano po: 10 minutach ]

Po raz pierwszy nie wyrzuciło Syntaxa. Jak dla mnie duży sukces! Dziękuję :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2019, o 21:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 368
Lokalizacja: Gliwice
Pomógł: 34

Ponieważ zapisałeś void, a potem "pewną nazwę" i to poza jakimkolwiek ciałem innych funkcji to jest to prawdopodobnie interpretowane jako "jakaś deklaracja", nawet jeśli nie deklarowałeś parametrów funkcji.
Podsumowując zapis w 10 linii jest całkowicie błędny. Oczywiście możesz się upierać, że nie - Twój wybór :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2019, o 22:04 
Offline
Użytkownik

Dołączył(a): 13 paź 2015
Posty: 303
Lokalizacja: Rybnik
Pomógł: 10

ShanSong napisał(a):
chcę poznać tą podstawę zapisu i odczytu z eeprom.

Tu masz podstawy zapisu i odczytu:
http://mirekk36.blogspot.com/2012/11/avr-eeprom-struktury-poradnik-do-ksiazek.html?m=1



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2019, o 22:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Witam,
póki co, widać w kodzie inkluda, definicję trzech zmiennych i jakby deklarację funkcji nie zwracającej wartości, ale z dwoma parametrami funkcji.
pierwszym parametrem jest argument rzutowany na wskaznik uint8_t jako wskaznik wartości '1', kolejnym parametrem jest argument o wartości '2' w typie uint8_t.
to jakby coś pomiędzy (deklaracją/definicją/wywolaniem) funkcji.... coś mieszam?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 maja 2019, o 00:03 
Offline
Użytkownik

Dołączył(a): 22 kwi 2017
Posty: 99
Lokalizacja: Piła
Pomógł: 4

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


Zależy mi na zapisaniu tych zmiennych do pamięci EEPROM, ale nie mogę sobie z tym poradzić. Eclipse wyrzuca mi Syntaxa i nie mam pojęcia co jest tego przyczyną. Na internecie o samym zastosowaniu eeprom_write_byte / eeprom_read_byte dużo nie znalazłem. Wiem, że można tworzyć różne funkcje do zapisów, sterować pilotami i w ogóle, ale ja jeszcze nie jestem na tak zaawansowanym poziomie i chcę poznać tą podstawę zapisu i odczytu z eeprom. Będę wdzięczny za odpowiedz :)

Według mnie to brakuje Ci nawiasu przed ostatnim średnikiem w 10 linii, powinno być:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 maja 2019, o 08:50 
Offline
Użytkownik

Dołączył(a): 21 sty 2019
Posty: 34
Pomógł: 0

Racja, nie zauważyłem braku nawiasu

------------------------ [ Dodano po: 6 minutach ]

Przepraszam, że nagle zmienię temat, ale czy w Eclipse jest taka "mapa pamięci"? Nie znam prawidłowej nazwy więc nie mogę tego znaleźć :shock:
To bardzo pomaga wskazać czy na danych komórkach pamięci coś jest zapisane.
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 maja 2019, o 09:47 
Offline
Użytkownik

Dołączył(a): 22 kwi 2017
Posty: 99
Lokalizacja: Piła
Pomógł: 4

W eclipsie chyba czegoś takiego nie ma ale jest takie narzędzie(nie raz uratował mnie):
https://atnel.pl/i2c-scaner.html
ze stajni Atnel.
Tutaj masz poradnik do tego programu:
https://www.youtube.com/watch?v=T1g4jwub7-Y



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 maja 2019, o 09:48 
Offline
Użytkownik

Dołączył(a): 21 sty 2019
Posty: 34
Pomógł: 0

Dzięki!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 maja 2019, o 12:16 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

kazekat napisał(a):
W eclipsie chyba czegoś takiego nie ma ale jest takie narzędzie(nie raz uratował mnie):
https://atnel.pl/i2c-scaner.html

Sądząc po tym, że autor wątku dołącza plik nagłówkowy <avr//eeprom.h>, to prawdopodobnie chce zapisywać dane w wewnętrznej pamięci EEPROM mikrokontrolera, a nie w zewnętrznej. Jeśli tak, to narzędzie do skanowania magistrali I2C mu nie pomoże. Poza tym, nawet gdyby chodziło o zewnętrzną pamięć EEPROM, to niekoniecznie przecież musi ona być obsługiwana poprzez magistralę I2C, może być np. poprzez SPI, przecież autor wątku tego nie napisał.

@ShanSong
Uwagi kolegi Zealota są jak najbardziej zasadne. Ja chciałbym tylko jeszcze dodatkowo zaproponować, abyś uczył się od razu prawidłowego definiowania zmiennych w EEPROM.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jeśli zdefiniujesz zmienne z atrybutem EEMEM wtedy (w uproszczeniu):
  • Kompilator sam zarezerwuje odpowiednią dla danego typu zmiennej ilość bajtów i automatycznie przypisze im adresy, pod którymi będą zapisane. Ty nie będziesz musiał pamiętać i zastanawiać się, pod którym adresem jest odpowiednia zmienna, będziesz mógł się do zmiennych odwoływać za pomocą ich nazw (używając operatora &), tak jak to pokazałem w powyższym fragmencie kodu. Przy trzech zmiennych pamiętanie ich adresów to jeszcze może nie problem, ale jeśli umieścisz ich tam kilkanaście lub kilkadziesiąt, a może w dodatku jakieś tablice i struktury...
  • Jeśli przypiszesz tym zmiennym jakieś wartości początkowe, to podczas budowania programu zostanie utworzony plik z rozszerzeniem *.eep, którego będziesz mógł użyć podczas programowania mikrokontrolera, aby te wartości początkowe od razu do pamięci EEPROM wpisać. Oczywiście nadal będziesz mógł w trakcie działania programu te dane odczytywać i zapisywać tam nowe wartości.

Jeśli chodzi o podgląd zmiennych w poszczególnych typach pamięci (FLASH, EEPROM, RAM) oraz symulowanie pracy programu i obserwowanie, co się dzieje w poszczególnych rejestrach mikrokontrolera, to Atmel Studio 7 ma całkiem niezły symulator i debugger. Wprawdzie wymaga to nieco czasu, żeby opanować podstawy obsługi tych narzędzi, ale moim zdaniem warto, bo czasami (nie tylko) dla początkujących są bardzo pomocne. Wprawdzie mają swoje ograniczenia (szczególnie symulator nie zawsze jest w stanie zrobić wszystko to, co debugger sprzętowy), ale dla początkującego, przy prostych programach te ograniczenia nie powinny stanowić większego problemu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 maja 2019, o 22:21 
Offline
Użytkownik

Dołączył(a): 21 sty 2019
Posty: 34
Pomógł: 0

Dziękuję za szczegółowe wyjaśnienie andrews! Twój kod jest naprawdę czytelny. Jeszcze nie jestem do końca pewny jak plik *.eep będę używać do wpisywania wartości początkowych, ale popracuję nad tym. :D
Atmel Studio mam akurat na komputerze to też się pobawię.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO