RTV forum PL | NewsGroups PL

MCU - start programu z RAM

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - MCU - start programu z RAM

Stachu Chebel
Guest

Mon Feb 13, 2023 12:29 pm   



Witam,
Środowisko projektowe: Kinetis Design Studio 3.2.0.
MCU: Arm Cortex-M4 (MK22FN512VLH12)

Po skompilowaniu i zaprogramowaniu FLASH'a program działa prawidłowo,
ale mogło by być lepiej, gdyby był wykonywany nie z FLASH'a lecz z RAM'u.
Maksymalna częstotliwość taktowania FLASH'a to 24MHz, natomiast RAM'u
to 60MHz.

Jak to zrobić, żeby po włączeniu urządzenia program przekopiował się
z FLAH do RAM i następnie rozpoczął życie w RAM?

heby
Guest

Mon Feb 13, 2023 12:49 pm   



On 13/02/2023 11:29, Stachu Chebel wrote:
Quote:
Jak to zrobić, żeby po włączeniu urządzenia program przekopiował się
z FLAH do RAM i następnie rozpoczął życie w RAM?

Aby był uruchamialny z obu miejsc, wymaga to posiadania kodu który jest
niezależny od lokalizacji (PIC). To nie jest domyslny tryb kompilacji,
zerknij na flagę pic w gcc, modyfikuje ona kod do stanu, w którym skoki
są wyłącznie względne.

Druga sprawa: zazwyczaj nie chcesz całego programu - zazwyczaj chcesz
kilka funkcji.

Inny workaround to zmuszenie linkera do zlinkowania częsci programu w
RAM i wydłubanie tej sekcji z pliku elf, a nastepnie potraktowanie jej
jako zwykłej tablicy danych do skopiowania do RAM. Widziałem sztuczke,
kiedy automatycznie kompilowało się do sekcji .data, wiec kopiowanie do
RAM ogarniała inicjalizacja.

Jeszcze inny, to niejakie gotowce, typu __RAM_FUNC.

To jest ogólnie trudne zagadnienie z poziomu ogarniania linkera,
kompilacji ręcznej, pisania makefiles, opcji w narzędziach itd. Trudno o
ogólną odpowiedź, to są rzeczy specyficzne do kompilatora i narzędzi na
około niego. Niewykluczone, że narzędzia, z których korzystasz, mają to
ogarnięte w postaci prostych do użycia modyfikatorów funkcji, flaczy czy
innych wynalazków.

Tu masz kilka podpowiedzi:

https://stackoverflow.com/questions/15137214/how-to-run-code-from-ram-on-arm-architecture

Adam Górski
Guest

Mon Feb 13, 2023 12:53 pm   



Nie ten procesor ale podobnie.

https://community.nxp.com/t5/LPCXpresso-IDE-FAQs/Relocating-code-from-FLASH-to-RAM/m-p/473993

Adam Górski

Quote:
Witam,
Środowisko projektowe: Kinetis Design Studio 3.2.0.
MCU: Arm Cortex-M4 (MK22FN512VLH12)

Po skompilowaniu i zaprogramowaniu FLASH'a program działa prawidłowo,
ale mogło by być lepiej, gdyby był wykonywany nie z FLASH'a lecz z RAM'u.
Maksymalna częstotliwość taktowania FLASH'a to 24MHz, natomiast RAM'u
to 60MHz.

Jak to zrobić, żeby po włączeniu urządzenia program przekopiował się
z FLAH do RAM i następnie rozpoczął życie w RAM?


JDX
Guest

Mon Feb 13, 2023 2:27 pm   



On 13.02.2023 11:49, heby wrote:
[...]
Quote:
Inny workaround to zmuszenie linkera do zlinkowania częsci programu w
RAM i wydłubanie tej sekcji z pliku elf, a nastepnie potraktowanie jej
jako zwykłej tablicy danych do skopiowania do RAM. Widziałem sztuczke,
kiedy automatycznie kompilowało się do sekcji .data, wiec kopiowanie do
RAM ogarniała inicjalizacja.
Ja bym powiedział, że tak się robi standardowo. Nazywasz sekcję np.

