-
21. Data: 2009-11-08 20:23:28
Temat: Re: Zelety architektury Von Neumannna w uC ARM?
Od: Adam Dybkowski <a...@4...pl>
Paweł pisze:
>> Mówi się ze dane z pamięci Flash są pobierane wolniej niż z RAM. czy
>> jest to gdzieć napisane. Przykład. Spotkałem opis programu na ARM typu
>> AT91SAM7S256 w którym w celu przyspieszenia pracy zrobiono "sztuczkę"
>> polegającą na przerzuceniu programu z FLASHa do RAM.
>> Dlaczego.Przecież to odczyt. Rozumiem zapis do pamięci, ale odczyt
>> miałby być dłuższy?
>> Skąd to się bierze?
>
> Wszystko jest dokładnie opisane w dokumentacji do procesora.
> W zależności od częstotliwości zegara programuje się odpowiednie
> opóźnienia przy dostępie do pamięci Flash. Tak więc w praktyce
> wykonywanie programu w pamięci RAM zwykle jest znacznie szybsze.
100% true. A do tego jeżeli już mówimy o AT91SAM7Sxx to tam wewnątrz
jest AFAIR pamięć Flash o organizacji 16-bitowej i dlatego wykonywanie
programu w trybie ARM (o instrukcjach 32-bitowych) jest powoolne.
Dodatkowo pamięć Flash ma 1 waitstate powyżej chyba 33 MHz zegara (a ten
procek musi śmigać na 48MHz gdy działa USB). Pobrania z pamięci programu
są "pakowane" w kawałki 32-bitowe (taki mini cache). Ale i tak w
praktyce warto kompilować wszystko w trybie Thumb (z instrukcjami
16-bitowe) - nie dość, że kod jest krótszy to jeszcze szybciej działa
niż w trybie Thumb. A krytyczne czasowo funkcje kompilować w trybie ARM
i wykonywać z RAMu.
Jak miło, że nie trzeba takich kombinacji alpejskich robić w ARM9 (np.
AT91SAM9260), bo pamięć cache programu śmiga z pełną prędkością (a dane
pobiera np. z SDRAM całymi liniami do cache). W tym przypadku kompilacja
w trybie Thumb daje co prawda krótszy kod wynikowy, ale wolniejszy.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.