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



Teraz jest 4 gru 2024, o 04:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 10 lut 2013, o 18:12 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Witam
Jako że akurat mam ferie postanowiłem zrobić większy projekt.
Jako że w moim projekcie chcę wykorzystać zapis do zewnętrznego eproma 24C16. To postanowiłem że zamiast zapisywania tablic czy pojedynczych zmiennych do eproma że zapisze strukturę. Nasunęła mi się ta myśl po obejrzeniu filmiku Mirka dotyczącego zapisu danych do wewnętrznego eproma w procesorze.
Do tego celu oczywiście trzeba przerobić zapisywanie do eproma.
Na początku stworzyłem strukturę którą chcę zapisać dla testów
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 przystąpiłem do przerobienia funkcji zapisującej do eproma. Jednak napotkałem kłopot. Chodzi oto że jak zapisać tę strukturę bajt po bajcie do eproma? Naskrobałem taki program przy którym wywala błąd.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wyświetla błąd w linijce TWI_write((uint8_t *) *buf++);
Kod:
../main.c: In function 'EI2C_write_buf':
../main.c:144: error: cannot convert to a pointer type
../main.c:144: warning: passing argument 1 of 'TWI_write' makes integer from pointer without a cast

Bardzo proszę o pomoc jak rozwikłać ten kłopot będę bardzo wdzięczny ponieważ nie wiem w czym tkwi problem :(

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2013, o 22:07 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

buf - to wskaźnik struktury i zwiększając go przesuniesz się o 3 bajty - rozmiar struktury
*buf - to wyłuskanie nazwy struktury i to próbujesz rzutować na wskaźnik do uint8_t (uint8_t *)
Tymczasem wartość 1 elementu to po prostu buf->blink i taki elemnt powinieneś zapisać oraz 2 pozostałe podobnie.

Jeśli natomiast chcesz używać ++ to zrób następująco:

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

Wtedy możesz odwoływać się albo poprzez nazwę elementu struktury, albo element tablicy.

_________________
Dragonus Cracovus: Biomagia



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

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

Krauser jak zwykle dobrze prawi ale można też tak:

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


co pokazuje, że wszystko co żyje w pamięci może być zutylizowane za pomocą wskaźników ;) to też jest w pełni poprawna wersja ale nie jedyna można nawet pójść jeszcze dalej w stronę uniwersalności tej funkcji:

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


widzisz ? teraz pojawił się specyfikator void przed buf - dzięki temu teraz możesz przesyłać w zasadzie dowolne rzeczy ;)

_________________
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: 11 lut 2013, o 09:55 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Wielkie dzięki
Jako że prościej wygląda funkcja Pana Mirka to ja wybiorę.
Teraz bardziej zrozumiałem posługiwanie się rzutowaniami,wskaźnikami itp. Ale chyba nie dość bo:
Jednak teraz jest gorszy kłopot ponieważ trzeba też przerobić odczyt aby odczytał dane typu uint8_t i zrobić rzutowanie na typ nieokreślony
Idąc drogą Mirka spróbowałem to zrobić ale wywala błąd :(
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Proszę o pomoc

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2013, o 14:21 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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

To co teraz masz to niezainicjowany wskaźnik.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2013, o 19:09 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Ponieważ to jest w drugą stronę od wskaźnika wsk do buf.
Po wykonaniu ostatniego obiegu pętli musi przekazać wskaźnik wsk dane do buf. Hmm czyli to na końcu powinno być
Co o tym myślicie?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2013, o 21:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Janadamis napisał(a):
Ponieważ to jest w drugą stronę od wskaźnika wsk do buf.
Po wykonaniu ostatniego obiegu pętli musi przekazać wskaźnik wsk dane do buf. Hmm czyli to na końcu powinno być


wsk jest wskaźnikiem wskazującym kolejne adresy struktury buf i pozwala na zapis lub odczyt z kolejnych komórek tej struktury. Niczego nie musisz odwracać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2013, o 16:42 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Jakoś nie mogę tego zrozumieć. Czy chodziło o to:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2013, o 16:48 
Offline
Moderator
Avatar użytkownika

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

skoro masz void * buf to może zadziałać nawet

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

_________________
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: 12 lut 2013, o 19:02 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Działa
Wielkie dzięki za pomoc
Teraz w końcu mogę połączyć to z RTC i obsługą klawiatury od komputera :)

_________________
Programowanie to styl życia :D



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

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