RTV forum PL | NewsGroups PL

Co oznacza instrukcja .dw $ffff w kodzie assembly AVR oraz jej funkcja?

Co to za instrukcja - dw $ffff (AVR asm)?

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Co oznacza instrukcja .dw $ffff w kodzie assembly AVR oraz jej funkcja?

Goto page 1, 2  Next

Q
Guest

Sun Oct 31, 2004 7:26 pm   



mam taki ciag instrukcji w asmie:

[...]
OUT SPMCR, R17
SPM
.dw $ffff
NOP
RET

i nie kumam co to za instrukcja o kodzie $ffff?
co to w ogole tu robi?

ps.
gdzie na sieci mozna znalezc informacje
o tym jaki kod (hex) ma dana instrukcja?

Marcin Stanisz
Guest

Sun Oct 31, 2004 8:13 pm   



On Sun, 31 Oct 2004 20:26:58 +0100, Q wrote:
Quote:
gdzie na sieci mozna znalezc informacje
o tym jaki kod (hex) ma dana instrukcja?

Zapewne tutaj:

http://www.atmel.com/dyn/resources/prod_documents/DOC0856.PDF

Pozdrawiam
--
Marcin Stanisz

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

r_dziurek
Guest

Sun Oct 31, 2004 9:01 pm   



Quote:
mam taki ciag instrukcji w asmie:

       [...]
       OUT SPMCR, R17
       SPM
       .dw $ffff
       NOP
       RET

i nie kumam co to za instrukcja o kodzie $ffff?
co to w ogole tu robi?

ps.
gdzie na sieci mozna znalezc informacje
o tym jaki kod (hex) ma dana instrukcja?



To nie jest instrukcja tylko dyrektywa asemblera. Chyba najlepiej szukać w
jakimś helpie do kompilatora bo dyrektywy mogą się różnić od siebie między
kompilatorami.

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Rafal Baranowski
Guest

Sun Oct 31, 2004 9:49 pm   



Użytkownik "Q" <oink@gazeta.gov.pl> napisał w wiadomości
news:cm3efo$fd2$1@nemesis.news.tpi.pl...
Quote:
[...]
OUT SPMCR, R17
SPM
.dw $ffff
NOP
RET

A to działa?

AVR-ki nie znają instrukcji o kodzie 0xFFFF. SPM zajmuje jedno słowo, więc
to też nie jego. Skąd to wziąłeś? Układ traktuje to pewnie jako nop, bo
jakoś musi. ;)

Pzdr,
Raf.

Piotrek Sz.
Guest

Sun Oct 31, 2004 10:27 pm   



Q <oink@gazeta.gov.pl> napisał(a):

Quote:
mam taki ciag instrukcji w asmie:

[...]
OUT SPMCR, R17
SPM
.dw $ffff
NOP
RET

i nie kumam co to za instrukcja o kodzie $ffff?
co to w ogole tu robi?

ps.
gdzie na sieci mozna znalezc informacje
o tym jaki kod (hex) ma dana instrukcja?



Zdaje mi się ,że "zdisassemblowałeś" jakiś HEX lub BIN Smile
Jeśli tak , to co masz powyżej i poniżej .dw $ffff to też nie muszą być
instrukcje tylko dane.Żeby się o tym przekonać to trzeba troszku poruszać
głową bo inaczej nici ze źródełka :-)


--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

greg
Guest

Sun Oct 31, 2004 10:35 pm   



a nie jest to definicja DefineWord?
czyli umeisc w pameici programu stala? do ktorej sie potem odwolujesz?
byc moze to co zdisassemblerowales to byl obszar danych, np jakas tablica..i
niektre dane ci rozpoznal jako instrukcje, ktore raczej sensu nei beda maily
razem..a czesc jako .DW
niestety, tutaj na to madrych dekompilatorow nie ma chyba.trzeba usiasc i
zaczac myslec jak procek trawiac slowo rozkaz po rozkazie..Smile
albo wrzucic na symulator, ale wraz trzeba myslec:)

Paweł
Guest

Sun Oct 31, 2004 10:56 pm   



Quote:
[...]
OUT SPMCR, R17
SPM
.dw $ffff
NOP
RET

i nie kumam co to za instrukcja o kodzie $ffff?
co to w ogole tu robi?

To jest dyrektywa wstawiająca słowo 0xffff
Też się zastanawiałem nad tym przykładem. Nie wiem w jakim celu Atmel zaleca
tak robić.
Program działa z tym .dw jak i bez niego.

Paweł

Rafal Baranowski
Guest

Sun Oct 31, 2004 11:38 pm   



