adambehnke napisał: .... dodaję że problemy mam z tym że jeśli umieszczę moje wypociny w przerwaniach to podczas wysyłania danych z modułu A instrukcją Print to układ lubi mi się zawiesić , lub mam problemy z odebraniem kompletnych danych. W tem przykładzie jaki podałem ostatnio wszystko chodzi idealnie poza tym że mam zaśmieconą i opóźnioną przez to pętlę główną.
Posłuchaj - ja a może i ktoś inny także zapewne chętnie by pomógł w twoich problemach, ale jeśli trzeba analizować jakiś większy że tak powiem kod, który jest niby przykładowy ale jednocześnie obsługujesz aż kilka UARTów a do tego jak widać na razie jeszcze niewiele wiesz o programowaniu z udziałem przerwań niestety, a nie mówię tego żeby broń boże ci dogryźć, bo widać, że się uczysz dopiero tego wszystkiego) ...... to zrozum, że będzie zawsze z tym problem na jakimkolwiek forum. Nie dlatego, że takie są zasady - tylko ciężko jakby wytłumaczyć czy pomóc komuś zrobić dosyć skomplikowaną rzecz w Bascomie, nie mając pod ręką podobnego układu żeby to testować a co gorsze widząc, że jakby od podstaw brniesz troszkę nie tą drogą co trzeba. Dlatego tylko napisałem ci na PW o pewnym rozwiązaniu. Bo czasem warto od podstaw się zająć poznaniem pewnych mechanizmów, żeby potem wykorzystywać je w taki ciut bardziej skomplikowany sposób.
hmmm jedyne co mogę na tym etapie ja podpowiedzieć to:
1. totalnie źle podchodzisz do pisania obsługi przerwania UART a szczególnie że w ogóle zabierasz się za to w Bascomie skoro on ma już dosyć dobrą obsługę przerwań.
2. nie zdajesz sobie troszkę sprawy na razie (ale to też rozumiem bo nie wszystko od razu) jak wygląda hmm że tak powiem prolog i epilog przerwania w Bascomie
3. nie wiesz na razie co to są bufory cykliczne (taki podstawowy znany od dawien dawna, sposób - obsługi UARTA w przerwaniach. No i oczywiście robiąc obsługę tej transmisji w większości przypadków ta wiedza jest nie istotna jakby bo Bascom robi wiele za ciebie - no ale ty znowu sięgasz do pisania własnej obsługi takiego przerwania i to jak mówię o zgrozo w Bascomie. Żebyś ją sobie w czystym asemblerze napisał (bo w innym języku nie można zrobić wstawki do Bascoma) to jeszcze bym rozumiał
Ale przecież już kiedyś podpowiadałem ci o mechaniźmie Bytematch, którego niestety jak na mój gust całkiem opatrznie także używasz i stąd twoje pomysły zapewne nad chęcią okiełznania przerwania od UART'a
No toż nawet jak ktoś by się zaparł żeby wręcz poświęcić czas i gotowca dla ciebie napisać to też nie dałoby rady bez podania dokładnych założeń.
Dlatego zrozum mnie przynajmniej proszę, że ja tak nie umiem pomóc - bo chcesz zrobić coś dużego ale jakby trochę po macoszemu traktując podstawy i stąd te problemy - a niestety trudno zrobić tu wykład od początku po kolei
1. o co chodzi z przerwaniami jeśli chodzi o techniki dobrego programowania
2. jak wyglądają możliwości pisania wstawek asemblerowych do Bascoma - a są one możliwe i dzięki nim na prawdę dużo można z poczciwego Bascoma wycisnąć
3. na czym w ogóle polega taka typowa standardowa obsługa przerwań UART z użyciem buforów cyklicznych - bo to Bascom robi że tak powiem "pod spodem" i ty nie widzisz sczegółów..... ale gdyby znać dokładnie te zasady to zapewniam cię że inaczej podchodziłbyś już do samego korzystania z obsługi UART w Bascomie a szczególnie przy kilku UART'ach - gdzie już trzeba się nagimnastykować
dlatego gdy zadajesz pytanie "... czy już nikt nie potrafi podpowiedzieć o co tu chodzi w moim programie?..." - to nie dziw się, że nie ma odpowiedzi za bardzo. Bo to jest tak troszkę jakbym ja np wziął się za budowę jachtu a nigdy z tym nie miałem do czynienia w zyciu - a zacząłbym naukę od razu od budowy dużej jednostki morskiej i zrozpaczony dopytywał się na jakimś forum dlaczego mi nie wychodzi. Pewnie w takim przypadku ty także nie udzieliłbyś mi odpowiedzi ale nie dlatego że nie chcesz - tylko dlatego, że uznałbyś iż powinienem zacząć naukę od budowy najpierw małej łódeczki czy kajaka żeby poznać podstawy. Bo w kilku zdaniach na forum nie będziesz mi w stanie przekazać całej i skomplikowanej wiedzy podstawowej - prawda? sam przyznaj.
Może i się mylę w tym co piszę i źle oceniam twoją dotychczasową wiedzę bo coś tam już zrobiłeś i ci działa - ale tak to bywa w programowaniu - proste rzeczy dosyć prosto da się zaprogramować a te bardziej skomplikowane już nie - warto byłoby mieć już doświadczenie..... a taka jest też prawda, że nauka programowania tylko w Bascomie - strasznie wydłuża ten czas poznawania podstaw, które działają jak pisałem "pod spodem" i nawet nie wiesz jak w szczegółach. Dlatego tylko uważam, że ja - taką osobę jak ty, która jest także pasjonatem tej elektroniki i tak uparcie dąży do celu - na pewno bym zainteresował pokazując możliwości jakie się otwierają pisząc programy w innych językach
------------------------
ok na zakończenie - bo teraz spojrzałem dopiero dokładnie co robi twoja procedura obsługi przerwania od UART'a. Napisałem że to masakra bo
Serial3bytereceived:
Urt4_2 = Inkey(#6)
Urt4_1 = Urt4_1 + Chr(urt4_2)
If Len(urt4_1) = 157 Then
Rs4_odebrane = Urt4_1
Urt4_1 = ""
Rs4_flaga = 1
End If
Return
jak ty sobie wyobrażasz? z jednej strony włączasz w ogóle przerwania sprzętowe dla UARTa automatycznie za pomocą Config Serialin (chyba że nie wiesz właśnie o tym, że to polecenie je włącza) a jednocześnie jakby je wywłaszczasz - podstawiając swoją niestety hmmm dziwną procedurę jak wyżej - i oczekujesz że to będzie ci dobrze działać??? ..... to że czasem działa dobrze a czasem źle - nie świadczy że idziesz w dobrym kierunku - bo już samo to , że prawdopodobnie nie panujesz świadomie nad stosem - może powodować takie dziwne zachowania. A błędy w pracy stosu bywają na prawdę niedorzeczne i najgorsze do wyłapania - jeśli nie ma się praktyki dłuższej
eeeeeh - sam widzisz - no chciałbym coś tam napisać i podpowiedzieć ale co? naklepałem w tą klawiaturę, naklepałem i podejrzewam, że i tak niezbyt jasno i precyzyjnie cokolwiek tak pisząc - wytłumaczyłem. Inaczej jest na żywo
ok pozdrówka i powodzenia