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

Opcje zależne od implementacji

Istnieje duża liczba opcji dla narzędzi kompilacyjnych GNU pozwalających na subtelne kontrolowanie wszystkich aspektów procesu budowania projektu. Szczególną uwagę należy jednak zwrócić na wszelkie ustawienia, które włączają, wyłączają czy w jakikolwiek sposób zmieniają sposób generacji kodu wynikowego ze źródeł zgodnych ze standardami języków C i C++. To niewidoczne dla użytkownika działanie może spowodować wiele problemów z migracją kodu skompilowanego przy innych założeniach o zachowaniu kompilatora oraz przy konsolidacji z bibliotekami, które zostały zbudowane z innymi, niekompatybilnymi ustawieniami kompilacji.

Zagadnienia, w których mogą się pojawić takie problemy i które należy dokładnie sprawdzić to:

  • Rozmiary standardowych typów danych (integer, float, poszerzone znaki),
  • Domyślne ustawienia znaku liczby (signed/unsigned) dla typu char,
  • Rozmiary typów wyliczeniowych,
  • Pakowanie struktur,
  • Rozkład pól bitowych.

W celu określenia konfliktów w zachowaniach domyślnych, należy się odwołać do dokumentacji obu kompilatorów, a także przejrzeć pliki sterujące budowaniem przenoszonego projektu, aby sprawdzić czy nie były w nich używane żadne specjalne ustawienia zmieniające domyślne zachowanie narzędzi.

Parametry wywołania narzędzi IAR EmbeddedWorkbench wraz z dokładnymi odpowiednikami lub opcjami podobnymi dla GCC zostały zestawione w poniższej tabeli. Tam, gdzie przy opcji dla GCC znajduje się gwiazdka (*), dostępna jest więcej niż jedna możliwość, co pozwala na precyzyjniejszą kontrolę.

 

Tab. 18. Parametry wywołania

Parametr IAR Parametr GNU Rozdział dokumentacji GCC Komentarz
-aapcs -mabi=aapcs 3.17.2 Określa konwencję wywoływania procedur.
–aeabi -mabi=aapcs 3.17.2 Włącza generowanie kodu zgodnego z AEABI.
–align_sp_on_irq brak Rozmiar słowa stosu jest ustawiany domyślnie.
–arm (zachowanie domyślne) brak Ustawia domyślny tryb wykonywania funkcji jako ARM.
–char_is_signed -fsigned-char 3.17.2 Traktuje char jako zmienne ze znakiem (signed).
–cpu

-mcpu

-mtune

-march

3.17.2 Określa typ procesora.
–cpu_mode

–mthumb

–mthumb-interwork

3.17.2 Ustawia domyślny tryb wykonywania funkcji.
-D -D 3.11
–debug -g* 3.9 Generuje informacje dla debugera.
–dependencies -M* 3.11 Wypisuje zależności między plikami.
–diag_error brak 3.7 Wyświetlanie informacji diagnostycznych może być kontrolowane przy pomocy parametru –d*. Pozwala to na bardzo subtelną kontrolę.
–diag_remark brak
–diag_suppress brak
–diag_warning brak
–diagnostics_tables brak
–discard_unused_publics

–discard-all

–discard-locals

2.1, dokumentacja linkera ld Odrzuca nieużywane symbole publiczne (w IAR EmbeddedWorkbench). GCC pozwala na kontrolę odrzucania różnych typów symboli.
–dlib_config brak brak Określa plik konfiguracji biblioteki.
-e

-std=gnu90

-std=gnu99

-std=gnu++98

3.4 Włącza rozszerzania języka zgodne z C90, C99 i C++98.
–ec++, –eec++ -fno-* 3.5 Wyłącza konkretne cechy C++.

–enable_hardware…

_workaround

brak Włącza specyficzne obejścia sprzętowe.
–enable_multibytes brak Włącza obsługę znaków wielobajtowych w plikach źródłowych. Domyślne zachowanie GCC.
–endian

-mlittle-endian

-mbig-endian

3.1732 Określa kolejność bajtów w wygenerowanym kodzie i danych.
–enum_is_int -fshort-enums 3.18 Określa rozmiar typu wyliczeniowego.
–error_limit brak Określa dozwoloną liczbę błędów przed zatrzymaniem kompilacji.

 

O autorze