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

Narzędzie zarządzania bibliotekami środowiska IAR EmbeddedWorkbench (iarchive) jest podobne jeśli chodzi o koncepcję i możliwości do narzędzia GNU, co sprawia, że proces migracji plików sterujących budowaniem jest relatywnie prosty.

W przypadku używania modułów binarnych ze środowiska IAR w migrowanej aplikacji, użytecznie jest wyciągnąć te moduły z bibliotek, z których pochodzą i stworzyć „bibliotekę migracyjną”, mogącą też zawierać dowolny potrzebny kod „opakowujący” ABI.

Konsolidacja oryginalnych bibliotek IAR bezpośrednio nie jest zalecana, gdyż mogą one zawierać moduły definiujące funkcje lub zmienne zdefiniowane też w bibliotekach GNU. Spowoduje to błędy w procesie konsolidacji związane ze zduplikowanymi symbolami lub – w najgorszym przypadku – nadpisanie słabych symboli z bibliotek GNU, co poskutkuje dokończeniem konsolidacji i nieprzewidywalnym zachowaniem programu.

WSKAZÓWKA

O ile nie są używane biblioteki zewnętrzne, zalecany sposób radzenia sobie z zależnościami między bibliotekami jest następujący:

  1. Należy przeprowadzić konsolidację tylko z bibliotekami GNU, zwracając uwagę na wszelkie błędy typu unresolved external.
  2. Trzeba określić lokalizację kodu odpowiadającego za każdy z symboli w bibliotekach środowiska, z którego się przenosimy. Można to zrobić używając narzędzia do zarządzania bibliotekami oraz narzędzia do pracy z plikami obiektowymi, jak to pokazano w przykładzie poniżej.
  3. Należy wyciągnąć z tych bibliotek fragmenty kodu zawierające potrzebne symbole, tworząc lub aktualizując bibliotekę migracyjną.
  4. Trzeba powtarzać wszystkie kroki, konsolidując zaktualizowaną bibliotekę migracyjną tak długo, aż błędy przestaną się pojawiać.

 

Przykładowe komendy określające lokalizację symbolu w bibliotece, wyciągające zawierający go plik relokowalny i włączające go do biblioteki migracyjnej są pokazane poniżej.

Dla programu iarchive – znajdowanie i wyciąganie pliku relokowalnego:

wypisuje symbole w bibliotece

wyciąga plik modul.o z biblioteki

Dla GNU – tworzenie/aktualizacja biblioteki migracyjnej:

Migracja bibliotek zewnętrznych

Jeśli stworzony już projekt wykorzystuje biblioteki zewnętrzne, które programista chce lub musi włączyć do projektu, zakres migracji trzeba poszerzyć i przewidzieć czas na przeniesienie bibliotek.

Jako że narzędzia GNU są bardzo powszechnie wykorzystywane do kompilacji projektów na architekturę ARM, jest bardzo prawdopodobne, że istnieje już wersja potrzebnej biblioteki dla GCC.

Wersje bibliotek dostarczane przez producentów

Niektórzy producenci dostarczają biblioteki w formie plików z kodem źródłowym wraz z plikami do konfiguracji i budowania ich. W takich przypadkach jest bardzo prawdopodobne, że pliki źródłowe można skompilować za pomocą GCC przy użyciu kompilacji warunkowej. Proces budowania biblioteki za pomocą narzędzi GNU powinien być opisany w dokumentacji biblioteki.

Biblioteki są też często udostępniane w formie plików binarnych, aby chronić własność intelektualną producenta. W takich przypadkach jest bardzo możliwe, że dostępna jest dystrybucja binarna dla GNU, ale konieczne jest sprawdzenie ustaleń licencyjnych z producentem.

Przenoszenie kodu źródłowego

Sposób przenoszenia do GCC zewnętrznych bibliotek w formie źródeł jest zasadniczo taki sam, jak reszty źródeł projektu. Może być jednak konieczne sprawdzenie licencji, żeby upewnić się czy przenoszenie plików z kodem do zestawu narzędzi GNU jest dozwolone.

Aby przenoszona biblioteka była dostępna dla innych projektów, warto stworzyć nowy, zawierający ją projekt w przestrzeni roboczej Atollic TrueSTUDIO. Przestrzeń robocza obsługuje wiele projektów na raz, a każdy z nich może być aplikacją lub biblioteką. Zależności między projektami można zdefiniować tak, by zapewnić, że kolejność budowania jest właściwa (biblioteki powinny być budowane najpierw), oraz że jeśli biblioteka ulegnie modyfikacji, cała aplikacja także zostanie zbudowana na nowo.

Przenoszenie plików binarnych

Z technicznego punktu widzenia, jest to najtrudniejsze zadanie w procesie migracji. Założeniem jest, że użytkownik nie może uzyskać od producenta wersji biblioteki przeznaczonej dla narzędzi kompilacyjnych GNU, ale istnieje binarna forma biblioteki wraz z odpowiednimi nagłówkami zbudowana za pomocą innych narzędzi.

Wymaganiem, które trzeba spełnić w tym procesie jest możliwość wywołania wszystkich funkcji bibliotecznych z poziomu aplikacji zbudowanej pod GCC, przekazywania do nich danych i odbioru wyników.

WSKAZÓWKA

Jak to było wspominane wcześniej w niniejszym tekście, zarówno kompilator IAR, jak i GNU obsługują standard wywoływania procedur ARM i mają spójne formaty plików obiektowych, które mogą pozwolić na bezpośrednią konsolidację funkcji bibliotecznych z tworzonym programem. Warto sprawdzić czy nie istnieje taka możliwość przed rozpoczęciem tworzenia kodu „obudowującego” ABI (wrappera).

Aby przeprowadzić prostą integrację należy wykonać trzy kroki:

  1. Użyć narzędzia archiwizacyjnego środowiska IAR EmbeddedWorkbench do wyciągnięcia wszystkich potrzebnych modułów z archiwum.
  2. Użyć narzędzia archiwizacyjnego GNU do stworzenia nowego archiwum, importując wszystkie moduły biblioteczne.
  3. Dodać nową bibliotekę jako plik do projektu aplikacji.

O autorze