Skocz do zawartości
Komentator

Kurs Qt – #2 – komunikacja z Arduino przez UART

Pomocna odpowiedź

Kurs Qt – #2 – komunikacja z Arduino przez UART

Pora na kolejny artykuł omawiający podstawy Qt. Tym razem zajmiemy się komunikacją przez port szeregowy. Dzięki temu połączymy komputer PC z Arduino (lub innym mikrokontrolerem). W ramach ćwiczeń stworzymy własny monitor portu szeregowego, który będzie mógł sterować pracą Arduino.

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

Udostępnij ten post


Link to post
Share on other sites

Bardzo fajny poradnik 🙂

Znalazłem jednak jedną rzecz, mianowicie nie usuwasz nigdzie QSerialPort. Najprościej zamienić ten fragment kodu:

//this->device = new QSerialPort;
this->device = new QSerialPort(this); //Ustawiamy rodzica obiektu

Dzięki temu w momencie usunięcia obiektu klasy MainWindow zostanie usunięty obiekt device.

pozdrawiam i czekam na kolejne części 🙂

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Bardzo przydatny poradnik :D

Czekam z niecierpliwością na kolejne części!

Super robota

Pozdrawiam :)

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Bardzo cenna uwaga (y). Dla czytelników, którzy bedą to czytać - zawsze zwalniajcie poprawnie pamięć w swoich programach niezależne od sytuacji - w tym przykładzie akurat taki memory leak to jeszcze nie jest nic złego. Tworzymy obiekt QSerialPort raz i żyje on sobie do momentu aż proces naszej aplikacji się zakończy, wtedy pamięć po naszym obiekcie powinien zwolnić system (powinien jeśli to obsługuje - dyskusja na stacku). Sprawa przybrałaby bardzo nieprzyjemny obrót gdybyśmy tworzyli nowe obiekty cyklicznie i nie zwalniali po nich pamięci, a nasz program miałby pracować przez długi czas. Więc szanujmy naszą pamięć. 

Jest tutaj jeszcze jeden wysublimowany problem: gdybyśmy otworzyli port i zamknęli aplikację (wcześniej tego portu nie zamykając) to nie wywoła się destruktor obiektu QSerialPort, który między innymi ten port zamyka gdy jest otwarty. Wtedy przy ponownym uruchomieniu aplikacji moglibyśmy się bardzo zirytować niemogąc otworzyć portu ponownie (kto miał taki problem ten wie).


Poprawka powinna się niedługo pojawić na stronie.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Skoro masz uwagi do czytelników, pozwól że ja będę miał uwagę do pisarzy. Alokowane zasoby należy zawsze zwalniać. Poleganie na systemie świadczy o słabej jakości programu i nawet jeśli nie doprowadzi do katastrofy, należałoby tego unikać.

Jak dla mnie wystarczyłoby napisać - w przykładzie pojawił się błąd, każdemu się zdarza i koniec.

Edit: Trochę przesadziłem ze złośliwością w pierwszej wersji, dokonałem autocenzury, przepraszam.

Edytowano przez Elvis

Udostępnij ten post


Link to post
Share on other sites
5 minut temu, Elvis napisał:

Alokowane zasoby należy zawsze zwalniać

To już jako offtopicowa ciekawostka - cytat z jakiekośtam podręcznika do PHP z początku tysiąclecia (niedokładny bo z pamięci):

"Nie należy wywoływać funkcji mysql_result_free, zasoby zostaną zwolnione automatycznie po wykonaniu skryptu."

Niestety - wśród starszych "programistów" tego "języka programowania" do dziś jest to chyba dogmatem 😞

 

Udostępnij ten post


Link to post
Share on other sites
17 godzin temu, erulission napisał:

Znalazłem jednak jedną rzecz, mianowicie nie usuwasz nigdzie QSerialPort. Najprościej zamienić ten fragment kodu:


//this->device = new QSerialPort;
this->device = new QSerialPort(this); //Ustawiamy rodzica obiektu

Dzięki temu w momencie usunięcia obiektu klasy MainWindow zostanie usunięty obiekt device.

Poprawka i opis do niej znajduje się już w artykule.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...