MIKROCHIP-LOGO

Kompilator MICROCHIP XC8 C wersja 2.45 Informacje o wydaniu dla MCU AVR

MICROCHIP-XC8-C-wersja-kompilatora-2-45-uwagi-wydania-dla-AVR-MCU-PRO

Informacje o produkcie

Kompilator MPLAB XC8 C to narzędzie programowe używane do kierowania urządzeniami Microchip AVR. Jest przeznaczony do kompilowania kodu C i generowania pliku wykonywalnego filedla tych urządzeń. Wersja kompilatora, o której mowa w tej instrukcji obsługi, to 2.45, a oficjalna data kompilacji to 18 sierpnia 2023 r. Poprzednia wersja to 2.41, zbudowana 8 lutego 2023 r. Kompilator jest dostarczany z Podręcznikiem bezpieczeństwa funkcjonalnego, który zawiera dodatkowe informacje oraz wytyczne dotyczące korzystania z kompilatorów MPLAB XC w aplikacjach związanych z bezpieczeństwem funkcjonalnym. Niniejsza instrukcja jest dołączona do pakietu dokumentacji przy zakupie licencji na bezpieczeństwo funkcjonalne. Kompilator MPLAB XC8 C obsługuje wszystkie dostępne 8-bitowe urządzenia MCU AVR w momencie wydania. Możesz odwołać się do pliku avr_chipinfo.html file w katalogu doc ​​kompilatora, aby uzyskać listę wszystkich obsługiwanych urządzeń i ich ustawień bitów konfiguracyjnych. Dostępne są różne edycje kompilatora MPLAB XC8. Wersja licencjonowana (PRO) zapewnia wyższy poziom optymalizacji w porównaniu z edycją bezpłatną. Aby aktywować kompilator jako produkt licencjonowany, należy zakupić klucz aktywacyjny. Jednak z wersji nielicencjonowanej można korzystać w nieskończoność bez licencji. Do zastosowań związanych z bezpieczeństwem funkcjonalnym dostępny jest kompilator bezpieczeństwa funkcjonalnego MPLAB XC8. Do aktywacji wymagana jest licencja bezpieczeństwa funkcjonalnego zakupiona od Microchip. Po aktywacji można korzystać ze wszystkich poziomów optymalizacji i funkcji kompilatora. Kompilator bezpieczeństwa funkcjonalnego MPLAB XC obsługuje również licencję serwera sieciowego. Szczegółowe informacje na temat instalacji, aktywacji, typów licencji i problemów z migracją można znaleźć w dokumencie Instalowanie i licencjonowanie kompilatorów MPLAB XC C (DS50002059).

Instrukcje użytkowania produktu

  1. Przed uruchomieniem oprogramowania MPLAB XC8 C Compiler przeczytaj instrukcję obsługi, aby uzyskać ważne informacje i instrukcje dotyczące docelowych urządzeń Microchip AVR.
  2. Jeśli używasz kompilatora dla 8-bitowych urządzeń PIC, zapoznaj się z dokumentem MPLAB XC8 C Compiler Release Notes for PIC.
  3. Upewnij się, że Twój system operacyjny spełnia wymagania systemowe do uruchomienia kompilatora. Pliki binarne dla systemu macOS zostały podpisane kodem i poświadczone notarialnie. Serwer licencji sieciowej MPLAB XC jest dostępny dla systemów Microsoft Windows 10 i nowszych, Ubuntu 18.04 i nowszych oraz macOS 10.15 i nowszych. Należy pamiętać, że serwer licencji sieciowej MPLAB XC nie jest testowany w tych systemach operacyjnych.
  4. Serwer licencji sieciowej MPLAB XC można uruchomić na maszynach wirtualnych obsługiwanego systemu operacyjnego przy użyciu licencji maszyny wirtualnej dla licencji sieciowych (SW006021-VM). Wszystkie 32-bitowe wersje serwera sieciowego MPLAB XC są wycofywane począwszy od wersji 3.00.
  5. Aby aktywować kompilator MPLAB XC8 C jako produkt licencjonowany (PRO), należy zakupić klucz aktywacyjny. Zapewni to wyższy poziom optymalizacji w porównaniu z wersją bezpłatną. Jednak nielicencjonowany kompilator może być używany przez czas nieokreślony bez licencji.
  6. Jeśli używasz kompilatora bezpieczeństwa funkcjonalnego MPLAB XC8 do zastosowań związanych z bezpieczeństwem funkcjonalnym, należy go aktywować za pomocą licencji bezpieczeństwa funkcjonalnego zakupionej od firmy Microchip. Bez tej licencji kompilator nie będzie działać. Po aktywacji możesz wybrać dowolny poziom optymalizacji i korzystać ze wszystkich funkcji kompilatora. Licencja na serwer sieciowy jest obsługiwana przez tę wersję kompilatora bezpieczeństwa funkcjonalnego MPLAB XC.
  7. Szczegółowe instrukcje dotyczące instalacji, aktywacji i licencjonowania kompilatora MPLAB XC8 C można znaleźć w dokumencie Instalacja i licencjonowanie kompilatorów MPLAB XC C (DS50002059).
  8. Jeśli używasz kompilatora w ramach licencji ewaluacyjnej, podczas kompilacji otrzymasz ostrzeżenie, gdy upłynie 14 dni od zakończenia okresu próbnego. To samo ostrzeżenie zostanie wyświetlone, jeśli upłynie 14 dni od zakończenia subskrypcji HPA.

Nadview

Wstęp
To wydanie kompilatora Microchip MPLAB® XC8 C zawiera kilka nowych funkcji, poprawek błędów i obsługę nowych urządzeń.

Data kompilacji
Oficjalna data kompilacji tej wersji kompilatora to 18 sierpnia 2023 r.

Poprzednia wersja
Poprzednia wersja kompilatora MPLAB XC8 C to 2.41, zbudowana 8 lutego 2023 r.

Podręcznik bezpieczeństwa funkcjonalnego
Podręcznik bezpieczeństwa funkcjonalnego dla kompilatorów MPLAB XC jest dostępny w pakiecie dokumentacji przy zakupie licencji na bezpieczeństwo funkcjonalne.

Licencje i wersje komponentów
Kompilator MPLAB XC8 C dla narzędzi MCU AVR jest napisany i rozpowszechniany na podstawie Powszechnej Licencji Publicznej GNU (GPL), co oznacza, że ​​jego kod źródłowy jest swobodnie dystrybuowany i dostępny publicznie. Kod źródłowy narzędzi objętych licencją GNU GPL można pobrać oddzielnie od firmy Microchip webstrona. Licencję GNU GPL możesz przeczytać w file o nazwie znajduje się podkatalog katalogu instalacyjnego. Ogólne omówienie zasad leżących u podstaw licencji GPL można znaleźć tutaj. Kod pomocniczy dostarczony dla nagłówka files, skrypty linkera i biblioteki wykonawcze są kodem zastrzeżonym i nie są objęte licencją GPL. Ten kompilator jest implementacją GCC w wersji 5.4.0, binutils w wersji 2.26 i używa avr-libc w wersji 2.0.0.

Wymagania systemowe
Kompilator MPLAB XC8 C i oprogramowanie licencyjne, którego używa, są dostępne dla różnych systemów operacyjnych, w tym 64-bitowych wersji następujących: Profesjonalne wersje Microsoft® Windows® 10, Ubuntu® 18.04, macOS® 13.2 (Ventura) i Fedora 34. Pliki binarne dla systemu Windows zostały podpisane kodem. Pliki binarne dla systemu macOS zostały podpisane kodem i poświadczone notarialnie. Serwer licencji sieciowej MPLAB XC jest dostępny dla różnych 64-bitowych systemów operacyjnych, w tym Microsoft Windows 10 i nowszych; Ubuntu 18.04 i nowsze; lub macOS 10.15 i nowsze. Serwer może również działać na różnych innych systemach operacyjnych, w tym na Windows Server, dystrybucjach Linuksa, takich jak Oracle® Enterprise Linux® i Red Hat® Enterprise Linux, a także na starszych wersjach obsługiwanych systemów operacyjnych. Jednakże serwer licencji sieciowej MPLAB XC nie jest testowany w tych systemach operacyjnych. Serwer licencji sieciowej MPLAB XC można uruchomić na maszynach wirtualnych obsługiwanego systemu operacyjnego przy użyciu licencji maszyny wirtualnej dla licencji sieciowych (SW006021-VM). Wszystkie 32-bitowe wersje serwera sieciowego MPLAB XC są wycofywane począwszy od wersji 3.00.

Obsługiwane urządzenia
Ten kompilator obsługuje wszystkie dostępne 8-bitowe urządzenia AVR MCU w momencie wydania. Zobacz avr_chipinfo.html (w katalogu dokumentów kompilatora), aby uzyskać listę wszystkich obsługiwanych urządzeń. Pliki te zawierają także listę ustawień bitów konfiguracyjnych dla każdego urządzenia.

