HomeMade
Bascom AVR - Wersja do druku

+- HomeMade (http://sp-hm.pl)
+-- Dział: Oprogramowanie (/forum-84.html)
+--- Dział: Technika programowania mikroprocesorów (/forum-85.html)
+--- Wątek: Bascom AVR (/thread-463.html)

Strony: 1 2 3 4 5


Bascom AVR - SP5FCS - 15-08-2010 22:43

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.


RE: Bascom - SQ4AVS - 20-08-2010 8:31

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.


RE: Bascom - SP5FCS - 20-08-2010 14:24

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ć.


RE: Bascom - SQ4AVS - 20-08-2010 20:12

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.


RE: Bascom - SQ6OXK - 21-08-2010 12:42

(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ć?


RE: Bascom - SQ9MDD - 21-08-2010 12:48

Embedded Pascal może to?

btw. Pierwsza łączność via MikroPrzemiennik przeprowadzona, znaczy się działa. Smile


RE: Bascom - TG50 - 21-08-2010 13:21

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.


RE: Bascom AVR - SP5SAI - 23-08-2010 16:11

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


RE: Bascom AVR - Klim_on - 27-08-2010 20:35

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.


RE: Bascom AVR - Klim_on - 28-08-2010 17:54

Wszystkie programy są moimi własnymi, więc można z nich korzystać bez ograniczeń.
SP3JCG