"dupa", w skrypcie linkera oznaczasz, że docelowo ma być RAM, a funkcje,
które mają wyladować w tej sekcji oznaczasz za pomocą
__attribute__((section("dupa"))). Mowa oczywiście o jedynym słusznym
kompilatorze, czyli gcc.

Quote:
Jeszcze inny, to niejakie gotowce, typu __RAM_FUNC.
A to nie są jakieś wrappery wokł attribute section?


Quote:
To jest ogólnie trudne zagadnienie z poziomu ogarniania linkera,
kompilacji ręcznej, pisania makefiles, opcji w narzędziach itd. Trudno o
IMO nie ma tu nic trudnego. Aczkolwiek jak widać na przykładzie OP, IDE

ogłupiają ludzi. Tzn. IDE są OK, sam używam, ale dobrze jest wiedzieć co
się dzieje pod spodem.

JDX
Guest

Mon Feb 13, 2023 2:29 pm   



On 13.02.2023 11:29, Stachu Chebel wrote:
[...]
Quote:
Po skompilowaniu i zaprogramowaniu FLASH'a program działa prawidłowo,
ale mogło by być lepiej, gdyby był wykonywany nie z FLASH'a lecz z RAM'u.
Maksymalna częstotliwość taktowania FLASH'a to 24MHz, natomiast RAM'u
to 60MHz.
Niekoniecznie mogłoby być lepiej. M3/M4 to architektura harwardzka,

czyli oddzielne szyny dla danych i dla instrukcji. Więc jeśli będziesz
przewalał dane i instrukcje tylko jedną szyną, to całkiem możliwe, że
osiągniesz efekt odwrotny od zamierzonego. Do tego współczesne MCU mają
pipelining.

JDX
Guest

Mon Feb 13, 2023 2:34 pm   



On 13.02.2023 13:27, JDX wrote:
Quote:
On 13.02.2023 11:49, heby wrote:
[...]
Inny workaround to zmuszenie linkera do zlinkowania częsci programu w
RAM i wydłubanie tej sekcji z pliku elf, a nastepnie potraktowanie jej
jako zwykłej tablicy danych do skopiowania do RAM. Widziałem sztuczke,
kiedy automatycznie kompilowało się do sekcji .data, wiec kopiowanie
do RAM ogarniała inicjalizacja.
Ja bym powiedział, że tak się robi standardowo. Nazywasz sekcję np.
"dupa", w skrypcie linkera oznaczasz, że docelowo ma być RAM, a funkcje,
które mają wyladować w tej sekcji oznaczasz za pomocą
__attribute__((section("dupa"))). Mowa oczywiście o jedynym słusznym
kompilatorze, czyli gcc.
Oczywiście kod startowy składający się 5-6 linijek assemblera czy 4

linijek w C na starcie przekopiowuje sekcję z Flasha w odpowiednie
miejsce w RAM.

m
Guest

Mon Feb 13, 2023 9:33 pm   



W dniu 13.02.2023 o 13:29, JDX pisze:
Quote:
On 13.02.2023 11:29, Stachu Chebel wrote:
[...]
Po skompilowaniu i zaprogramowaniu FLASH'a program działa prawidłowo,
ale mogło by być lepiej, gdyby był wykonywany nie z FLASH'a lecz z RAM'u.
Maksymalna częstotliwość taktowania FLASH'a to 24MHz, natomiast RAM'u
to 60MHz.
Niekoniecznie mogłoby być lepiej. M3/M4 to architektura harwardzka,
czyli oddzielne szyny dla danych i dla instrukcji. Więc jeśli będziesz
przewalał dane i instrukcje tylko jedną szyną, to całkiem możliwe, że
osiągniesz efekt odwrotny od zamierzonego. Do tego współczesne MCU mają
pipelining.

Jak na tym tutaj jest to nie wiem, autor sobie sprawdzi.

Na produkcie nxp M3 którego numerka nie pamiętam to było szybciej. I
normalnie się robiło na poziomie funkcji.
MM

JDX
Guest

Wed Feb 15, 2023 12:12 am   





elektroda NewsGroups Forum Index - Elektronika Polska - MCU - start programu z RAM

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map