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



Teraz jest 13 lis 2024, o 17:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 8 lut 2023, o 14:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 mar 2014
Posty: 197
Lokalizacja: Kielce
Pomógł: 3

Witam,

panowie, czy mógłby ktoś mi łopatologicznie wytłumaczyć co się dzieje w 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.


Po mojemu to wpisujemy jakiś ciąg znaków np "test". Więc w pętli while zaczynamy inkrementować zmienna s i wysyłać każdą literkę z wpisanego tekstu przez funkcję uart_put. Ale dlaczego jest tam wskaźnik ?? i dlaczego bez tego wskaźnika, nie działa taka funkcja ??
Generalnie wiem, że kłaniają się tutaj wskaźniki. Wiem co to jest, ale do dnia dzisiejszego nie wiem kiedy je stosować :?


Proszę o zrozumienie i ewentualne wytłumaczenie tematu ;)

_________________
BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2023, o 16:55 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 11 lip 2022
Posty: 7
Pomógł: 2

1. Jest to funkcja do wysyłania stringa.
2. Każdy c-string zakończony jest znakiem NULL czyli 0x00.
3. Wywołując funkcję w postaci uart_puts("Wyswietl to"); powoduje że do pamięci ram zostaje wpisany napis(jako tablica tablica) i zajmuje 12 bajtów (11 liter + NULL). Nazwa tablicy to wskaźnik na 1 element. Wskaźnik wskazuje na pierwszą literę napisu.

Wczytana jest najpierw 1 litera. Zostaje wysłana na UART a wskaźnik zostaje zwiększony o 1. W następnym obiegu pętli wysyłana jest kolejna litera. I tak do czasu aż znak wskazany przez wskaźnik będzie wynosił NULL. Wtedy pętla zostanie przerwana i funkcja się zakończy.

Możesz też wywołać funkcje jako argument podając nazwę tablicy do której wcześniej wpisałeś ciąg znaków.

Wskaźniki Mirek wyjaśnia SUPER w swoim Kursie Języka C dla systemów embeded. Polecam!!!


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2023, o 18:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 mar 2014
Posty: 197
Lokalizacja: Kielce
Pomógł: 3

Teraz wydaje mi się to w miarę sensowne, dziękuję Ci bardzo za wytłumaczenie.

Powiem szczerze, że mocno się zastanawiałem nad kursem VIDEO Pana Mirka, miedzy innymi z powodu wskaźników.

_________________
BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2023, o 18:48 
Offline
Moderator
Avatar użytkownika

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

Rafal9018 napisał(a):
Powiem szczerze, że mocno się zastanawiałem nad kursem VIDEO Pana Mirka, miedzy innymi z powodu wskaźników.


to w związku z tym podrzucam kilka nie moich opinii n/t kursu - tylko niektórych z obecnych studentów naszej Akademii ;)

https://akademia.atnel.pl

warto poczytać

Obrazek

------------------------ [ Dodano po: 3 minutach ]

a przy okazji! ... niedługo kończę kurs i po zakończeniu niestety jego cena wzrośnie już do ostatecznej wersji z tzw: "trzeciego okna czasowego" ... zatem jeszcze jest niezła okazja

_________________
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: 16 mar 2023, o 01:08 
Offline
Nowy

Dołączył(a): 13 kwi 2016
Posty: 22
Pomógł: 1

Rafal9018 napisał(a):
Witam,

panowie, czy mógłby ktoś mi łopatologicznie wytłumaczyć co się dzieje w 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.


Po mojemu to wpisujemy jakiś ciąg znaków np "test". Więc w pętli while zaczynamy inkrementować zmienna s i wysyłać każdą literkę z wpisanego tekstu przez funkcję uart_put. Ale dlaczego jest tam wskaźnik ?? i dlaczego bez tego wskaźnika, nie działa taka funkcja ??
Generalnie wiem, że kłaniają się tutaj wskaźniki. Wiem co to jest, ale do dnia dzisiejszego nie wiem kiedy je stosować :?




Proszę o zrozumienie i ewentualne wytłumaczenie tematu ;)


Do tej funkcji przekazywany jest wskaźnik na tablicę (on zajmuje dwa bajty) zamiast całej tablicy (czyli długośc całego tekstu plus znak zera na końcu). Dlatego przekazuje się wskaźnik, by zaoszczędzić czas i miejsce na stosie. No dobrze, w funkcji masz do dyspozycji wskaźnik na tablicę, czyli tak naprawdę adres jej pierwszego elementu (on ma numer zero, pamiętaj). Literka 's' oznacza adres (w tym przypadku początku tablicy), ale jeśli użyjemy zapisu '*s', otrzymamy zawartość komórki pamięci, na którą wskazuje s. Jeśli więc wywołujesz funkcję np. tak: uart_puts("test"); s oznacza adres pierwszego elementu tablicy zawierającej napis test, ale żeby odczytać zawartość pierwszego pola, Mirek zastosował *s. Potem, po odczytaniu pola, następuje zwiększenie adresu wskaźnika o jeden element ( czyli s++). Od tej pory wskaźnik wskazuje na kolejny element tablicy, czyli na literkę e. I taki schemat powtarza się w pętli while dopóki odczytanie zawartości spod *s nie napotka na koniec łańcucha znaków, czyli zero. Wtedy pętla jest przerywana i wylatujemy z funkcji, bo nie ma już nic więcej do roboty. Poczytaj na spokojnie bluebook, ewentualnie poszperaj w sieci, bo informacji na ten temat jest całkiem sporo. Gdy już poczujesz się na siłach, płatny kurs na pewno nie zaszkodzi, a na pewno więcej z niego zrozumiesz i zapamiętasz. Pozdrawiam



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ł: Google [Bot] i 3 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