Nie programuję w Bascomie ale zaciekawiły mnie rekomendacje Kolegów stosujących z powodzeniem ten język. Chętnie rzucę okiem na kod wygenerowany przez Bascoma i podzielę się opinią jak to wygląda od strony assemblera.
Rafał jeśli to nie problem to poproszę o przykładowy fragment kodu realizujący opisywaną przez Ciebie funkcję ( RX copy to vTX) obsługi wirtualnego portu oraz plik hex np dla ATmega8.
Otrzymałem od Rafała SQ4AVS fragment programu w Bascomie wykorzystujący wirtualny port szeregowy oraz stosowny plik hex. Aby poznać mechanizm rozwijania poszczególnych instrukcji Bacoma na kod maszynowy procesorów AVR dokonałem disassemlacji pliku hex uzyskując program w postaci mnemoników assemlera.
Kod generowany przez Bascoma dla większości prostych instrukcji wygląda dość przyzwoicie, wszystkie zmienne umieszczane są w pamięci SRAM.
Utworzenie wirtualnego kanału szeregowego na procesorze jest dość proste i działa poprawnie przy umiarkowanych szybkościach i długościach ramek.
W analizowanym przykładzie wszystkie instrukcje do obsługi kanałów szeregowych (open, print, inkey, input) realizowane były poprzez procedury programowe bez użycia mechanizmu przerwań. Taki sposób obsługi transmisji w zależności od jej intensywności może powodować gubienie znaków podczas odbioru. Jeśli jakiś fragment programu pochłonie więcej czasu niż dwa znaki, jeden zostanie zgubiony. Rozwiązaniem problemu jest wykorzystanie przerwań do odbioru i buforowanie znaków. Nadawanie możemy realizować programowo poprzez port wirtualny.
Zrobioną praktycznie już mam wersję na przerywaniach nieco jednak dłuższą, w starszej wersji przesyłałem każdorazowo 8 bajtów w międzyczasie wykonując dodawanie, sprawdzanie czy pewne klawisze sterujące w komputerze zostały naciśnięte (inkey), nie zaobserwowałem nigdy gubienia znaków. Taki łazik z telemetrią. Kiedyś słyszałem od Kolegi piszącego w asamblerze, że deasamlacja kodu z heks-a daje "pokrętny kod", i stąd nie wiedziałem, że jakikoliwiek jest sens jest to robić -jak widać myliłem się. Dzięki Adamie za wykonanie ciekawego porównania.
Disassembler
Pisząc oprogramowanie w językach wysokopoziomowych (Bascom, C, Pascal) warto rzucić okiem na kod generowany przez kompilator. Jeśli środowisko kompilatora nie generuje pliku z kodem assemblera lub autor projektu udostępnia tylko pliki hex-a możemy zrobić to sami zewnętrznym disassemblerem. Wadą tej metody jest brak powiązania z instrukcjami wysokopoziomowymi, brak komentarzy, brak nazw zmiennych, instrukcji, funkcji, procedur tablic itd. , jednym słowem sam na sam z "gołym kodem".
Proste disassemblery nie radzą sobie z danymi umieszczanymi w kodzie programu (stałe, tablice, łańcuchy), zamieniając je bez sensu na stosowny kod programu dlatego musimy robić to rozważnie. Jeśli znamy dobrze procesor, posiadamy schemat urządzenia oraz pewne doświadczenie w assemblerze rozpracowanie takiego kodu to tylko kwestia czasu. Jako przykład kilka prostych instrukcji Bascoma oraz odpowiedni kod assemblera.
Kod:
;If Pind.2 = 0 Then
sbic PIND, 2 ; 008C 9982
rjmp avr00AF ; 008D C021
;Waitms 25
ldi r24, 0x19 ; 008E E189
ldi r25, 0x00 ; 008F E090
rcall avr0153 ; 0090 D0C2
;If Pind.2 = 0 Then
sbic PIND, 2 ; 0091 9982
rjmp avr00AF ; 0092 C01C
;Portd.3 = 0
cbi PORTD, 3 ; 0093 9893
;Wait 3
ldi ZL, 0x03 ; 0094 E0E3
ldi ZH, 0x00 ; 0095 E0F0
rcall avr011B ; 0096 D084
Wirtualny kanał szeregowy
Rafał, jeśli strumień danych do odbioru jest mały a stopień obciążenie procesora niewielki to może pracować to poprawnie nawet bez przerwań. W prostych aplikacjach możemy często sprawdzać czy jest nowy znak w buforze aby go odczytać. Pamiętajmy jednak, że dane docierają do procesora asynchronicznie w stosunku do jego algorytmu pracy. Jeśli trafimy na moment w którym procesor jest zajęty dłużej obsługą innego zadania to tylko przerwanie daje mam gwarancję pełnej obsługi odbioru. System przerwań w mikroprocesorach to jedno z najmocniejszych narzędzi budowania aplikacji dlatego warto go lepiej poznać.
Adamie oczywiście masz racje z przerywaniami, dodając jeszcze odczyt położenia gps i wirtualne comy musiałem posłużyć się przerywaniami -nie było już wyjścia. Układ obsługuje w sumie 2 jednokierunkowe rs (GPS i luksomierz) i pełny dwukierunkowy rs (sterowanie i przekazywanie informacji zwrotnej o położeniu, natężeniu oświetlenia, temperaturze, wilgotności i ciśnieniu -taki łazik "ala marsjański", choć na marsie gps chyba nie działa ;-). Tak jak piszesz gubił dane szczególnie z odczytu położenia z ramki nmea bez przerywań. ciągu ostatnich paru dni miałem więcej czasu to pobawiłem się. Ogólnie lubię język wysokiego poziomu za łatwość pisania, a, że kompilator kosztuje,oscyloskop też kosztuje a większa pamięć w procesorze no cóż parę złoty drożej -dla mnie warto.
(20-08-2010 14:24)sp5fcs napisał(a): [ -> ]Disassembler
Pisząc oprogramowanie w językach wysokopoziomowych (Bascom, C, Pascal)
Hmm Adamie, to są dostępne kompilatory na '51 (AVR) z Pascal-a, nie spotkałem jeszcze żadnego. Możesz coś podrzucić?
Embedded Pascal może to?
btw. Pierwsza łączność via MikroPrzemiennik przeprowadzona, znaczy się działa.

