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



Teraz jest 14 lis 2024, o 03:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 68 ]  Przejdź na stronę Poprzednia strona  1, 2, 3  Następna strona
Autor Wiadomość
PostNapisane: 27 wrz 2012, o 00:17 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

Dokładnie jak mówi kolega wyżej - a nie chodzi tu o to żeby na siłę ciebie przekonywać do zmiany końcepcji ;) bo zrobisz jak zechcesz - ale żeby ci pokazać - podpowiedzieć jak można inaczej .... a przy okazji nie zakatować eeproma ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2012, o 10:48 
Offline
Użytkownik

Dołączył(a): 23 sty 2012
Posty: 27
Pomógł: 0

GwynBleidD napisał(a):
sirk, ależ można na strukturach, bardzo prosto :) Tworzysz tablicę struktur w EEPROM + jedną strukturę w RAM, co pomiar przepisujesz strukturę z ram do następnej strukrury w EEPROMie.


dzięki i to jest to :!: ,



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2012, o 18:15 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Mirku mam jeszcze jedno pytanie odnoście tego kawałka kodu:

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


Rozumiem, że teraz flash_params znajduje się w pamięci flash, ale co by było gdybyśmy usunęli parametr PROGMEM ? Wtedy struktura będzie przechowywana w RAM?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2012, o 21:05 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

No a jak myślisz - dlaczego jeśli zmienna ma być w eeprom to dodaje się np EEMEM ???

to jest podstawa podstaw w AVR GCC

Kod:
int a; // zmienna w RAM
int b PROGMEM; // zmienna we FLASH
int c EEMEM; // zmienna w EEPROM


nie ma innej możliwości - jak skasujesz powyżej specyfikatory POGMEM i EEMEM to wszystkie zmienne zostaną utworzone w RAM. To trzeba znać w dzień i w nocy ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 11:21 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

Więc gdybyś zrobił kolejny eksperyment i napisał to samo w asemblerze - to okazałoby się że jeszcze mniej miejsca zajmie cały program, zakładając że dobrze piszesz w asemblerze. Tylko czego to dowodzi? Co to jest 125 bajtów ? Liczy się wygoda, pewność i co ważne przejrzystość programowania i kodu. Dzięki temu idzie szybciej. W asemblerze też można - i to wszystko zrobić - tylko po co? Dlatego jeszcze raz podpowiadam, kolejną rzeczą, którą trzeba zrozumieć programując w C, że tu nie chodzi o to aby największą wagę odgrywało czy program zajmie o 125 bajtów więcej czy mniej - bo to kosmiczne nieporozumienie. Biorąc pod uwagę dyrektywy dla kompilatora, które np wykluczają z kodu jeszcze wszystkie nie używane funkcje ze stosowanych bibliotek, bardzo dobrą optymalizację w trybie -Os to takie rozważania na pewno mijają się z celem.

Wystarczy spojrzeć np na kod transmisji I2S w mojej drugiej książce, opisuję po kolei jak mało istotne jest np to, że w wyniku takiego rozwiązania jakie stosuję - zmarnowane zostanie o wiele więcej pamięci Flash ale za to szybkość wzrośnie nieporównywalnie więcej. Różnica wyszła jeszcze więcej niż 125 bajtów ;) i co z tego. Kolejny przykład - funkcje typu INLINE .... toż one zdecydowanie wpływają na zwiększenie zajętości pamięci programu i co z tego?

Takich oszczędności o każdy bajt we flash to można było hmmm i nawet TRZEBA było szukać jak się pisało programy w Bascomie ;) .... sam to bardzo ale to bardzo dobrze pamiętam (piszę z autopsji a nie jakieś tam pomówienia) .... dlatego tak szybko zacząłem szprycować Bascoma asemblerem żeby można było z niego jeszcze więcej wycisnąć.

Reasumując trzeba się przyzwyczaić że podczas programowania w C nie ma co się martwić tym czy program zajmie 100,200,300 czy 400 bajtów więcej czy mniej ;) Każdy kto dłużej programuje w C w końcu to zrozumie. A jeśli zaraz ktoś podałby mi tu przykład że w ATtiny i to np ATtiny10 400 bajtów to już prawie połowa jego pamięci to mam inną odpowiedź ..... dla takiego procesora to się pisze programy w asemblerze i koniec i kropka ;) W C też można ale coś delikatnego.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 19:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lut 2012
Posty: 123
Lokalizacja: Reda
Pomógł: 0