Edycje i aktualizacje licencji
Kompilator MPLAB XC8 można aktywować jako produkt licencjonowany (PRO) lub nielicencjonowany (bezpłatny). Aby uzyskać licencję na kompilator, musisz kupić klucz aktywacyjny. Licencja pozwala na wyższy poziom optymalizacji w porównaniu do produktu Free. Nielicencjonowany kompilator może działać bezterminowo bez licencji. Kompilator bezpieczeństwa funkcjonalnego MPLAB XC8 należy aktywować za pomocą licencji bezpieczeństwa funkcjonalnego zakupionej od firmy Microchip. Bez tej licencji kompilator nie będzie działać. Po aktywacji możesz wybrać dowolny poziom optymalizacji i korzystać ze wszystkich funkcji kompilatora. Ta wersja kompilatora bezpieczeństwa funkcjonalnego MPLAB XC obsługuje licencję serwera sieciowego. Informacje na temat typów licencji i instalacji kompilatora z licencją można znaleźć w dokumencie Instalowanie i licencjonowanie kompilatorów MPLAB XC C (DS50002059).

Instalacja i aktywacja
Zobacz także sekcje Problemy i ograniczenia związane z migracją, aby uzyskać ważne informacje na temat najnowszego menedżera licencji dołączonego do tego kompilatora. Jeśli używasz MPLAB IDE, pamiętaj o zainstalowaniu najnowszej wersji MPLAB X IDE 5.0 lub nowszej przed zainstalowaniem tego narzędzia. Zamknij IDE przed instalacją kompilatora. Uruchom aplikację instalacyjną kompilatora .run (Linux) lub .app (macOS), np. XC8-1.00.11403-windows.exe i postępuj zgodnie ze wskazówkami wyświetlanymi na ekranie. Zalecany jest domyślny katalog instalacyjny. Jeśli używasz Linuksa, musisz zainstalować kompilator za pomocą terminala i konta root. Zainstaluj przy użyciu konta macOS z uprawnieniami administratora. Aktywacja jest teraz przeprowadzana oddzielnie od instalacji. Więcej informacji można znaleźć w dokumencie Menedżer licencji dla kompilatorów MPLAB® XC C (DS52059). Jeśli zdecydujesz się uruchomić kompilator w ramach licencji ewaluacyjnej, podczas kompilacji pojawi się ostrzeżenie, gdy upłynie 14 dni od zakończenia okresu próbnego. To samo ostrzeżenie zostanie wyświetlone, jeśli upłynie 14 dni od zakończenia subskrypcji HPA. Serwer licencji sieciowej XC jest oddzielnym instalatorem i nie jest zawarty w instalatorze kompilatora dla jednego użytkownika. Menedżer licencji XC obsługuje teraz roaming licencji sieciowych. Ta funkcja, przeznaczona dla użytkowników mobilnych, umożliwia wyłączenie licencji sieciowej na krótki czas z sieci. Korzystając z tej funkcji, możesz odłączyć się od sieci i nadal korzystać z kompilatora MPLAB XC. Więcej informacji na temat tej funkcji można znaleźć w folderze doc instalacji XCLM. MPLAB X IDE zawiera okno Licencje (Narzędzia > Licencje) umożliwiające wizualne zarządzanie roamingiem.

Rozwiązywanie problemów z instalacją
W przypadku trudności z instalacją kompilatora w dowolnym systemie operacyjnym Windows wypróbuj poniższe sugestie.

  • Uruchom instalację jako administrator.
  • Ustaw uprawnienia aplikacji instalatora na „Pełna kontrola”. (Kliknij plik prawym przyciskiem myszy, wybierz Właściwości, zakładka Zabezpieczenia, wybierz użytkownika, edytuj).
  • Ustaw uprawnienia folderu tymczasowego na „Pełna kontrola”.

Aby określić lokalizację folderu tymczasowego, wpisz %temp% w poleceniu Uruchom (klawisz z logo systemu Windows + R). Spowoduje to otwarcie okna dialogowego eksploratora plików pokazującego ten katalog i umożliwi określenie ścieżki do tego folderu.

Dokumentacja kompilatora
Podręczniki użytkownika kompilatora można otworzyć ze strony HTML, która otwiera się w przeglądarce po kliknięciu niebieskiego przycisku pomocy na pulpicie nawigacyjnym MPLAB X IDE, jak pokazano na zrzucie ekranu.MICROCHIP-XC8-C-wersja-kompilatora-2-45-uwagi-wydania-dla-AVR-MCU-1

Jeśli budujesz dla 8-bitowych celów AVR, Podręcznik użytkownika kompilatora MPLAB® XC8 C dla AVR® MCU zawiera informacje na temat opcji i funkcji kompilatora, które mają zastosowanie w tej architekturze.

Obsługa klienta
Możesz zadawać pytania innym użytkownikom tego produktu na Forum XC8. Firma Microchip chętnie przyjmuje raporty o błędach, sugestie i komentarze dotyczące tej wersji kompilatora. Wszelkie raporty o błędach lub prośby o nowe funkcje prosimy kierować za pośrednictwem Systemu Wsparcia.

Aktualizacje dokumentacji

Aktualne i dostępne online wersje dokumentacji MPLAB XC8 można znaleźć w dokumentacji technicznej online firmy Microchip webstrona.
Nowa lub zaktualizowana dokumentacja AVR w tej wersji:

Nic

  • Przewodnik migracji AVR® GNU Toolchain do MPLAB® XC8 opisuje zmiany w kodzie źródłowym i opcjach kompilacji, które mogą być wymagane, jeśli zdecydujesz się na migrację projektu opartego na języku C z 8-bitowego zestawu narzędzi AVR GNU do kompilatora Microchip MPLAB XC8 C.
  • Przewodnik informacyjny Microchip Unified Standard Library opisuje zachowanie i interfejs funkcji zdefiniowanych przez Microchip Unified Standard Library, a także zamierzone użycie typów bibliotek i makr. Niektóre z tych informacji były wcześniej zawarte w Podręczniku użytkownika kompilatora MPLAB® XC8 C dla MCU AVR®. Informacje o bibliotekach specyficznych dla urządzenia są nadal zawarte w tym przewodniku kompilatora.
  • Jeśli dopiero zaczynasz z urządzeniami 8-bitowymi i kompilatorem MPLAB XC8 C, moduł użytkownika MPLAB® XC8
  • Przewodnik dla inżynierów wbudowanych – MCU AVR® (DS50003108) zawiera informacje na temat konfigurowania projektów w MPLAB X IDE i pisania kodu dla pierwszego projektu MPLAB XC8 C. Ten przewodnik jest teraz rozpowszechniany wraz z kompilatorem.
  • Podręcznik użytkownika Hexmate jest przeznaczony dla osób korzystających z Hexmate jako samodzielnej aplikacji.

Co nowego

Poniżej przedstawiono nowe funkcje docelowe AVR, które obecnie obsługuje kompilator. Numer wersji w podtytułach wskazuje pierwszą wersję kompilatora obsługującą następujące funkcje.

Wersja 2.45
Uniwersalny menedżer licencji (XC8-3175, XCLM-224) Wersja menedżera licencji dla systemu macOS używana z kompilatorem jest teraz uniwersalna i oferuje natywną obsługę maszyn z procesorami Intel i M1. Wersja menedżera licencji dla systemu Linux wymaga teraz co najmniej wersji 2.25 glibc. Uniwersalne pliki binarne dla komputerów Mac (XC8-3168, XC8-2951) Pliki binarne kompilatora dla systemu macOS są teraz uniwersalne i oferują natywną obsługę maszyn z procesorami Intel i M1. Zmniejszone rozmiary bibliotek zmiennoprzecinkowych (XC8-3112, XC8-3071) Wprowadzono ulepszenia w funkcjach bibliotek zmiennoprzecinkowych, w tym sinf() pow(), sqrt(), expf(), log1fp() i nextafterf() , w których widać zmniejszenie rozmiaru kodu dla tych procedur. Obsługa nowych urządzeń Dostępna jest teraz obsługa następujących części AVR: AVR16EA28, AVR16EA32, AVR16EA48, AVR32EA28, AVR32EA32, AVR32EA48, AVR16EB14, AVR16EB20, AVR16EB28 i AVR16EB32.