Użytkownik "Paweł" <pawel.neo@neostrada.pl> napisał w wiadomości
news:cm3qko$8aq$1@atlantis.news.tpi.pl...
Quote:
To jest dyrektywa wstawiająca słowo 0xffff
Też się zastanawiałem nad tym przykładem. Nie wiem w jakim celu Atmel
zaleca
tak robić.
(..)

Czy możesz zdradzić gdzie to zalecają? Nigdzie nie znajduję.

Pzdr,
Raf.

Q
Guest

Mon Nov 01, 2004 2:18 am   



Quote:
http://www.atmel.com/dyn/resources/prod_documents/DOC0856.PDF

dzieki Smile

Q
Guest

Mon Nov 01, 2004 2:20 am   



Quote:
To nie jest instrukcja tylko dyrektywa asemblera.

wiem, ze to nie jest wprost instrukcja;
na me oko to po prostu wsadzenie
slowa 0xFFFF w kod;

tyle, ze jak, czemu, i dlaczego dziala? Smile

Q
Guest

Mon Nov 01, 2004 2:20 am   



Quote:
Zdaje mi się ,że "zdisassemblowałeś" jakiś HEX lub BIN Smile

zle Ci sie zdaje Smile

Q
Guest

Mon Nov 01, 2004 2:21 am   



Quote:
A to działa?

dziala!

Quote:
AVR-ki nie znają instrukcji o kodzie 0xFFFF. SPM zajmuje jedno słowo, więc
to też nie jego.
Skąd to wziąłeś?

przykladowy kod boot loadera;

Q
Guest

Mon Nov 01, 2004 2:23 am   



Quote:
Czy możesz zdradzić gdzie to zalecają? Nigdzie nie znajduję.

w boot loader'ze :)

ps. znalazlem tylko taki, 'lajkoniczny' opis :(

..word 0xFFFF ; for future part compatibility, instruction
alignment

"for future part compatibility, ..."

ciekawe...

Wojtek Kaniewski
Guest

Mon Nov 01, 2004 11:52 am   



Q wrote:
Quote:
mam taki ciag instrukcji w asmie:

[...]
OUT SPMCR, R17
SPM
.dw $ffff
NOP
RET

i nie kumam co to za instrukcja o kodzie $ffff?
co to w ogole tu robi?

najpierw myślałem, że to samo co NOP (po ustawieniu bitu SPMEN, program
ma 4 cykle na wywołanie instrukcji SPM i możliwe, że w ten sposób Atmel
się zabezpiecza przed katastrofą, jeśli program pójdzie w maliny), ale
potem znalazłem wzmiankę, że Atmel zaleca to ze względu na pipelining.
pewnie łatwiej by było, gdybyś podał skąd wziąłeś ten plik.

w.

Adam Dybkowski
Guest

Mon Nov 01, 2004 10:06 pm   



Q wrote:

Quote:
mam taki ciag instrukcji w asmie:

[...]
OUT SPMCR, R17
SPM
.dw $ffff
NOP
RET

i nie kumam co to za instrukcja o kodzie $ffff?

Pewnie znalazłeś to w swoim kodzie w wyniku doczepienia standardowego (w
WinAVR) pliku nagłówkowego boot.h i wykorzystania tamtejszych funkcji. Z
punktu widzenia boot.h cytat wygląda następująco (przykładowy kod
funkcji kasowania strony pamięci programu):

#define __boot_page_erase_alternate(address) \
({ \
boot_spm_busy_wait(); \
eeprom_busy_wait(); \
__asm__ __volatile__ \
( \
"movw r30, %2\n\t" \
"sts %0, %1\n\t" \
"spm\n\t" \
".word 0xffff\n\t" \
"nop\n\t" \
: "=m" (__SPM_REG) \
: "r" ((uint8_t)__BOOT_PAGE_ERASE), \
"r" ((uint16_t)address) \
: "r30", "r31" \
); \
})

Tutaj właśnie występuje ten magiczny rozkaz FFFF. Wersje funkcji z
"alternate" w nazwie wykorzystywane są przy kompilacji dla procesorów
ATmega161/163/323:

"Alternate versions of the macros use 16-bit addresses and require
special instruction sequences after SPM."

A dokładną receptę na te zawiłości przytacza sam Atmel, w PDFie do
ATmegi 323, strona 180:


"To ensure proper instruction pipelining after programming action (Page
Erase, Page Write, or Lock bit write), the SPM instruction must be
followed with the sequence (.dw $FFFF - NOP) as shown below:
spm
..dw $FFFF
nop
If not, the instruction following SPM might fail. It is not necessary to
add this sequence when the SPM instruction only loads the temporary buffer.


Teraz już chyba wszystko jasne.

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

Goto page 1, 2  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Co oznacza instrukcja .dw $ffff w kodzie assembly AVR oraz jej funkcja?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map