Jak mały atmel ma załadować procedury do wew. pamięci i je wykonać?

Feb 02, 2005 15 Replies

Jak mały atmel ma załadować procedury z eepromu na I2C do swojej wew. pamięci i je wykonać?



Niedawno pytałem o podobną sprawę na grupie, ale odpowiedzieliście że sie nie da. po rozmowie z promotorem, okazało się, że Atmel może załadować z pamięci eeprom podłączonej do I2C procedury programu, zapisać je we własnej pamięci i je wykonać.



Jeśli ktoś z was orientuje, do jakiej pamięci są ładowane te procedury i jak je wywołać, to bardzo prosze o przykład takiego zastosowania w ASMie, lub chociaż wytłumaczenie jak to sie odbywa.



Z góry dziękuje.


może lepiej zmienić promotora, zanim nie będzie za późno? (zakładam, że ,,mały atmel'' jest synonimem AT89Cx051.)

w.

Zaden i prawie kazdy:)

Zalezy co chcesz osiągnac. Kazdy AVR (bo ta architekture masz na mysli?), ktory posiada instrukcje SPM moze to zrobic. Za jej pomoca mozesz przeprogramowac programowo FLASHa zawierajacego kod programu, np. zawartoscia zewnetrznej kostki. Problem tylko w tym, ze ilosc programowan FLASHa jest ograniczona, wiec jesli czesto to planujesz robic to jest to bez sensu. Jesli z kolei rzadko (cos jak updaty softu) to prosciej napisac jakis bootloader, ktory zdalnie sobie pobierze kod programu, niz zaszywac w elektronice jakas pamiec specjalnie do tego celu). Jesli musisz wykonywac program z zewnetrznej pamieci to pomysl o '51 a nie AVR.

W notach aplikacyjnych atmela masz przyklady - szukaj hasla bootloader.

Sprecyzuj, co to jest "mały atmel". AT89C2051 czy AT90S1200 czy ATmega8L czy AT91RM9200 (niektórym może wydawać się mały ;-)). Atmel produkuje od groma różnych procesorów i wiele z nich jest małych.

Pewnego dnia Panoramix przemówił ludzkim głosem:

Jeśli użyjesz 89C51, to po przekroczeniu adresu 4095 procesor będzie próbował pobierać instrukcje z zewnętrznej pamięci programu (pod warunkiem, że nie zablokujesz tego). Jeśli teraz podłączysz do procesora pamięć ram tak, żeby była widoczna jednocześnie jako pamięć programu i jako zewnętrzna pamięć danych(OE<-PSEN&RD, WR<-WR, CS<-0) to będziesz mógł przepisać z jakiejkolwiek zewnętrznej pamięci kod programu do xram, a następnie go uruchomić.

Ale ja robie to na małym atmelu, a nie na intelu 8051, tam nie ma specjalnych wyjść do obsługi zew pamięci programu.

Panoramix <panoramix snipped-for-privacy@BEZSPAMUPROSZEo2.pl napisał(a):

Załadować może jedynie do RAM-u , ale nie może ich wywołać (wykonać).

W takim razie Twój promotor wie o czymś , oczym nie wiedzą konstruktorzy z Atmela ;)

Jedyna osoba , która Ci może pomóc , to Twój promotor.

Nie ma za co :)

Piotrek

Panoramix napisał(a):

Jedyną możliwością bowiem jest pobieranie z zewnętrznej pamięci I2C czy SPI (bo taką pamięć możesz bez problemu podłączyć do 2051) czegoś na kształt pseudokodu i interpretowanie go przez program zawarty we flash'u mikrokontrolera. Być może właśnie o to chodziło Twojemu promotorowi, abyś napisał jakiś prosty interpreter.

Jak miał by wyglądać taki interpreter? Bo jakoś nie jestem w stanie sobie tego wyobrazić jak to napisać.

Dowiedz się najpierw, czy promotorowi na 100% chodziło o takie rozwiązanie. Bo to może przerost formy nad treścią i skuteczniej będzie zastosować inny procesor (np. posiadający w środku pamięć RAM, z której można wykonywać program ew. z możliwością dołączenia na zewnątrz takiej pamięci).

Pomysłów na interpreter jest tyle co czytających tą grupę. ;-) Możesz np. w EEPROMie trzymać 2-bajtowe rozkazy składające się z 1 bajtu polecenia i 1 bajtu danych. Potem wymyślasz sobie wirtualne rejestry, które będzie obsługiwać interpreter (przykładowo M0 do M8) i kody rozkazów typu "załaduj daną do rejestru M0", "załaduj daną do rejestru M1", "dodaj M1 i M0 zapamiętaj wynik w M1". Poczytaj spis rozkazów procesora (asemblera) to na pewno coś wymyślisz. Można też od razu wysokiego poziomu "wypisz M0 na LCD w postaci szestnastkowej".

W ostateczności pozostaje wcisnąć do procesora interpreter BASICa (niestety w 2KB pamięci programu napewno go nie zmieścisz) albo maszynę wirtualną Javy. Wtedy do EEPROMu wrzucałbyś pseudokod - plik .class i już. Swojego czasu AFAIR Sun produkował procesor PicoJava ze sprzętowym wykonywaniem java bytecode.

To chyba dla mnie zbyt wielka szkoła jazdy :/ W javie napewno nie napisze teraz tego programu, bo javy nie znam, a nie ma juz czasu zeby uczyć się nowego języka (Ucze sie i tak teraz jeszce na boku JS, PHP i SQL- to mnie chyba bardziej kręci). Powiem promotorowi że nie weim jak zrobić i tyle.

W artykule <ctu2c2$pj0$ snipped-for-privacy@nemesis.news.tpi.pl> autorem którego mieni się Panoramix, napisano:

Działa tak samo jak procesor: ma adres aktualny interpretowanego kodu

- spod tego adresu (w zewnętrznej pamięci) odczytuje kod rozkazu. Potem sprawdza, co ten kod oznacza i robi co nakazano. Następnie zmienia adres aktualny (zwykle na następny) itd.

Język interpretowany wcale nie musi być złożony, np. można zdefiniować takie rozkazy:

R - zaświeć diodę czerwoną, r - zgaś diodę czerowną, W - czekaj 100ms, . - wróć na początek programu.

Program w tym języku:

RWrW.

będzie w kółko migał diodą z częst. 5Hz

Na pewno ?? Bo ja nie sadze ;-)

W artykule snipped-for-privacy@wp.pl autorem którego mieni się Milosz Skowyra, napisano:

Nie sądźcie, a nie będziecie sądzeni ;)

Program to pewnie i nie będzie, ale odpowiedni sprzęt go wykonujący, to kto wie ...

Oj, ale żeby się tak skrótów myślowych czepić ;)

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required