TASKING - Kompilatory C/C++

  • Drukuj
  • Email

Najważniejszym elementem każdego pakietu narzędziowego TASKING jest kompilator języka C/C++. Dla każdej obsługiwanej architektury procesorowej oferowane są specjalizowane, generujące zoptymalizowany kod, stabilne kompilatory.

Ze względu na ograniczone zasoby sprzętowe typowych systemów wbudowanych, producent kładzie szczególny nacisk na optymalność oferowanych rozwiązań. W typowym kompilatorze TASKING implementowanych jest przeszło pięćdziesiąt technik optymalizacyjnych, przykładowo:

  • usuwanie przypisań nadmiarowych
  • upraszczanie nagłówków funkcji, które nie wywołują podfunkcji
  • ograniczanie liczby dostępów do pamięci poprzez tzw. register cashing
  • rozwijanie krótkich pętli dla optymalizacji prędkości
  • zastępowanie ciągu instrukcji krótkimi rozkazami
  • funkcje typu inline

Każde narzędzie jest starannie projektowane, by możliwie najlepiej wykorzystać właściwości danej architektury. Różne modele pamięci, możliwość definiowania funkcji obsługi przerwań, wspomaganie bankowania pamięci i różnych trybów jej adresowania, to tylko wybrane własności kompilatorów TASKING. Należy również nadmienić, że narzędzia dla bardziej zaawansowanych platform w pełni korzystają z własności architektur SIMD (DSP) i MIMD, a także instrukcji arytmetyki stałoprzecinkowej, zmiennoprzecinkowej i zespolonej.

Nie bez znaczenia pozostaje również fakt, że kompilatory TASKING są projektowane zgodne ze standardem ANSI C, mimo przeznaczenia dla systemów wbudowanych. Dla każdej architektury przewidziano jednak zbiór rozszerzeń językowych i dyrektyw pragma, sterujących procesem kompilacji. Rozszerzenia te umożliwiają wygodne korzystanie ze specyficznych cech danej platformy bez potrzeby używania wstawek asemblerowych. Co więcej, dyrektywy pragma mogą sterować kompilacją również lokalnie, co pozwala przykładowo wybrać fragmenty programu, które mają zostać zoptymalizowane pod kątem prędkości lub objętości kodu.

Kompilatory TASKING umożliwiają także łączenie języka C/C++ z asemblerem w pojedynczym pliku źródłowym. Taki sposób programowania jest wspierany przez funkcje, umożliwiające przekazywanie parametrów pomiędzy fragmentami programu o różnym poziomie opisu. Przy operacjach wykonywanych w programie asemblerowym korzystać można dodatkowo z tzw. pseudo-rejestrów, dzięki czemu problem zachowywania zawartości rejestrów procesorowych jest zrzucany na kompilator.

Technologia kompilatorów TASKING (VIPER) więcej »

Embedded C++ (EC++)

Firma Altium jako jedna z pierwszych przystosowała swoje kompilatory do stosunkowo nowego standardu EC++. Embedded C++ stanowi podzbiór standardu C++, z którego usunięto funkcjonalność zbędną w systemach wbudowanych.

EC++ zapewnia redukcję długości kodu wynikowego, zwiększenie prędkości wykonywania programu i upraszcza proces programowania. Korzyści te osiągane są poprzez rezygnację z takich możliwości C++, jak: wyjątki, wielokrotne dziedziczenie, klasy wirtualne, szablony, namespaces, RTTI i inne.

Embedded C++ więcej »

MISRA C

Język C stał się nieformalnym standardem w dziedzinie systemów wbudowanych. Powodem tego jest najprawdopodobniej jego wysoka efektywność i elastyczność. Standard ANSI C nie jest jednak pozbawiony wad. Według specjalistów, C jest językiem składniowo niespójnym, przez co często prowadzi on do nieporozumień i błędów, które ciężko zlokalizować. Z tego powodu C nigdy nie był stosowany w systemach, w których niezawodność i bezpieczeństwo jest kwestią krytyczną.

Próbę poprawy spójności, a przez to również niezawodności języka C, podjęło konsorcjum MISRA (Motor Industry Software Reliability Association - www.misra.org.uk). Opracowany został standard MISRA C, na który składa się 127 reguł programowania w języku C. Stosowanie zasad MISRA C gwarantuje wyższą spójność, czytelność i niezawodność tworzonego oprogramowania.

Firma Altium jako pierwsza wprowadziła w wielu swoich kompilatorach możliwość sprawdzania składni pod kątem standardu MISRA C. Kompilatory TASKING oferują przy tym możliwość określania podzbioru reguł MISRA C, które są w danym projekcie obowiązujące. Elastyczność tę docenić powinni klienci, którzy chcą uchronić się jedynie przed wybranymi pułapkami języka C.

MISRA C wiecej »

Locator

Poza standardowym programem linkującym, wchodzącym w skład każdego pakietu narzędziowego, TASKING oferuje dodatkowo oprogramowanie o nazwie Locator. Danymi wejściowymi dla tego narzędzia są efekty pracy linkera wraz z informacjami o platformie. Jego zadaniem jest natomiast odpowiednie ulokowanie programu w pamięci. Mapowanie pamięci może przebiegać zarówno automatycznie, jak i być wykonywane manualnie, z wykorzystaniem narzędzia graficznego.

Cechą odróżniającą Locator od zwykłego linkera jest jego przeznaczenie dla systemów wieloprocesorowych. Locator pozwala definiować zadania programowe (tasks), a także daje możliwość przyporządkowania im osobnych stosów i stert pamięci. Poszczególne zadania mogą być automatycznie przyporządkowane dostępnym w systemie procesorom. Przy tym pamięć programu może być zarówno wspólna, jak i osobna dla każdego z oprogramowywanych procesorów.

Locator więcej »