Wersja 2.41

  • Obsługa Bootrow (XC8-3053) Kompilator umieści zawartość dowolnych sekcji z przedrostkiem .bootrow pod adresem 0x860000 w pliku HEX. Te sekcje są używane dla pamięci BOOTROW, która jest przeznaczona do przechowywania kluczy i innych bezpiecznych informacji, które powinny być dostępne tylko dla programu ładującego.
  • Eliminacja zbędnych zwrotów (XC8-3048) Kompilator wyeliminuje teraz zbędne instrukcje ret w funkcjach ze skokiem ogonowym, gdy używane są niestandardowe skrypty linkera. Jest to optymalizacja podobna do tej wykonywanej wcześniej, ale teraz jest wykonywana we wszystkich osieroconych sekcjach, nawet jeśli używany jest niestandardowy skrypt linkera i nie jest używany najlepszy schemat alokacji.
  • Zmiana typu czasu (XC8-2982, 2932) Typ standardowej biblioteki C99, time_t, został zmieniony z typu long long na typ unsigned long, co zapewnia poprawę rozmiaru kodu w niektórych funkcjach związanych z czasem, takich jak mktime().
  • Nowe nop (XC8-2946, 2945) Dodano makro NOP() . To makro wstawia na wyjście instrukcję nop braku operacji.
  • Aktualizacja do XCLM (XC8-2944) Menedżer licencji używany z kompilatorem został zaktualizowany i jest teraz bardziej responsywny podczas sprawdzania szczegółów licencji kompilatora.
  • Trampwywołania olined (XC8-2760) Kompilator może teraz zastąpić długie instrukcje wywołań krótszymi wywołaniami względnymi, gdy względne formy instrukcji normalnie byłyby poza zakresem ich przeznaczenia. W tej sytuacji kompilator podejmie próbę zastąpienia instrukcjami rcall instrukcją wywołania jmp, która spowoduje „trampoline” na wymagany adres, npampna:

Wersja 2.40

  • Obsługa nowych urządzeń Wsparcie jest teraz dostępne dla następujących części AVR: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 i AVR64EA48.
  • Ulepszona abstrakcja proceduralna Narzędzie do optymalizacji abstrakcji proceduralnej (PA) zostało ulepszone, dzięki czemu można zarysować kod zawierający instrukcję wywołania funkcji (call/rccall). Nastąpi to tylko wtedy, gdy stos nie będzie używany do przekazywania argumentów funkcji ani uzyskiwania wartości zwracanej z funkcji. Stos wykorzystuje się przy wywoływaniu funkcji ze zmienną listą argumentów lub przy wywoływaniu funkcji, która przyjmuje więcej argumentów niż jest przeznaczonych do tego rejestrów. Funkcję tę można wyłączyć za pomocą opcji – mno-pa-outline-calls lub można całkowicie wyłączyć abstrakcję proceduralną dla pliku obiektowego i/lub funkcji za pomocą opcji -mno-pa-on-file -mno-pa-on-function lub poprzez selektywne użycie atrybutu nopa (specyfikator __nopa) z funkcjami.
  • Makro pokrycia kodu Kompilator definiuje teraz makro __CODECOV, jeśli określono poprawną opcję -mcodecov.
  • Opcja rezerwacji pamięci Sterownik xc8-cc akceptuje teraz opcję -mreserve=space@start:end podczas budowania dla celów AVR. Ta opcja rezerwuje określony zakres pamięci w obszarze pamięci danych lub programu, uniemożliwiając linkerowi zapełnienie kodu lub obiektów w tym obszarze.
  • Inteligentniejsze inteligentne IO Wprowadzono kilka ulepszeń w funkcjach Smart IO, w tym ogólne poprawki w kodzie podstawowym printf, traktowanie specyfikatora konwersji %n jako niezależnego wariantu, łączenie na żądanie procedur vararg pop i używanie krótszych typów danych tam, gdzie to możliwe do obsługi Argumenty funkcji IO i uwzględnienie wspólnego kodu w zakresie szerokości pola i precyzji obsługi. Może to skutkować znaczną oszczędnością kodu i danych, a także zwiększeniem szybkości wykonywania operacji we/wy.

Wersja 2.39 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Licencja na serwer sieciowy To wydanie MPLAB XC8 Functional Safety Compiler obsługuje licencję na serwer sieciowy.

Wersja 2.36
Nic.

