Jak przenieść projekt ze środowiska IAR Embedded Workbench do Atollic TrueSTUDIO – poradnik migracyjny
Tab. 4. Funkcje oparte na pamięci RAM
| IAR | GCC | |
| Słowo kluczowe: | __ramfunc | __attribute__((section(“NAME”))) |
| Pragma: | ||
| Składnia: |
__ramfunc void foo (void) {…} |
void foo (void)__attribute__ ((section („RAMFNS”))) {…} |
| Komentarz: | GCC nie obsługuje bezpośrednio opcji kopiowania funkcji z pamięci ROM do RAM przy starcie programu. Uzyskanie identycznego efektu jest jednak możliwe przy pomocy mechanizmu inicjalizacji danych, poprzez utworzenie sekcji zawierającej funkcje do skopiowania (np. „RAMFNS”) i modyfikację kodu rozruchowego oraz skryptu linkera. | |
Tab 5. Przerwania i wyjątki
| IAR | GCC | |
| Słowo kluczowe: |
__swi __fiq __irq |
__attribute__((interrupt(“SWI”))) __attribute__((interrupt(“FIQ”))) __attribute__((interrupt(“IRQ”))) |
| Pragma: | swi_number=NN | |
| Składnia: |
__irq void foo (void) {…} |
void foo (void)__attribute__ ((interrupt(„IRQ”))) {…} |
| Komentarz: | Aby zdefiniować liczbę użytych przerwań programowych (SWI), oprócz słowa kluczowego __swi konieczne jest w środowisku IAR zastosowanie dyrektywy #pragma swi_number=N. | |
Tab. 6. Zagnieżdżone przerwania
| IAR | GCC | |
| Słowo kluczowe: | __nested | __attribute__((nesting)) |
| Pragma: | ||
| Składnia: |
__nested __irq void foo (void) {…} |
void foo (void)__attribute__ ((nesting)) {…} |
| Komentarz: | Atrybut ten (w połączeniu z: interrupt_handler, exception_handler lub nmi_handler) pozwala na używanie w GCC zagnieżdżonych przerwań i wyjątków. | |
Tab. 7. Funkcję niezwracające wartości
| IAR | GCC | |
| Słowo kluczowe: | __noreturn | __attribute__((noreturn)) |
| Pragma: | ||
| Składnia: |
__noreturn void foo (void) {…} |
void foo (void)__attribute__ ((noreturn)) {…} |
| Komentarz: | Funkcja z takim atrybutem jest oznaczona jako niezwracająca. | |
Tab. 8. Funkcje specyficzne dla architektury ARM
| IAR | GCC | |
| Słowo kluczowe: |
__arm __thumb __interwork |
__attribute__((short_call)) __attribute__((long_call)) |
| Pragma: | long_calls | |
| Składnia: |
__arm void foo (void) {…} |
|
| Komentarz: | Wszystkie wymienione opcje można włączyć na poziomie modułu przy pomocy linii poleceń. W GCC nie ma na obecną chwilę możliwości kontroli każdej z tych funkcji z osobna. Aby odwoływać się do funkcji thumb z kodu zlokalizowanego daleko w mapie adresów można jednak używać atrybutów long_call i short_call. | |
Tab. 9. Słabe funkcje/dane
| IAR | GCC | |
| Słowo kluczowe: | __weak | __attribute__((weak)) |
| Pragma: | weak | Weak |
| Składnia: |
__weak int i; __weak void foo (void) {…} |
int i __attribute__((weak)); void foo (void) __attribute__((weak)) {…} |
| Komentarz: | Funkcję lub zmienną definiuje się jako słabą, aby można ją było nadpisać jakąkolwiek „silną” (nie-słabą) funkcją o tej samej nazwie. Jeśli taka „silna” funkcja nie jest zdefiniowana, przy konsolidacji zostanie włączona do postaci binarnej funkcja słaba. | |
Tab. 10. Funkcje typu root i nieużywane dane
| IAR | GCC | |
| Słowo kluczowe: | __root | __attribute__((used)) |
| Pragma: | required | |
| Składnia: |
#pragma required=i int i; __root void foo (void) {…} |
int i __attribute__((used)); void foo (void) __attribute__((used)) {…} |
| Komentarz: | IAR EmbeddedWorkbench jest wyposażone w dwa niezależne mechanizmy służące do wymuszania na kompilatorze, żeby nie usuwał nieużywanego kodu i danych w czasie konsolidacji. GCC wykorzystuje do tego celu jeden atrybut. | |

Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć
Fotorezystor, czyli czujnik światła dwojakiego działania. Przykład innowacji w automatyce i elektronice możliwej dzięki technologii fotooporników 



