eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › MCU - start programu z RAM
Ilość wypowiedzi w tym wątku: 8

  • 1. Data: 2023-02-13 11:29:11
    Temat: MCU - start programu z RAM
    Od: Stachu Chebel <s...@g...com>

    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?


  • 2. Data: 2023-02-13 11:49:15
    Temat: Re: MCU - start programu z RAM
    Od: heby <h...@p...onet.pl>

    On 13/02/2023 11:29, Stachu Chebel wrote:
    > 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


  • 3. Data: 2023-02-13 11:53:33
    Temat: Re: MCU - start programu z RAM
    Od: Adam Górski <gorskiamalpawpkropkapl@xx>

    Nie ten procesor ale podobnie.

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

    Adam Górski

    > 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?


  • 4. Data: 2023-02-13 13:27:01
    Temat: Re: MCU - start programu z RAM
    Od: JDX <j...@o...pl>

    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.

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

    > 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.


  • 5. Data: 2023-02-13 13:29:06
    Temat: Re: MCU - start programu z RAM
    Od: JDX <j...@o...pl>

    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.


  • 6. Data: 2023-02-13 13:34:28
    Temat: Re: MCU - start programu z RAM
    Od: JDX <j...@o...pl>

    On 13.02.2023 13:27, JDX wrote:
    > 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.


  • 7. Data: 2023-02-13 20:33:20
    Temat: Re: MCU - start programu z RAM
    Od: m <...@e...com>

    W dniu 13.02.2023 o 13:29, JDX pisze:
    > 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


  • 8. Data: 2023-02-14 23:12:26
    Temat: Re: MCU - start programu z RAM
    Od: JDX <j...@o...pl>

    On 13.02.2023 20:33, m wrote:
    [...]
    > 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.

    Po pierwsze trzeba przestudiować dokumentację, a po drugie trzeba
    zmierzyć. Producenci stosują różne przyspieszacze w postaci flasza o
    szerokości szyny danych np. 256 bitów i jakieś tam dodatkowej logiki.
    Zobacz np. M4 od STM (STM32F405xx): ,,Based on CoreMark benchmark, the
    performance achieved thanks to the ART accelerator is equivalent to 0
    wait state program execution from Flash memory at a CPU frequency up to
    168 MHz". Na takim MCU wykonywanie programu z SRAMu w praktyce na pewno
    będzie wolniejsze od wykonywania z flasza.

    > I normalnie się robiło na poziomie funkcji.
    A co to znaczy? Zwłaszcza ,,na poziomie funkcji".

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: