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



Teraz jest 23 gru 2024, o 08:30


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
Autor Wiadomość
PostNapisane: 13 maja 2013, o 19:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 mar 2013
Posty: 38
Lokalizacja: Gdynia
Pomógł: 1

Witam

Mam dosyć spory problem z parsowaniem tekstu, mianowicie użytkownik może w terminalu wpisać sobie taką o to składnie.

Silnik 3,5;Silnik 5,25;Silnika 7,45;

Ma to podzielić na "Silnik 3,5" , "Silnika 5,25" itp;


Robię to w następujący sposób:
-gdy z USARTa przychodzi ciąg znaków zakończonych znakiem '\0' wychodzi do przerwania gdzie tworzona jest tablica (buforRx) przesłanych znaków, przekazywanych dalej do pętli głównej:

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


W pętli głównej obsługa tego wygląda tak:
MAIN
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Po krótce dzięki temu kodowi bd miał:

(PRZED wywołaniem CreateChild)
tprs->string[0]="Silnik 3,5"
tprs->string[1]="Silnik 5,25"
tprs->string[2]="Silnika 7,45"

wszystko ładnie pięknie teraz tworze "dzieci"

(Wywołanie createChild)

na podstawie każdego ze stringów dzielę wq kryterium " ":
po takim sparsowaniu mam:

tprs->child[0]->string[0]="Silnik"
tprs->child[0]->string[1]="3,5"

tprs->child[1]->string[0]="Silnik"
tprs->child[1]->string[1]="5,25"

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


Tworząca dzieci

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



Teraz pytanie w jaki sposób zwolnić tą pamięć przed przybyciem paczki do parsowania? Mam napisane coś takiego ale niestety HardFault_Handler
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

Bardzo proszę o pomoc naprawdę próbowałem wielu rzeczy, ale może mój zamysł w ogóle jest niepoprawny stąd te ceregiele. Wydaje mi się że to sprawa źle zwalnianych wskaźników bo w pewnych przypadkach program działa tzn kilka razy odbierze i przerobi polecenia, a np za 3 -4 się wysypie ;/

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2013, o 21:24 
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

toch88 napisał(a):
(PRZED wywołaniem CreateChild)
tprs->string[0]="Silnik 3,5"
tprs->string[1]="Silnik 5,25"
tprs->string[2]="Silnika 7,45"

Już pierwszy string ma 10 znaków doliczając '\0' wychodzi 11 bajtów.
Funkcja do poprawki:
toch88 napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Właściwie to zmienna temp nie jest wcale potrzebna, bo i tak ginie po zakończeniu działania funkcji. Dlaczego nie może być tak:
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 

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