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



Teraz jest 29 kwi 2026, o 08:28


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 9 wrz 2014, o 10:47 
Offline
Użytkownik

Dołączył(a): 10 sie 2013
Posty: 66
Lokalizacja: Szczecin
Pomógł: 7

Pytanie początkującego w C.
Jak na razie sklejam wiedzę z Bluebooka więc o niejasności pytam.
Napotkałem takie oto wywołanie funkcji do odczytu z EEPROM:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ale nie rozumiem zapisu (uint8_t *), choć coś mi iskrzy, że jest to rzutowanie na typ uint8_t. Jednak dlaczego gwiazdka oznaczająca wskaźnik znajduje się w nawiasie razem z typem?
i czy można to zapisać 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.

_________________
Build:succeeded or up-to-date, 0 failed, 0 skipped



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 wrz 2014, o 13:43 
Offline
Użytkownik

Dołączył(a): 10 sie 2013
Posty: 66
Lokalizacja: Szczecin
Pomógł: 7

ok. Zestawiłem odpowiedzi i proszę o poprawki jeśli coś źle zrozumiałem.
Wskaźnik str wskazuje na typ char (jakiś string):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A więc muszę dokonać rzutowania, bo w definicji funkcji eeprom_read_byte argumentem jest typ uint8_t a nie char, czy tak?

A teraz str wskazuje na zmienne typu int (jakieś liczby do wartości 65535):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Czy teraz zmienna data bedzia zawierała młodszy bajt int?

Co do działań na wskaźnikach:
*s++ = zwieksza zmienną pod adresem 's'
s++ = zwieksza adres 's'
(*s)++ = tego nie rozumiem :(

_________________
Build:succeeded or up-to-date, 0 failed, 0 skipped



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

Dołączył(a): 26 sie 2013
Posty: 119
Lokalizacja: Cinisi
Pomógł: 12

Przepraszam, że nie w temacie ale ja do tej pory myślałem, że zapis "*s++" będzie równoznaczny "(*s)++" ... eh trzeba się zapoznać z tymi priorytetami operatorów i to bardzo dogłębnie :) Pozdrawiam

_________________
sig off :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2014, o 20:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

squeez napisał(a):
Żeby odczytać int z epromu masz funkcję eeprom_read_word() jak byś chciał robić to na "około" poprzez eeprom_read_byte musiałbyś odczytać pierwszą część i potem drugą część z sąsiedniej komórki (ale to raczej bez sensu komplikować sobie życie).


Pamiętając o tym, że zmienne większe niż jeden bajt są w procesorach AVR ułożone w pamięci w systemie little endian. Tak więc w przypadku zmiennej dwubajtowej najpierw odczytamy młodszy bajt a następnie starszy bajt. Należy o tym pamiętać np. w sytuacji gdy "latamy" wskaźnikiem na zmienną jednobajtową po pamięci ze zmiennymi wielobajtowymi.

Niech mnie ktoś poprawi jeśli się mylę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2014, o 09:51 
Offline
Użytkownik

Dołączył(a): 10 sie 2013
Posty: 66
Lokalizacja: Szczecin
Pomógł: 7

Dzięki za odpowiedzi, już teraz wszystko jasne, lecę dalej z materiałem. Oczywiście pomocną wiedzę kolegów umieszczam w główce pod odpowiednim wskaźnikiem, tym razem bez rzutowania ;)

_________________
Build:succeeded or up-to-date, 0 failed, 0 skipped



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