Paweł, zanim zadasz pytanie na forum zapytaj GOOGLE co mają na ten temat.
Turbo51 - darmowy kompilator Pascala dla rodziny 8051, zgodny z Tubo Pascalem 7 firmy Borland.
mikroPascal for AVR - komercyjny kompilator pacala dla AVR
Ryszard, gratuluję pozytywnych testów sterownika, pomyśl nad ostatecznym schematem to druk narysujemy wspólnymi siłami Kolegów z forum.
Ja Ryśku, że tak sobie pozwolę napisać z duchem krótkofalarskim, podtrzymuje chęć pomocy we wszystkich wspólnych przedsięwzięciach, szczególnie w Warszawie moim rodzinnym mieście. A teraz zmykam poczytać w necie o tym „Twoim” EchoLinku, przecież byłem, jestem nadal sp5sai.ampr.org i jak pisał znany wszystkim poeta
Adam Asnyk napisał(a):Trzeba z żywymi naprzód iść,
Po życie sięgać nowe,
A nie w uwiędłych laurów liść
Z uporem stroić głowę
Wy nie cofniecie życia fal!
Nic skargi nie pomogą:
Bezsilne gniewy, próżny żal!
Świat pójdzie swoją drogą!
I tym poetyckim akcentem
Witam kolegów,
korzystam z zaproszenia i informuję, że opublikowałem już dziesiątki praktycznych programów, którymi dzielę się bez ograniczeń.
Pokazuję też kompilator, opisuję jak postępować z fusebitami, pokazuję fotki i schematy.
Zapraszam na moją stronę:
http://www.henwyd.republika.pl
SP3JCG
Witaj Rysiek,
cieszę się, że wybrałeś Bascom, trochę lekceważony przez innych programistów. Zapewniam Cię, że w tym programie napiszesz wszyskie pomysły. Bądź wytrwały. Zaglądnij na moją stronę, zobaczysz ile urządzeń zbudowałem w oparciu o Bascom.
http://www.henwyd.republika.pl
Pozdrawiam, SP3JCG.
Wszystkie programy są moimi własnymi, więc można z nich korzystać bez ograniczeń.
SP3JCG