MPLAB® XC8 C Compiler wersja 2.41 Informacje o wydaniu dla AVR® MCU
Instrukcja obsługi
Oprogramowanie deweloperskie kompilatora MPLAB XC8 C
NINIEJSZY DOKUMENT ZAWIERA WAŻNE INFORMACJE DOTYCZĄCE KOMPILERA MPLAB XC8 C PODCZAS UŻYTKOWANIA 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
1.1. Wprowadzenie
Ta wersja kompilatora Microchip MPLAB® XC8 C zawiera kilka nowych funkcji i poprawek błędów.
1.2. Data budowy
Oficjalna data kompilacji tej wersji kompilatora to 8 lutego 2023 r.
1.3. Poprzednia wersja
Poprzednia wersja kompilatora MPLAB XC8 C to 2.40, zbudowana 3 lipca 2022 r.
1.4. 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.
1.5. 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 jego 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 od Microchip webstrona. Możesz przeczytać GNU GPL w pliku o nazwie znajdującym się w podkatalogu twojego katalogu install license.txt avr/doc. Ogólne omówienie zasad leżących u podstaw GPL można znaleźć tutaj.
Kod pomocniczy dostarczany dla plików nagłówkowych, skryptów konsolidujących i bibliotek wykonawczych jest kodem zastrzeżonym i nie jest objęty 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.
1.6. Wymagania systemowe
Kompilator MPLAB XC8 C i oprogramowanie licencyjne, z którego korzysta, są dostępne dla różnych systemów operacyjnych, w tym 64-bitowych wersji następujących systemów: Profesjonalne wersje systemu Microsoft® Windows® 10; Ubuntu® 18.04; i macOS® 10.15.5. 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 nowszy. Serwer może również działać na różnych innych systemach operacyjnych, w tym Windows Server, dystrybucjach Linuksa, takich jak Oracle® Enterprise Linux® i Red Hate Enterprise Linux, a także starszych wersjach obsługiwanych systemów operacyjnych. Jednak 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 na maszynę wirtualną dla licencji sieciowych (SW006021-VM). Wszystkie 32-bitowe wersje MPLAB XC Network Server 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 (w katalogu kompilatora) listę wszystkich obsługiwanych urządzeń. Te pliki również zawierają listę
avr_chipinfo.html ustawienia bitów konfiguracji dokumentu dla każdego urządzenia.
1.7. Edycje i aktualizacje licencji
Kompilator MPLAB XC8 można aktywować jako produkt licencjonowany (PRO) lub nielicencjonowany (Free). Musisz kupić klucz aktywacyjny, aby uzyskać licencję na kompilator. Licencja pozwala na wyższy poziom optymalizacji w porównaniu z produktem Free. Nielicencjonowany kompilator może działać bez licencji bez licencji. Kompilator MPLAB XC8 Functional Safety musi zostać aktywowany za pomocą licencji na bezpieczeństwo funkcjonalne zakupionej od firmy 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 MPLAB XC Functional Safety Compiler obsługuje licencję na serwer sieciowy.
Zobacz dokument Installing and Licensing MPLAB XC C Compilers (DS50002059), aby uzyskać informacje na temat typów licencji i instalacji kompilatora z licencją.
1.8. 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 korzystasz z MPLAB IDE, przed zainstalowaniem tego narzędzia upewnij się, że zainstalowałeś najnowszą wersję MPLAB X IDE w wersji 5.0 lub nowszej. Zamknij IDE przed zainstalowaniem kompilatora. Uruchom (Windows), (Linux) lub (macOS) .exe .run .app instalator kompilatora, np. i postępuj zgodnie ze wskazówkami wyświetlanymi na ekranie. XC8-1.00.11403-windows.exe 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, 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.
XC License Manager obsługuje teraz roaming pływających licencji sieciowych. Ta funkcja, skierowana do użytkowników mobilnych, pozwala na wyłączenie licencji ruchomej z sieci na krótki okres czasu. Korzystając z tej funkcji, możesz odłączyć się od sieci i nadal korzystać z kompilatora MPLAB XC. Zobacz folder doc instalacji XCLM, aby uzyskać więcej informacji na temat tej funkcji.
MPLAB X IDE zawiera okno Licencje (Narzędzia > Licencje) do wizualnego zarządzania roamingiem.
1.8.1. 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 logo Windows + R).
Spowoduje to otwarcie okna dialogowego eksploratora plików pokazującego ten katalog i umożliwi określenie ścieżki do tego folderu.
1.9. 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.

