AVR - rezerwowanie bajtow w pamieci SRAM

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

Reply to
Marcin Korus
Loading thread data ...

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.

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

Reply to
T.M.F.

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":

formatting link

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.
Reply to
Adam Dybkowski

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

nie przesiadaj sie na C :)

Reply to
Q

Użytkownik T.M.F. napisał: [..]

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

Reply to
AlexY

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.