W ramach tego tematu... od początku śledzę ten temat, bo sam miałem z tym problem. Mój problem rozwiązałem (wydaje mi się) w bardzo prosty sposób:

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


Czy wszystko działa poprawnie ? mimo deklarowania na początku np. EEMEM int a=99;



Ostatnio edytowano 28 wrz 2012, o 20:46 przez Hass-pol, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 19:34 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

Jeszcze raz WYRAŹNIE podkreślę, coś takiego w C:

Kod:
eeprom_write_word(0x100, a);


to po prostu istna maskara amerykańską piłą tarczową (jak ktoś na tym forum się wyraził ;) ) .... w biały dzień

sorki ale w tym wątku nawet już tyle razy pisałem o tym aby NIGDY nie dokonywać odwołań do bezpośrednich adresów w EEPROM ale jak groszkiem o ścianę :( .... jak widzę

no trudno - sorki ale po raz kolejny nie będę już tłumaczył - zabrakło mi sił - proszę więc dalej sobie tak działać - toż to zapis RODEM z Bascoma i bez żadnego przemyślenia niestety :( no przykro mi.

------------------------ [ Dodano po: 1 minucie ]

chodzi oczywiście o to 0x100, jakby ktoś się jeszcze nie domyślił :(

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 19:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lut 2012
Posty: 123
Lokalizacja: Reda
Pomógł: 0

Spokojnie, robiłem tylko testy, oczywiście że wolałbym żeby kompilator sam znalazł odpowiednie miejsce.

Nie wiem dlaczego takie coś mi nie działa...

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: 28 wrz 2012, o 20:13 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

Kompilator nie jest po to żeby się zajmował znajdowaniem miejsca :( ..... To ty jako programista musisz się tym zająć.

Teraz już nieco lepszy przykład - tylko napisz co to znaczy że ci nie działa ??? opisz to jakoś ? napisz co miałeś na celu, a jaki efekt osiągasz i co ciebie nie satysfakcjonuje ? (tyle razy piszę żeby dokładniej opisywać swoje kłopoty) ... często dokładny opis pomaga w ogóle zrozumieć swój błąd ... a nie - "dlaczego TO nie działa" .... co nie działa ??? dla mnie tu wszystko działa .... Jak zrobiłeś tak masz. Zrozum, że nie każdy odczyta intencje programisty tym bardziej jeśli programista popełnia błędy w swoim kodzie - dlatego potrzeba dokładniejszego opisu.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 20:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lut 2012
Posty: 123
Lokalizacja: Reda
Pomógł: 0

W poprzednim przykładzie program co sekundę podwyższa wartość o 1 i zapisuje ją w pamięci. Po restarcie, najpierw ładuje wartość z pamięci a następnie kolejno podnosi o 1.

Natomiast w ostatnim przykładzie wszystko się kompiluje, nie ma błędów. Jednak nie wpisuje wartości do pamięci, a może wpisuje, ale nie odczytuje ? nie wiem, po restarcie zaczyna od 0.

Skoro w poprzednim przykładzie wszystko działało popranie, to nie sądzę żebym miał źle ustawione fusy. Problem pewnie w programie. Jednak próbowałem różnych kombinacji - bez sukcesu.

W nocie katalogowej oryginalna funcja zapisu i odczytu też wymaga podania adresu...
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Nie testowałem tego jeszcze, ale w tych funkcjach też musiałbym podać adres.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 21:10 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Hass-pol Masz włączonego BOD? Bez tego na prawdę ciężko utrzymać dane w EEPROM. Sporo myszkowałem w internecie i dużo ludzi poleca układ ds1813 do resetu uC. Np atmega 8 ma tylko dwa bodlevele : 2,7V i 4V natomiast ds1813 potrafi zresetować uC przy spadku 5,10,15,20% od napięcia znamionowego(5V) Czy ktoś z forumowiczów testował ten układ ? W sieci jest wiele pozytywnych opinii zwłaszcza jeśli korzystamy z wewnętrznego EEPROM.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 21:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8585
Pomógł: 337

Normalny econo-RESET cz ęsto ich używam przy układach zasilanych z baterii lub pakietów
Jest ECO-Resetów kilka różnych zawsze można coś dobrać zależnie od potrzeb

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 21:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lut 2012
Posty: 123
Lokalizacja: Reda
Pomógł: 0

Mam włączony BOD na 4V0. Nie sądzę żebym miał problem z zasilaniem, w poprzedniej wersji programu z bezpośrednim adresowaniem 0x100 wszystko działało.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 21:50 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

Hass-pol napisał(a):
Natomiast w ostatnim przykładzie wszystko się kompiluje, nie ma błędów. Jednak nie wpisuje wartości do pamięci, a może wpisuje, ale nie odczytuje ? nie wiem, po restarcie zaczyna od 0. .


taaak to dziwne że mi taki kod działa i po każdym restarcie zlicza od kolejnej wartości

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


żeby nie było niejasności - nie mam nawet włączonego żadnego BOD'a ani żadnych tam kontrolerów RESETu .... taki program MUSI działać. Nie będę robił i wklejał tu filmiku z działania bo to bez sensu przy tak prozaicznym przykładzie.

a jak by mi coś takiego nie działało - to bym szukał aż do bólu dlaczego nie działa - aż dotąd - dokąd bym znalazł rozwiązanie zamiast cofać się do epoki kamienia łupanego że tak powiem czyli do pisania obsługi eeproma prawie w czystym asemblerze :(

tylko tyle na to powiem

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 22:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lut 2012
Posty: 123
Lokalizacja: Reda
Pomógł: 0

Postaram się wyjść z jaskini... i znajdę błąd. U mnie nie działa ten kod. Co prawda jeśli w ten sposób zapiszę uint16_t x EEMEM = 10; to zmienna "a" jest wyświetlana 10, więc odczyt z pamięci EEPROM i wpisanie wartości do "a" działa, problem z wpisaniem nowej wartości już w programie, tak myślę.

Jutro dalej będę dłubał... dziś już skończyła się jasność umysłu a włączyła pomroczność jasna :) Dziękuje Mirek za sprawdzenie, wierze że działa bo tak właśnie powinno to wyglądać, ale u mnie jak zwykle nie działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 wrz 2012, o 22:59 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

Hass-pol napisał(a):
Jutro dalej będę dłubał... dziś już skończyła się jasność umysłu a włączyła pomroczność jasna :) Dziękuje Mirek za sprawdzenie, wierze że działa bo tak właśnie powinno to wyglądać, ale u mnie jak zwykle nie działa.


No dokładnie to podłub i napisz - bo nie ma co wracać do asemblera ;)

poza tym jak już minie ci pomroczność jasna to zrób taki prosty program - bo mi się zdaje że ty to wplatasz w jakieś monstrum w którym coś jeszcze innego się dzieje ....

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 wrz 2012, o 08:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 lut 2012
Posty: 123
Lokalizacja: Reda
Pomógł: 0

Jednak świeży umysł czyni cuda. Pomroczność jasna minęła i przyszło oświecenie.
Siedzę nad (jak na mnie) dużym projektem i czasami zapominam że pewne zmienne są tam od zawsze i jakoś je pomijam/zapominam.
Zapomniałem że mam już zmienne x i y - do współrzędnych panelu dotykowego... także wystarczyło zmienić
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

i poszło za pierwszym razem... ale głupota...
Dziękuję za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 wrz 2012, o 10:39 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

To się zdarza, i ja to bardzo dobrze rozumiem, bo ileż razy i mnie zdarzy się zrobić taki błąd .... dokładnie taki ....

ale warto z tego wyciągać jeden wniosek i nie zapominać o nim .....

Gdy coś nie wychodzi tak jak powinno być to:

1. nie szukać przyczyn błędów w sprzęcie lub kompilatorze
2. nie szukać coraz prostszych a jednocześnie gorszych rozwiązań (bo coś tam działa)
3. DO UPADŁEGO szukać błędu we własnych poczynaniach

ja tu nie chcę mówić że ty szukałeś błędów w sprzęcie (pkt.1) nie o to mi chodzi - chciałem tylko po raz kolejny na forum w takim przypadku przypomnieć ważne CREDO jakie każdemu powinno przyświecać.


Ale też rozumiem że czasem jak człowiek jest zmęczony to różne myśli przychodzą ;) tu też masz rację.....

Za to zawsze nowy dzień i wypoczęta mózgownica pomaga nam usunąć "pomroczność jasną" i o to chodzi ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2012, o 10:35 

Pomógł: 0

Może by tego posta topic1591.html#p15892 jakoś przykleić, albo umieścić na twoim Blogu Mirku?. Brakuje troszkę takiego łopatologicznego opisu obsługi struktur, flash-ram-eeprom-ram. Czyli właśnie jakiejś konfiguracji zapisywanej w eepromie, domyślnej w flash, przywracania jej potem do eeproma itd.

Struktury i eeprom to praktycznie jedyne słuszne podejście, a na początku bardzo ciężko to zrozumieć, szczególnie, że odwołujemy się do zmiennych za pomocą & operatora wyłuskania adresu, oraz samo odwoływanie się do tablic w strukturach jest troszkę zagmatwane, przynajmniej na początku.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2012, o 10:55 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

eeeh nie wyrabiam się normalnie - ale i to jest tematem przyszłego poradnika video jaki ma się ukazać. Na razie jednak cały czas trwają przygotowania do kręcenia tych poradników .... ale będą, będą jako uzupełnienia ćwiczeń do książek.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2013, o 10:10 
Offline
Nowy

Dołączył(a): 28 sty 2013
Posty: 1
Pomógł: 0

mirekk36 napisał(a):
[...] a jak chcesz zapisywać to:

Kod:
eeprom_write_block( &eem_zmienne, &ram_zmienne, sizeof( T_EE ) );



Witam,

Jestem tu nowy, aczkolwiek już kilkukrotnie skorzystałem z wiedzy wyczytanej na tym zacnym forum, za co niniejszym dziękuję.

Mam pytanie o powyższy zapis, wydaje mi się, że zawiera błąd. Zgodnie z dokumentacją avr-libc Reference Manual 1.4.7

6.13.3.4 void eeprom_write_block (const void  pointer_ram, void  pointer_eeprom, size_t n)
Write a block of n bytes to EEPROM address pointer_eeprom from pointer_ram.

pozdrawiam,
Grzegorz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lut 2013, o 11:26 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27308
Lokalizacja: Szczecin
Pomógł: 1041

Ale ja zwykle jak na szybko odpowiadam to prawie ZAWSZE się mylę z kolejnością argumentów do tych funkcji ;) i zawsze też zalecam zajrzenie do właśnie PDF'a o którym wspominasz ;) .... to jest podstawa.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2013, o 12:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 sie 2013
Posty: 199
Pomógł: 1