1.10. Wsparcie 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:
- MPLAB® XC8 C Compiler User's Guide for AVR® MCU (wersja G)
- Przewodnik migracji AVR® GNU Toolchain do MPLAB® XC8 (wersja A)
- Podręcznik użytkownika Hexmate (wersja B)
AVR® GNU Toolchain to MPLAB® XC8 Migration Guide opisuje zmiany w kodzie źródłowym i opcjach kompilacji, które mogą być wymagane, jeśli zdecydujesz się na migrację projektu opartego na C z 8-bitowego zestawu narzędzi GNU AVR do kompilatora Microchip MPLAB XC8 C. Przewodnik po ujednoliconej bibliotece standardowej Microchip opisuje zachowanie i interfejs funkcji zdefiniowanych przez ujednoliconą bibliotekę standardową Microchip, 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ądzeń są nadal zawarte w tym przewodniku po kompilatorze.
Jeśli dopiero zaczynasz z urządzeniami 8-bitowymi i MPLAB XC8 C Compiler, Podręcznik użytkownika MPLAB® XC8 dla inżynierów systemów wbudowanych – AVR® MCU (DS50003108) zawiera informacje na temat konfigurowania projektów w MPLAB X IDE i pisania kodu dla twojego pierwszy projekt MPLAB XC8 C. Ten przewodnik jest teraz dystrybuowany 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.
3.1. Wersja 2.41
Obsługa Bootrow (XC8-3053) Kompilator umieści zawartość dowolnej sekcji z prefiksem adresu at.bootrow 0x860000 w pliku HEX. Te sekcje są używane do 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 nadmiarowych zwrotów (XC8-3048) Kompilator będzie teraz eliminował nadmiarowe instrukcje w funkcjach ret z przeskokiem ogona, gdy używane są niestandardowe skrypty konsolidujące. Jest to podobna optymalizacja do tej wykonanej poprzednio, ale teraz jest wykonywana na wszystkich osieroconych sekcjach, nawet jeśli używany jest niestandardowy skrypt linkera, a najlepszy schemat alokacji nie jest w grze. Zmiana typu czasu (XC8-2982, 2932) Standardowy typ biblioteki C99 został zmieniony z time_t na typ, co daje poprawę rozmiaru kodu w niektórych funkcjach long long związanych z czasem, takich jak. długi czas bez znaku mktime()
Nowy nop (XC8-2946, 2945) Dodano makro. To makro wstawia no-NOP() nop instrukcja operacji na wyjście.
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 oliniowane (XC8-2760) Kompilator może teraz zastąpić długie instrukcje wywołania krótszymi wywołaniami względnymi, gdy względne formy instrukcji normalnie byłyby poza zakresem ich przeznaczenia. W tej sytuacji kompilator spróbuje zastąpić instrukcjami wywołania rcall instrukcję, która wywoła „trampoline” na wymagany adres, npample: jmp
zadzwoń do tramp_foo ;było wywołane foo
…
zadzwoń do tramp_foo
…
tramp_bla:
jmp fuj
Ta optymalizacja, wraz z podobnymi optymalizacjami przepływu programu, jest kontrolowana przez opcję -mrelax.
3.2. 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.
Udoskonalona abstrakcja proceduralna Narzędzie do optymalizacji abstrakcji proceduralnej (PA) zostało udoskonalone, dzięki czemu kod zawierający instrukcję wywołania funkcji (/ ) może zostać wykreślony. Będzie to miało miejsce tylko wtedy, gdy stos nie jest używany do przekazywania argumentów ani do uzyskiwania wartości zwracanej z funkcji. Stos jest używany w przypadku wywołania funkcji ze zmienną listą argumentów lub w przypadku wywołania funkcji, która przyjmuje więcej argumentów niż jest przeznaczonych do tego rejestrów. Właściwość tę można wyłączyć za pomocą opcji lub całkowicie wyłączyć abstrakcję proceduralną dla pliku obiektowego lub funkcji, używając odpowiednio - i lub używając atrybutu (specyfikatora) wybiórczo z funkcjami.
połączenia-mno-pa-outline -mno-pa-on-file -mno-pa-on-function nopa Makro pokrycia kodu Kompilator definiuje teraz makro, jeśli podano poprawną opcję __nopa __CODECOV -mcodecov.
Opcja rezerwacji pamięci Sterownik akceptuje teraz opcję xc8-cc -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 konsolidatorowi zapełnianie kodu lub obiektów w tym obszarze. Inteligentniejsze inteligentne IO Kilka ulepszeń zostało wprowadzonych do funkcji Smart IO, w tym ogólne poprawki do podstawowego kodu printf, traktowanie specyfikatora konwersji %n jako niezależnego wariantu, łączenie w procedurach vararg pop na żądanie, używanie krótszych typów danych tam, gdzie to możliwe do obsługi Argumenty funkcji IO i faktoring wspólnego kodu w szerokości pola i precyzyjnej obsłudze. Może to spowodować znaczne oszczędności kodu i danych, a także zwiększyć szybkość wykonywania operacji we/wy.
3.3. 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.
3.4. Wersja 2.36
Nic.
3.5. 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 pamięci 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. Nowa opcja – mconst-data-in-config-mapped-progmem może być użyta do tego, aby linker umieścił wszystkie kwalifikowane dane w jednej sekcji 32k i automatycznie zainicjował odpowiedni rejestr SFR, aby upewnić się, że te dane są mapowane do pamięci danych przestrzeni, gdzie dostęp do niej będzie efektywniejszy.
Zunifikowane biblioteki standardowe Microchip Wszystkie kompilatory MPLAB XC będą współdzielić zunifikowaną bibliotekę standardową Microchip, która jest teraz dostępna w tej wersji MPLAB XC8. Przewodnik użytkownika MPLA# XC8 C Compiler User's Guide for AVO MCU nie zawiera już dokumentacji tych standardowych funkcji. Informacje te można teraz znaleźć w przewodniku 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 funkcjonalność Lila).
Inteligentne I0 Jako część nowych ujednoliconych bibliotek, funkcje I0 z rodzin printf i scanf są teraz generowane na zamówienie dla każdej kompilacji, w oparciu o sposób wykorzystania tych funkcji w programie. Może to znacznie zmniejszyć zasoby używane przez program.
Opcja pomocy Smart ICI Podczas analizowania wywołań funkcji smart I0 (takich jak print f () lub scanf ()), kompilator nie zawsze może określić na podstawie ciągu formatującego lub wywnioskować z argumentów, które specyfikatory konwersji są wymagane przez wywołanie. Wcześniej kompilator zawsze nie przyjmował żadnych założeń i zapewniał, że 10 w pełni funkcjonalnych funkcji zostało połączonych z końcowym obrazem programu. Dodano nową opcję – msmart-io-format=fmt, dzięki czemu kompilator może zamiast tego być informowany przez użytkownika o specyfikatorach konwersji używanych przez inteligentne funkcje I0, których użycie jest niejednoznaczne, co zapobiega łączeniu zbyt długich 10 procedur. (Zobacz opcję smart-io-format, aby uzyskać więcej informacji.)
Umieszczanie sekcji niestandardowych Poprzednio opcja -W1, –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 linkera, a opcja była zasadniczo ignorowana. Teraz opcja będzie honorowana dla wszystkich niestandardowych sekcji, nawet jeśli skrypt linkera nie definiuje sekcji. Należy jednak pamiętać, że w przypadku sekcji standardowych, takich jak . tekst, . bss lub . danych, najlepiej dopasowany alokator nadal będzie miał pełną kontrolę nad ich rozmieszczeniem, a opcja nie będzie miała wpływu. Użyj opcji -ton, -Tsection=addr, zgodnie z opisem w podręczniku użytkownika.
3.6. Wersja 2.32
Przewodnik po stosie Dostępna z licencją na kompilator PRO funkcja przewodnika po stosie kompilatora może być wykorzystana do oszacowania maksymalnej głębokości dowolnego stosu używanego przez program. Konstruuje i analizuje wykres wywołań programu, określa użycie stosu każdej funkcji i tworzy raport, z którego można wywnioskować głębokość stosów używanych przez program. Ta funkcja jest włączana za pomocą opcji wiersza polecenia -mchp-stack-usage. Podsumowanie użycia stosu jest drukowane po wykonaniu. Szczegółowy raport stosu jest dostępny na mapie file, o które można poprosić w zwykły sposób.
Obsługa nowych urządzeń Wsparcie jest dostępne dla następujących części AVR: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 i AVR32DB48. Obsługa wycofanych urządzeń Wsparcie nie jest już dostępne dla następujących części AVR: AVR16DA28, AVR16DA32 i AVR16DA48.
3.7. Wersja 2.31
Nic.
3.8. Wersja 2.30
Nowa opcja zapobiegająca inicjalizacji danych Nowa opcja sterownika -mno-data-init zapobiega inicjalizacji danych i kasowaniu sekcji bss. Działa poprzez tłumienie danych wyjściowych do kopiowania danych i czyszczenia symboli 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. Dostępne są teraz dodatkowe opcje kontrolujące niektóre z tych optymalizacji, w szczególności -f kotwice sekcji, które umożliwiają dostęp do obiektów statycznych względem jednego symbolu; -mpa-iterations=n, co umożliwia zmianę liczby iteracji abstrakcji proceduralnej z domyślnej 2; i -mpa-callcost-shortcall, który wykonuje bardziej agresywną abstrakcję proceduralną, w nadziei, że linker może złagodzić długie połączenia. 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 AVR128. Wsparcie dla wycofanych urządzeń Wsparcie nie jest już dostępne dla następujących części AVR: ATA64, ATA5272, ATA5790N, ATA5790, ATA5791, ATA5795, ATA6285, ATA6286C, ATA6612C, ATA6613Q, ATA6614C, ATA6616C i ATA6617.
3.9. Wersja 2.29 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Chodnikowiec file dla wbudowanych kompilatorów Aby upewnić się, że kompilator może być zgodny ze specyfikacjami językowymi, takimi jak MISRA, nagłówek file, który jest automatycznie uwzględniany przez , został zaktualizowany. Ten nagłówek zawiera prototypy wszystkich wbudowanych funkcji, takich jak Builtin_avr_nop() i wbudowany avr delay_cycles() . Niektóre wbudowane elementy mogą nie być zgodne z MISRA; można je pominąć, dodając defineXCSTRICT_MISRA do wiersza poleceń kompilatora. Wbudowane elementy i ich deklaracje zostały zaktualizowane, aby używać typów o stałej szerokości.
3.10. 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.
3.11. Wersja 2.19 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.
3.12. 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 twoim sprzęcie, informacje o pokryciu kodem zostaną zebrane w urządzeniu, które mogą zostać przesłane i wyświetlone przez MPLAB X IDE za pośrednictwem wtyczki pokrycia kodu. Zobacz dokumentację IDE, aby uzyskać informacje na temat tej wtyczki. #pragma nocodecov może służyć do wykluczania kolejnych funkcji z analizy pokrycia. Idealnie pragma powinna zostać dodana na początku pliku file wykluczyć to całe file z analizy zasięgu. Alternatywnie, _attribute_ ((nocodecov)) może być użyte 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 dopuszczalne ustawienia/wartości bitów konfiguracyjnych dla tego urządzenia, z np.amples. Abstrakcja proceduralna
Do kompilatora dodano optymalizacje abstrakcji proceduralnej, które zastępują wspólne bloki kodu asemblera wywołaniami wyodrębnionej kopii tego bloku. Są one wykonywane przez oddzielną aplikację, która jest automatycznie wywoływana przez kompilator podczas wybierania optymalizacji poziomu 2, 3 lub s. Te optymalizacje zmniejszają rozmiar kodu, ale mogą zmniejszyć szybkość wykonywania i debugowanie 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=filenazwa lub wyłączona dla funkcji za pomocą -mno-pa-on-function=function. W kodzie źródłowym można wyłączyć abstrakcję proceduralną dla funkcji, używając atrybutu ( (nopa) ) z definicją funkcji lub używając nopa, który rozwija się do atrybutu ( (nopa, noinline) ), a tym samym zapobiega wstawianiu funkcji i istnieje abstrakcja wbudowanego kodu.
Obsługa bitów blokujących w pragma Konfiguracji #pragma można teraz użyć do określenia bitów blokujących AVR, jak również innych bitów konfiguracyjnych. Sprawdź avr_chipinfo. 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: AVR28DAl28, AVR64DAl28, AVR32DA 128 i AVR48DA 128.
3.13. 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 typu const w pamięci programu Kompilator może teraz umieszczać obiekty typu const w pamięci Flash programu, zamiast umieszczać je w pamięci RAM. Kompilator został zmodyfikowany w taki sposób, że globalne dane z kwalifikacją konsystencji są przechowywane w pamięci flash programu, a dostęp do tych danych można uzyskać bezpośrednio i pośrednio 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 odwzorowywana na 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.
3.14. 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 sterownik bibliotekarza Nowy sterownik 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 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. 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.
4.1. Wersja 2.41
Usunięto niedokładne funkcje fma (XC8-2913) Funkcje rodziny standardowej biblioteki C99 fma 0 ( ) nie obliczał mnożenia z nieskończoną precyzją do pojedynczego zaokrąglenia, ale zamiast tego gromadził błędy zaokrąglania przy każdej operacji. Te funkcje zostały usunięte z dostarczonej biblioteki.
4.2. Wersja 2.40
Nic.
4.3. Wersja 2.39 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.
4.4. Wersja 2.36 Brak.
4.5. Wersja 2.35
Obsługa łańcuchów bazowych (XC8-2420) Aby zapewnić spójność z innymi kompilatorami XC, funkcje string-to 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 errno na EINVAL. Norma C nie określa zachowania funkcji po przekroczeniu tej wartości bazowej.
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 bibliotecznych C pochodzi teraz z Unified Standard Library firmy Microchip, która w pewnych okolicznościach może zachowywać się inaczej niż zapewniana przez poprzednią bibliotekę avr-libc. na przykładampplik, nie jest już konieczne łączenie w bibliotece 1printf flt (opcja -1printf_flt), aby włączyć sformatowane I0 obsługa specyfikatorów formatu zmiennoprzecinkowego. Mądry I0 Funkcje Microchip Unified Standard Library sprawiają, że ta opcja jest zbędna. Dodatkowo, użycie procedur z sufiksem _P dla funkcji ciągów znaków i pamięci (np. strcpy_P ( ) itp.), które działają na ciągach znaków const 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.
4.6. Wersja 2.32
Nic.
4.7. Wersja 2.31
Nic.
4.8. Wersja 2.30
Nic.
4.1. Wersja 2.29 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.
4.2. 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.
4.3. Wersja 2.19 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.
4.4. Wersja 2.10
Nic
4.5. Wersja 2.05
Obiekty const w pamięci programu Należy zauważyć, że domyślnie obiekty kwalifikowane jako const będą umieszczane i dostępne w pamięci programu (jak opisano w hue). 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ć, używając opcji -mnoconst-data-in-progmem.
4.6. Wersja 2.00
Bezpieczniki konfiguracji Bezpieczniki konfiguracji urządzenia można teraz zaprogramować za pomocą pragmy config, po której następuje ustawienie par wartości w celu określenia stanu bezpiecznika, np.
#pragma config WDTON = SET
#pragma konfiguracja 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 (adresu), na przykładampna:
#włączać
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
Argumentem tego specyfikatora musi być stała reprezentująca adres, pod którym zostanie umieszczony pierwszy bajt lub instrukcja. Adresy pamięci RAM są wskazywane za pomocą przesunięcia 0x800000. Włącz CCI, aby korzystać z tej funkcji.
Nowa składnia funkcji przerwań Kompilator akceptuje teraz specyfikator CCI _interrupt (num), aby wskazać, że funkcje C są programami obsługi przerwań. Specyfikator przyjmuje numer przerwania, npampna:
#włączać
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Naprawione problemy
Poniżej przedstawiono poprawki, które zostały wprowadzone w kompilatorze. Mogą one naprawić błędy w wygenerowanym kodzie lub zmienić działanie kompilatora na takie, które było zamierzone lub określone w podręczniku użytkownika. Numer wersji w nagłówkach oznacza pierwszą wersję kompilatora zawierającą poprawki następujących problemów. Etykiety w nawiasach w tytule to identyfikacja tego problemu w bazie danych śledzenia. Mogą być przydatne, 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.
5.1. Wersja 2.41
Problemy z kluczem sprzętowym w kluczach sprzętowych Ventura (XC8-3088). użyte do licencjonowania kompilatora mogły nie zostać prawidłowo odczytane na hostach z systemem macOS Ventura, co spowodowało błędy w licencjonowaniu. Zmiany w menedżerze licencji XCLM rozwiązują ten problem.
Nieprawidłowe wskazanie przydziału pamięci (XC8-2925) Próba przydzielenia SIZE_MAX bajtów (lub wartości zbliżonej do tej) pamięci przy użyciu funkcji zarządzania pamięcią standardowej biblioteki (malloc () i in.) nie powiodła się. Nie wzięto pod uwagę, że podczas korzystania z prostej implementacji dynamicznej alokacji pamięci potrzebne były dodatkowe bajty oprócz żądanego bloku. W takich sytuacjach zostanie teraz zwrócony wskaźnik NULL, a errno zostanie ustawione na ENOMEM.
Usunięto niedokładne funkcje fma (XC8-2913) Standardowa biblioteka C99 fma ( ) -funkcje rodziny ( ) nie obliczyło mnożenia z nieskończoną precyzją do pojedynczego zaokrąglenia, ale zamiast tego zgromadziło błędy zaokrąglenia przy każdej operacji. Te funkcje zostały usunięte z dostarczonej biblioteki.
Zła obsługa konwersji ciągów znaków (XC8-2921, XC8-2652) Kiedy „sekwencja podmiotu” do konwersji przez strtod Cr zawierała coś, co wyglądało na liczbę zmiennoprzecinkową w formacie wykładniczym, a po znaku e/E znajdował się nieoczekiwany znak, wtedy tam, gdzie podano endptr, przypisywano jej adres, który gdyby wskazywał na znak po e/E, 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 na część „exx” łańcucha, podczas gdy funkcja zwracała poprawną wartość, ale ustawiała ep tak, aby wskazywała część „xx” ciągu .
5.2. 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 zgodnie z ostrzeżeniem (XC8-2875) Funkcja const-data-in-config-mappedprogmem jest zależna od włączonej funkcji const-data-in-progmem. Jeśli funkcja const-data-inconfig-mapped-progmem została jawnie włączona przy użyciu tej opcji, a funkcja const-data-inprogmem została wyłączona, krok łączenia nie powiódł się, pomimo komunikatu ostrzegawczego informującego, że const-data-in-con fig- funkcja mapped-progmem została automatycznie wyłączona, co nie było całkowicie poprawne. Funkcja const-data-in-config-mapped-progmem jest teraz całkowicie wyłączona w tej sytuacji.
Zmiany DFP w celu prawidłowego dostępu do NVMCTRL (XC8-2848) Kod uruchamiania środowiska wykonawczego używany przez urządzenia AVR64EA nie uwzględniał faktu, że rejestr NVMCTRL był objęty ochroną przed zmianą konfiguracji (CCP) i nie był w stanie ustawić I0 SFR na stronę używaną przez const-data-in-configmapped-progmem funkcja kompilatora. Zmiany wprowadzone w AVR-Ex_DFP w wersji 2.2.55 umożliwią poprawny zapis kodu startowego środowiska uruchomieniowego do tego rejestru.
Zmiany DFP, których należy unikać mapowanie flash (XC8-2847) Zaimplementowano obejście problemu z funkcją mapowania flash zgłaszaną w AVR128DA28/32/48/64 Silicon Errata (D580000882). Funkcja kompilatora const-data-in-config-mapped-progmem nie będzie domyślnie stosowana na urządzeniach, których dotyczy problem, a ta zmiana pojawi się w AVR-Dx_DFP w wersji 2.2.160.
Błąd kompilacji z sinhf lub coshf (XC8-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 (XC,8-2833) Użycie atrybutu nopa z funkcją, której nazwa asemblera została określona za pomocą asm ( ), wywołało komunikaty o błędach z asemblera. Ta kombinacja nie jest możliwa.
Awaria funkcji Variadic z argumentami wskaźnika (XC8-2755, XC8-2731) Funkcje ze zmienną liczbą argumentów oczekują, że 24-bitowe (typ memx) wskaźniki będą przekazywane na liście argumentów zmiennych, gdy funkcja const-data-in-progmem jest włączona. Argumenty, które były wskaźnikami do pamięci danych, były przekazywane jako obiekty 16-bitowe, co powodowało awarie kodu podczas ich ostatecznego odczytu. Gdy funkcja constdata-in-progmem jest włączona, wszystkie argumenty wskaźników 16-bitowych są teraz konwertowane na wskaźniki 24-bitowe.
Awaria funkcji biblioteki strtoxxx (XC8-2620) Gdy funkcja const-data-in-progmem była włączona, parametr endptr w funkcjach bibliotecznych strtoxxx nie był prawidłowo aktualizowany 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 funkcja const-in-progmem jest włączona, a adres literału łańcuchowego jest jawnie rzutowany na przestrzeń adresową danych (porzucając kwalifikator const), na przykładample, (uint 8_t *) „Witaj, świecie!”. Ostrzeżenie jest problemem, 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 (XC8-2408) Niezainicjowane obiekty const i const volatile 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.
5.3. Wersja 2.39 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.
5.4. Wersja 2.36
Błąd podczas opóźnienia (XC8-2774) Niewielkie zmiany w domyślnych optymalizacjach trybu swobodnego uniemożliwiły ciągłe zwijanie wyrażeń operandów do wbudowanych funkcji opóźnienia, co skutkowało traktowaniem ich jako niestałych i wyzwalaniem błędu: wbudowane avr delay_cycles oczekuje stałej całkowitej czasu kompilacji.
5.5. Wersja 2.35
Ciągła alokacja przy użyciu _at (XC8-2653) Ciągła alokacja wielu obiektów umieszczanych 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) The -W1, –opcja-początku sekcji po cichu nie umieszczała sekcji pod wskazanym adresem początkowym. Ten problem został rozwiązany we wszystkich sekcjach o niestandardowych nazwach; nie będzie jednak działać w przypadku żadnych standardowych sekcji, takich jak . tekst lub . bss, który należy umieścić za pomocą opcji -W1, -T.
Konsolidator ulega awarii podczas relaksacji (XC8-2647) Gdy włączono optymalizację -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 wydawane są komunikaty o błędach.
Bez wycofania się (XC8-2646) –opcja nofallback nie została poprawnie zaimplementowana ani udokumentowana. Można to teraz wybrać, aby upewnić się, że kompilator nie powróci do niższych ustawień optymalizacji, jeśli kompilator jest nielicencjonowany, i zamiast tego zgłosi błąd.
Niewłaściwe optymalizacje prędkości (X03-2637) 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.
Uszkodzony EEPROM dostęp (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 nieprawidłowym odczytem pamięci EEPROM.
Nieprawidłowy przydział pamięci (XC8-2593, XC8-2651) Gdy plik Opcja linkera -Ttext lub -Tdata (npample przekazany za pomocą opcji sterownika -vl), zaktualizowano pochodzenie odpowiedniego obszaru tekstu/danych; jednak adres końcowy nie został odpowiednio dostosowany, co mogło doprowadzić do tego, że region przekroczył zakres pamięci urządzenia docelowego.
Awaria z nadmierną liczbą przypisanych funkcji (XC8-2580) Kompilator ulegał awarii, jeśli funkcja została zadeklarowana przy użyciu więcej niż jednego z atrybutów przerwania, sygnału lub nmi, np. atrybut ( ( sygnał , przerwanie ) ).
Nieprawidłowy kod przerwania ATtiny (XC8-2465) Podczas budowania dla urządzeń ATtiny, gdy optymalizacje były wyłączone (-00), funkcje przerwań mogły wyzwalać komunikaty asemblera operandów poza zakresem.
Opcje nie są przekazywane (XC8-2452) W przypadku korzystania z opcji z wieloma opcjami konsolidatora oddzielonymi przecinkami nie wszystkie opcje konsolidatora były przekazywane do konsolidatora.
Błąd pośredniego odczytu pamięci programu (X03-2450) W niektórych przypadkach kompilator generował błąd wewnętrzny (nierozpoznawalny insn) podczas odczytywania dwubajtowej wartości ze wskaźnika do pamięci programu
5.6. Wersja 2.32
Drugi dostęp do awaria biblioteki (XC8-2381) Wywoływanie wersji xc8-ar dla systemu Windows. Archiwizator biblioteki .exe po raz drugi w celu uzyskania dostępu do istniejącego archiwum biblioteki mógł się nie powieść z komunikatem o błędzie dotyczącym niemożności zmiany nazwy.
5.7. Wersja 2.31
Niewyjaśniony kompilator awarie (XC8-2367) W przypadku uruchamiania na platformach Windows, w których katalog tymczasowy systemu miał ustawioną ścieżkę zawierającą kropkę „.” znak, kompilator mógł nie wykonać się.
5.8. Wersja 2.30
Etykiety globalne niewłaściwie umieszczone po zarysowaniu (XC8-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ąca awaria (XC8-2287) Użycie opcji -mrelax mogło spowodować awarię konsolidatora, gdy optymalizacje relaksacji skoku ogona próbowały usunąć instrukcję ret, która nie znajdowała się na końcu sekcji.
Awaria podczas optymalizowania 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 zarysowanych zakresów VMA.
Nie taka stała (XC8-2271) Prototypy dla str rstr ( ) i innych funkcji z nie określaj już niestandardowego kwalifikatora const na zwróconych wskaźnikach łańcuchów, gdy funkcja -mconst-data-inprogmem 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 więcej niż jedna zmienna w jednostce translacji została umieszczona w sekcji (za pomocą _section lub _attribute_ ( (section) )), a pierwsza taka zmienna była zainicjowana zerem lub nie miała inicjatora, inicjatory dla innych zmiennych w tej samej jednostce translacji, które zostały umieszczone w tej samej sekcji zostały utracone.
5.1. Wersja 2.29 (wydanie dotyczące bezpieczeństwa funkcjonalnego)
Nic.
5.2. Wersja 2.20
Błąd z długimi poleceniami (XC8-1983) Podczas korzystania z celu AVR kompilator mógł zatrzymać się z a 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 (XC8-1920) Konsolidator AVR nie mógł przypisać pamięci dla niestandardowych sekcji rodata podczas budowania dla architektur avrxmega3 i avrtiny, co potencjalnie powodowało błędy nakładania się pamięci
5.3. Wersja 2.19 (Zwolnienie bezpieczeństwa funkcjonalnego)
Nic.
5.4. Wersja 2.10
Nieudane przeprowadzki (XC8-1891) Najlepszym alokatorem dopasowania było pozostawianie „dziur” pamięci pomiędzy sekcjami po relaksacji łącznika. Oprócz fragmentacji pamięci zwiększyło to prawdopodobieństwo wystąpienia błędów relokacji linkera związanych ze skokami względnymi dla komputera lub połączeniami wychodzącymi poza zasięg.
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_VERS ION, _XC i _XC8 nie zostały automatycznie zdefiniowane przez kompilator. Są one teraz dostępne.
5.5. Wersja 2.05
Wewnętrzny błąd kompilatora (XC8-1822) Podczas budowania w systemie Windows podczas optymalizacji kodu mógł zostać wygenerowany wewnętrzny błąd kompilatora.
Nie wykryto przepełnienia pamięci RAM (XC8-1800, XC8-1796) W niektórych sytuacjach kompilator nie wykrywał programów, które przekraczały dostępną pamięć RAM, co powodowało błąd kodu czasu wykonywania.
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 Środowisko programowe (IDE).
Niepowodzenie wykonania głównego (XC8-1788) W niektórych sytuacjach, gdy program nie miał zdefiniowanych zmiennych globalnych, kod startowy środowiska wykonawczego nie wychodził, a funkcja main ( ) nigdy nie była osiągana.
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 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 (XC8-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 *
_w (0x800150) cp; W przypadku napotkania takiego kodu jest teraz wyświetlane ostrzeżenie.
Błąd wykonania głównego (XC8-1780, XC8-1767, XC8-1754) Użycie zmiennych EEPROM lub zdefiniowanie bezpieczników za pomocą config pragma mogło spowodować niepoprawną inicjalizację danych i/lub zablokowanie wykonywania programu w kodzie startowym środowiska uruchomieniowego przed osiągnięciem main().
Błąd bezpiecznika z małymi urządzeniami (XC8-1778, XC8-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.
Segmentacja usterka (XC8-1777) Usunięto przerywaną usterkę segmentacji.
Awaria asemblera (XC8-1761) Asembler avr-as mógł ulec awarii, gdy kompilator był uruchamiany pod Ubuntu 18.
Obiekty nie wyczyszczone (XC8-1752) Niezainicjowane statyczne obiekty czasu przechowywania mogły nie zostać wyczyszczone przez kod uruchamiania środowiska wykonawczego.
Zignorowano specyfikację urządzenia będącego w konflikcie (XC8-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ę (XC8-1748) The Symbol _heap_start był nieprawidłowo ustawiony, co skutkowało możliwością uszkodzenia zwykłych zmiennych przez stertę.
Błąd relokacji linkera (XC8-1739) Błąd relokacji konsolidatora mógł zostać wyemitowany, gdy kod zawierał rjmp lub rcall z celem oddalonym dokładnie o 4 KB.
5.6. 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 to identyfikacja tego problemu w bazie danych śledzenia. Może to być przydatne, jeśli musisz skontaktować się z pomocą techniczną. Te elementy, które nie mają etykiet, to ograniczenia opisujące sposób działania, które prawdopodobnie pozostaną w mocy na stałe.
6.1. MPLAB XIDE Integracja
Środowisko programistyczne MPLAB integracja Jeśli Compiler ma być używany z MPLAB IDE, musisz zainstalować MPLAB IDE przed instalacją Compiler.
6.2. Generowanie kodu
Segfault z opcją kotwiczenia sekcji (XC8-3045) Program, który definiuje 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.
Brak synchronizacji informacji debugowania (XC8-2948) Gdy optymalizacja relaksacji linkera zmniejsza instrukcje (npample call to rcall), odwzorowania linii źródłowej na adres mogą nie być zsynchronizowane, jeśli w sekcji występuje więcej niż jedna operacja zmniejszania.
W poniższym example, 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ł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 inteligentny Smart-I0 (XC8-2872) Funkcja smart-io kompilatora wygeneruje prawidłowy, ale nieoptymalny kod dla funkcji snprint f, jeśli funkcja const-data-in-progmem została wyłączona lub jeśli urządzenie ma całą pamięć flash zmapowaną w pamięci danych.
Jeszcze mniej inteligentny Smart-I0 (XC8-2869) Funkcja smart-io kompilatora wygeneruje prawidłowy, ale nieoptymalny kod, gdy zostaną użyte opcje -flto i -fno-builtin.
Nieoptymalne rozmieszczenie danych tylko do odczytu (XC8-2849) Konsolidator nie jest obecnie świadomy sekcji pamięci APPCODE i APPDATA ani podziałów [No-Read-While-Write na mapie pamięci. W rezultacie istnieje niewielka szansa, że konsolidator może 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, zwłaszcza jeśli włączona jest również funkcja const-data-in-config-mapped-progmem. W razie potrzeby te funkcje można wyłączyć.
Obiekt file zlecenie przetwarzania (XC8-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ą (XC8-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 budzenia (XC8-2775) W przypadku urządzeń ATA5700/2 rejestry PHIDO/1 są zdefiniowane jako szerokie na 16 bitów, a nie na 32 bity.
Awaria linkera podczas wywoływania symbolu (XC8-2758) Konsolidator może ulec awarii, jeśli zostanie użyta opcja sterownika -mrelax, gdy kod źródłowy wywołuje symbol, który został zdefiniowany za pomocą opcji -cc., –def sym linker.
Nieprawidłowa inicjalizacja (XC8-2679) Tak to rozbieżność między miejscem, w którym w pamięci danych są umieszczane wartości początkowe dla niektórych globalnych/statycznych obiektów wielkości bajtów, a miejscem, w którym zmienne będą dostępne w czasie wykonywania.
Błędne pośrednie wywołania funkcji (XC8-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 szesnastkowych liczb zmiennoprzecinkowych (XC8-2626) Funkcje biblioteczne strtof et al oraz scanf() et al zawsze konwertują szesnastkową liczbę zmiennoprzecinkową, która nie ma wykładnika na zero. na przykładampna:
strtof („Oxl”, &endptr) ;
zwróci wartość 0, a nie I.
Niedokładne komunikaty doradcy stosu (XC8-2542, XC8-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.
Awaria ze zduplikowanym kodem przerwania (XC8-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.
Nieprawidłowe dane wyjściowe z nieprawidłową ścieżką DFP (XC8-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.
Niewykryto nakładania się pamięci (XC8-1966) Kompilator nie wykrywa nakładania się pamięci obiektów, które stały się bezwzględne pod adresem (poprzez _at ()) i innych obiektów korzystających ze specyfikatora sekcji ( ), które są połączone z tym samym adresem.
Awaria funkcji bibliotecznych i _memx (XC8-1763) Wywołane funkcje zmiennoprzecinkowe libgcc z argumentem w przestrzeni adresowej memx mogą zakończyć się niepowodzeniem. Zauważ, ż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 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 powyżej 128 kb są obsługiwane przez zestaw narzędzi; jednak znane są przypadki przerywania linkera bez relaksacji i bez przydatnego komunikatu o błędzie zamiast generowania wymaganych kodów pośredniczących funkcji, gdy używana jest opcja -mre lax.
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 funkcje biblioteczne zakładają GMT i nie obsługują lokalnych stref czasowych, dlatego localtime ( ) zwróci ten sam czas co gmtime ( ) , na przykładample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Dokumenty / Zasoby
![]() |
Oprogramowanie deweloperskie MICROCHIP MPLAB XC8 C [plik PDF] Instrukcja obsługi MPLAB XC8 C, MPLAB XC8 C Oprogramowanie do tworzenia kompilatorów, Oprogramowanie do tworzenia kompilatorów, Oprogramowanie do tworzenia, Oprogramowanie |




