Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

asembler AVR, brak instrukcji dzielenia, lista rozkazów.

21 Wrz 2006 16:54 1795 5
  • Poziom 16  
    Witam.
    By zapoznać się na dobre z AVR'ami rozpocząłem pisanie programu z procedurkami które później będe wykorzystywał. Jak zawsze, chcę by każda część programu była w 100% moja, żadnego kopiowania z innych źródeł. Niestety, napisanie jakiejś bardziej skomplikowanej procedurki od podstaw pochłania dużo czasu. O wiele prościej by było sięgnąć do jakiegoś gotowca. Ale nie ja! Mój upór nie pozwala mi na to! Będe siedział cały wieczór i w efekcie napiszę niewiele albo nic zamiast skorzystać z ineternetu i zawartych tam informacji. Czy Wy też tak macie? To chyba jakieś skrzywienie zawodowe? Zamiast ułatwiać sobie życie to ja je jeszcze utrudniam.

    No ale do rzeczy. Wcześniej programowałem 51. Idąc z begiem czasu i nie chcąc zostawać w tyle, sięgam po nowsze AVR'y. No więc zabieram się za AT90s2313 w asemblerze. Rozpoczynam pisanie procedur. I co? Zdenerwowałem się i zirytowałem. A dlaczego? A no dlatego:

    - brak instrukcji dzielenia
    - brak możliwości bezpośredniego dodania stałej do rejestru
    - nie wszystkie mikrokontrolery AVR posiadają pełną listę rozkazów np.
    - w at90s2313 brak jest instrukcji mnożenia!
    Dodatkowo, organizacja pamięci programu w słowa... bllee, komplikuje to trochę odczyt danych z pamięci programu... w 51 jest 16 bitowy DPTR i jest pięknie, a tu...

    Jak dla mnie to porażka. Wychodzi na to, że te braki trzeba uzupełniać samemu np. napisać terzeba procedurkę mnożącą, dzielącą... Przecież to zajmie niepotrzebnie pamięć. Ale lipa!
    Zawiodłem się na AVR'ach ale w asemblerze, bo widząc kod w C to wszystko wygląda pięknie i tu nie ma takich problemów.


    Co Wy na to?
  • Poziom 12  
    Równie dobrze można powiedzieć że furmanka jest lepsza od samochodu, bo w samochodzie nie ma na co batem machać. 51 i AVR to są dwie zupełnie różne konstrukcje. A co do mnożenia i dzielenia to przesadzałem kiedyś program z 52 na 8515 dlatego że AVR liczył znacznie szybciej mimo braku sprzętowego mnożenia.
    Po prostu trzeba przyjąć do wiadomości że każdy procesor obsługuje się trochę inaczej (zwłaszcza na poziomie asemblera). AVR jest zdecdydowanie berdziej elastyczny w programowaniu - tylko nie można patrzeć na niego poprzez doświadczenia w programowaniu 51.
  • Poziom 16  
    Cytat:
    że furmanka jest lepsza od samochodu, bo w samochodzie nie ma na co batem machać
    - pięknie to ująłeś! Będe cytował ten tekst przy programowaniu :) Dzięki
  • Poziom 11  
    tak swietnz ten tekst :P mnie nigdy nie interesowała elektornika procesory i takie tam :D
    zostałem zmuszony do zapoznania sie z tym na uczelni i troche zaczyna mi sie podobac :)
    jeszcze zeby moj angileski nie byl tak kulawy to było by swietnie
  • Specjalista techniki cyfrowej
    patrx napisał:
    - brak możliwości bezpośredniego dodania stałej do rejestru

    A nieprawda. Można odjąć stałą. Można odjąć wartość ujemną...
    [quote="patrx"]- w at90s2313 brak jest instrukcji mnożenia![/qute]
    Ale w inych jest.
    Zresztą programowe mnożenie nie jest wcale taki skomplikowane, a wystarczy że procedurę napiszesz tylko raz.

    patrx napisał:
    Dodatkowo, organizacja pamięci programu w słowa... bllee, komplikuje to trochę odczyt danych z pamięci programu... w 51 jest 16 bitowy DPTR i jest pięknie, a tu...

    A tu masz aż trzy rejestry których możesz użyć jako szesnastobitowych wskaźników na pamięć RAM (X, Y i Z), a jeden z nich (Z) do odczytu pamięci programu. Dostępny masz tryb adresowania z postinkrementacją, predekrementacją i przesunięciem (dwa ostatnie tylko w pamięci RAM). Pamięć programu adresowana jest bajtowo jeżeli używasz instrukcji LPM.

    patrx napisał:
    Jak dla mnie to porażka. Wychodzi na to, że te braki trzeba uzupełniać samemu np. napisać terzeba procedurkę mnożącą, dzielącą... Przecież to zajmie niepotrzebnie pamięć. Ale lipa!
    Zawiodłem się na AVR'ach ale w asemblerze, bo widząc kod w C to wszystko wygląda pięknie i tu nie ma takich problemów.
    Co Wy na to?

    Procesor dobiera się do specyficznych zastosowań, a nie odwrotnie. W jednym urządzeniu lepiej sprawdzi się AVR, w innym '51.
    Wśród AVR wybór jest ogromny, jeżeli potrzebujesz w pełni wypasiony procek, to seria ATmega, jak coś małego to ATtiny.
    Jeżeli naprawdę potrzebujesz instrukcji mnożenia, to wybierz układ który ją posiada.

    Zresztą '51 to CISC, czyli przystosowane bardziej do łatwego i przyjemnego programowania w asm.
    AVR to RISC, taka 'filozofia', a dlaczego tak wygląda zestaw instrukcji napisane jest tu: http://pl.wikipedia.org/wiki/RISC

    Jak zaczynałem z AVR też miałem takie wrażenie, ale ogromna (w porównaniu z '51) wydajność tego rdzenia mnie przekonała.
  • Poziom 29  
    Witam.
    Pierwszy raz mi nie powiodła się przesiadka z asm'51 na asm'avr - ze względu właśnie różnorodności poleceń itp. Teraz podjąłem się drugi raz i nie jest tak źle - piszę po kolei swoje odrębne procedurki - tak jak piszesz muszą zajmować niestety więcej pamięci ale za to atmegi mają jej sporo w porównaniu do '51. Jeśli ty jesteś "skrzywiony" to ja też - zawodowo projektuję układy mikroprocesorowe i dopiero raz w życiu skopiowałem jedną procedurkę z netu... poza nią też piszę wszystko znak, po znaku - ale swoje... Początki są trudne ale zaczynam kochać AVRstudio za ".include" dzięki temu dołączam procedurki z plików już przygotowanych a główny program już się pisze prawie jak w języku wyższego poziomu - a to dalej assembler... pozdrawiam.

    ps dodam, że walczę z AVR asm dopiero tydzień...