Pyt 1. Jak i czy można samemu wybrać pod który adres chce sie umiescic swoją strukture ??


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

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



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



i zeby powyzsze odczytać to musze to robić po koleji , czyli w takiej kolejnosci jak było zapisywane ??
czy mogę odczytywać na "życzenie" np detektor ?? ktory jak widzimy byl zapisany jako drugi

Pyt 3.

Jak chce zapisać dane do eepromu to wystarczy uzyć
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czy muszę np w eclipsie właczyć opcje w ustawieniach projektu albo użyć avrdude ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2013, o 16:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 sie 2013
Posty: 199
Pomógł: 1

z tego co zrozumialem to nie da sie odczytać dowolnej struktury funckcją epprom_readblock ?
a co z tym zapisem do eppromu musze zapisać dwa razy , tnz. czy zapis eeprom_write... jest równoważny z zapisem np programem avrdude ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 maja 2016, o 17:02 
Offline
Nowy

Dołączył(a): 24 lis 2015
Posty: 20
Pomógł: 0

Rozumiem, że dostęp przez strukturę jest wygodny i polecany, jeśli w EEPROMie zamierzamy trzymać jedynie jakieś ustawienia konfiguracyjne itp. - np. 100 czy 200 bajtów.

Ale co w sytuacji, gdy mamy na przykład ATMEGĘ 1284P z 4 kB EEPROMU i chcemy wykorzystać je w całości? Mam zmarnować 4 kB SRAM-u i 4 kB Flasha na powielanie struktur w taki sposób? Użytkownik zmieni 1 parametr z kikuset, a ja już mam wysyłać do EEPROMu całe 4 kB? Przecież to trwa.

Albo lepiej - zewnętrzny EEPROM 128 kB. Dla mnie świetna sprawa, żeby zapisywać historię zdarzeń itp. Jak to wtedy obsłużyć?

Czy zatem zapis bezpośredni zawsze jest złem? A może sugerujecie podzielić w takiej sytuacji przestrzeń EEPROMu na przykład na wiele struktur po 1 kB? Nie krytykuję, pytam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2017, o 00:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Pozwolicie,że się podepnę z pamięcią FLASH :)

Mam zadeklarowane trzy struktury w d_led.h. Każda z tych struktur steruje parametrami innej diody RGB,
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Następnie mam zadeklarowane trzy struktury w w pliku memory.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Kompilator zwraca mi ostrzeżenia do pierwszych linijek (0,0,0,125,255,255,//defoult_set_color,) we wszystkich trzech strukturach w postaci:
Kod:
make all
'Building file: ../MEMORY/memory.c'
'Invoking: AVR Compiler'
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=16000000UL -MMD -MP -MF"MEMORY/memory.d" -MT"MEMORY/memory.o" -c -o "MEMORY/memory.o" "../MEMORY/memory.c"
../MEMORY/memory.c:32:3: warning: missing braces around initializer [-Wmissing-braces]
   0,0,0,125,255,255,//defoult_set_color,
   ^
../MEMORY/memory.c:32:3: warning: (near initialization for 'chimney_pgm.color') [-Wmissing-braces]
../MEMORY/memory.c:45:3: warning: missing braces around initializer [-Wmissing-braces]
   0,0,0,125,255,255,//defoult_set_color,
   ^
../MEMORY/memory.c:45:3: warning: (near initialization for 'window_left_pgm.color') [-Wmissing-braces]
../MEMORY/memory.c:58:3: warning: missing braces around initializer [-Wmissing-braces]
   1,1,1,125,255,255,//defoult_set_color,
   ^
../MEMORY/memory.c:58:3: warning: (near initialization for 'window_right_pgm.color') [-Wmissing-braces]


Jakich nawiasów on się domaga?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2017, o 12:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 paź 2013
Posty: 143
Lokalizacja: Zamość
Pomógł: 0

Odgrzeję troszkę kotleta :)

