RTV forum PL | NewsGroups PL

Jak rezerwować bajty i bit w pamięci SRAM w AVR 2313 w asemblerze?

AVR - rezerwowanie bajtow w pamieci SRAM

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak rezerwować bajty i bit w pamięci SRAM w AVR 2313 w asemblerze?

Marcin Korus
Guest

Thu Nov 18, 2004 10:03 pm   



witam
od niedawna przesiadlem sie z '51 na AVRy i mam takie pytanko na ktore nie
umie znalezc odpowiedzi
w '51 mialem obszar pamieci (np 2051 adresy 20h - 7Fh) z ktorego moglem
sobie rezerwowac rejestry do dalszych operacji np:

czynnik_1 equ 31h

w AVR 2313 mam tez obszar (adresy 60h - DFh) tylko nie bardzo wiem jak tam w
asemblerze zadeklarowac jakas nazwe dla danego bajtu zeby moc korzystac z
nazwy a nie adresu rejestru w pamieci

w przykladowych programach dla AVR w obszarze SRAM jest umiejscowienie
stosu:

ldi r16,low(RAMEND) ;dla 2313 RAMEND = DFh
out SPL,r16

czyli cala pamiec SRAM przeznaczona na stos a moglbym zamiast RAMEND dac
adres np DDh i wtedy dwa najstarsze bajty moge swobodnie uzywac (po
wczesniejszej deklaracji)

i jeszcze jedno czy mozliwa jest w AVR deklaracja pojedynczych bitow z
obszaru SRAM (w '51 byl pewien obszar (20h - 2Fh) w ktorym mozna bylo
deklarowac pojedyncze bity

tylko nie piszcie mi zebym sie przesiadl na C bo wiem o tym i dzialam w tym
kierunku jednak od zawsze pisalem w asemblerze i pewnych nawykow ciezko sie
wyzbyc :)

z gory dziekuje za odpowiedz
marcin korus

T.M.F.
Guest

Thu Nov 18, 2004 11:17 pm   



Quote:
od niedawna przesiadlem sie z '51 na AVRy i mam takie pytanko na ktore nie
umie znalezc odpowiedzi
w '51 mialem obszar pamieci (np 2051 adresy 20h - 7Fh) z ktorego moglem
sobie rezerwowac rejestry do dalszych operacji np:

czynnik_1 equ 31h

w AVR 2313 mam tez obszar (adresy 60h - DFh) tylko nie bardzo wiem jak tam w
asemblerze zadeklarowac jakas nazwe dla danego bajtu zeby moc korzystac z
nazwy a nie adresu rejestru w pamieci

nazwa: .DB 1 - nazwa wskazuje na bajt w pamieci
nazwa: .DB 2 - teraz wskazuje na obszad dwubajtowy

Natomiast equ przyporzadkowywuje etykiecie jakas liczbe, ale nic nie
rezerwuje w pamieci.


Quote:
i jeszcze jedno czy mozliwa jest w AVR deklaracja pojedynczych bitow z
obszaru SRAM (w '51 byl pewien obszar (20h - 2Fh) w ktorym mozna bylo
deklarowac pojedyncze bity

A jak zamierzalbys sie do nich odwolywac?
Mozesz zadeklarowac pewne bity w bajcie i stosownie nim operowac
operatorami |, & i ^ oraz << i >>




--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.

Adam Dybkowski
Guest

Thu Nov 18, 2004 11:23 pm   



Marcin Korus wrote:

Quote:
w '51 mialem obszar pamieci (np 2051 adresy 20h - 7Fh) z ktorego moglem
sobie rezerwowac rejestry do dalszych operacji np:

czynnik_1 equ 31h

w AVR 2313 mam tez obszar (adresy 60h - DFh) tylko nie bardzo wiem jak tam w
asemblerze zadeklarowac jakas nazwe dla danego bajtu zeby moc korzystac z
nazwy a nie adresu rejestru w pamieci

Aby zmienna umiescic w rejestrze (czyli po prostu zdefiniowac inna nazwe
dla rejestru) piszesz np. w ten sposob:

..def licznik =r21

Adresy zmiennych lezacych w RAMie deklarujesz tak samo jak inne stale:

..equ InputBufferBegin =RAMEND-127

Ale znacznie lepiej powierzyc przypisywanie konkretnych adresow
asemblerowi i skorzystac z dobrodziejstw sekcji danych:

..dseg
var1: .byte 1 ; rezerwacja 1 bajtu na zmienną

..cseg
lds r16, var1 ; załadowanie zawartości var1
; do rejestru r16

Polecam lekturę "AVR Assembler User Guide":
http://www.atmel.com/dyn/resources/prod_documents/doc1022.pdf

Quote:
i jeszcze jedno czy mozliwa jest w AVR deklaracja pojedynczych bitow z
obszaru SRAM (w '51 byl pewien obszar (20h - 2Fh) w ktorym mozna bylo
deklarowac pojedyncze bity

Nie jest mozliwa. Mozesz natomiast napisac definicje numerow bitow w
komorkach pamieci, ktore normalnie zadeklarowales jako bajty. Wtedy
robisz operacje np. ustawienia n-tego bitu w komorce o adresie x. Gdy
sie to zalatwi odpowiednimi makrami to nawet moze byc wygodnie. Jezeli
mozesz to jak najwiecej danych trzymaj w rejestrach (w AVRach jest ich
32) - dostepy do nich sa duzo szybsze niz do reszty RAMu.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Q
Guest

Fri Nov 19, 2004 12:10 am   



Quote:
sobie rezerwowac rejestry do dalszych operacji np:

czynnik_1 equ 31h

hm...
a nie def?
np.:
..def temp1=r01

Quote:
tylko nie piszcie mi zebym sie przesiadl na C

nie przesiadaj sie na C Smile

AlexY
Guest

Fri Nov 19, 2004 5:29 pm   



Użytkownik T.M.F. napisał:
[..]
Quote:
nazwa: .DB 1 - nazwa wskazuje na bajt w pamieci
nazwa: .DB 2 - teraz wskazuje na obszad dwubajtowy

Natomiast equ przyporzadkowywuje etykiecie jakas liczbe, ale nic nie
rezerwuje w pamieci.

przy czym wykozystuje sie to rowniez do etykietowania pamieci i chyba o
ten kontekst inicjatorowi watku chodzilo
niemniej masz racje, nic to nie rezerwuje

elektroda NewsGroups Forum Index - Elektronika Polska - Jak rezerwować bajty i bit w pamięci SRAM w AVR 2313 w asemblerze?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map