Wersja 2.35

  • Obsługa nowych urządzeń Wsparcie jest dostępne dla następujących części AVR: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 i AVR64DD32.
  • Ulepszone przełączanie kontekstu Nowa opcja -mcall-isr-prologues zmienia sposób, w jaki funkcje przerwań zapisują rejestry przy wejściu i jak te rejestry są przywracane po zakończeniu procedury przerwania. Działa w podobny sposób jak opcja -mcall-prologues, ale wpływa tylko na funkcje przerwań (ISR).
  • Jeszcze lepsze przełączanie kontekstu Nowa opcja -mgas-isr-prologues steruje kodem przełączania kontekstu generowanym dla procedur obsługi małych przerwań. Po włączeniu tej funkcji asembler przeskanuje ISR pod kątem użycia rejestrów i zapisze te używane rejestry tylko wtedy, gdy jest to wymagane.
  • Konfigurowalne mapowanie flash Niektóre urządzenia z rodziny AVR DA i AVR DB mają SFR (np. FLMAP), który określa, która 32-kilometrowa sekcja pamięci programu zostanie zmapowana do pamięci danych. Nowej opcji – mconst-data-in-config-mapped-progmem można użyć, aby linker umieścił wszystkie kwalifikowane dane w jednej sekcji 32k i automatycznie zainicjował odpowiedni rejestr SFR, aby zapewnić, że dane te zostaną zmapowane w przestrzeni pamięci danych , gdzie dostęp do nich będzie skuteczniejszy.
  • Ujednolicone biblioteki standardowe Microchip Wszystkie kompilatory MPLAB XC będą współużytkować ujednoliconą bibliotekę standardową Microchip, która jest teraz dostępna w tej wersji MPLAB XC8. Podręcznik użytkownika kompilatora MPLAB® XC8 C dla MCU AVR® nie zawiera już dokumentacji tych standardowych funkcji. Informacje te można teraz znaleźć w Przewodniku informacyjnym Microchip Unified Standard Library. Należy pamiętać, że niektóre funkcje wcześniej zdefiniowane przez avr-libc nie są już dostępne. (Zobacz Funkcjonalność biblioteki.)
  • Inteligentne IO W ramach nowych, ujednoliconych bibliotek funkcje IO w rodzinach printf i scanf są teraz generowane niestandardowo w każdej kompilacji, w oparciu o sposób użycia tych funkcji w programie. Może to znacznie zmniejszyć zasoby wykorzystywane przez program.
  • Opcja inteligentnej pomocy IO Podczas analizowania wywołań inteligentnych funkcji IO (takich jak printf() lub scanf() kompilator nie zawsze mógł określić na podstawie ciągu formatującego lub wywnioskować z argumentów specyfikatory konwersji wymagane przez wywołanie. Wcześniej kompilator zawsze żadnych założeń i zapewnić, że w pełni funkcjonalne funkcje IO zostały połączone z ostatecznym obrazem programu. Dodano nową opcję -msmart-io-format=fmt, dzięki czemu kompilator może zamiast tego zostać poinformowany przez użytkownika o specyfikatorach konwersji używanych przez smart IO. funkcje, których użycie jest niejednoznaczne, co zapobiega łączeniu zbyt długich procedur IO (więcej szczegółów można znaleźć w opcji smart-io-format).
  • Umieszczanie sekcji niestandardowych Poprzednio opcja -Wl,–section-start umieszczała określoną sekcję pod żądanym adresem tylko wtedy, gdy skrypt linkera definiował sekcję wyjściową o tej samej nazwie. Gdy tak nie było, sekcja była umieszczana pod adresem wybranym przez linker i opcja była w zasadzie ignorowana. Teraz opcja będzie honorowana dla wszystkich sekcji niestandardowych, nawet jeśli skrypt linkera nie definiuje tej sekcji. Należy jednak pamiętać, że w przypadku sekcji standardowych, takich jak .text, .bss czy .data, alokator najlepszego dopasowania będzie nadal miał pełną kontrolę nad ich rozmieszczeniem, a opcja nie będzie miała żadnego efektu. Użyj opcji -Wl,-Tsection=addr, jak opisano w podręczniku użytkownika.

Wersja 2.32

  • Wskazówki dotyczące stosu Dostępne z licencją kompilatora PRO, funkcja prowadzenia stosu kompilatora może zostać wykorzystana do oszacowania maksymalnej głębokości dowolnego stosu używanego przez program. Konstruuje i analizuje wykres wywołań programu, określa wykorzystanie stosu każdej funkcji i generuje raport, z którego można wywnioskować głębokość stosów używanych przez program. Tę funkcję można włączyć za pomocą opcji wiersza poleceń -mchp-stack-usage. Po wykonaniu zostanie wydrukowane podsumowanie wykorzystania stosu. Szczegółowy raport dotyczący stosu jest dostępny w pliku mapy, który można uzyskać w zwykły sposób.
  • Obsługa nowych urządzeń Dostępna jest obsługa następujących części AVR: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 i AVR32DB48 XNUMX.
  • Obsługa wycofanych urządzeń Obsługa następujących części AVR nie jest już dostępna: AVR16DA28, AVR16DA32 i AVR16DA48.

Wersja 2.31
Nic.

Wersja 2.30

  • Nowa opcja zapobiegająca inicjalizacji danych Nowa opcja sterownika -mno-data-init zapobiega inicjalizacji danych i czyszczeniu sekcji bss. Działa poprzez tłumienie wyjścia symboli do_clear_bss w plikach asemblera, co z kolei uniemożliwia włączenie tych procedur przez linker.
  • Ulepszone optymalizacje Wprowadzono szereg ulepszeń optymalizacyjnych, w tym usunięcie zbędnych instrukcji powrotu, usunięcie niektórych skoków po instrukcji pominięcia, jeśli bit jest oraz ulepszona abstrakcja proceduralna i możliwość iteracji tego procesu.
    Dostępne są teraz dodatkowe opcje umożliwiające kontrolowanie niektórych z tych optymalizacji, w szczególności kotwice -fsection-, które umożliwiają dostęp do obiektów statycznych w odniesieniu do jednego symbolu; -mpa-iterations=n, co pozwala na zmianę liczby iteracji abstrakcji proceduralnej z domyślnej wynoszącej 2; oraz -mpa-callcost-shortcall, które wykonuje bardziej agresywną abstrakcję proceduralną, w nadziei, że linker może złagodzić długie wywołania. Ta ostatnia opcja może zwiększyć rozmiar kodu, jeśli podstawowe założenia nie zostaną zrealizowane.
  • Obsługa nowych urządzeń Dostępna jest obsługa następujących części AVR: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48, i AVR128DB64.
  • Obsługa wycofanych urządzeń Pomoc techniczna nie jest już dostępna dla następujących części AVR: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C i ATA664251.

Wersja 2.29 (wydanie dotyczące bezpieczeństwa funkcjonalnego)

  • Plik nagłówkowy dla wbudowanych kompilatorów Aby mieć pewność, że kompilator będzie zgodny ze specyfikacjami językowymi, takimi jak MISRA, , został zaktualizowany. Ten nagłówek zawiera prototypy wszystkich wbudowanych funkcji, takich jak __builtin_avr_nop() i __builtin_avr_delay_cycles() . Niektóre wbudowane elementy mogą nie być zgodne z MISRA; można je pominąć, dodając define __XC_STRICT_MISRA do wiersza poleceń kompilatora. Wbudowane elementy i ich deklaracje zostały zaktualizowane, aby używać typów o stałej szerokości.

Wersja 2.20

  • Obsługa nowych urządzeń Wsparcie jest dostępne dla następujących części AVR: ATTINY1624, ATTINY1626 i ATTINY1627.
  • Lepsza alokacja najlepszego dopasowania Alokator najlepszego dopasowania (BFA) w kompilatorze został udoskonalony, dzięki czemu sekcje są przydzielane w kolejności umożliwiającej lepszą optymalizację. BFA obsługuje teraz nazwane przestrzenie adresowe i lepiej radzi sobie z inicjalizacją danych.
  • Ulepszona abstrakcja procedur Optymalizacje abstrakcji procedur są teraz wykonywane na większej liczbie sekwencji kodu. Poprzednie sytuacje, w których ta optymalizacja mogła zwiększyć rozmiar kodu, zostały rozwiązane przez uświadomienie kodu optymalizacji o procesie wyrzucania elementów bezużytecznych konsolidatora.
  • Brak asemblera AVR Asembler AVR nie jest już dołączony do tej dystrybucji.

Wersja 2.19 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.

Wersja 2.10

  • Pokrycie kodu To wydanie zawiera funkcję pokrycia kodu, która ułatwia analizę zakresu, w jakim kod źródłowy projektu został wykonany. Użyj opcji -mcodecov=ram, aby ją włączyć. Po uruchomieniu programu na Twoim sprzęcie, w urządzeniu zostaną zebrane informacje o pokryciu kodu, które można przesłać do MPLAB X IDE i wyświetlić w nim za pośrednictwem wtyczki pokrycia kodu. Informacje na temat tej wtyczki można znaleźć w dokumentacji IDE.
    Za pomocą #pragma nocodecov można wykluczyć kolejne funkcje z analizy pokrycia. W idealnym przypadku pragma powinna zostać dodana na początku pliku, aby wykluczyć cały plik z analizy pokrycia. Alternatywnie, __attribute__((nocodecov)) może zostać użyty w celu wykluczenia określonej funkcji z analizy pokrycia.
  • Pliki opisu urządzenia Nowy plik urządzenia o nazwie avr_chipinfo.html znajduje się w katalogu docs dystrybucji kompilatora. Plik ten zawiera listę wszystkich urządzeń obsługiwanych przez kompilator. Kliknij nazwę urządzenia, a otworzy się strona pokazująca wszystkie dozwolone pary ustawień bitów konfiguracyjnych/wartości dla tego urządzenia, np.amples.
  • Abstrakcja proceduralna Do kompilatora dodano optymalizacje abstrakcji proceduralnej, które zastępują typowe bloki kodu asemblera wywołaniami wyodrębnionej kopii tego bloku. Wykonuje je osobna aplikacja, która jest automatycznie wywoływana przez kompilator przy wyborze optymalizacji poziomu 2, 3 lub s. Te optymalizacje zmniejszają rozmiar kodu, ale mogą zmniejszyć szybkość wykonywania i możliwość debugowania kodu. Abstrakcję proceduralną można wyłączyć na wyższych poziomach optymalizacji za pomocą opcji -mno-pa lub można ją włączyć na niższych poziomach optymalizacji (w zależności od licencji) za pomocą opcji -mpa. Można to wyłączyć dla pliku obiektowego za pomocą -mno-pa-on-file=filename lub wyłączyć funkcję za pomocą opcji -mno-pa-on-function=function. Wewnątrz kodu źródłowego można wyłączyć abstrakcję proceduralną dla funkcji, używając __attribute__((nopa)) z definicją funkcji lub używając __nopa, która rozwija się do __attribute__((nopa,noinline)) i w ten sposób zapobiega wstawianiu funkcji i istnieje abstrakcja kodu wbudowanego.
  • Obsługa bitu blokującego w pragma Konfigurację #pragma można teraz wykorzystać do określenia bitów blokady AVR, a także innych bitów konfiguracyjnych. Sprawdź plik avr_chipinfo.html (wspomniany powyżej) pod kątem par ustawień/wartości, których można używać z tą pragmą.
  • Obsługa nowych urządzeń Dostępna jest obsługa następujących części: AVR28DA128, AVR64DA128, AVR32DA128 i AVR48DA128.

Wersja 2.05

  • Więcej bitów za każdą złotówkę Wersja tego kompilatora i menedżera licencji dla systemu macOS jest teraz aplikacją 64-bitową. Zapewni to, że kompilator zainstaluje się i będzie działał bez ostrzeżeń w najnowszych wersjach systemu macOS.
  • Stałe obiekty w pamięci programu Kompilator może teraz umieszczać obiekty o stałych kwalifikacjach w pamięci Flash programu, zamiast umieszczać je w pamięci RAM. Kompilator został zmodyfikowany w taki sposób, że w pamięci flash programu przechowywane są globalne dane o stałej jakości, do których można uzyskać bezpośredni i pośredni dostęp za pomocą odpowiednich instrukcji pamięci programu. Ta nowa funkcja jest domyślnie włączona, ale można ją wyłączyć za pomocą opcji -mno-const-data-in-progmem. W przypadku architektur avrxmega3 i avrtiny ta funkcja nie jest wymagana i zawsze jest wyłączona, ponieważ pamięć programu jest mapowana w przestrzeń adresową danych tych urządzeń.
  • Standard za darmo Nielicencjonowane (bezpłatne) wersje tego kompilatora pozwalają teraz na optymalizacje do poziomu 2 włącznie. Pozwoli to na uzyskanie podobnego, choć nie identycznego, efektu wyjściowego do tego, co było wcześniej możliwe przy użyciu licencji standardowej.
  • Witamy AVRASM2 Asembler AVRASM2 dla urządzeń 8-bitowych jest teraz zawarty w instalatorze kompilatora XC8. Ten asembler nie jest używany przez kompilator XC8, ale jest dostępny dla projektów opartych na ręcznym źródle asemblera.
  • Obsługa nowych urządzeń Wsparcie jest dostępne dla następujących części: ATMEGA1608, ATMEGA1609, ATMEGA808 i ATMEGA809.

Wersja 2.00

  • Sterownik najwyższego poziomu Nowy sterownik o nazwie xc8-cc znajduje się teraz nad poprzednim sterownikiem avr-gcc i sterownikiem xc8 i może wywoływać odpowiedni kompilator na podstawie wyboru urządzenia docelowego. Ten sterownik akceptuje opcje w stylu GCC, które są tłumaczone lub przekazywane do wykonywanego kompilatora. Ten sterownik umożliwia użycie podobnego zestawu opcji o podobnej semantyce z dowolnym celem AVR lub PIC i dlatego jest zalecanym sposobem wywołania kompilatora. W razie potrzeby stary sterownik avr-gcc można wywołać bezpośrednio, używając opcji starego typu, które akceptował we wcześniejszych wersjach kompilatora.
  • Common C Interface Ten kompilator może być teraz zgodny z MPLAB Common C Interface, umożliwiając łatwiejsze przenoszenie kodu źródłowego do wszystkich kompilatorów MPLAB XC. Opcja -mext=cci żąda tej funkcji, umożliwiając alternatywną składnię dla wielu rozszerzeń językowych.
  • Nowy kierowca bibliotekarza Nowy kierowca bibliotekarza jest umieszczony nad poprzednim bibliotekarzem PIC i bibliotekarzem AVR avr-ar. Ten sterownik akceptuje opcje w stylu archiwizatora GCC, które są albo tłumaczone, albo przekazywane do wykonywanego bibliotekarza. Nowy sterownik umożliwia użycie podobnego zestawu opcji o podobnej semantyce do tworzenia lub manipulowania dowolnym plikiem biblioteki PIC lub AVR i dlatego jest zalecanym sposobem wywoływania bibliotekarza. Jeśli jest to wymagane w przypadku starszych projektów, poprzedniego bibliotekarza można wywołać bezpośrednio, korzystając z opcji w starym stylu, które zaakceptował we wcześniejszych wersjach kompilatora.

Problemy z migracją

Poniżej przedstawiono funkcje, które są teraz obsługiwane inaczej przez kompilator. Zmiany te mogą wymagać modyfikacji kodu źródłowego w przypadku przenoszenia kodu do tej wersji kompilatora. Numer wersji w nagłówkach oznacza pierwszą wersję kompilatora obsługującą następujące zmiany.

Wersja 2.45
Nic.

Wersja 2.41
Usunięto niedokładne funkcje fma (XC8-2913) Standardowa biblioteka C99 ( ) nie obliczyło mnożenia z nieskończoną precyzją pojedynczego zaokrąglenia, lecz zamiast tego kumulowało błędy zaokrągleń przy każdej operacji. Funkcje te zostały usunięte z dostarczonej biblioteki.

Wersja 2.40
Nic.

Wersja 2.39 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.

Wersja 2.36
Nic.

Wersja 2.35

  • Obsługa ciągów znaków do baz (XC8-2420) Aby zapewnić spójność z innymi kompilatorami XC, funkcje łańcucha znaków XC8, takie jak strtol() itp., nie będą już próbowały konwertować ciągu wejściowego, jeśli określona podstawa jest większa niż 36 i zamiast tego ustawi . Norma C nie określa zachowania funkcji po przekroczeniu tej wartości bazowej.
  • Nieodpowiednie optymalizacje prędkości Optymalizacje abstrakcji proceduralnej zostały włączone przy wyborze optymalizacji poziomu 3 (-O3). Te optymalizacje zmniejszają rozmiar kodu kosztem szybkości kodu, więc nie powinny być wykonywane. W przypadku projektów korzystających z tego poziomu optymalizacji mogą wystąpić różnice w rozmiarze kodu i szybkości wykonywania, jeśli zostaną zbudowane w tej wersji.
  • Funkcjonalność bibliotek Kod wielu standardowych funkcji biblioteki C pochodzi obecnie z Unified Standard Library firmy Microchip, która w pewnych okolicznościach może wykazywać inne zachowanie w porównaniu do zapewnianej przez poprzednią bibliotekę avr-libc. Na przykładample, nie jest już konieczne dołączanie biblioteki lprintf_flt (opcja -lprintf_flt), aby włączyć obsługę sformatowanych operacji we/wy dla specyfikatorów formatu zmiennoprzecinkowego. Inteligentne funkcje IO biblioteki Microchip Unified Standard Library sprawiają, że ta opcja jest zbędna. Dodatkowo, użycie procedur z przyrostkiem _P dla funkcji łańcuchowych i pamięciowych (np. strcpy_P() itp.), które operują na ciągach stałych we Flashu, nie jest już konieczne. Standardowe procedury C (np. strcpy() będą poprawnie działać z takimi danymi, jeśli włączona jest funkcja const-data-in-program-memory.

Wersja 2.32
Nic.

Wersja 2.31
Nic.

Wersja 2.30
Nic.

Wersja 2.29 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.

Wersja 2.2
Zmieniony układ DFP Kompilator przyjmuje teraz inny układ używany przez DFP (Device Family Packs). Oznacza to, że starszy DFP może nie działać z tą wersją, a starsze kompilatory nie będą mogły korzystać z najnowszych DFP.

Wersja 2.19 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.

Wersja 2.10
Nic

Wersja 2.05
Stałe obiekty w pamięci programu Należy pamiętać, że domyślnie obiekty o stałych kwalifikacjach będą umieszczane i dostępne w pamięci programu (zgodnie z opisem tutaj). Wpłynie to na rozmiar i szybkość wykonywania projektu, ale powinno zmniejszyć zużycie pamięci RAM. W razie potrzeby tę funkcję można wyłączyć za pomocą opcji -mno-const-data-in-progmem.

Wersja 2.00

  • Bezpieczniki konfiguracyjne Bezpieczniki konfiguracyjne urządzenia można teraz programować za pomocą pragmy config, po której następują pary wartości ustawień w celu określenia stanu bezpieczników, np. #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3
  • Obiekty i funkcje absolutne Obiekty i funkcje można teraz umieszczać pod określonym adresem w pamięci za pomocą specyfikatora CCI __at(address), np.ampna:
    • #włączać
      int foobar __at(0x800100);
      char __at(0x250) getID(int offset) { … }
      Argument tego specyfikatora musi być stałą reprezentującą adres, pod którym zostanie umieszczony pierwszy bajt lub instrukcja. Adresy RAM są wskazywane przy użyciu przesunięcia 0x800000. Włącz CCI, aby móc korzystać z tej funkcji.
  • Nowa składnia funkcji przerwań Kompilator akceptuje teraz specyfikator CCI __interrupt(num) wskazujący, że funkcje C obsługują przerwania. Specyfikator pobiera numer przerwania, npample: #uwzględnij void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }

Naprawione problemy

Poniżej znajdują się poprawki wprowadzone w kompilatorze. Mogą one naprawić błędy w wygenerowanym kodzie lub zmienić działanie kompilatora na to, które było zamierzone lub określone w podręczniku użytkownika. Numer wersji w podtytułach wskazuje pierwszą wersję kompilatora zawierającą poprawki dla następujących problemów. Etykiety w nawiasach w tytule identyfikują problem w bazie danych śledzenia. Mogą się one przydać, jeśli chcesz skontaktować się z pomocą techniczną.
Pamiętaj, że niektóre problemy specyficzne dla urządzenia zostały rozwiązane w pakiecie Device Family Pack (DFP) powiązanym z urządzeniem. Zobacz menedżera pakietów MPLAB, aby uzyskać informacje o zmianach wprowadzonych w programach DFP i pobrać najnowsze pakiety.

Wersja 2.45

  • Awaria licencji mobilnej (XCLM-235) Licencje mobilne nie działały poprawnie na platformach Linux korzystających z glibc w wersji późniejszej niż 2.28.
  • Błąd wewnętrzny z tablicami struktur (XC8-3069) Podczas przetwarzania wielowymiarowych elementów tablicy struktury, kwalifikator przestrzeni adresowej nie został poprawnie propagowany do tablicy. Doprowadziło to do niezgodności informacji kwalifikatora przestrzeni adresowej i wewnętrznego błędu kompilatora. Ta sytuacja została naprawiona.
  • Błędne zapisy do niezainicjowanych strumieni (ML-353, XC8-3100) Jeśli standardowe strumienie wyjściowe/błędy nie zostały jawnie skonfigurowane przy użyciu FDEV_SETUP_STREAM lub _init_stdout/_init_stderr , próba zapisu do nich skutkowała niezdefiniowanym zachowaniem. Miało to wpływ również na zapisy z funkcji stdlib, takich jak perror(). Wszelkie zapisy do tych strumieni przed ich zainicjowaniem będą teraz ignorowane.
  • Nieobsługiwany modyfikator (XC8-2505) Biblioteka avr-libc nie obsługiwała modyfikatora * w specyfikatorach konwersji w stylu printf, np.ample „%.*f”. Jest to teraz wspierane dzięki wprowadzeniu ujednoliconej biblioteki standardowej Microchip.
  • Wiele niezainicjowanych ostrzeżeń (XC8-2409) Kompilator generował wiele identycznych komunikatów ostrzegawczych w przypadku napotkania tablicy const, która nie została zainicjowana. Wiadomość powinna była zostać wysłana tylko raz i ma to miejsce obecnie w przypadku wystąpienia tej sytuacji.

Wersja 2.41

  • Problemy z kluczem sprzętowym w Ventura (XC8-3088) Klucze sprzętowe używane do licencjonowania kompilatora mogły nie zostać poprawnie odczytane na hostach macOS Ventura, co powodowało błędy w licencjonowaniu. Zmiany w menedżerze licencji XCLM rozwiązują ten problem.
  • Nieprawidłowe wskazanie alokacji pamięci (XC8-2925) Próba alokacji SIZE_MAX bajtów (lub wartości zbliżonej) pamięci przy użyciu standardowych funkcji zarządzania pamięcią biblioteczną (malloc() i in.) wymaganych podczas korzystania z prostej implementacji dynamicznej alokacji pamięci. W takich sytuacjach zostanie teraz zwrócony wskaźnik NULL i errno ustawiony na ENOMEM.
  • Usunięto niedokładne funkcje fma (XC8-2913) Standardowa biblioteka C99 Funkcje rodziny fma() ( ) nie obliczyło mnożenia z nieskończoną precyzją pojedynczego zaokrąglenia, lecz zamiast tego kumulowało błędy zaokrągleń przy każdej operacji. Funkcje te zostały usunięte z dostarczonej biblioteki.
  • Zła obsługa konwersji ciągów znaków (XC8-2921, XC8-2652) Gdy „sekwencja tematyczna” do konwersji przez strtod() zawierała coś, co wyglądało na liczbę zmiennoprzecinkową w formacie wykładniczym, a po e/E znajdował się nieoczekiwany znak znak, wówczas tam, gdzie podano endptr, przypisano mu adres, który wskazywał na znak po , podczas gdy powinien był wskazywać na sam znak e//E, ponieważ nie został on przekonwertowany. Na przykładample, strtod(„100exx”, &ep) powinno zwrócić 100.00 i ustawić ep tak, aby wskazywało część „exx” ciągu, podczas gdy funkcja zwracała poprawną wartość, ale ustawiała część „xx” ciągu.

Wersja 2.40

  • Zbyt luźny (XC8-2876) Podczas używania opcji -mrelax kompilator nie alokował razem niektórych sekcji, co skutkowało mniej optymalnymi rozmiarami kodu. Mogło to mieć miejsce w przypadku kodu korzystającego z nowych bibliotek MUSL lub ze słabymi symbolami.
  • Funkcja mapowania nie jest wyłączona zgodnie z ostrzeżeniem (XC8-2875) Funkcja const-data-in-config-mapped-progmem jest zależna od włączenia funkcji const-data-in-progmem. Jeśli funkcja const-data-in-config-mapped-progmem została jawnie włączona przy użyciu tej opcji, a funkcja const-data-in-progmem została wyłączona, krok łączenia nie powiódł się pomimo komunikatu ostrzegawczego stwierdzającego, że funkcja const-data-in Funkcja -config-mapped-progmem została automatycznie wyłączona, co nie było całkowicie poprawne. W tej sytuacji funkcja const-data-in-config-mapped-progmem jest teraz całkowicie wyłączona.
  • Zmiany DFP w celu prawidłowego dostępu do NVMCTRL (XC8-2848) Kod startowy środowiska uruchomieniowego używany przez urządzenia AVR64EA nie uwzględniał tego, że rejestr NVMCTRL znajdował się pod ochroną przed zmianą konfiguracji (CCP) i nie był w stanie ustawić IO SFR na używaną stronę przez funkcję kompilatora const-data-in-config-mapped-progmem. Zmiany wprowadzone w AVR-Ex_DFP w wersji 2.2.55 umożliwią poprawny zapis kodu startowego do tego rejestru.
  • Zmiany w DFP w celu uniknięcia mapowania flash (XC8-2847) Zaimplementowano obejście problemu z funkcją urządzenia mapowania flash zgłoszonego w AVR128DA28/32/48/64 Silicon Errata (DS80000882). Funkcja kompilatora const-data-in-config-mapped-progmem nie będzie domyślnie stosowana w przypadku urządzeń, których dotyczy problem, a zmiana ta pojawi się w wersji 2.2.160 AVR-Dx_DFP.
  • Błąd kompilacji z sinhf lub coshf (XC8-2834) Próby użycia funkcji bibliotecznych sinhf() lub coshf() kończyły się błędem łącza, opisującym niezdefiniowane odniesienie. Brakująca funkcja, o której mowa, została teraz uwzględniona w dystrybucji kompilatora.
  • Tworzenie błędów za pomocą nopa (XC8-2833) Użycie atrybutu nopa z funkcją, której nazwa w asemblerze została podana za pomocą __asm__(), powodowało wyświetlenie komunikatów o błędach asemblera. Ta kombinacja nie jest możliwa.
  • Błąd funkcji wariadycznej z argumentami wskaźników (XC8-2755, XC8-2731) Funkcje ze zmienną liczbą argumentów oczekują przekazania 24-bitowych wskaźników (typu __memx) na liście argumentów zmiennych, gdy funkcja const-data-in-progmem jest włączony. Argumenty będące wskaźnikami do pamięci danych były przekazywane jako obiekty 16-bitowe, co powodowało awarię kodu po ich ostatecznym odczytaniu. Po włączeniu funkcji const-data-in-progmem wszystkie argumenty wskaźników 16-bitowych są teraz konwertowane na wskaźniki 24-bitowe.
  • Awaria funkcji bibliotecznych strtoxxx (XC8-2620) Po włączeniu funkcji const-data-in-progmem parametr endptr w funkcjach bibliotecznych strtoxxx nie został poprawnie zaktualizowany dla argumentów ciągu źródłowego, których nie ma w pamięci programu.
  • Alerty dotyczące nieprawidłowych rzutów (XC8-2612) Kompilator zgłosi teraz błąd, jeśli włączona jest funkcja const-in-progmem, a adres literału łańcuchowego jest jawnie rzutowany na przestrzeń adresową danych (porzucając kwalifikator const), np.ample, (uint8_t *) „Witaj, świecie!” . Jeśli adres może być nieprawidłowy, gdy wskaźnik danych const jest jawnie rzutowany na przestrzeń adresową danych, pojawia się ostrzeżenie.
  • Umieszczanie niezainicjowanych obiektów const (XC8-2408) Obiekty niezainicjowane i const volatile const
    nie były umieszczane w pamięci programu na urządzeniach, które odwzorowują całość lub część pamięci programu na przestrzeń adresową danych. W przypadku tych urządzeń takie obiekty są teraz umieszczane w pamięci programu, dzięki czemu ich działanie jest spójne z innymi urządzeniami.

Wersja 2.39 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.

Wersja 2.36
Błąd podczas opóźniania (XC8-2774) Drobne zmiany w domyślnych optymalizacjach trybu swobodnego zapobiegały ciągłemu składaniu wyrażeń operandów do wbudowanych funkcji opóźnienia, co skutkowało ich traktowaniem jako niestałe i wyzwalaniem błędu: __builtin_avr_delay_cycles oczekuje liczby całkowitej czasu kompilacji stały.

Wersja 2.35

  • Ciągła alokacja przy użyciu __at (XC8-2653) Ciągła alokacja wielu obiektów w sekcji o tej samej nazwie i przy użyciu __at() nie działała poprawnie. Na przykładampna:
    const char arr1[] __attribute__((sekcja(“.mysec”))) __at (0x500) = {0xAB, 0xCD}; const char arr2[] __attribute__((sekcja(“.mysec”))) = {0xEF, 0xFE}; powinien był umieścić arr2 bezpośrednio po arr1
  • Określanie adresów początkowych sekcji (XC8-2650) Opcja -Wl,–section-start po cichu nie powodowała umieszczania sekcji pod wyznaczonym adresem początkowym. Ten problem został rozwiązany w przypadku sekcji o niestandardowych nazwach; jednakże nie będzie działać w przypadku sekcji standardowych, takich jak .text lub .bss, które należy umieścić za pomocą opcji -Wl, -T. Konsolidator ulega awarii podczas relaksowania (XC8-2647) Gdy włączona była optymalizacja -mrelax i istniały sekcje kodu lub danych, które nie mieściły się w dostępnej pamięci, konsolidator ulegał awarii. Teraz w takiej sytuacji zamiast tego wyświetlane są komunikaty o błędach.
  • Brak możliwości powrotu (XC8-2646) Opcja –nofallback nie została poprawnie zaimplementowana ani udokumentowana. Można to teraz wybrać, aby mieć pewność, że kompilator nie powróci do niższego ustawienia optymalizacji, jeśli kompilator nie ma licencji, i zamiast tego zgłosi błąd.
  • Niewłaściwe optymalizacje szybkości (XC8-2637) Optymalizacje abstrakcji proceduralnej zostały włączone podczas wybierania optymalizacji poziomu 3 (-O3). Te optymalizacje zmniejszają rozmiar kodu kosztem szybkości kodu, więc nie powinny być wykonywane.
  • Zły dostęp do EEPROM (XC8-2629) Procedura eeprom_read_block nie działała poprawnie na urządzeniach Xmega, gdy włączona była opcja – mconst-data-in-progmem (co jest stanem domyślnym), co skutkowało niepoprawnym odczytem pamięci EEPROM.
  • Nieprawidłowy przydział pamięci (XC8-2593, XC8-2651) Gdy opcja łącznika -Ttext lub -Tdata (np.ampplik przekazywany przy użyciu opcji sterownika -Wl), zaktualizowano odpowiednie pochodzenie obszaru tekstowego/danych; jednakże adres końcowy nie został odpowiednio dostosowany, co mogło doprowadzić do przekroczenia zakresu pamięci urządzenia docelowego.
  • Awaria przy nadmiernie przypisanej funkcji (XC8-2580) Kompilator ulegał awarii, jeśli zadeklarowano funkcję przy użyciu więcej niż jednego atrybutu przerwania, sygnału lub nmi, np. __attribute__((__signal__, __interrupt__)).
  • Nieprawidłowy kod przerwania ATtiny (XC8-2465) Podczas budowania dla urządzeń ATtiny i optymalizacji zostały wyłączone (-O0), funkcje przerwań mogły wyzwolić argument spoza zakresu
  • Opcje nie są przekazywane (XC8-2452) Podczas używania opcji -Wl z wieloma opcjami konsolidatora oddzielanymi przecinkami, nie wszystkie opcje konsolidatora były przekazywane do konsolidatora.
  • Błąd pośredniego odczytu pamięci programu (XC8-2450) W niektórych przypadkach kompilator generował błąd wewnętrzny (nierozpoznawalny insn ) podczas odczytu dwubajtowej wartości ze wskaźnika do pamięci programu

Wersja 2.32
Drugi dostęp do biblioteki nie powiódł się (XC8-2381) Wywołanie wersji archiwizatora biblioteki xc8-ar.exe dla systemu Windows po raz drugi w celu uzyskania dostępu do istniejącego archiwum biblioteki mogło zakończyć się niepowodzeniem z powodu braku możliwości zmiany nazwy.

Wersja 2.31
Niewyjaśnione błędy kompilatora (XC8-2367) Podczas uruchamiania na platformach Windows, które miały tymczasowy katalog systemowy ustawiony na ścieżkę zawierającą kropkę „.” znak, wykonanie kompilatora mogło się nie powieść.

Wersja 2.30

  • Etykiety globalne zagubione po zarysowaniu (XC8-2299) Odręcznie napisany kod asemblera, który umieszcza globalne etykiety w sekwencjach zespołów, które są uwzględniane w drodze abstrakcji proceduralnej, mógł nie zostać poprawnie przeniesiony.
  • Relaksująca awaria (XC8-2287) Użycie opcji -mrelax mogło spowodować awarię linkera, gdy optymalizacje relaksacji skoku ogonowego próbowały usunąć instrukcję ret, która nie znajdowała się na końcu sekcji.
  • Awaria podczas optymalizacji etykiet jako wartości (XC8-2282) Kod korzystający z rozszerzenia języka GNU C „Etykiety jako wartości” mógł spowodować awarię optymalizacji abstrakcji proceduralnej i błąd naprawy zakresu.
  • Nie tak const (XC8-2271) Prototypy strstr() i innych funkcji z nie określa już niestandardowego kwalifikatora dla zwracanych wskaźników łańcuchowych, gdy funkcja const -mconst-data-in-progmem jest wyłączona. Należy pamiętać, że w przypadku urządzeń avrxmega3 i avrtiny ta funkcja jest włączona na stałe.
  • Utracone inicjatory (XC8-2269) Gdy w sekcji umieszczono więcej niż jedną zmienną w jednostce translacji (przy użyciu __section lub __attribute__((section)) ), a pierwsza taka zmienna miała inicjalizację zerową lub nie posiadała inicjatora, inicjatory dla inne zmienne w tej samej jednostce tłumaczeniowej, które zostały umieszczone w tej samej sekcji, zostały utracone.

Wersja 2.29 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.

Wersja 2.20

  • Błąd z długimi poleceniami (XC8-1983) Podczas korzystania z celu AVR kompilator mógł zatrzymać się i wyświetlić błąd „nie znaleziono pliku”, jeśli wiersz poleceń był bardzo duży i zawierał znaki specjalne, takie jak cudzysłowy, ukośniki odwrotne itp.
  • Nieprzypisana sekcja rodata (XC8-1920) Konsolidator AVR nie mógł przypisać pamięci dla niestandardowych sekcji rodata podczas budowania dla architektur avrxmega3 i avrtiny, potencjalnie powodując błędy nakładania się pamięci

Wersja 2.19 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.

Wersja 2.10

  • Błędy relokacji (XC8-1891) Najlepszym dopasowaniem alokatora było pozostawienie „dziur” w pamięci pomiędzy sekcjami po rozluźnieniu linkera. Oprócz fragmentacji pamięci, zwiększało to możliwość wystąpienia błędów relokacji linkera w związku ze skokami względem komputera lub wywołaniami znajdującymi się poza zasięgiem.
  • Instrukcje nie przekształcone przez relaksację (XC8-1889) Relaksacja łącznika nie wystąpiła w przypadku instrukcji skoku lub wezwania, których cele stają się osiągalne po rozluźnieniu.
  • Zaginiony funkcjonalność (XC8E-388) Kilka definicji z , takie jak clock_div_t i clock_prescale_set() , nie zostały zdefiniowane dla urządzeń, w tym ATmega324PB, ATmega328PB, ATtiny441 i ATtiny841.
  • Brakujące makra Makra preprocesora _XC8_MODE_, __XC8_VERSION, __XC i __XC8 są automatycznie definiowane przez kompilator. Są już dostępne.

Wersja 2.05

  • Wewnętrzny błąd kompilatora (XC8-1822) Podczas budowania w systemie Windows mógł wystąpić wewnętrzny błąd kompilatora podczas optymalizacji kodu.
  • Nie wykryto przepełnienia pamięci RAM (XC8-1800, XC8-1796) Programy, które przekroczyły dostępną pamięć RAM, w niektórych sytuacjach nie zostały wykryte przez kompilator, co skutkowało awarią kodu wykonawczego.
  • Pominięta pamięć flash (XC8-1792) W przypadku urządzeń avrxmega3 i avrtiny części pamięci flash mogły pozostać niezaprogramowane przez MPLAB X IDE.
  • Niepowodzenie wykonania programu main (XC8-1788) W niektórych sytuacjach, gdy w programie nie zdefiniowano zmiennych globalnych, kod startowy środowiska wykonawczego nie zakończył działania i funkcja main() nigdy nie została osiągnięta.
  • Nieprawidłowe informacje o pamięci (XC8-1787) W przypadku urządzeń avrxmega3 i avrtiny program avr-size zgłaszał, że dane tylko do odczytu zużywają pamięć RAM zamiast pamięci programu.
  • Nieprawidłowy odczyt pamięci programu (XC8-1783) Projekty skompilowane dla urządzeń z pamięcią programu zmapowaną w przestrzeń adresową danych i definiujące obiekty za pomocą makra/atrybutu PROGMEM mogły odczytać te obiekty ze złego adresu.
  • Błąd wewnętrzny z atrybutami (XC8-1773) Wystąpił błąd wewnętrzny, jeśli zdefiniowałeś obiekty wskaźnikowe za pomocą tokenów __at() lub atrybut() pomiędzy nazwą wskaźnika a typem wyłuskanym, np.ample, char * __at(0x800150) cp; W przypadku napotkania takiego kodu zostanie teraz wyświetlone ostrzeżenie.
  • Niemożność wykonania main (XC8-1780, XC8-1767, XC8-1754) Użycie zmiennych EEPROM lub zdefiniowanie bezpieczników przy użyciu pragmy konfiguracyjnej mogło spowodować nieprawidłową inicjalizację danych i/lub zablokować wykonanie programu w kodzie startowym środowiska wykonawczego, przed osiągnięciem funkcji main( ).
  • Błąd bezpiecznika w małych urządzeniach (XC8-1778, XC8-1742) Urządzenia attiny4/5/9/10/20/40 miały nieprawidłową długość bezpiecznika określoną w plikach nagłówkowych, co prowadziło do błędów linkera podczas próby zbudowania kodu definiującego bezpieczniki .
  • Błąd segmentacji (XC8-1777) Naprawiono sporadyczny błąd segmentacji.
  • Awaria asemblera (XC8-1761) Asembler avr-as mógł ulec awarii, gdy kompilator był uruchamiany w systemie Ubuntu 18.
  • Obiekty nie zostały usunięte (XC8-1752) Niezainicjowane obiekty czasu trwania pamięci statycznej mogły nie zostać usunięte przez kod startowy środowiska wykonawczego.
  • Zignorowano specyfikację urządzenia powodującego konflikt (XC8-1749) Kompilator nie generował błędu, gdy użyto wielu opcji specyfikacji urządzenia i wskazano różne urządzenia.
  • Uszkodzenie pamięci przez stertę (XC8-1748) Symbol __heap_start został niepoprawnie ustawiony, co skutkowało możliwością uszkodzenia zwykłych zmiennych przez stertę.
  • Błąd relokacji linkera (XC8-1739) Błąd relokacji linkera mógł zostać wyemitowany, gdy kod zawierał wywołanie rjmp lub rcall z celem oddalonym o dokładnie 4 kilobajty.

Wersja 2.00
Nic.

Znane problemy

Poniżej przedstawiono ograniczenia w działaniu kompilatora. Mogą to być ogólne ograniczenia kodowania lub odstępstwa od informacji zawartych w instrukcji obsługi. Etykiety w nawiasach w tytule identyfikują problem w bazie danych śledzenia. Może to być przydatne, jeśli chcesz skontaktować się z pomocą techniczną. Pozycje, które nie mają etykiet, stanowią ograniczenia opisujące sposób działania i które prawdopodobnie pozostaną w mocy na stałe.

Integracja MPLAB X IDE

  • Integracja MPLAB IDE Jeśli kompilator ma być używany z poziomu MPLAB IDE, przed instalacją kompilatora należy zainstalować MPLAB IDE.
  • Informacje debugowania tablicy (XC8-3157) Informacje debugowania generowane przez kompilator nie przekazują dokładnie typu obiektu tablic w przestrzeni adresowej __memx. Zapobiegnie to obserwacji obiektu w IDE.

Generowanie kodu

  • Segfault z opcją -fsection-anchors (XC8-3045) Program, który zdefiniował funkcje ze zmiennymi listami argumentów i który używa opcji -fsection-anchors, mógł wywołać wewnętrzny błąd kompilatora: Błąd segmentacji
  • Informacje debugowania niezsynchronizowane (XC8-2948) Gdy optymalizacja relaksacji linkera zmniejsza instrukcje (np.ample call to rcall), mapowania linii źródłowej na adres mogą nie pozostać zsynchronizowane, jeśli w sekcji występuje więcej niż jedna operacja zmniejszania. W poniższym przykładzieample, są dwa wezwania do foo, które kończą się złagodzeniem wezwań względnych.
  • Błąd alokacji pamięci PA (XC8-2881) Podczas korzystania z optymalizatorów abstrakcji proceduralnej linker może zgłosić błędy alokacji pamięci, gdy rozmiar kodu jest bliski ilości dostępnej pamięci programu na urządzeniu, nawet jeśli program powinien być w stanie zmieścić dostępną przestrzeń.
  • Niezbyt inteligentny Smart-IO (XC8-2872) Funkcja smart-io kompilatora wygeneruje prawidłowy, ale nieoptymalny kod dla funkcji snprintf, jeśli funkcja const-data-in-progmem została wyłączona lub jeśli urządzenie ma wszystkie swoje flash zmapowany do pamięci danych.
  • Jeszcze mniej inteligentny Smart-IO (XC8-2869) Funkcja smart-io kompilatora wygeneruje poprawny, ale nieoptymalny kod, gdy użyte zostaną obie opcje -flto i -fno-builtin.
  • Nieoptymalne rozmieszczenie danych tylko do odczytu (XC8-2849) Konsolidator obecnie nie jest świadomy sekcji pamięci APPCODE i APPDATA ani podziałów [Nie-]Odczyt podczas zapisu w mapie pamięci. W rezultacie istnieje niewielka szansa, że ​​linker przydzieli dane tylko do odczytu w nieodpowiednim obszarze pamięci. Prawdopodobieństwo zagubienia danych wzrasta, jeśli włączona jest funkcja const-data-in-progmem, szczególnie jeśli włączona jest również funkcja const-data-in-config-mapped-progmem. W razie potrzeby funkcje te można wyłączyć.
  • Kolejność przetwarzania plików obiektowych (XC8-2863) Kolejność, w jakiej pliki obiektowe będą przetwarzane przez linker, może się różnić w zależności od użycia optymalizacji abstrakcji proceduralnej (opcja -mpa). Miałoby to wpływ tylko na kod, który definiuje słabe funkcje w wielu modułach.
  • Błąd linkera z wartością absolutną (XC8-2777) Gdy obiekt został ustawiony na wartość absolutną pod adresem na początku pamięci RAM i zdefiniowano także niezainicjowane obiekty, może zostać wyzwolony błąd linkera.
  • Krótkie identyfikatory wybudzania (XC8-2775) W przypadku urządzeń ATA5700/2 rejestry PHID0/1 są definiowane tylko jako mające szerokość 16 bitów, a nie 32 bity.
  • Linker zawiesza się podczas wywoływania symbolu (XC8-2758) Linker może ulec awarii, jeśli opcja sterownika -mrelax zostanie użyta, gdy kod źródłowy wywołuje symbol, który został zdefiniowany przy użyciu opcji linkera – Wl, –defsym.
  • Niepoprawna inicjalizacja (XC8-2679) Istnieje rozbieżność pomiędzy miejscem, w którym wartości początkowe niektórych globalnych/statycznych obiektów wielkości bajtów są umieszczane w pamięci danych, a miejscem dostępu do zmiennych w czasie wykonywania.
  • Złe pośrednie wywołania funkcji (XC8-2628) W niektórych przypadkach wywołania funkcji wykonane poprzez wskaźnik funkcji przechowywany jako część struktury mogą zakończyć się niepowodzeniem.
  • strtof zwraca zero dla liczb zmiennoprzecinkowych szesnastkowych (XC8-2626) Funkcje biblioteczne strtof() et al oraz scanf() et al zawsze konwertują szesnastkową liczbę zmiennoprzecinkową, która nie określa wykładnika, na zero. Na przykładample: strtof(“0x1”, &endptr); zwróci wartość 0, a nie 1.
  • Niedokładny komunikat doradcy stosu (XC8-2542, XC8-2541) W niektórych przypadkach ostrzeżenie doradcy stosu dotyczące rekurencji lub nieokreślonego użytego stosu (prawdopodobnie w wyniku użycia alloca()) nie jest emitowane.
  • Błąd ze zduplikowanym kodem przerwania (XC8-2421) Jeśli więcej niż jedna funkcja przerwania ma tę samą treść, kompilator może uzyskać wynik dla wywołania jednej funkcji przerwania drugiej. Spowoduje to niepotrzebne zapisanie wszystkich blokowanych wywołań rejestrów, a przerwania zostaną włączone nawet przed wykonaniem epilogu bieżącej procedury obsługi przerwań, co może prowadzić do awarii kodu.
  • Złe dane wyjściowe z nieprawidłową ścieżką DFP (XC8-2376) Jeśli kompilator zostanie wywołany z niepoprawną ścieżką DFP i istnieje plik „specyfikacja” dla wybranego urządzenia, kompilator nie zgłasza brakującego pakietu rodziny urządzeń i zamiast tego wybiera „specyfikację” pliku, co może następnie prowadzić do nieprawidłowego wyniku. Pliki „specyfikacji” mogą nie być aktualne w przypadku rozproszonych programów DFP i były przeznaczone wyłącznie do użytku z wewnętrznymi testami kompilatora.
  • Nie wykryto nałożenia pamięci (XC8-1966) Kompilator nie wykrywa nałożenia się pamięci obiektów ustawionych jako bezwzględne pod adresem (za pomocą __at()) i innych obiektów korzystających ze specyfikatora __section() i powiązanych z tym samym adresem.
  • Błąd z funkcjami bibliotecznymi i __memx (XC8-1763) Wywoływane funkcje zmiennoprzecinkowe libgcc z argumentem w przestrzeni adresowej __memx mogą zakończyć się niepowodzeniem. Należy zauważyć, że procedury biblioteczne są wywoływane przez niektóre operatory C, więc npample, dotyczy to następującego kodu: return regFloatVar > memxFloatVar;
  • Ograniczona implementacja biblioteki libgcc (AVRTC-731) W przypadku produktów ATTiny4/5/9/10/20/40 standardowa implementacja biblioteki C/Math w libgcc jest bardzo ograniczona lub nie występuje.
  • Ograniczenia pamięci programu (AVRTC-732) Obrazy pamięci programu przekraczające 128 kb są obsługiwane przez zestaw narzędzi; jednakże znane są przypadki przerwania działania linkera bez relaksacji i bez przydatnego komunikatu o błędzie zamiast generowania wymaganych fragmentów funkcji, gdy używana jest opcja -mrelax.
  • Ograniczenia przestrzeni nazw (AVRTC-733) Nazwane przestrzenie adresowe są obsługiwane przez łańcuch narzędzi, z zastrzeżeniem ograniczeń wymienionych w sekcji podręcznika użytkownika Specjalne kwalifikatory typów.
  • Strefy czasowe funkcje biblioteczne zakładają czas GMT i nie obsługują lokalnych stref czasowych, dlatego localtime() zwróci na przykład ten sam czas co gmtime()ample.

Dokumenty / Zasoby

Kompilator MICROCHIP XC8 C wersja 2.45 Informacje o wydaniu dla MCU AVR [plik PDF] Instrukcje
AVR MCU, XC8 C, XC8 C Kompilator w wersji 2.45 Informacje o wydaniu dla AVR MCU, Kompilator w wersji 2.45 Informacje o wydaniu dla AVR MCU, Wersja 2.45 Informacje o wydaniu dla AVR MCU, Informacje o wydaniu dla AVR MCU, Uwagi dla AVR MCU, AVR MCU

Odniesienia

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *