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



Teraz jest 23 lis 2024, o 00:56


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
Autor Wiadomość
PostNapisane: 15 lut 2014, o 22:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 cze 2013
Posty: 137
Lokalizacja: Kraków
Pomógł: 0

(przeniesione z działu programowanie C#)
Hej
Od jakiegoś czasu mam problem z nietypowym zastosowaniem Serial Port. Wszystkie poradniki pokazują jak wykorzystać go w celu odbierania danych w trybie terminalu, a ja potrzebuję go użyć nieco inaczej i nie mogę sobie z tym poradzić (to znaczy niby napisałem jakiś kod który działa, ale mnie zbluzgali na elektrodzie że jest brzydki i w sumie to mają rację :D). Oto co potrzebuję osiągnąć.
Chcę napisać osobną klasę do komunikacji z AVRem na zasadzie rozkazów i odpowiedzi. Wymusza to jedną poważną rzecz: w funkcji wysyłającej komendę muszę ZATRZYMAĆ program do czasu otrzymania odpowiedzi. Tak dokładniej, to najpierw trzeba utworzyć ramkę, potem ją wysłać, a następnie odczytywać dane aż w buforze nie będzie całej ramki odpowiedzi.
Do tego celu napisałem sobie funkcję ReadBytes, która zatrzymuje program i czeka dopóki nie odczyta zadanej ilości bajtów. Tak to wyglądało w moim pierwotnym rozwiązaniu:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Działać - działało, jednak mimo że nie znam się na pisaniu aplikacji okienkowych pod PC, to nawet ja widzę że to rozwiązanie jest po prostu złe ;).

Ostatnio postanowiłem trochę to przerobić - poczytałem o zdarzeniu DataReceived i zapowiadało się całkiem fajnie, ale wyszło jak zwykle... próbowałem czegoś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Niestety podczas używania w serial_DataReceived otrzymuję błąd o indeksie spoza zakresu tablicy. W debugerze wygląda to jakby bufferindex miał przypisaną losową ujemną wartość. Zamieniłem to na coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ale efekt jest identyczny. Coś czytałem o tym że jak tworzony jest drugi wątek to nie można się w nim odnosić do kontrolek z pierwszego, ale przecież tablica i liczba to nie kontrolki :).
Moglibyście mi coś doradzić w tym temacie? Jak najlepiej to rozegrać? Tylko proszę o wyjaśnienie jak dla laika, nigdy nie pisałem w C#, ani nie projektowałem aplikacji wielowątkowych.

_________________
Więcej dziwactw na: www.youtube.com/user/mopsiok



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2014, o 10:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 cze 2013
Posty: 137
Lokalizacja: Kraków
Pomógł: 0

Jeśli byłby ktoś zainteresowany lepszą wersją "brzydkiej wersji" :) to oto co udało mi się stworzyć:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To wciąż nie to co chciałem uzyskać, ale jeśli nikt nie ma lepszego rozwiązania to chyba zostanę przy tym. Mam nadzieję że komuś się to przyda :).

_________________
Więcej dziwactw na: www.youtube.com/user/mopsiok



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 0 gości


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO