organizacja pamięci w Atmega2561

Sep 12, 2016 12 Replies

Kuśwa, nie mogę zrozumieć.



Ponoć tam jest 256K flash. "Liniowo", jak stoi w dataszicie. No ale - adres bootloadera (jak jest włączony) podają 1F800. No jak - w środku pamięci ??



Poza tym, mam taki zonk z Bascomem (bez bootloadera na razie). Otóż, mam w programie proste CRC. W tym celu w programie jest linijka



DATA "CRC=0000"



Te zera są później zastępowane wartością jakąś, ale to nieważne. Po prostu chodzi o to, że w programie jest zapisana poprawna wartość CRC.



I w czasie działania program odszukuje "w sobie" ten string. I fajnie - tylko podaje mi, że on jest pod adresem 3032A. Czyli pod adresem "poza" programem jakby, bo program zajmuje teraz 1DBF4.



Za cholerę nie mogę skumać jak to jest zorganizowane. Nawet bez bootloadera. A co dopiero z.



A musiałem się przesiąść z M128 bo tam mi program już zajmował 97%....



Ktoś może mnie oświecić proszę ?


Użytkownik "sundayman" napisał w wiadomości grup dyskusyjnych:nr6i30$pvp$ snipped-for-privacy@node2.news.atman.pl...

Czemu nie. Kompatybilnosc ?

Ty sie lepiej pytaj jak sobie poradzili z cala reszta, to w koncu

16-bitowy procesor.

A to nie jest kwestia slowa/bajty ?

J.

mnie się pytasz ? :) Bo ja nie wiem...

A może problem polega na działaniu polecenia Cpeekh ? Ono sobie jakoś tam przelicza adres zadany, bo "normalnie" przeznaczone jest to odczytu z pamięci powyżej pierwszych 64K. No i w M128 to działa zrozumiale.

Ale w M2561 nie rozumiem. Zostawiając na razie bootloader,bo nie używam teraz. Mam zamiar, ale na razie stanąłem na tym CRC.

Nie, jest to okienkowane w dośc prymitywny sposób:

formatting link
Memory access is limited to the current data segment of 64K bytes. To access another data segment in devices with more than 64K bytes data space, the RAMPX, RAMPY, RAMPZ in register in the I/O area has to be changed.

formatting link
formatting link

Na końcu.

formatting link
The ATmega640/1280/1281/2560/2561 contains 64K/128K/256K bytes [...] instructions are 16 bit or 32 bit wide, the Flash is organized as

32K/64K/128K × 16.

sundayman snipped-for-privacy@poczta.onet.pl> napisał(a):

Bootloader jest tutaj na końcu Flasha, nie musi być na początku.

W dniu 2016-09-12 o 17:37, sundayman pisze:

Adresujesz SŁOWA a nie bajty

Że bootloader jest na końcu to wiem. Ale - jeżeli adresuję SŁOWA, to kuśwa instrukcja CpeekH działa bez sensu ?

No bo podaję adres słowa, a w wyniku dostaję bajt ?? Ale to by się nie zgadzało z tymi informacjami tutaj:

formatting link
Z tego co tam napisane (ostatecznie potwierdzone przecież przez autora Bascoma) by wynikało, że jednakowoż dla cpeekh(x) x oznacza kolejny numer bajtu.

___________________________________________________

  • bardzo proszę bez komentarzy "nie pisz w bascom". Jakbym mogł, to bym nie pisał :) Tak wyszło i w tym przypadku musi tak zostać...

W dniu 2016-09-12 o 17:37, sundayman pisze:

Bascom się do poważniejszych rzeczy nie nadaje, w C zajmie Ci to 1/3 pamięci i zmieścisz się w 64-ce. Co do adresacji jak już Ci napisali, adresowanie jest słowami 16-to bitowymi, jak to Bascom przelicza to nie wiem.

Ja głupi. Okazało się, że mój błąd. Zamiast zmiennej dword w pętli przeszukującej flash dałem word. No i to dało taki efekt. Jak poprawiłem to jest już chyba dobrze.

To jest adres w wordach 16 bitowych

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required