Kompilację i konsolidację można przeprowadzić w tym samym czasie, przy użyciu polecenia:
1 |
gcc plik.c –lc –o plik.elf |
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:
1 |
gcc plik.o –lc –Wl, --endty=ResetHandler –o plik.elf |
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.
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).
Koniec alokacji sekcji. |