ATNEL tech-forum
https://forum.atnel.pl/

problem ze stringiem
https://forum.atnel.pl/topic20841.html
Strona 1 z 1

Autor:  mczarny [ 7 cze 2018, o 18:10 ]
Tytuł:  problem ze stringiem

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.....

Autor:  krish [ 7 cze 2018, o 18:41 ]
Tytuł:  Re: problem ze stringiem

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

Autor:  Daro69 [ 7 cze 2018, o 19:10 ]
Tytuł:  Re: problem ze stringiem

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:  krish [ 7 cze 2018, o 19:27 ]
Tytuł:  Re: problem ze stringiem

@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:  Daro69 [ 7 cze 2018, o 19:33 ]
Tytuł:  Re: problem ze stringiem

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. :)

Autor:  mczarny [ 7 cze 2018, o 19:44 ]
Tytuł:  Re: problem ze stringiem

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

Autor:  krish [ 7 cze 2018, o 19:59 ]
Tytuł:  Re: problem ze stringiem

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).

Autor:  Daro69 [ 7 cze 2018, o 20:19 ]
Tytuł:  Re: problem ze stringiem

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. ;)

Autor:  krish [ 7 cze 2018, o 20:27 ]
Tytuł:  Re: problem ze stringiem

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.

Autor:  Daro69 [ 7 cze 2018, o 20:31 ]
Tytuł:  Re: problem ze stringiem

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..... ;)

Autor:  mirekk36 [ 7 cze 2018, o 22:25 ]
Tytuł:  Re: problem ze stringiem

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

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/