Jak przenieść projekt ze środowiska IAR Embedded Workbench do Atollic TrueSTUDIO – poradnik migracyjny

Kompilację i konsolidację można przeprowadzić w tym samym czasie, przy użyciu polecenia:

Jedynym problemem występującym przy używaniu programu GCC jest to, że zdarzają się sytuacje, w których opcje sterujące kompilacją i konsolidacją mają podobne nazwy. Jeśli istnieje potrzeba wykorzystania specyficznych opcji konsolidacji przy użyciu interfejsu jaki stanowi narzędzie GCC, komendy można poprzedzić przedrostkiem „-Wl”, jak to jest przedstawione poniżej:

Dla konsolidatora istnieje osobna instrukcja obsługi, dostarczana ze środowiskiem Atollic TrueSTUDIO, znajdująca się w pliku ld.pdf.

Skrypty konsolidatora i pliki sterujące jego pracą

Pliki skryptów konsolidatora są używane do określania, co ma zostać skonsolidowane i gdzie ma się znaleźć w pamięci oraz do zdefiniowania wszelkich symboli, służących do inicjalizacji systemu przy jego starcie.

Większość współczesnych konsolidatorów jest wyposażona w podobne zestawy funkcji, więc w czasie migracji najważniejszym zadaniem jest zrozumienie jak przetłumaczyć składniowo komendy sterujące jednym konsolidatorem na te sterujące drugim.

Niektóre projekty mogą nie wymagać zmian domyślnego zachowania konsolidatora, poza tymi, które wprowadza toolchain lub środowisko programistyczne, w którym stworzony był projekt.

Przy rozpoczynaniu migracji, zalecane jest użycie środowiska Atollic TrueSTUDIO do stworzenia szkieletu projektu wraz z plikami sterującymi budowaniem, które można następnie dostosować do swoich potrzeb.

Kreator, w który wyposażone jest środowisko, pozwoli użytkownikowi wybrać mikrokontroler docelowy, a nawet zestaw ewaluacyjny, co znacznie ułatwia cały proces. Należy również pamiętać, że wszystkie systemy wbudowane mają kilka wspólnych wymagań podstawowych:

  • Przy resecie/włączeniu systemu, wykonany powinien być kod startowy, inicjalizujący system wspomagania przetwarzania (runtime system), w co wlicza się inicjalizacja stosu, sterty i sekcji danych oraz wywołanie globalnych konstruktorów C++;
  • Tablica wektorów powinna zostać ustawiona tak, by reset, wyjątki i wpisy tablicy przerwań miały przyporządkowane właściwe funkcje obsługujące;
  • Inne inicjalizacje, specyficzne dla mikrokontrolera, powinny zostać przeprowadzone (np. inicjalizacje systemów: zegarowego i pamięci).

Konsolidator GNU, LD, obsługuje składnię wysokopoziomową, pozwalającą na wybór lokalizacji kodu i danych. Działający przykład, wraz z komentarzem opisującym najważniejsze funkcje, został przedstawiony poniżej. Trzeba pamiętać, że dyrektywa „.” definiuje aktualny wskaźnik lokalizacji.

 

Tab. 19. Przykład konsolidacji

Definiuje “ResetHandler” jako punkt wejściowy aplikacji.

 

Definiuje symbole o stałych wartościach.
Definiuje regiony pamięci:
– „FLASH” z uprawnieniami do odczytu/wykonania, o rozmiarze 256 kB i adresie początkowym 0x8000000,
– „RAM” z uprawnieniami odczytu/zapisu/wykonywania, o rozmiarze 64 kB i adresie początkowym 0x20000000,
– „MEMORY_B1” z uprawieniami do odczytu/wykonywania, o rozmiarze 0 kB i adresie początkowym 0x60000000.

 

Początek alokacji sekcji pamięci.

Alokacja sekcji „.isr_vector” do pamięci FLASH. Aby zapewnić właściwą lokalizację, utrzymany jest 4-bajtowy rozmiar słowa.

 

 

 

Określa, że symbol „.sidata” ma się znajdować w bieżącej lokalizacji (zaraz za tablicą wektorów).
Użycie dyrektywy „AT” umieszcza zawartość sekcji .data* pod adresami określonymi przez .sidata, ale wskaźnik odnosi się do danych, jakby były w sekcji RAM. Pozwala to na umieszczenie wartości początkowych w pamięci nieulotnej i skopiowanie ich do obrazu pamięci systemu wspomagania (runtime memory image) przy starcie systemu.
Symbole _sdata i _edata oznaczają adresy: początkowy i końcowy zestawu sekcji .data. Inicjalizacja powoduje więc skopiowanie .sidata do _sdata.
Symbole end i _end należy określać za pomocą dyrektywy PROVIDE tylko, jeśli istnieją do nich odniesienia, a symbole te nie są wcześniej zdefiniowane w plikach włączanych do projektu (aby zapobiec konfliktom).
Alokuje obszar w pamięci RAM przynajmniej tak duży jak minimalne rozmiary stosu i sterty zdefiniowane wcześniej w pliku.

 

Koniec alokacji sekcji.

 

O autorze