Po wykonaniu tego kodu:

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


pamięć przedstawia się następująco:

Obrazek

co by oznaczało, że do EEPROMU zapisała się tylko jedna zmienna t1=1. Dlaczego reszta zmiennych się nie zapisała zaraz po niej? Przecież są zorganizowane w ramach jednej struktury i dlaczego wpisało się akurat w tamen adres a nie od pierwszego zgodnie z tym co mówił Mirek?

mirekk36 napisał(a):

po trzecie zapoznaj się ze strukturami i ułóż sobie wszystkie zmienne które mają być w eepromie w takiej strukturze

po czwarte to jak w strukturze dasz pierwszą zmienną badblock to możesz być pewien że trafi ona wtedy na pierwszą komórkę



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2017, o 14:01 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

Podajesz w złej kolejności parametry do eeprom_write_block. Powinno być: adres_w_ram, adres_w_ee, długość_danych.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2017, o 14:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 paź 2013
Posty: 143
Lokalizacja: Zamość
Pomógł: 0

Ok, zmieniłem kolejność i teraz nic nie zapisuje się do EEPROM. Wszystkie komórki pamięci przyjmują wartość 0xFF.

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: 26 lut 2017, o 14:35 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

Czym sprawdzasz zawartość eeprom?



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: 68 ]  Przejdź na stronę Poprzednia strona  1, 2, 3  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO