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



Teraz jest 25 lip 2026, o 05:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 4 sty 2014, o 14:38 
Offline
Nowy

Dołączył(a): 04 sty 2014
Posty: 2
Pomógł: 0

Witam serdecznie użytkowników forum. :)

Dopiero raczkuję z programowaniem uC i jestem w trakcie pisania biblioteki do obsługi wyświetlaczy LCD opartych na sterowniku HD44780.

Starając się maksymalnie oszczędzić pamięć procesora, chcę napisać własną procedurę mającą na celu zamianę liczby na łańcuch znaków, aby wykorzystać ją do wysyłania danych liczbowych na wyświetlacz.
Ponieważ nie wiem czy podawana liczba będzie 8, 16, czy 32 bitowa, zamiast tworzyć dużą zmienną, która niepotrzebnie odkładała by się na stosie, postanowiłem użyć wskaźników, a ponieważ nie znam typu parametru, chcę użyć typu void.

Moja deklaracja funkcji wygląda 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.


Jednak, gdy potrzebuję sprawdzić, czy podany parametr jest mniejszy od 0, za nic nie mogę dojść jak to zrobić.
Przesyłając zmienną w sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jedyny sposób, w którym poprawnie funkcja odczytywała liczbę było zapisanie operacji na wskaźniku w sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Przy czym, jeżeli typ podanej liczby będzie np int8_t, takie rzutowanie jest bez sensu. Sposoby o których myślałem, a niestety nie działają to:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jak więc ugryźć ten problem ? Przypuszczam, że to kwestia braku zrozumienia prze mnie działania wskaźnika void, bo jak narazie nie widzę sensownego zastosowania tego typu.

Bardzo dziękuję za pomoc, pozdrawiam :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sty 2014, o 19:27 
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

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

nadal nie wiadomo jak rozróżnić liczby ze znakiem np. int8_t i bez znaku np. uint8_t. Możesz też warunek umieścić w wywołaniu funkcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2014, o 17:18 
Offline
Nowy

Dołączył(a): 04 sty 2014
Posty: 2
Pomógł: 0

Tylko dodając te 2 parametry, mam już 4 bajty w plecy, dokładnie tyle ile zajmuje int32_t. :(
Wciąż szukam innej drogi, chociaż powoli skłaniam się ku oddzielnej funkcji do każdego typu.



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

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