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



Teraz jest 28 mar 2024, o 21:14


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 7 cze 2018, o 18:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

cześć
Pracuję nad końcowym wyglądem ekranu stacji pogodowej i napotkałem problem z którym nie mogę sobie poradzić.
W takiej funkcji wyświetlam temperaturę
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

funkcja jest wywoływana co 5sek za pomocą timera programowego
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

Na zdjęciach widać jak to działa i nie wiem dlaczego tak
chcę wyświetlać stringa a nie poszczególne "inty" na piechotę
Obrazek
Obrazek
Obrazek
Obrazek
Pierwsze zdjęcie to start programu więc jeszcze nie było pomiaru ale drugie to już po pierwszych 5sek i kolejne. Po ok.2min. program się wysypuje i następuje reset procesora.
Przy wyświetlaniu wartości na tzw. piechotę problemu nie ma ale trzeba niestety podawać współrzędne dla części przed i po przecinku co przy zmianie wartości np. z 9*C na 10*C jest bardzo kłopotliwe nie mówiąc już o wartościach ujemnych.
Proszę o pomoc.....

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2018, o 18:41 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Nie żałuj tak bajtów w tablicach tab01 i tab02, (bo nie ma miejsca na znak końca stringa).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2018, o 19:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

witam,
myślę że tablice są zmiennymi lokalnymi, tab01 i tab02 są wypełniane funkcją itoa, OK.
ale tablica temp_string....?
funkcja strcat dokleja do ostatniego znalezionego znaku w tej tablicy...
Nie wiemy jakie są znaki w tej tablicy(przypadkowe?).
hmm...


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2018, o 19:27 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

@Daro69 -racja "temp_string" nie jest inicjowana ( nie jest globalna).
Trzeba najprościej po jej deklaracji dać: temp_string[0]=0;
i chyba powinno już zadziałać.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2018, o 19:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

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

też chyba zadziała. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2018, o 19:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

Daro69 napisał(a):
witam,
myślę że tablice są zmiennymi lokalnymi, tab01 i tab02 są wypełniane funkcją itoa, OK.
ale tablica temp_string....?
funkcja strcat dokleja do ostatniego znalezionego znaku w tej tablicy...
Nie wiemy jakie są znaki w tej tablicy(przypadkowe?).
hmm...

Znaki nie są przypadkowe tylko jest tam ostatni sklejony string niestety więc
krish napisał(a):
@Daro69 -racja "temp_string" nie jest inicjowana ( nie jest globalna).
Trzeba najprościej po jej deklaracji dać: temp_string[0]=0;
i chyba powinno już zadziałać.

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

Dzięki Panowi można na Was liczyć jak zwykle.
Działa jak chciałem ale zobaczę jeszcze jak P.Mirek robił stringa dla BMP180

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2018, o 19:59 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Niezbadane są ścieżki działania kompilatora/optymalizatora.
Przed chwilą testowałem oba rozwiązania na byle jakiej funkcji i o dziwo
rozwiązanie Daro69 zajęło mniej miejsca niż moje ( teoretycznie wyzerowanie całej 8-bajtowej tablicy powinno zająć trochę więcej miejsca w funkcji, niż podstawienie jednego bajtu).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2018, o 20:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

krish napisał(a):
teoretycznie wyzerowanie całej 8-bajtowej tablicy powinno zająć trochę więcej miejsca w funkcji, niż podstawienie jednego bajtu

jeżeli masz możliwość to sprawdź czy na pewno tym kodzikiem wyzerowałem wszystkie bajty czy tylko pierwszy. ;)
tuż przed powołaniem char temp_tab[8]={};
powołaj na chwilę taką samą tablicę wypełnioną znakami, np. w jakiejś zagnieżdżonej funkcji tuż przed powołaniem temp_tab,
żeby za chwilę wlepić w wykorzystywane i zwolnione komórki pamięci tablicę temp_tab.
mam wrażenie że kasuję tylko pierwszy bajt podczas inicjowania temp_tab, ale to wystarczy do zadziałania funkcji strcat.
takie domysły. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2018, o 20:27 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Właśnie najpierw sprawdziłem, że kasowane jest całe 8 bajtów i stąd zdziwienie.

ps.
dla strcat wystarczy pierwszy bajt=0, ale jeżeli Twój sposób jest efektywniejszy...
Nie chce mi się grzebać w tej chwili w asemblerze, jak wyglądają te tablice/funkcje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2018, o 20:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

ok, dzięki. :)
to mam następną cząstkę wiedzy. :)
bo tak jak napisałem, "takie domysły" :P
............................................
No tak. :) przy definiowaniu można tak wyzerować wszystkie bajty,
to przy kasowaniu już zdefiniowanego stringa trzeba kasować indywidualnie. np. w pętli for..... ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2018, o 22:25 
Offline
Moderator
Avatar użytkownika

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

jeśli korzystamy z bufora zawsze od zerowej komórki i do niej coś wklejamy strcat , sprintf itp - to zdecydowanie wystarczy zapis zera do pierwszego elementu

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 10 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