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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 21 maja 2025, o 23:57


    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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