AVR - rezerwowanie bajtow w pamieci SRAM

Nov 18, 2004 4 Replies

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



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

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.

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

nie przesiadaj sie na C :)

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required