Oprogramowanie kompilatora MICROCHIP MPLAB XC8 C
NINIEJSZY DOKUMENT ZAWIERA WAŻNE INFORMACJE DOTYCZĄCE KOMPILATORA MPLAB XC8 C W PRZYPADKU URZĄDZEŃ MICROCHIP AVR.
PRZECZYTAJ GO PRZED URUCHOMIENIEM TEGO OPROGRAMOWANIA. JEŚLI KORZYSTASZ Z KOMPILERA DLA 8-BITOWYCH URZĄDZEŃ PIC, ZOBACZ UWAGI DOTYCZĄCE WYDANIA KOMPILERA MPLAB XC8 C.
Nadview
Wstęp
Ta wersja 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 3 lipca 2022 r.
Poprzednia wersja
Poprzednia wersja kompilatora MPLAB XC8 C to 2.39, kompilator bezpieczeństwa funkcjonalnego, opracowany 27 stycznia 2022 r. Poprzednia wersja standardowego kompilatora to 2.36, opracowany 27 stycznia 2022 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
Narzędzia kompilatora MPLAB® XC8 C dla mikrokontrolerów AVR są pisane i rozpowszechniane na licencji GNU General Public License (GPL), co oznacza, że ich kod źródłowy jest swobodnie rozpowszechniany i dostępny publicznie. Kod źródłowy narzędzi na licencji GNU GPL można pobrać oddzielnie ze strony 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 fileSkrypty linkera i biblioteki środowiska uruchomieniowego 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 wykorzystywane przez niego oprogramowanie licencyjne są dostępne dla różnych systemów operacyjnych, w tym 64-bitowych wersji następujących: Profesjonalne edycje Microsoft Windows 10; Ubuntu 18.04; i macOS 10.15.5. Pliki binarne dla systemu Windows zostały podpisane kodem. Pliki binarne dla systemu mac OS zostały podpisane kodem i poświadczone notarialnie.
Jeśli uruchamiasz serwer licencji sieciowej, tylko komputery z systemami operacyjnymi obsługiwanymi przez kompilatory mogą być używane do hostowania serwera licencji. Od wersji xclm 2.0 serwer licencji sieciowej może być zainstalowany na platformie Microsoft Windows Server, ale serwer licencji nie musi działać na wersji serwerowej systemu operacyjnego.
Obsługiwane urządzenia
Ten kompilator obsługuje wszystkie 8-bitowe urządzenia AVR MCU znane w momencie wydania. Zobacz (w katalogu doc kompilatora) listę wszystkich obsługiwanych urządzeń. Te fileWyświetla również ustawienia bitów konfiguracyjnych dla każdego urządzenia.
Edycje i aktualizacje licencji
Kompilator MPLAB XC8 można aktywować jako produkt licencjonowany (PRO) lub bez licencji (Free). Musisz kupić klucz aktywacyjny, aby uzyskać licencję na kompilator. Licencja umożliwia wyższy poziom optymalizacji w porównaniu z produktem Free. Kompilator bez licencji może być używany bezterminowo bez licencji.
Kompilator MPLAB XC8 Functional Safety musi zostać aktywowany za pomocą licencji na bezpieczeństwo funkcjonalne zakupionej od Microchip. Kompilator nie będzie działał bez tej licencji. Po aktywacji możesz wybrać dowolny poziom optymalizacji i korzystać ze wszystkich funkcji kompilatora. Ta wersja kompilatora MPLAB XC Functional Safety obsługuje licencję Network Server License.
Zobacz dokument Installing and Licensing MPLAB XC C Compilers (DS50002059), aby uzyskać informacje na temat typów licencji i instalacji kompilatora z licencją.
Instalacja i aktywacja
Zobacz także sekcje Problemy z migracją i ograniczenia, aby uzyskać ważne informacje na temat najnowszego menedżera licencji dołączonego do tego kompilatora.
Jeśli używasz MPLAB IDE, upewnij się, że zainstalowałeś najnowszą wersję MPLAB X IDE 5.0 lub nowszą przed zainstalowaniem tego narzędzia. Zamknij IDE przed zainstalowaniem kompilatora. Uruchom instalator kompilatora .exe (Windows), .run (Linux) lub app (macOS), np. XC8-1.00.11403-windows.exe i postępuj zgodnie ze wskazówkami na ekranie.
Zalecany jest domyślny katalog instalacyjny. Jeśli używasz Linuksa, musisz zainstalować kompilator za pomocą terminala i konta root. Zainstaluj za pomocą 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, otrzymasz teraz ostrzeżenie podczas kompilacji, gdy do końca okresu ewaluacyjnego pozostało mniej niż 14 dni. To samo ostrzeżenie jest wydawane, jeśli do zakończenia subskrypcji HPA pozostało mniej niż 14 dni.
Serwer licencji sieciowej XC jest osobnym instalatorem i nie jest zawarty w instalatorze kompilatora dla jednego użytkownika.
Menedżer licencji XC obsługuje teraz roaming licencji sieciowych typu floating. Funkcja ta, skierowana do użytkowników mobilnych, umożliwia licencji typu floating wyjście poza sieć na krótki okres czasu. Korzystając z tej funkcji, możesz rozłączyć się z 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 Licenses (Tools > Licenses) do wizualnego zarządzania roamingiem.
Rozwiązywanie problemów z instalacją
Jeśli napotkasz trudności przy instalacji kompilatora w którymś z systemów operacyjnych Windows, wypróbuj poniższe sugestie.
- Uruchom instalację jako administrator.
- Ustaw uprawnienia aplikacji instalacyjnej na „Pełna kontrola”. (Kliknij prawym przyciskiem myszy file, wybierz Właściwości, zakładkę Zabezpieczenia, wybierz użytkownika, edytuj.)
- Ustaw uprawnienia folderu tymczasowego na „Pełna kontrola!”
Aby określić lokalizację folderu temp, wpisz %temp% w poleceniu Uruchom (klawisz z logo Windows + R). Spowoduje to otwarcie file okno dialogowe eksploratora pokazujące ten katalog i umożliwiające 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.
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
Firma Microchip chętnie przyjmuje raporty o błędach, sugestie i komentarze dotyczące tej wersji kompilatora. Wszelkie zgłoszenia błędów lub prośby o nowe funkcje prosimy kierować do 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:
- Informacja o prawach autorskich MUSL
- Instalowanie i licencjonowanie kompilatorów MPLAB XC C (wersja M)
- Podręcznik użytkownika MPLAB XC8 dla inżynierów systemów wbudowanych – mikrokontrolery AVR (wersja A)
- Podręcznik użytkownika kompilatora MPLAB XC8 C dla mikrokontrolerów AVR (wersja F)
- Podręcznik referencyjny Microchip Unified Standard Library (wersja B)
Microchip Unified Standard Library Reference Guide 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 MPLAB® XC8 C Compiler User!s Guide for AVR® MCU. Informacje o bibliotekach specyficznych dla urządzenia są nadal zawarte w tym przewodniku kompilatora.
Jeśli dopiero zaczynasz pracę z urządzeniami 8-bitowymi i kompilatorem MPLAB XC8 C, w podręczniku MPLAB® XC8 User!s Guide for Embedded Engineers – AVR® MCUs (DS50003108) znajdziesz informacje na temat konfigurowania projektów w środowisku IDE MPLAB X i pisania kodu dla pierwszego projektu MPLAB XC8 C. Ten podręcznik jest teraz dostarczany z kompilatorem.
Podręcznik użytkownika Hamate został dołączony do katalogu docs w tej wersji. Ten przewodnik jest przeznaczony dla osób uruchamiających Hamate jako samodzielną aplikację.
Co nowego
Poniżej przedstawiono nowe funkcje AVR-target, które kompilator teraz obsługuje. Numer wersji w podnagłówkach wskazuje pierwszą wersję kompilatora, która obsługuje następujące funkcje.
Wersja 2.40
Obsługa nowych urządzeń Obecnie dostępne jest wsparcie 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 optymalizacji abstrakcji proceduralnej (PA) zostało ulepszone, tak aby kod zawierający instrukcję wywołania funkcji (call recall) mógł zostać zarysowany. Będzie to miało miejsce tylko wtedy, gdy stos nie jest używany do przekazywania argumentów do funkcji ani uzyskiwania wartości zwracanej z niej. Stos jest używany podczas wywoływania funkcji ze zmienną listą argumentów lub podczas wywoływania funkcji, która przyjmuje więcej argumentów niż jest rejestrów przeznaczonych do tego celu. Tę funkcję można wyłączyć za pomocą opcji monk-pa-outline-calls lub abstrakcję proceduralną można całkowicie wyłączyć dla obiektu file lub funkcja za pomocą -monk-pa-on-file i -mo.-pa-on-function odpowiednio lub poprzez selektywne użycie atrybutu nipa (specyfikator nipa) z funkcjami
Makro pokrycia kodu Kompilator definiuje teraz makro __CODECOV, jeśli określono prawidłową opcję mcodecov.
Opcja rezerwacji pamięci Sterownik xc8-cc będzie teraz akceptował opcję -mreserve=space@start: end podczas kompilacji dla celów AVR. Ta opcja rezerwuje określony zakres pamięci w przestrzeni pamięci danych lub programu, uniemożliwiając linkerowi wypełnianie kodu lub obiektów w tym obszarze.
Inteligentniejsze, inteligentne IO Wprowadzono kilka udoskonaleń do funkcji Smart IO, w tym ogólne modyfikacje kodu rdzenia printf, traktowanie specyfikatora konwersji %n jako niezależnego wariantu, łączenie w procedurach vararg pop na żądanie, używanie krótszych typów danych, gdzie to możliwe, do obsługi argumentów funkcji IO oraz uwzględnienie wspólnego kodu w szerokości pola i obsłudze precyzji. Może to skutkować znacznymi oszczędnościami kodu i danych, a także zwiększyć szybkość wykonywania IO.
Wersja 2.39 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Licencja serwera sieciowego Ta wersja kompilatora bezpieczeństwa funkcjonalnego MPLAB XC8 obsługuje licencję serwera sieciowego.
Wersja 2.36
Nic.
Wersja 2.35
Obsługa nowych urządzeń Dostępne jest wsparcie 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 bardziej ulepszone przełączanie kontekstu Nowa opcja -mgas-isr-prologues kontroluje kod itch kontekstów generowany dla małych procedur obsługi przerwań. Po włączeniu ta funkcja spowoduje, że asembler przeskanuje ISR pod kątem użycia rejestrów i zapisze te używane rejestry tylko wtedy, gdy będzie to wymagane.
Konfigurowalne mapowanie pamięci flash Niektóre urządzenia z rodziny AVR DA i AVR DB mają SFR (np. FLMAP), który określa, która sekcja 32k pamięci programu zostanie zamapowana na pamięć danych. Nowa opcja – mconst-data-in-config-mapped-proem może być używana, aby linker umieścił wszystkie dane kwalifikowane przez cons w jednej sekcji 32k i automatycznie zainicjował odpowiedni rejestr SFR, aby zapewnić, że te dane zostaną zamapowane na przestrzeń pamięci danych, gdzie dostęp do nich będzie bardziej efektywny.
Biblioteki standardowych układów scalonych Microchip Wszystkie kompilatory MPLAB XC będą współdzielić Microchip Unified Standard Library, która jest teraz dostępna w tej wersji MPLAB XC8. MPLAB® XC8 C Compiler User's Guide/lub AVR® MCU nie zawiera już dokumentacji dla tych standardowych funkcji. Te informacje można teraz znaleźć w Microchip Unified Standard Library Reference Guide. Należy zauważyć, że niektóre funkcje zdefiniowane wcześniej przez avr-libc nie są już dostępne. (Zobacz Librar):'. functionalitY…)
Inteligentne IO Jako część nowych zunifikowanych bibliotek, funkcje IO w rodzinach drukowania i skanowania są teraz generowane niestandardowo w każdej kompilacji, w oparciu o sposób, w jaki te funkcje są używane w programie. Może to znacznie zmniejszyć zasoby używane przez program.
Opcja pomocy Smart IO Podczas analizowania wywołań funkcji smart IO (takich jak printf() lub scanf()) kompilator nie zawsze może określić na podstawie ciągu formatującego lub wywnioskować z argumentów specyfikatory konwersji wymagane przez wywołanie. Wcześniej kompilator nie przyjmował żadnych założeń i upewniał się, ż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 być zamiast tego informowany przez użytkownika o specyfikatorach konwersji używanych przez funkcje smart IO, których użycie jest niejednoznaczne, zapobiegając łączeniu nadmiernie długich procedur IO. (Więcej szczegółów można znaleźć w opcji smart-io-format).
Umieszczanie niestandardowych sekcji 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, a opcja była zasadniczo ignorowana. Teraz opcja będzie honorowana dla wszystkich sekcji niestandardowych, nawet jeśli skrypt linkera nie definiuje sekcji. Należy jednak pamiętać, że w przypadku sekcji standardowych, takich jak . text, . bss lub . data, najlepiej dopasowany alokator nadal będzie miał pełną kontrolę nad ich umiejscowieniem, a opcja nie będzie miała żadnego efektu. Użyj opcji -Wl, -Tsection=add, zgodnie z opisem w podręczniku użytkownika.
Wersja 2.32
Wskazówki dotyczące stosu Dostępna z licencją kompilatora PRO, funkcja prowadzenia stosu kompilatora może być używana do szacowania maksymalnej głębokości stosu używanego przez program. Konstruuje i analizuje wykres wywołań programu, określa użycie stosu przez każdą funkcję i generuje raport, z którego można wywnioskować głębokość stosów używanych przez program. Ta funkcja jest włączana za pomocą opcji wiersza poleceń -mchp-stack-usage. Podsumowanie użycia stosu jest drukowane po wykonaniu. Szczegółowy raport stosu jest dostępny w mapie file, o które można poprosić w zwykły sposób.
Wsparcie dla nowych urządzeń Wsparcie jest dostępny dla następujących części AVR: ATTINY 427, ATTINY 424, ATTINY 426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 i AVR32DB48.
Wsparcie wycofanego urządzenia Wsparcie nie jest już dostępny dla następujących części AVR: AVR16DA28, AVR16DA32 i AVR16DA48.
Wersja 2.31
Nic.
Wersja 2.30
Nowa opcja zapobiegająca inicjalizacji danych Nowa opcja sterownika -mno-data-ini t zapobiega inicjalizacji danych i czyszczeniu sekcji bss. Działa poprzez tłumienie wyjścia symboli do_ copy_ data i d o_ clear_ bss w asemblerze files, co z kolei zapobiegnie włączeniu 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.
Teraz dostępne są dodatkowe opcje do kontrolowania niektórych z tych optymalizacji, w szczególności -f section anchors, które umożliwiają dostęp do obiektów statycznych w odniesieniu do jednego symbolu; -mpai derations=n, które umożliwiają zmianę liczby iteracji abstrakcji proceduralnej z domyślnej wartości 2; oraz -mpa- call cost- 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 nie zostaną zrealizowane podstawowe założenia.
Obsługa nowych urządzeń Wsparcie jest dostępne dla następujących części AVR: AVR16DA28, AVR16DA32,
Modele: AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 oraz AVR128DB64.
wycofane wsparcie urządzenia Następujące części AVR nie są już objęte wsparciem: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C i ATA664251.
Wersja 2.29 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Chodnikowiec file dla wbudowanych funkcji kompilatora Aby mieć pewność, że kompilator jest zgodny ze specyfikacjami języka, takimi jak MISRA, chodnikowiec file, który jest automatycznie uwzględniany przez , został zaktualizowany. Ten nagłówek zawiera prototypy wszystkich wbudowanych funkcji, takich jak _buil tin _avrnop() i _buil tin_ avr delay_ cycles(). Niektóre wbudowane funkcje mogą nie być zgodne ze standardem MISRA; można je pominąć, dodając polecenie define _Xe_ STRICT_ MISRA do wiersza poleceń kompilatora. Wbudowane funkcje i ich deklaracje zostały zaktualizowane, aby używać typów o stałej szerokości.
Wersja 2.20
Obsługa nowych urządzeń Dostępne jest wsparcie dla następujących części AVR: ATTINY1624, ATTINY1626 i ATTINY1627.
Lepsza, najlepiej dopasowana alokacja Alokator najlepszego dopasowania (BFA) w kompilatorze został ulepszony, 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 proceduralna Optymalizacje abstrakcji proceduralnej 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 uczynienie kodu optymalizacyjnego świadomym procesu zbierania śmieci przez linker.
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 Ta wersja zawiera funkcję pokrycia kodu, która ułatwia analizę stopnia wykonania kodu źródłowego projektu. Użyj opcji -mcodecov=ram, aby ją włączyć. Po wykonaniu programu na sprzęcie informacje o pokryciu kodu zostaną zestawione w urządzeniu i mogą zostać przesłane do i wyświetlone przez środowisko IDE MPLAB X za pośrednictwem wtyczki pokrycia kodu. Informacje na temat tej wtyczki można uzyskać w dokumentacji IDE. #pragma mcodecov może zostać użyta do wykluczenia kolejnych funkcji z analizy pokrycia. W idealnym przypadku pragma powinna zostać dodana na początku file wykluczyć to całe file z analizy pokrycia. Alternatywnie, atrybut ( (mcodecov) ) może być użyty do wykluczenia określonej funkcji z analizy pokrycia.
Opis urządzenia files Nowe urządzenie file o nazwie avr chipinfo.html znajduje się w katalogu docs dystrybucji kompilatora. Ten file 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 konfiguracji/wartości dla tego urządzenia, z np.amples.
Abstrakcja proceduralna Optymalizacje abstrakcji proceduralnej, które zastępują typowe bloki kodu asemblera wywołaniami wyodrębnionej kopii tego bloku, zostały dodane do kompilatora. Są one wykonywane przez osobną aplikację, która jest automatycznie wywoływana przez kompilator podczas wybierania optymalizacji poziomu 2, 3 lub s. Optymalizacje te 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 włączyć na niższych poziomach optymalizacji (zależnie od licencji) za pomocą opcji -mpa. Można go wyłączyć dla obiektu file używając -mno-pa-on-file=filenazwę lub wyłączyć dla funkcji za pomocą -mno-pa dla funkcja= funkcja.
W kodzie źródłowym abstrakcję proceduralną można wyłączyć dla funkcji, używając _attribute_ ((nopa)) w definicji funkcji lub używając _nopa, które rozwija się do attribute ((nopa, noinline)) i w ten sposób zapobiega wbudowywaniu funkcji i abstrakcji wbudowywanego kodu.
Obsługa bitów blokujących w pragma Konfigurację #pragma można teraz wykorzystać do określenia bitów blokady AVR, jak również innych bitów konfiguracji. Sprawdź informacje o chipie AVR. html file (wspomniane powyżej) dla par ustawienia/wartości do użycia z tą pragmą.
Obsługa nowych urządzeń Wsparcie jest dostępne dla 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.
Obiekty const w pamięci programu Kompilator może teraz umieszczać obiekty const w pamięci flash programu, zamiast umieszczać je w pamięci RAM. Kompilator został zmodyfikowany tak, aby globalne dane const były przechowywane w pamięci flash programu, a do tych danych 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 jest zawsze wyłączona, ponieważ pamięć programu jest mapowana na przestrzeń adresową danych dla tych urządzeń.
Standardowo za darmo Nielicencjonowane (bezpłatne) wersje tego kompilatora umożliwiają teraz optymalizacje do poziomu 2 włącznie. Pozwoli to na uzyskanie podobnego, choć nie identycznego, wyniku 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ęcznie pisanym ź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
Kierowca najwyższej klasy Nowy sterownik, zwany xc8-cc, znajduje się teraz nad poprzednim sterownikiem avr-gcc i sterownikiem xc8 i może wywołać 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 jest zatem zalecanym sposobem wywołania kompilatora. W razie potrzeby stary sterownik avr-gcc można wywołać bezpośrednio, używając opcji w starym stylu, które akceptował we wcześniejszych wersjach kompilatora.
Wspólny interfejs C Ten kompilator może teraz być zgodny z interfejsem MPLAB Common C, 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 sterownik bibliotekarza Nowy sterownik bibliotekarza jest umieszczony nad poprzednim bibliotekarzem PIC libr i bibliotekarzem AVR avr-ar. Ten sterownik akceptuje opcje w stylu GCC-archiver, które są tłumaczone lub przekazywane do wykonywanego bibliotekarza. Nowy sterownik umożliwia użycie podobnego zestawu opcji o podobnej semantyce do tworzenia lub manipulowania dowolną biblioteką PIC lub AVR file i dlatego jest zalecanym sposobem wzywania bibliotekarza. Jeśli jest to wymagane w przypadku starszych projektów, poprzedni bibliotekarz może zostać wywołany bezpośrednio przy użyciu opcji w starym stylu, akceptowanych we wcześniejszych wersjach kompilatora.
Problemy z migracją
Poniżej przedstawiono funkcje, które są teraz obsługiwane inaczej przez kompilator. Te zmiany mogą wymagać modyfikacji kodu źródłowego, jeśli przenosisz kod do tej wersji kompilatora. Numer wersji w podnagłówkach wskazuje pierwszą wersję kompilatora, która obsługuje następujące zmiany.
Wersja 2.40
Nic.
Wersja 2.39 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.
Wersja 2.36
Nic.
Wersja 2.35
Obsługa string-to-base (XCS-2420) Aby zapewnić spójność z innymi kompilatorami XC, funkcje XC8 string-to, takie jak strtol() itd., nie będą już próbowały konwertować ciągu wejściowego, jeśli określona baza jest większa niż 36, a zamiast tego ustawią errno na EINVAL. Standard C nie określa zachowania funkcji, gdy ta wartość bazy zostanie przekroczona.
Niewłaściwe optymalizacje prędkości Optymalizacje abstrakcji proceduralnej były włączane podczas wybierania optymalizacji poziomu 3 (-03). Te optymalizacje zmniejszają rozmiar kodu kosztem szybkości kodu, więc nie powinny być wykonywane. Projekty korzystające z tego poziomu optymalizacji mogą zauważyć różnice w rozmiarze kodu i szybkości wykonywania, gdy są tworzone w tej wersji.
Funkcjonalność biblioteki Kod wielu standardowych funkcji biblioteki C pochodzi teraz z Unified Standard Library firmy Microchip, która może wykazywać inne zachowanie w niektórych okolicznościach w porównaniu z tym, które zapewniała dawna biblioteka avr-libc. Na przykładample, nie jest już konieczne łączenie biblioteki lprintf_flt (opcja -print _flt), aby włączyć obsługę formatowanego wejścia/wyjścia dla specyfikatorów formatu float. Inteligentne funkcje wejścia/wyjścia Microchip Unified Standard Library sprawiają, że ta opcja jest zbędna. Ponadto, używanie procedur z sufiksem _p dla funkcji string i memory (np. strcpy_P() itd.), które działają na const string w pamięci flash, nie jest już konieczne. Standardowe procedury C (np. strcpy()) będą działać poprawnie z takimi danymi, gdy 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.20
Zmieniono 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 const-qualfiied będą umieszczane i dostępne w pamięci programu (jak opisano tutaj). Będzie to miało wpływ na rozmiar i szybkość wykonywania projektu, ale powinno zmniejszyć użycie pamięci RAM. Tę funkcję można wyłączyć, jeśli jest to wymagane, używając opcji -mnoconst-da ta-in-progmem.
Wersja 2.00
Bezpieczniki konfiguracyjne Bezpieczniki konfiguracji urządzenia można teraz programować za pomocą pragma config, po którym następują pary ustawień i wartości, aby określić stan bezpiecznika, np.
#pragma config WDT0N = SET
#pragma konfiguracja B0DLEVEL = B0DLEVEL_4V3
Obiekty i funkcje absolutne Obiekty i funkcje można teraz umieszczać pod określonym adresem w pamięci, korzystając ze specyfikatora CCI _at (adres), np.ample: #zawierać int foobar at(Ox800100); char at(Ox250) get ID(int offset) { … } Argument tego specyfikatora musi być stałą, która reprezentuje adres, pod którym zostanie umieszczony pierwszy bajt lub instrukcja. Adresy RAM są wskazywane przez użycie przesunięcia 0x800000. Włącz CCI, aby użyć tej funkcji.
Nowa składnia funkcji przerwań Kompilator akceptuje teraz specyfikator przerwania CCI (num), aby wskazać, że funkcje C są programami obsługi przerwań. Specyfikator przyjmuje numer przerwania, np.ample: #zawierać przerwanie void(SPI STC_ vect _num) spi Isr(void) { … }
Naprawione problemy
Poniżej przedstawiono poprawki, które zostały wprowadzone do kompilatora. Mogą one naprawić błędy w wygenerowanym kodzie lub zmienić działanie kompilatora w sposób zamierzony lub określony 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 kwadratowych w tytule są identyfikacją danego problemu w bazie danych śledzenia. Mogą być przydatne, jeśli musisz skontaktować się z pomocą techniczną.
Należy pamiętać, że niektóre problemy specyficzne dla urządzenia zostały naprawione w Device Family Pack (DFP) powiązanym z urządzeniem. Zobacz MPLAB Pack Manager, aby uzyskać informacje o zmianach wprowadzonych do DFP i pobrać najnowsze pakiety.
Wersja 2.40
Zbyt zrelaksowany (XCS-2876) Podczas korzystania z opcji -mrelax kompilator nie alokował razem niektórych sekcji, co skutkowało mniej optymalnymi rozmiarami kodu. Mogło to mieć miejsce w przypadku kodu, który korzystał z nowych bibliotek MUSL lub ze słabymi symbolami.
Funkcja mapowania nie została wyłączona, jak podano w ostrzeżeniu (XCS-2875) Funkcja cost-data-in-config-mappedprogmem jest zależna od włączenia funkcji cost-data-in-proem. Jeśli funkcja cost-data-ipconfig-mapped-proem została jawnie włączona za pomocą opcji, a funkcja cost-data-inprogmem została wyłączona, krok łącza nie powiódł się, pomimo komunikatu ostrzegawczego informującego, że funkcja cons data-in-config-mapped-proem została automatycznie wyłączona, co nie było do końca prawdą. Funkcja const-data-in-config-mapped-proem jest teraz całkowicie wyłączona w tej sytuacji.
Zmiany w DFP umożliwiające poprawny dostęp do NVMCTRL (XCS-2848) Kod uruchamiania środowiska uruchomieniowego używany przez urządzenia AVR64EA nie uwzględniał faktu, że rejestr NVMCTRL był objęty ochroną Configuration Change Protection (CCP) i nie był w stanie ustawić IO SFR na stronę używaną przez funkcję kompilatora const-data-in configmapped-proem. Zmiany wprowadzone w wersji 2.2.55 AVR-Ex_DFP pozwolą kodowi uruchamiania środowiska uruchomieniowego na prawidłowy zapis do tego rejestru.
Zmiany w DFP mające na celu uniknięcie mapowania flash (XCS-2847) Wprowadzono obejście problemu z funkcją mapowania urządzenia flash zgłoszonego w AVR128DA28/32/48/64 Silicon Errata (DS80000882). Funkcja kompilatora const-data-in-config-mapped-proem nie będzie domyślnie stosowana dla dotkniętych urządzeń, a ta zmiana pojawi się w wersji 2.2.160 AVR-Ex_DFP.
Błąd kompilacji z sinhf lub coshf (XCS-2834) Próby użycia funkcji bibliotecznych sinhf() lub coshf() skutkowały błędem łącza opisującym niezdefiniowane odwołanie. Brakująca funkcja, o której mowa, została teraz uwzględniona w dystrybucji kompilatora.
Błędy kompilacji z nopa (XCS-2833) Użycie atrybutu nopa z funkcją, której nazwa assemblera została określona za pomocą as(), wyzwalało komunikaty o błędach z assemblera. Ta kombinacja nie jest możliwa.
Błąd funkcji zmiennej z argumentami wskaźnika (XCS-2755, XCS-2731) Funkcje ze zmienną liczbą argumentów oczekują, że wskaźniki 24-bitowe (typ _memo) zostaną przekazane na liście argumentów zmiennych, gdy włączona jest funkcja cost-data-in-proem. Argumenty, które były wskaźnikami do pamięci danych, były przekazywane jako obiekty 16-bitowe, co powodowało błąd kodu, gdy były ostatecznie odczytywane. Gdy włączona jest funkcja cons data-in-proem, wszystkie argumenty wskaźników 16-bitowych są teraz konwertowane na wskaźniki 24-bitowe. Funkcje biblioteki strtoxxx ulegają awarii (XCS-2620) Gdy włączona była funkcja const-data-in-proem, parametr enter w funkcjach biblioteki strtoxxx nie był prawidłowo aktualizowany dla argumentów ciągu źródłowego, które nie znajdowały się w pamięci programu.
Alerty dotyczące nieprawidłowych rzutów (XCS-2612) Kompilator będzie teraz zgłaszał błąd, jeśli funkcja cost-in-proem jest włączona, a adres literału ciągu jest jawnie rzutowany na przestrzeń adresową danych (pomijając kwalifikator const), np.ample, (uint8 t *) „Hello World!”. Ostrzeżenie jest wydawane, jeśli adres może być nieprawidłowy, gdy wskaźnik danych const jest jawnie rzutowany na przestrzeń adresową danych.
Umieszczanie niezainicjowanych obiektów const (XCS-2408) Niezainicjowane obiekty const i const volatile nie były umieszczane w pamięci programu na urządzeniach, które mapują całą lub część swojej 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 działaniem innych urządzeń.
Wersja 2.39 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.
Wersja 2.36
Błąd podczas opóźniania (XCS-2774) Niewielkie zmiany w domyślnych optymalizacjach trybu swobodnego zapobiegły ciągłemu składaniu wyrażeń operandów do wbudowanych funkcji opóźnienia, co skutkowało traktowaniem ich jako niekontaktowych i wywoływaniem błędu: _buil tin avr delay_ cycles oczekuje stałej całkowitej czasu kompilacji.
Wersja 2.35
Przydzielanie ciągłe przy użyciu _at (XCS-2653) Ciągłe przydzielanie wielu obiektów w sekcji o tej samej nazwie i używanie at () nie działało poprawnie. Na przykładample: constchararrl [ ] at tri butte ((sect on(“.misses”))) at (Ox50 0 ) = {Oxo , Ox CD} ; koszt char arr2[ ] at tri butte ((section(“.my s eke”))) = {Oxen, Ox FE }; należy umieścić arr2 bezpośrednio po aril.
Określanie adresów początkowych sekcji (XCS-2650) Opcja -Wal, –section-start nie pozwalała na umieszczanie sekcji pod wskazanym adresem początkowym. Problem ten został naprawiony dla wszystkich sekcji o niestandardowych nazwach; nie będzie jednak działać dla żadnych standardowych sekcji, takich jak . text lub . bss, które muszą być umieszczane za pomocą opcji -Wl, -T.
Linker ulega awarii podczas relaksacji (XCS-2647) Gdy włączono optymalizację -relax i były sekcje kodu lub danych, które nie mieściły się w dostępnej pamięci, linker się zawiesił. Teraz w takich okolicznościach zamiast tego wydawane są komunikaty o błędach.
Nieprawidłowy dostęp do pamięci EEPROM (XCS-2629) Procedura bloku leproma _read_ nie działała prawidłowo na urządzeniach Mega, gdy włączona była opcja -monist-data-in-proem (co jest stanem domyślnym), co powodowało, że pamięć EEPROM nie była poprawnie odczytywana.
Nieprawidłowy przydział pamięci (XCS-2593, XCS-2651) Gdy opcja linkera -Text lub -Tata (np.ampJeśli określono plik przekazany za pomocą opcji sterownika -Wl, zaktualizowano odpowiedni początek obszaru tekstu/danych; jednak adres końcowy nie został odpowiednio dostosowany, co mogło spowodować, że obszar przekroczył zakres pamięci urządzenia docelowego.
Nieprawidłowy kod przerwania ATtiny (XCS-2465) Podczas kompilacji dla urządzeń Tatin i przy wyłączonych optymalizacjach (-00) funkcje przerwań mogły wywoływać komunikaty assemblera informujące o tym, że operand jest poza zakresem.
Opcje nie są przekazywane (XCS-2452) W przypadku użycia opcji -Wl z wieloma opcjami linkera rozdzielonymi przecinkami, nie wszystkie opcje linkera były przekazywane do linkera.
Błąd pośredniego odczytu pamięci programu (XCS-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ę (XCS-2381) Ponowne uruchomienie wersji archiwizatora bibliotek xc8-ar.exe dla systemu Windows w celu uzyskania dostępu do istniejącego archiwum bibliotek mogło się nie powieść i pojawił się komunikat o błędzie informujący o braku możliwości zmiany nazwy.
Wersja 2.31
Niewyjaśnione awarie kompilatora (XCS-2367) W przypadku platform Windows, w których ścieżka tymczasowego katalogu systemowego zawierała kropkę, kompilator mógł się nie uruchomić.
Wersja 2.30
Etykiety globalne zostały błędnie umieszczone po utworzeniu konspektu (XCS-2299) Odręcznie napisany kod asemblera, który umieszcza globalne etykiety w sekwencjach asemblera, które są uwzględniane przez abstrakcję proceduralną, mógł nie zostać poprawnie przeniesiony.
Relaksujący crash (XCS-2287) Użycie opcji -merlad mogło spowodować awarię linkera, gdy optymalizacje relaksacji skoku ogona próbowały usunąć instrukcje ret, które nie znajdowały się na końcu sekcji.
Awaria podczas optymalizacji etykiet jako wartości (XCS-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 zarysowanych zakresów VMA.
Nie tak const (XCS-2271) Prototypy dla funkcji start() i innych funkcji z nie określaj już niestandardowego kwalifikatora kosztu w zwracanych wskaźnikach stringów, gdy funkcja -monist-data inprogmem jest wyłączona. Należy pamiętać, że w przypadku urządzeń avrxmega3 i avertin ta funkcja jest trwale włączona.
Utracone inicjatory (XCS-2269) Gdy w jednej sekcji umieszczono więcej niż jedną zmienną w jednostce tłumaczeniowej (za pomocą sekcji lub atrybutu ((sekcja))), a pierwsza taka zmienna została zainicjowana zerem lub nie miała inicjatora, inicjatory innych zmiennych 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 (XCS-1983) Podczas korzystania z celu AVR kompilator mógł zatrzymać się z file nie znaleziono błędu, jeśli linia poleceń była bardzo duża i zawierała znaki specjalne, takie jak cudzysłowy, odwrotne ukośniki itp.
Nieprzypisana sekcja rodata (XCS-1920) Łącznik AVR nie przypisał pamięci do niestandardowych sekcji rodata podczas kompilacji dla architektur avrxmega3 i avrtiny, co potencjalnie powodowało błędy nakładania się pamięci
Wersja 2.19 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.
Wersja 2.10
Niepowodzenia relokacji (XCS-1891) Najlepiej dopasowany alokator pozostawiał „dziury” pamięci pomiędzy sekcjami po rozluźnieniu linkera. Oprócz fragmentacji pamięci, zwiększyło to prawdopodobieństwo wystąpienia błędów relokacji linkera związanych ze skokami względnymi względem komputera lub wywołaniami wykraczającymi poza zakres.
Instrukcje nie podlegające transformacji przez relaksację (XCS-1889) Relaksacja linkera nie wystąpiła w przypadku instrukcji skoku lub wywołania, których cele stają się osiągalne po rozluźnieniu.
Zaginiony funkcjonalność (XCSE-388) Kilka definicji z , takie jak clock_ div_ t i clock_prescal_set(), nie zostały zdefiniowane dla urządzeń, w tym ATmega324PB, ATmega328PB, ATtiny441 i ATtiny841.
Brakujące makra Makra preprocesora _xcs _MODE_, _xcs VERSION, _xc i xcs nie zostały automatycznie zdefiniowane przez kompilator. Są teraz dostępne.
Wersja 2.05
Wewnętrzny błąd kompilatora (XCS-1822) Podczas kompilacji w systemie Windows mógł wystąpić wewnętrzny błąd kompilatora w trakcie optymalizacji kodu.
Nie wykryto przepełnienia pamięci RAM (XCS-1800, XCS-1796) W niektórych sytuacjach kompilator nie wykrywał programów, które przekraczały dostępną pamięć RAM, co skutkowało błędem wykonania kodu.
Pominięta pamięć flash (XCS-1792) W przypadku urządzeń avrxmega3 i avrtiny część pamięci flash mogła pozostać nieprogramowana przez środowisko programistyczne MPLAB X.
Nie udało się wykonać main (XCS-1788) W niektórych sytuacjach, gdy program nie miał zdefiniowanych zmiennych globalnych, kod startowy środowiska wykonawczego nie kończył się, a funkcja main() nigdy nie była osiągalna.
Nieprawidłowe informacje o pamięci (XCS-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 (XCS-1783) Projekty skompilowane dla urządzeń z pamięcią programu odwzorowaną na przestrzeń adresową danych i które definiują obiekty za pomocą makra/atrybutu PROGMEM mogły odczytywać te obiekty z niewłaściwego adresu.
Błąd wewnętrzny z atrybutami (XCS-1773) Wystąpił błąd wewnętrzny, jeśli zdefiniowałeś obiekty wskaźnikowe za pomocą
_at () lub attribute() tokeny pomiędzy nazwą wskaźnika a typem wyłuskanym, na przykładample, znak *
_at ( 0x80015 0) cp; W przypadku napotkania takiego kodu wyświetlane jest teraz ostrzeżenie.
Nie udało się wykonać main (XCS-1780, XCS-1767, XCS-1754) Użycie zmiennych EEPROM lub zdefiniowanie bezpieczników za pomocą pragmy config mogło spowodować nieprawidłową inicjalizację danych i/lub zablokowanie wykonywania programu w kodzie startowym środowiska wykonawczego, przed osiągnięciem funkcji main().
Błąd bezpiecznika w przypadku małych urządzeń (XCS-1778, XCS-1742) Urządzenia attiny4/5/9/10/20/40 miały nieprawidłową długość bezpiecznika określoną w nagłówku files, które prowadzą do błędów konsolidatora podczas próby zbudowania kodu definiującego bezpieczniki.
Błąd segmentacji (XCS-1777) Usunięto przerywany błąd segmentacji.
Awaria asemblera (XCS-1761) Asembler avr-as mógł ulec awarii, gdy kompilator był uruchamiany pod Ubuntu 18.
Obiekty nieoczyszczone (XCS-1752) Niezainicjowane statyczne obiekty czasu przechowywania mogły nie zostać wyczyszczone przez kod uruchamiania środowiska wykonawczego.
Zignorowano sprzeczną specyfikację urządzenia (XCS-1749) Kompilator nie generował błędu, gdy użyto wielu opcji specyfikacji urządzeń i wskazano różne urządzenia.
Uszkodzenie pamięci przez stertę (XCS-1748) Symbol startowy heap_ był nieprawidłowo ustawiany, co skutkowało możliwością uszkodzenia zwykłych zmiennych przez stertę.
Błąd relokacji linkera (XCS-1739) Błąd relokacji konsolidatora mógł zostać wyemitowany, gdy kod zawierał rjmp lub rcall z celem oddalonym dokładnie o 4 KB.
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 są identyfikacją problemu w bazie danych śledzenia. Może to być pomocne, jeśli musisz skontaktować się z pomocą techniczną. Elementy, które nie mają etykiet, to ograniczenia opisujące tryb działania, które prawdopodobnie pozostaną w mocy na stałe.
Integracja MPLAB X IDE
Integracja MPLAB IDE Jeśli kompilator ma być używany z MPLAB IDE, musisz zainstalować MPLAB IDE przed zainstalowaniem kompilatora.
Generowanie kodu
Błąd przydziału pamięci PA (XCS-2881) Podczas korzystania z optymalizatorów abstrakcji proceduralnej linker może zgłaszać błędy alokacji pamięci, gdy rozmiar kodu jest zbliżony do ilości dostępnej pamięci programu na urządzeniu, mimo że program powinien być w stanie zmieścić się w dostępnej przestrzeni.
Nie tak mądry Smart-IO (XCS-2872) Funkcja smart-io kompilatora wygeneruje prawidłowy, ale nieoptymalny kod dla funkcji sprint, jeśli funkcja coast-data-in-proem została wyłączona lub jeśli cała pamięć flash urządzenia została zmapowana na pamięć danych.
Jeszcze mniej inteligentny Smart-IO (XCS-2869) Funkcja smart-io kompilatora wygeneruje prawidłowy, ale nieoptymalny kod, gdy użyte zostaną obie opcje -floe i -fno-buil tin.
Nieoptymalne rozmieszczenie danych tylko do odczytu (XCS-2849) Łącznik nie jest obecnie świadomy sekcji pamięci APPCODE i APPDATA, ani podziałów [No-]Read-While-Write w mapie pamięci. W rezultacie istnieje niewielka szansa, że łącznik przydzieli dane tylko do odczytu w nieodpowiednim obszarze pamięci. Prawdopodobieństwo błędnie umieszczonych danych wzrasta, jeśli włączona jest funkcja coast-data-in-pragma, zwłaszcza jeśli włączona jest również funkcja coast-data-in-config-mapped-proem. Te funkcje można wyłączyć, jeśli jest to wymagane.
Obiekt file zamówienie przetwarzania (XCS-2863) Kolejność obiektów files będą przetwarzane przez linker, mogą się różnić w zależności od zastosowania optymalizacji abstrakcji proceduralnej (opcja -mpa). Wpłynęłoby to tylko na kod, który definiuje słabe funkcje w wielu modułach.
Błąd linkera z wartością bezwzględną (XCS-2777) Gdy obiekt został ustawiony jako absolutny pod adresem na początku pamięci RAM i zostały zdefiniowane również niezainicjowane obiekty, może zostać wyzwolony błąd konsolidatora.
Krótkie identyfikatory wybudzania (XCS-2775) W przypadku urządzeń ATA5700/2 rejestry PHID0/1 mają szerokość jedynie 16 bitów, a nie 32 bitów.
Awaria linkera podczas wywoływania symbolu (XCS-2758) Łącznik może ulec awarii, jeśli opcja sterownika -merlad zostanie użyta, gdy kod źródłowy wywoła symbol zdefiniowany za pomocą opcji łącznika -Wl, –defsym.
Nieprawidłowa inicjalizacja (XCS-2679) Istnieje rozbieżność między tym, gdzie w pamięci danych są umieszczane wartości początkowe dla niektórych globalnych/statycznych obiektów wielkości bajtów, a gdzie będą dostępne zmienne w czasie wykonywania.
niepoprawnie rozpoczęte ustawia puste (XCS-2652) W przypadkach, gdy ciąg tematyczny do konwersji przez statement() zawiera to, co wydaje się być liczbą zmiennoprzecinkową w formacie wykładniczym i po znaku e występuje nieoczekiwany znak, wówczas pusty adres, jeśli jest podany, będzie wskazywał na znak po e, a nie na samo e. Na przykładample: said(“hooey”, empty); spowoduje, że pusty znak będzie wskazywał na znak x.
Błędne wywołania funkcji pośrednich (XCS-2628) W niektórych przypadkach wywołania funkcji wykonane za pomocą wskaźnika funkcji przechowywanego jako część struktury mogą zakończyć się niepowodzeniem.
strtof zwraca zero dla liczb szesnastkowych zmiennoprzecinkowych (XCS-2626) Funkcje biblioteczne strtof() i inne oraz scanf() i inne zawsze konwertują liczbę zmiennoprzecinkową szesnastkową, która nie określa wykładnika, na
zero. Na przykładample: stator(“Sowa”, &empty); zwróci wartość 0, nie 1.
Niedokładne komunikaty doradcy stosu (XCS-2542, XCS-2541) W niektórych przypadkach ostrzeżenie doradcy stosu dotyczące użytej rekurencji lub nieokreślonego stosu (prawdopodobnie przez użycie alloca()) nie jest emitowane.
Błąd z duplikatem kodu przerwania (XCS-2421) Tam, gdzie więcej niż jedna funkcja przerwania ma to samo ciało, kompilator może mieć dane wyjściowe dla jednej funkcji przerwania wywołującej drugą. Spowoduje to niepotrzebne zapisywanie wszystkich rejestrów blokowanych połączeniami, a przerwania zostaną włączone nawet przed uruchomieniem epilogu bieżącego programu obsługi przerwań, co może doprowadzić do błędu kodu.
Obiekty const nie znajdują się w pamięci programu (XCS-2408) W przypadku projektów avrxmega3 i avertins obiekty unidealized const są umieszczane w pamięci danych, mimo że ostrzeżenie sugeruje, że zostały umieszczone w pamięci programu. Nie wpłynie to na urządzenia, które nie mają pamięci programu zmapowanej do przestrzeni pamięci danych, ani nie wpłynie na żaden obiekt, który jest inicjowany.
Nieprawidłowe dane wyjściowe z nieprawidłową ścieżką DFP (XCS-2376) Jeśli kompilator jest wywoływany z nieprawidłową ścieżką DFP i „specyfikacją” file istnieje dla wybranego urządzenia, kompilator nie zgłasza brakującego pakietu rodziny urządzeń i zamiast tego wybiera „specyfikację” file, co może następnie prowadzić do nieprawidłowych danych wyjściowych. „Specyfikacja” files mogą nie być aktualne dla rozproszonych programów DFP i były przeznaczone wyłącznie do wewnętrznego testowania kompilatora.
Niewykryte nakładanie się pamięci (XCS-1966) Kompilator nie wykrywa nakładania się pamięci obiektów ustawionych jako absolutne pod adresem (za pomocą at()) i innych obiektów korzystających ze specyfikatora section() i powiązanych z tym samym adresem.
Błąd funkcji bibliotecznych i _meme (XCS-1763) Wywoływane funkcje limbic float z argumentem w przestrzeni adresowej _memo mogą zakończyć się niepowodzeniem. Należy zauważyć, że procedury biblioteczne są wywoływane z niektórych operatorów C, więc np.ample, dotyczy to następującego kodu: return regFloatVar > memxFloatVar;
Ograniczona implementacja układu limbicznego (AVRTC-731) W przypadku produktów ATTiny4/5/9/10/20/40 standardowa implementacja biblioteki C/Math w języku limbicznym jest bardzo ograniczona lub nie występuje wcale.
Ograniczenia pamięci programu (AVRTC-732) Obrazy pamięci programu o rozmiarze większym niż 128 kb są obsługiwane przez łańcuch narzędzi; znane są jednak przypadki przerwania działania linkera bez rozluźnienia i bez wyświetlenia przydatnego komunikatu o błędzie zamiast wygenerowania wymaganych szkieletów funkcji, gdy użyto opcji -relax.
Ograniczenia przestrzeni nazw (AVRTC-733) Nazwane przestrzenie adresowe są obsługiwane przez zestaw narzędzi, z zastrzeżeniem ograniczeń wymienionych w sekcji Kwalifikatory typów specjalnych w podręczniku użytkownika.
Strefy czasowe Ten funkcje biblioteczne zakładają GMT i nie obsługują lokalnych stref czasowych, dlatego local time() zwróci ten sam czas co gummite(), np.ample.
OBSŁUGA KLIENTA
file:///Aplikacje/microehip/xc8/v 2 .40/docs/Przeczytaj mnie_X C 8_ dla VR. htm
Dokumenty / Zasoby
![]() |
Oprogramowanie kompilatora MICROCHIP MPLAB XC8 C [plik PDF] Instrukcja obsługi MPLAB XC8 C, Oprogramowanie kompilatora MPLAB XC8 C, Oprogramowanie kompilatora, Oprogramowanie |