Właśnie natknąłem się na niektóre makra dla mojego kompilatora mikrokontrolerów, aby wymusić (lub zasugerować) wykonanie funkcji z pamięci RAM.
http://processors.wiki.ti.com/index.php/Placing_functions_in_RAM
https://community.nxp.com/thread/389099
W jakich przypadkach jest to cenne? Dlaczego nie miałbym zawsze uruchamiać z pamięci RAM, jeśli korzyścią jest tylko zwiększenie prędkości? Czy generalnie powoduje to większy pobór prądu?
microcontroller
ram
tarabajt
źródło
źródło
Odpowiedzi:
Oprócz szybkości i innych funkcji, o których wspominali już inni, wykonywanie kodu z pamięci RAM może być przydatne w programach ładujących, w których trzeba przeprogramować pamięć flash micro - nie można wykonać kodu z pamięci flash, który jest w trakcie wymazywania i przeprogramowanie.
źródło
Nie spojrzałem na arkusz danych dla tej mikro. Jednak często zdarza się w tej sytuacji, że pobieranie z pamięci RAM jest szybsze niż pobieranie z pamięci flash, z której implementowana jest pamięć programu.
Zaletą lampy błyskowej jest to, że duże ilości mogą być stosunkowo tanie. Dlatego producenci mikrokontrolerów czasami umieszczają dużą ilość pamięci flash na układzie, a następnie zapewniają bardziej ograniczoną przestrzeń RAM, z której kod może wykonywać. Umożliwia to kopiowanie procedur o krytycznym czasie do pamięci RAM, a następnie wykonywanie ich stamtąd.
Przełącznik kompilatora, do którego się odwołujesz, prawdopodobnie działa z konsolidatorem i zaznacza tę sekcję pamięci flash, która ma zostać skopiowana do pamięci RAM za pomocą kodu uruchomieniowego kompilatora, który działa od resetu. Różne implementacje będą się różnić w zależności od szczegółów.
źródło
Gdy chcesz wykonać w pamięci RAM, ponieważ jest szybsza, zwykle dzieje się tak, ponieważ pamięć RAM jest na chipie SRAM. Jest to rzadki zasób, którego prawdopodobnie będziesz potrzebować w przypadku danych wymagających dostępu do odczytu / zapisu.
Używanie go do kodu, kiedy już mają kod w ROM / Flash oznacza, że trzeba kwota X flash i dodatkową kwotę X RAM.
Wymaga to również dodatkowego etapu kopiowania podczas rozruchu lub gdy chcesz go uruchomić, chociaż jest to w większości nieistotne.
Tradycyjnie jest to rozwiązywane za pomocą pamięci podręcznej instrukcji, ale w mikrokontrolerze bardziej sensowne może być zachowanie ogólnej wewnętrznej pamięci SRAM, ponieważ nie używasz mikrokontrolera, ponieważ chcesz uzyskać najszybszą szybkość wykonywania.
Istnieje również problem z niezawodnością - kod wykonywany w rzeczywistej pamięci ROM jest trudny do modyfikacji za pomocą błędnego kodu.
źródło
Oprócz wszystkich dobrych odpowiedzi:
Ponieważ w systemie osadzonym zazwyczaj nie masz wymaganej ilości pamięci RAM. Na przykład STM32 z 32kB lub RAM i 512kB pamięci EEPROM. Aby móc uruchomić cały program w pamięci RAM, potrzebny byłby rozmiar pamięci RAM większy niż EEPROM.
źródło
Wydaje się, że inne odpowiedzi nie omawiały zbytnio zużycia energii, o co konkretnie pytałeś.
Odpowiedź jest taka, że zależy to nieco od mikrokontrolera, ale często wykonanie z pamięci RAM może zmniejszyć zużycie energii, ponieważ wymaga mniej energii do odczytu instrukcji z pamięci RAM niż z pamięci flash.
Typowym zastosowaniem byłoby uruchomienie funkcji „uśpienia” o niskiej mocy z pamięci RAM przy wyłączonej pamięci flash. Zużycie energii jest nie tylko zmniejszone, ale jeśli mikrokontroler musi się szybko obudzić (np. W odpowiedzi na zewnętrzne przerwanie), nie ma opóźnienia przy ponownym włączeniu pamięci flash.
Niektóre części, takie jak niektóre z serii Atmel SAM, mają specjalną pamięć RAM o bardzo niskim poborze mocy, którą można wykorzystać do tego celu. Pozwala to na załadowanie niewielkiej ilości kodu do specjalnej pamięci RAM, podczas gdy większość dostępnej pamięci RAM i wszystkich innych pamięci jest wyłączana, a mikrokontroler przechodzi w tryb głębokiego uśpienia.
źródło
Oprócz potencjalnych korzyści prędkości wspomnianych przez innych, kod RAM jest również dynamiczny i może być modyfikowany w locie za pomocą kodu dostosowującego we FLASH, zgodnie z wymaganiami.
Może to być tak proste, jak zmiana kilku parametrów lub całe procedury obsługi przesyłane zdalnie.
źródło
Wykonywanie kodu z pamięci RAM jest znacznie szybsze niż wykonywanie go z pamięci flash. Większość procesorów jest mocno zoptymalizowana pod kątem najszybszego możliwego dostępu do pamięci RAM, a nawet najszybsza pamięć flash osiąga ułamek prędkości pamięci RAM.
Należy jednak pamiętać, że przeniesienie kodu z pamięci flash do pamięci RAM również wymaga czasu. Jeśli kod jest wykonywany tylko raz, wystarczy go przeczytać tylko raz, dlatego rzeczywiście straciłbyś czas na skopiowanie go najpierw do pamięci RAM zamiast bezpośredniego wykonywania. Jeśli kod jest wykonywany od czasu do czasu (więc skopiowanie go do pamięci RAM zwiększyłoby wykonanie przy drugim wywołaniu), ale system jest generalnie bezczynny, wówczas można by wykonać ten kod szybciej, kopiując go do pamięci RAM, ale nikogo to nie obchodzi, ponieważ system ma wystarczająco dużo czasu do spędzenia.
Dlatego takie optymalizacje są warte wysiłku tylko wtedy, gdy kod jest często wykonywany i zmierzyłeś go jako dławik systemu.
Z drugiej strony pamięć RAM musi aktywnie przechowywać dane, podczas gdy pamięć flash nie, więc całkowity pobór mocy wzrasta, jeśli pamięć RAM musi pozostać aktywna. Jest to jednak istotne tylko wtedy, gdy pamięć RAM w ogóle nie jest w ogóle używana, ale większość nowoczesnych systemów - w taki czy inny sposób - już korzysta z dostępnej pamięci RAM, a zatem już ją utrzymuje.
źródło
Istnieją dwa bardzo częste powody do wykonywania kodu z pamięci RAM:
Niektóre mikroprocesory nie mogą wykonać flashowania podczas programowania flash - choć wiele może to zrobić, dopóki kod jest w innym bloku niż zapisywany flash. Zapisy Flash mogą przeprogramowywać aplikację (przypadek modułu ładującego) lub gdy Flash jest używany do przechowywania nieulotnych informacji o programie (konfiguracja, kalibracja itp.)
W wielu mikroprocesorach pamięć RAM jest znacznie szybsza niż flash. W przypadku tych urządzeń małe, krytyczne dla prędkości procedury mogą być wykonywane z pamięci RAM, chociaż zwykle pamięć RAM jest znacznie krótsza niż pamięć flash.
źródło
Kolejny przypadek użycia tylko pamięci RAM zabezpieczającej wykonanie przed przypadkowymi bitflipami. Używamy tego modelu na naszym małym cubesat, ponieważ główna płyta komputera ma RAM ECC, który toleruje bitflipy z powodu promieniowania. Cały system operacyjny jest ładowany do pamięci RAM, ponieważ ramdysk podczas uruchamiania działa całkowicie w środowisku ECC.
Lampa błyskowa nie jest chroniona ECC (standardowe gotowe karty micro SD), ale mamy inne metody sprawdzania, czy nie ma uszkodzeń (wiele zdjęć, sumy kontrolne itp.)
źródło