- posted
15 years ago
ARM9 z zewnetrzna wspolna pamiecia programu i danych
- Vote on answer
- posted
15 years ago
tomny pisze:
Jeżeli takiego kodu nie jest bardzo dużo w jednym kawałku (np. tylko kilka KB albo ciasna pętla, potem skok gdzie indziej) - to jeżeli masz właściwie skonfigurowaną pamięć cache programu - kod powyższy zostanie załadowany z SDRAMu do pamięci cache i wykonany z niej z pełną prędkością procesora. Skompiluj powyższy kawałek i sprawdź, na jakie rozkazy asemblera składa się każda z tych linii. Potem PDF do ręki (o instrukcjach asemblera ARM) i wyczytaj, ile cykli zajmuje każda z tych instrukcji. A jak nie masz tyle zapału to po prostu sprawdź doświadczalnie oscyloskopem.
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
tomny pisze:
ARM9 z wewnętrznym Flashem? Raczej mało takich jest do wyboru. Ja siedzę tylko w prockach od Atmela więc może u innych producentów jest coś do wyboru. W ARM9 jest wewnętrzna pamięć cache programu i właściwie to nie ma znaczenia, czy coś idzie z RAMu czy z Flasha (opóźniają wykonanie tylko bardzo długie kawałki kodu i skoki poza skeszowany obszar).
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
tomny pisze:
Oczywiście. Bootloader ROMowy szuka twojego softu na początku DataFlasha, jeżeli znajdzie to ładuje do wewn. RAMu od adresu 0 tyle kodu ile trzeba (to się wpisuje linkerem w nieużywanym wektorze przerwań
- patrz opis bootloadera np. AT91SAM9261) i do niego skacze. Nic nie stoi na przeszkodzie, abyś resztę pamięci DF przeznaczył na dowolne inne dane i korzystał z niej normalnie przez SPI.
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
tomny pisze:
Bootloader zaszyty w ROMie procesora z założenia ładuje dane do wewnętrznej pamięci SRAM. Przecież nawet nie ma pojęcia co tam na zewnątrz podłączyłeś: czy SRAM, czy SDRAM. Jeżeli masz inne potrzeby to po prostu napisz "mini loader", który trafi po resecie z DataFlasha do wewnętrznego RAMu a potem skonfiguruje odpowiednio pamięć zewnętrzną (czego nie może oczywiście automatycznie zrobić ROMowy bootloader) i doładuje już z pamięci DF co chce i tam gdzie chce. Przy okazji możesz na tym etapie dużo zyskać stosując kompresję ZIP (biblioteka zlib jest całkiem darmowa nawet dla zastosowań komercyjnych - nie jest na GPLu). Zlib zlinkowana z bootloaderem powoduje jego spuchnięcie zaledwie o kilka KB a za to ładowanie reszty z DF może pójść Ci średnio 2x szybciej.
Jeżeli ROMowy bootloader nie znajdzie podłączonej pamięci DF lub stwierdzi, że nie ma tam nic ciekawego (czyta najpierw 32 pierwsze oktety i sprawdza poprawność słowa z długością obrazu do załadowania) - to przechodzi w tryb "terminalowy", umożliwiający wydawanie z peceta komend przez UART na 115200 bps, 8N1 oraz przez USB. Wystarczy, że w swoim projekcie dodasz zworkę/pad/jumper załączający reset pamięci DF a już program sam nie wystartuje. JTAG nie jest konieczny, choć na pewno Ci się przyda prędzej czy później do debugowania.