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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 11 kwi 2025, o 11:55


    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