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



Teraz jest 15 lut 2026, o 11:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 21 lis 2015, o 21:59 
Offline
Nowy

Dołączył(a): 14 lip 2014
Posty: 3
Pomógł: 0

Na początek (to mój pierwszy post) witam wszystkich forumowiczów:)

Biblioteka do obsługi DS18X20 (opis w BB, str. 320) przechowuje identyfikatory wszystkich układów w dwuwymiarowej tablicy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jako że OW_ROMCODE_SIZE=8, chciałbym zamienić tą tablicę na jednowymiarową (każdy identyfikator jako uint64_t):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i zapisać ją w EEPROM pod określonym adresem, tak aby można ją (właściwie jej poszczególne elementy) było odczytać po restarcie programu.
Wiem że problem większości z Was wyda się banalny, ale dla mnie - początkującego w AVR-C - jest trudny. Wiem tylko, że powinienem skorzystać ze wskaźników. Proszę o listing i jakiś łopatologiczny opis. Z góry dziękuję za wszelkie podpowiedzi:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2015, o 22:03 
Offline
Moderator
Avatar użytkownika

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

adbi napisał(a):
Wiem że problem większości z Was wyda się banalny, ale dla mnie - początkującego w AVR-C - jest trudny.

Muszę cię zmartwić ale to jest po prostu kompletnie bez sensu :(

co za problem zapisać tablicę czy też kilka tablic do EEPROM ?

jeśli chcesz wiedzieć jak to się robi to zamiast wymyślać takie rzeczy obejrzyj to:
http://mirekk36.blogspot.com/2012/11/av ... iazek.html

zobaczysz, że do tego celu stosuje się bardzo proste metody w AVR GCC


Autor postu otrzymał pochwałę

_________________
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: 26 lis 2015, o 20:37 
Offline
Nowy

Dołączył(a): 14 lip 2014
Posty: 3
Pomógł: 0

mirekk36 napisał(a):
co za problem zapisać tablicę czy też kilka tablic do EEPROM ?

jeśli chcesz wiedzieć jak to się robi to zamiast wymyślać takie rzeczy obejrzyj to:
http://mirekk36.blogspot.com/2012/11/av ... iazek.html

Poradnik całkiem fajny, ale rozwiązał jedynie drugą część mojego problemu. Spójny i pomysłowy sposób na operowanie parametrami urządzenia w pamięciach danych/programu(flash)/EEPROM(pamięć nieulotna).

W międzyczasie trochę samemu poszperałem i skorzystałem z funkcji memcpy() do skopiowania zawartości jednej tablicy do drugiej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Przy okazji - jakby się komuś przydała - procedura wyświetlająca 64-bitowy numer ID DS18B20, w postaci HEX na LCD (u mnie: 4x20 znaków):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Przy okazji, jeśli ktoś z Was zna prosty, bezpośredni sposób na wyświetlenie uint64_t jako HEX w funkcji printf() i pochodnych - głównie sprintf() - to byłbym wdzięczny za podpowiedź. Mam na myśli coś w rodzaju hacka do avr-libc, która w funkcjach printf() i pochodnych nie obsługuje formatu long-long ("%llx"). Nie mówię tutaj o rozwiązaniach programowych, typu podział uint64_t na dwie uint32_t.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lis 2015, o 21:23 
Offline
Moderator
Avatar użytkownika

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

policz sobie zajętość FLASH z tymi prontfami w porównaniu do swojej prostej funkcji jaką wyżej napisałeś ;) .... Oczywiście jak ma się np ATmega128 i kupę nie zagospodarowanej pamięci FLASH to co tam można sobie prontfować do woli ;)

_________________
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: 26 lis 2015, o 23:09 
Offline
Nowy

Dołączył(a): 14 lip 2014
Posty: 3
Pomógł: 0

kamaciej napisał(a):
Kompilować w trybie zgodnym z C99:

W Atmel Studio 7 jest w "Toolchain/AVR/GNU C Compiler/miscellaneous" Other flags: -std=gnu99
Jeśli o to chodzi, to standardowo jest ustawione.
kamaciej 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.

http://en.cppreference.com/w/c/types/integer

No właśnie - w teorii wszystko OK [...], a mi wywala:

Warning: spurious trailing '%' in format [-Wformat=]
Error: expected ')' before 'PRIx64'



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: 5 ] 

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