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 9 maja 2025, o 16:00


    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: 27382
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27382
    Lokalizacja: Szczecin
    Pomógł: 1043

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