Wykop.pl Wykop.pl
  • Główna
  • Wykopalisko248
  • Hity
  • Mikroblog
  • Zaloguj się
  • Zarejestruj się
Zaloguj się

Popularne tagi

  • #ciekawostki
  • #informacje
  • #technologia
  • #polska
  • #swiat
  • #motoryzacja
  • #podroze
  • #heheszki
  • #sport

Wykop

  • Ranking
  • Osiągnięcia
  • FAQ
  • O nas
  • Kontakt
  • Reklama
  • Regulamin
Parseval

Parseval

Dołączył 7 lat i 4 mies. temu
  • Obserwuj
  • Akcje 540
  • Znaleziska 12
  • Mikroblog 528
  • Obserwujący 0
  • Obserwowane 41
  • Dodane (78)
  • Komentowane (244)
  • Plusowane (206)
Parseval
Parseval 15.07.2021, 16:20:31
  • 1
Cześć,
Jak piszecie unit testy pod soft, który jest dedykowany dla innej architektury? W moim przypadku robię development na Ubuntu z x86 pod płytkę ARMową z RTOSem, problem jest taki, że nawet chcąc oddzielić logikę pod unit testy od warstwy RTOSa, to i tak potrzebuję skompilować całość. Czy problem jest głównie w mojej architekturze kodu czy jest na to jakieś sprytne obejście?

#embedded #linux #cpp #
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Parseval
Parseval
Autor
15.07.2021, 19:22:45 via Android
  • 0
@zetisdead
@a231
@Strus

Ok, dzięki Panowie. Głównie bubla zrobiłem w tym, że wśród elementów realizujących logikę i przetwarzanie danych mam taski i struktury danych pochodzące z tego RTOSa. O ile struktury danych już udało mi się oddzielić, to mam problem z oddzieleniem wątków. Czy sensownie w tym przypadku jest stworzenie jakiegoś thread poola, żeby łatwo było się przepiąć pomiędzy systemami?
  • Odpowiedz
Parseval
Parseval
Autor
15.07.2021, 19:48:01 via Android
  • 0
@zetisdead ARM z cortexem A7. Używam C++20, a RTOS to Xenomai. Jest to dość mocno specyficzny RTOS, który nadpisuje wszystkie POSIXowe funkcje własnymi implementacjami, z czym się długo kopałem. Może coś przeoczyłem, ale czy to API ma jakiś interfejs, który mogę sobie zaimplementować dla tego RTOSa?
  • Odpowiedz
Parseval
Parseval
Autor
15.07.2021, 19:52:43 via Android
  • 0
@zetisdead zapomniałem o tym jednym szczególe, do wątków nie jest POSIXowe, taki potworek.

https://xenomai.org/documentation/xenomai-3/html/xeno3prm/group__alchemy__task.html

Jest możliwość, żeby było POSIX, ale akurat mam płytkę gdzie nie jest to zrobione i muszę z tym żyć.
  • Odpowiedz
Parseval
Parseval 02.06.2021, 12:40:55
  • 1
Cześć,

W programie mam dwa wątki, które pracują na porcie szeregowym (RS485) pod #linux. Jeśli dobrze się orientuję, to na płytce (customowa), którą posiadam jest transmitter, który powoduje, że komunikacja nie jest full-duplex. W związku z czym używam select(), do sprawdzania czy jest możliwy zapis / odczyt. Problem polega na tym, że od czasu do czasu ramka jest źle odczytywana i ucinane są końcowe bajty, choć wiem że urządzenie
  • 16
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Parseval
Parseval
Autor
02.06.2021, 12:53:49
  • 1
@kamilspl: Czy select() nie załatwia synchronizacji?
  • Odpowiedz
Parseval
Parseval
Autor
02.06.2021, 13:13:24
  • 0
@cosmopolitan: Racja, będzie można zrobić to na jednym wątku. Dwa wątki to pozostałość po refactoringu.
  • Odpowiedz
Parseval
Parseval
Autor
02.06.2021, 13:19:48
  • 0
@cosmopolitan Czyli w tym wypadku jakbym zrobił na jednym wątku obsługę, to muszę stworzyć fdset dla read i osobno dla write, wywołać selecta i jak select coś zwróci, to sprawdzić 2x FDISSET, żeby wykonać odpowiednią czynność?
  • Odpowiedz
Parseval
Parseval
Autor
02.06.2021, 13:28:05
  • 0
@cosmopolitan Dzięki, spróbuję to wieczorem ogarnąć :)
  • Odpowiedz
Parseval
Parseval
Autor
03.06.2021, 15:00:50 via Android
  • 0
@cosmopolitan nie potrafię ogarnąć tego write i read w jednym wątku... W moim programie mam kolejkę, do której inne wątki ładują ramki do przesłania, ale w niektórych momentach kolejka jest pusta. Select będzie zwracał, że możliwy jest zapis i tworzy się while(1), mimo, że nic nie ma do zapisu. Nie znam albo nie mam pomysłu w tym przypadku na mechanizm do synchronizacji tej sytuacji.
  • Odpowiedz
Parseval
Parseval
Autor
04.06.2021, 09:05:51
  • 0
@cosmopolitan: Dzięki za podesłane źródła. Deskryptor jest ustawiony jako non-blocking.
Aktualny kod wstawiam tutaj: https://pastebin.com/CXWDZ31y
Poprzedni problem polegał na tym, że ciągle ustawiałem fdset dla write() mimo, że nic nie było do zapisu i się to zapętliło. Wynikało to z mojego złego podejścia. Teraz idea jest taka, że Task() oczekuje na select(), do momentu aż nie będzie możliwy zapis (tutaj inny wątek wywołuje Send(), który ustawia fdset dla
  • Odpowiedz
Parseval
Parseval
Autor
04.06.2021, 09:46:55
  • 0
@cosmopolitan: Wygląda to jakby FDSET nie działał jeśli jest robiony z innego wątku niż ten, który wywołuje select(). Jeśli dodam FDSET dla write() w Task(), to działa, ale się zapętla. Dlatego chcę triggerować FD_SET z innego wątku dopiero jak pojawią się jakieś dane do zapisu.
  • Odpowiedz
Parseval
Parseval
Autor
04.06.2021, 10:39:06
  • 0
@cosmopolitan: Z tego co udało mi się ustalić po testach. Na 100% jest problem z ustawianiem fdset'a z innego wątku. Jeśli robie to w tym samym wątku gdzie wołany jest select(), to wszystko działa. Na select() jest timeout specjalne po to, żeby inny wątek mógł zmienić fd_set i żeby select() mógł to ponownie zaczytać, ale niestety jest jakiś problem.
  • Odpowiedz
Parseval
Parseval 14.05.2021, 09:21:29
  • 2
Cześć,

Mam program, który posiada część real-time i non-real-time. Używam systemu czasu rzeczywistego Xenomai (pod #linux). Sam Xenomai ma wrappery dołączane linkerem, które nadpisują wszystkie klasyczne funkcje linuxowe. Mój program składa się z wielu bibliotek z czego jedna powinna mieć owrappowane funkcje. Niestety dołączenie flag linkera dla tej biblioteki powoduje owrappowanie funkcji całego projektu. Co robię źle, że nie zostaje to rozdzielone?

CMake dla tej biblioteki: https://pastebin.com/qsFwmBgV
Część CMake projektu - dołączenie
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Parseval
Parseval
Autor
14.05.2021, 09:46:01
  • 0
@MamCieNaHita: Czy posiadając binarkę z wrapperami (bez headera) mogę to jakość obejść? Myślałem o nazwaniu docelowo wrappowanych fukcji tak jak są w tej binarce, ale nie zrobię tego chyba bezpośrednio w kodzie nie mając headera, prawda?
  • Odpowiedz
Parseval
Parseval
Autor
15.05.2021, 15:59:09
  • 0
@MamCieNaHita @rejestracjaniedziala Dzięki za dawkę wiedzy, będę eksperymentował
  • Odpowiedz
Parseval
Parseval 20.04.2021, 14:04:05 via Android
  • 0
Cześć,

Zaimplementowałem kolejkę thread-safe, standardowo jeden thread do niej pisze, drugi czyta i parsuje dane. Kłopot polega na tym, że thread, który zapisuje czasami musi zbyt długo czekać na zwolnienie kolejki przez co są gubione porcje danych, bo blokowane jest odbieranie. Czy zapis do kolejki odebranej porcji danych powinienem puszczać w osobnych taskach, żeby nie blokować odbierania? Czy jest jakiś mądrzejszy sposób?

#programowanie #programista15k #cpp
  • 16
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Parseval
Parseval
Autor
20.04.2021, 14:12:39 via Android
  • 0
@zwei Kolejka składa się niestety z żywych bajtów, mutex jest blokowany na czas wyciągania pojedynczych bajtów aż zostanie uformowana pełna ramka.
  • Odpowiedz
Parseval
Parseval
Autor
20.04.2021, 14:17:07 via Android
  • 0
@zwei tak samo blokowany jest na czas wpisania odebranej porcji danych do kolejki.
  • Odpowiedz
Parseval
Parseval
Autor
20.04.2021, 14:20:01 via Android
  • 0
@zibizz1 a czy to nie spowoduje wyścigów?
  • Odpowiedz
Parseval
Parseval
Autor
20.04.2021, 14:49:03 via Android
  • 0
@Saly Wątek czytający wyciąga bajt po bajcie z tej kolejki aż nie napotka początku i końca ramki. Jeśli jest pusta kolejka, to nie blokuje. Postaram się wstawić kawałek kodu jak będę przy komputerze.
  • Odpowiedz
Parseval
Parseval
Autor
21.04.2021, 06:36:08
  • 0
@Saly W tym protokole niestety nie ma długości wiadomości :( Wtedy uniknąłbym kilku problemów, które napotkałem po drodze. Dzięki za porady, postaram się je dobrze zastosować.
  • Odpowiedz
Parseval
Parseval
Autor
21.04.2021, 13:52:13
  • 0
@Saly: @zibizz1 @MamCieNaHita

Dane są odbierane asynchronicznie i wpisywane do bufora - wykorzystuję do tego asio.
Dane są parsowane w osobnym
  • Odpowiedz
Parseval
Parseval
Autor
21.04.2021, 14:17:54
  • 0
@MamCieNaHita: Kurcze z tą paczką danych mam wątpliwości, bo odbieram paczki bajtów stałej długości gdzie długości ramki (od bajtu startowego do końcowego) są różne. Czyli będę mógł trafić paczkę gdzie ramka nie jest jeszcze skończona, wtedy muszę pobrać drugą paczkę gdzie koniec ramki jest w połowie, a reszta bajtów( zostając przy logice funkcji, która ma wyciągnąć taką ramkę) się straci.
  • Odpowiedz
  • <
  • 1
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 13
  • Strona 8 z 13
  • >

Osiągnięcia

  • Rocznica
    od 26.07.2025

    Rocznica
  • Gadżeciarz
    od 25.07.2018

    Gadżeciarz
  • Mikroblogger
    od 17.07.2022

    Mikroblogger

Wykop © 2005-2025

  • O nas
  • Reklama
  • FAQ
  • Kontakt
  • Regulamin
  • Polityka prywatności i cookies
  • Hity
  • Ranking
  • Osiągnięcia
  • Changelog
  • więcej

RSS

  • Wykopane
  • Wykopalisko
  • Komentowane
  • Ustawienia prywatności

Regulamin

Reklama

Kontakt

O nas

FAQ

Osiągnięcia

Ranking