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

Tab. 11. Dane spakowane

IAR GCC
Słowo kluczowe: __packed __attribute__((packed))
Pragma: pack Pack
Składnia:

#pragma pack(4)

struct tag1

{

char a;

int b;

} mystruct1;

#pragma pack()

__packed struct tag1

{

char a;

int b;

} mystruct1;

#pragma pack(4)

struct tag

{

char a;

int b;

} mystruct;

#pragma pack()

struct tag1

{

char a;

int b __attribute__ ((packed));

} mystruct1;

Komentarz: GCC obsługuje to rozszerzenie z użyciem słowa kluczowego __attribute__ i pozwala na pakowanie pojedynczych elementów struktury.

 

Tab. 12. Ułożenie (rozmiar słowa) danych

IAR GCC
Słowo kluczowe: __attribute__((aligned(N)))
Pragma: data_alignment
Składnia:

#pragma data_alignment(8)

int i;

int i __attribute__((aligned(8)));
Komentarz: IAR EmbeddedWorkbench obsługuje to rozszerzenie poprzez dyrektywę #pragma, natomiast GCC poprzez słowo kluczowe __attribute__.

 

Tab. 13. Ustawienia kolejności bajtów

IAR GCC
Słowo kluczowe:

__big_endian

__little_endian

Pragma:
Składnia: __big_endian int i;
Komentarz: GCC obsługuje ustawianie kolejności bajtów tylko na poziomie modułu.

 

Tab. 14. Dane niezainicjalizowane

IAR GCC
Słowo kluczowe: __no_init __attribute__((section(“no_init”)))
Pragma:
Składnia: __no_init int i; int i __attribute__((section(“no_init”)));
Komentarz: Zmienna nie zostanie zainicjalizowana przy starcie, gdyż jest umieszczona w osobnej sekcji. W GNU można osiągnąć taki sam efekt wykorzystując atrybut section.

 

Tab. 15. Kontrola lokalizacji danych

IAR GCC
Słowo kluczowe: @ __attribute__((section(“NAME”)))
Pragma: location
Składnia:

#pragma location i=0x0100

int i;

__no_init int j @ 0x0104;

#define i (*(int *)0x0100)
Komentarz: Narzędzia GNU obsługują ustawianie lokalizacji zmiennych tylko na poziomie sekcji. Lokalizację zmiennej w procesie konsolidacji można wybrać używając atrybutu section. Pokazana w przykładzie dyrektywa #define daje taki sam efekt.

 

Funkcje wbudowane

Oprócz wykorzystania funkcji wbudowanych jako narzędzia dostępu do instrukcji mikrokontrolera, kompilator IAR EmbeddedWorkbench pozwala też na dostęp do adresu początkowego każdej nazwanej sekcji przy użyciu poniższych funkcji.

Te funkcje nie są obsługiwane przez GCC, ale użytkownik może otrzymać te wartości definiując odpowiednie symbole w pliku sterującym linkerem.

O autorze