마이크로칩 로고

AVR MCU용 MICROCHIP XC8 C 컴파일러 버전 2.45 릴리스 노트

MICROCHIP-XC8-C-컴파일러-버전-2-45-릴리스-노트-AVR-MCU-PRO용

제품 정보

MPLAB XC8 C 컴파일러는 Microchip AVR 장치를 대상으로 하는 데 사용되는 소프트웨어 도구입니다. C 코드를 컴파일하고 실행 파일을 생성하도록 설계되었습니다. file이 장치에 대한 것입니다. 본 사용 설명서에 언급된 컴파일러 버전은 2.45이며 공식 빌드 날짜는 18년 2023월 2.41일입니다. 이전 버전은 8이며 2023년 8월 8일에 빌드되었습니다. 컴파일러에는 추가 정보를 제공하는 기능 안전 매뉴얼이 함께 제공됩니다. 기능 안전 애플리케이션과 함께 MPLAB XC 컴파일러를 사용할 때의 지침. 이 매뉴얼은 기능 안전 라이센스를 구매하면 문서 패키지에 포함되어 있습니다. MPLAB XCXNUMX C 컴파일러는 출시 당시 사용 가능한 모든 XNUMX비트 AVR MCU 장치를 지원합니다. avr_chipinfo.html을 참고하시면 됩니다. file 지원되는 모든 장치 및 해당 구성 비트 설정 목록은 컴파일러의 doc 디렉토리에 있습니다. 다양한 버전의 MPLAB XC8 컴파일러를 사용할 수 있습니다. 라이선스(PRO) 버전은 무료 버전에 비해 더 높은 수준의 최적화를 제공합니다. 컴파일러를 라이선스 제품으로 활성화하려면 활성화 키를 구입해야 합니다. 단, 라이선스가 없는 버전은 라이선스 없이 무기한 사용이 가능합니다. 기능 안전 애플리케이션의 경우 MPLAB XC8 기능 안전 컴파일러를 사용할 수 있습니다. 활성화하려면 Microchip에서 구입한 기능 안전 라이선스가 필요합니다. 활성화되면 모든 최적화 수준과 컴파일러 기능을 활용할 수 있습니다. MPLAB XC 기능 안전 컴파일러는 네트워크 서버 라이센스도 지원합니다. 설치, 활성화, 라이센스 유형 및 마이그레이션 문제에 대한 자세한 내용은 MPLAB XC C 컴파일러 설치 및 라이센스(DS50002059) 문서에서 확인할 수 있습니다.

제품 사용 지침

  1. MPLAB XC8 C 컴파일러 소프트웨어를 실행하기 전에 Microchip AVR 장치 대상 지정과 관련된 중요한 정보 및 지침에 대한 사용자 설명서를 읽으십시오.
  2. 8비트 PIC 장치용 컴파일러를 사용하는 경우 PIC용 MPLAB XC8 C 컴파일러 릴리스 노트 문서를 참조하십시오.
  3. 운영 체제가 컴파일러 실행을 위한 시스템 요구 사항을 충족하는지 확인하십시오. macOS용 바이너리는 코드 서명 및 공증되었습니다. MPLAB XC 네트워크 라이선스 서버는 Microsoft Windows 10 이상, Ubuntu 18.04 이상, macOS 10.15 이상에서 사용할 수 있습니다. MPLAB XC 네트워크 라이센스 서버는 이러한 운영 체제에서 테스트되지 않았습니다.
  4. MPLAB XC 네트워크 라이센스 서버는 네트워크 라이센스용 가상 머신 라이센스(SW006021-VM)를 사용하여 지원되는 OS의 가상 머신에서 실행할 수 있습니다. MPLAB XC 네트워크 서버의 모든 32비트 버전은 버전 3.00부터 중단됩니다.
  5. MPLAB XC8 C 컴파일러를 라이센스(PRO) 제품으로 활성화하려면 활성화 키를 구입하십시오. 이는 무료 버전에 비해 더 높은 수준의 최적화를 제공합니다. 그러나 라이센스가 없는 컴파일러는 라이센스 없이도 무기한 작동이 가능합니다.
  6. 기능 안전 애플리케이션을 위해 MPLAB XC8 기능 안전 컴파일러를 사용하는 경우 Microchip에서 구매한 기능 안전 라이센스로 활성화해야 합니다. 이 라이센스가 없으면 컴파일러가 작동하지 않습니다. 활성화되면 최적화 수준을 선택하고 모든 컴파일러 기능을 사용할 수 있습니다. 네트워크 서버 라이센스는 MPLAB XC 기능 안전 컴파일러의 이번 릴리스에서 지원됩니다.
  7. MPLAB XC8 C 컴파일러의 설치, 활성화 및 라이센스에 대한 자세한 지침은 MPLAB XC C 컴파일러 설치 및 라이센스(DS50002059) 문서를 참조하십시오.
  8. 평가판 라이센스에 따라 컴파일러를 실행하는 경우 평가 기간 종료 후 14일 이내에 컴파일하는 동안 경고를 받게 됩니다. HPA 구독 종료 후 14일 이내인 경우에도 동일한 경고가 표시됩니다.

위에view

소개
이번 Microchip MPLAB® XC8 C 컴파일러 릴리스에는 몇 가지 새로운 기능, 버그 수정 및 새로운 장치에 대한 지원이 포함되어 있습니다.

빌드 날짜
이 컴파일러 버전의 공식 빌드 날짜는 18년 2023월 XNUMX일입니다.

이전 버전
이전 MPLAB XC8 C 컴파일러 버전은 2.41년 8월 2023일에 빌드된 XNUMX이었습니다.

기능 안전 설명서
MPLAB XC 컴파일러용 기능 안전 매뉴얼은 기능 안전 라이센스를 구매할 때 문서 패키지에서 사용할 수 있습니다.

구성 요소 라이선스 및 버전
AVR MCU용 MPLAB XC8 C 컴파일러 도구는 GNU 일반 공중 사용 허가서(GPL)에 따라 작성 및 배포됩니다. 이는 해당 소스 코드가 대중에게 자유롭게 배포되고 제공된다는 의미입니다. GNU GPL에 따른 도구의 소스 코드는 Microchip의 소스 코드에서 별도로 다운로드할 수 있습니다. web대지. 다음에서 GNU GPL을 읽을 수 있습니다. file 설치 디렉토리의 하위 디렉토리를 찾았습니다. GPL의 기본 원칙에 대한 일반적인 논의는 여기에서 찾을 수 있습니다. 헤더에 제공된 지원 코드 files, 링커 스크립트 및 런타임 라이브러리는 독점 코드이며 GPL이 적용되지 않습니다. 이 컴파일러는 GCC 버전 5.4.0, binutils 버전 2.26의 구현이며 avr-libc 버전 2.0.0을 사용합니다.

시스템 요구 사항
MPLAB XC8 C 컴파일러와 여기에 사용되는 라이선스 소프트웨어는 다음의 64비트 버전을 포함한 다양한 운영 체제에서 사용할 수 있습니다. Microsoft® Windows® 10, Ubuntu® 18.04, macOS® 13.2(Ventura) 및 Professional Edition Fedora 34. Windows용 바이너리가 코드 서명되었습니다. macOS용 바이너리는 코드 서명 및 공증되었습니다. MPLAB XC 네트워크 라이센스 서버는 Microsoft Windows 64 이상을 포함한 다양한 10비트 운영 체제에서 사용할 수 있습니다. 우분투 18.04 이상; 또는 macOS 10.15 이상. 서버는 Windows Server, Linux 배포판(예: Oracle® Enterprise Linux® 및 Red Hat® Enterprise Linux)과 지원되는 이전 버전의 운영 체제를 포함한 다양한 다른 운영 체제에서도 실행될 수 있습니다. 그러나 MPLAB XC 네트워크 라이센스 서버는 이러한 운영 체제에서 테스트되지 않았습니다. MPLAB XC 네트워크 라이센스 서버는 네트워크 라이센스용 가상 머신 라이센스(SW006021-VM)를 사용하여 지원되는 OS의 가상 머신에서 실행할 수 있습니다. MPLAB XC 네트워크 서버의 모든 32비트 버전은 버전 3.00부터 중단됩니다.

지원되는 장치
이 컴파일러는 출시 당시 사용 가능한 모든 8비트 AVR MCU 장치를 지원합니다. 지원되는 모든 장치 목록은 avr_chipinfo.html(컴파일러의 doc 디렉토리에 있음)을 참조하세요. 이 파일에는 각 장치의 구성 비트 설정도 나열되어 있습니다.

에디션 및 라이선스 업그레이드
MPLAB XC8 컴파일러는 라이센스(PRO) 또는 라이센스가 없는(무료) 제품으로 활성화할 수 있습니다. 컴파일러에 라이선스를 부여하려면 활성화 키를 구입해야 합니다. 라이센스는 무료 제품에 비해 더 높은 수준의 최적화를 허용합니다. 라이선스가 없는 컴파일러는 라이선스 없이 무한정 작동될 수 있습니다. MPLAB XC8 기능 안전 컴파일러는 Microchip에서 구입한 기능 안전 라이센스를 사용하여 활성화해야 합니다. 이 라이센스가 없으면 컴파일러가 작동하지 않습니다. 활성화되면 최적화 수준을 선택하고 모든 컴파일러 기능을 사용할 수 있습니다. MPLAB XC 기능 안전 컴파일러의 이번 릴리스는 네트워크 서버 라이센스를 지원합니다. 라이센스 유형 및 라이센스가 있는 컴파일러 설치에 대한 자세한 내용은 MPLAB XC C 컴파일러 설치 및 라이센스(DS50002059) 문서를 참조하십시오.

설치 및 활성화
이 컴파일러에 포함된 최신 라이선스 관리자에 대한 중요한 정보는 마이그레이션 문제 및 제한 사항 섹션도 참조하세요. MPLAB IDE를 사용하는 경우 이 도구를 설치하기 전에 최신 MPLAB X IDE 버전 5.0 이상을 설치하십시오. 컴파일러를 설치하기 전에 IDE를 종료하십시오. .run(Linux) 또는 .app(macOS) 컴파일러 설치 프로그램 애플리케이션(예: XC8-1.00.11403-windows.exe)을 실행하고 화면의 지시를 따릅니다. 기본 설치 디렉터리를 권장합니다. Linux를 사용하는 경우 터미널을 사용하고 루트 계정에서 컴파일러를 설치해야 합니다. 관리자 권한이 있는 macOS 계정을 사용하여 설치합니다. 이제 활성화는 설치와 별도로 수행됩니다. 자세한 내용은 MPLAB® XC C 컴파일러용 라이센스 관리자(DS52059) 문서를 참조하십시오. 평가판 라이센스에 따라 컴파일러를 실행하기로 선택한 경우 이제 평가 기간 종료 후 14일 이내에 컴파일하는 동안 경고가 표시됩니다. HPA 구독 종료 후 14일 이내인 경우에도 동일한 경고가 표시됩니다. XC 네트워크 라이센스 서버는 별도의 설치 프로그램이며 단일 사용자 컴파일러 설치 프로그램에 포함되어 있지 않습니다. 이제 XC License Manager는 유동 네트워크 라이센스의 로밍을 지원합니다. 모바일 사용자를 대상으로 하는 이 기능을 사용하면 유동 라이센스가 짧은 시간 동안 네트워크를 벗어날 수 있습니다. 이 기능을 사용하면 네트워크 연결을 끊고도 MPLAB XC 컴파일러를 계속 사용할 수 있습니다. 이 기능에 대한 자세한 내용은 XCLM 설치의 doc 폴더를 참조하세요. MPLAB X IDE에는 로밍을 시각적으로 관리할 수 있는 라이선스 창(도구 > 라이선스)이 포함되어 있습니다.

설치 문제 해결
Windows 운영 체제에서 컴파일러를 설치하는 데 문제가 있는 경우 다음 제안 사항을 시도해 보십시오.

  • 관리자 권한으로 설치를 실행하십시오.
  • 설치 프로그램의 권한을 '모든 권한'으로 설정합니다. (파일을 마우스 오른쪽 버튼으로 클릭하고 속성, 보안 탭, 사용자 선택, 편집을 선택합니다.)
  • 임시 폴더의 권한을 '모든 권한'으로 설정합니다.

임시 폴더의 위치를 ​​확인하려면 실행 명령(Windows 로고 키 + R)에 %temp%를 입력합니다. 그러면 해당 디렉터리를 보여주는 파일 탐색기 대화 상자가 열리고 해당 폴더의 경로를 결정할 수 있습니다.

컴파일러 문서
스크린샷에 표시된 것처럼 MPLAB X IDE 대시보드에서 파란색 도움말 버튼을 클릭하면 브라우저에서 열리는 HTML 페이지에서 컴파일러의 사용자 가이드를 열 수 있습니다.MICROCHIP-XC8-C-컴파일러-버전-2-45-릴리스-노트-AVR-MCU-1

8비트 AVR 대상용으로 빌드하는 경우 AVR® MCU용 MPLAB® XC8 C 컴파일러 사용 설명서에는 이 아키텍처에 적용할 수 있는 컴파일러 옵션 및 기능에 대한 정보가 포함되어 있습니다.

고객 지원
XC8 포럼에서 이 제품의 다른 사용자에게 질문을 할 수 있습니다. Microchip은 이 컴파일러 버전과 관련된 버그 보고서, 제안 또는 의견을 환영합니다. 버그 보고서나 기능 요청이 있으면 지원 시스템을 통해 알려주시기 바랍니다.

문서 업데이트

온라인 및 최신 버전의 MPLAB XC8 문서는 Microchip의 온라인 기술 문서를 참조하십시오. web대지.
이 릴리스의 신규 또는 업데이트된 AVR 설명서:

없음

  • AVR® GNU 툴체인에서 MPLAB® XC8로의 마이그레이션 가이드에서는 C 기반 프로젝트를 AVR 8비트 GNU 툴체인에서 Microchip MPLAB XC8 C 컴파일러로 마이그레이션하기로 결정한 경우 필요할 수 있는 소스 코드 및 빌드 옵션의 변경 사항을 설명합니다.
  • Microchip 통합 표준 라이브러리 참조 가이드에서는 Microchip 통합 표준 라이브러리에 의해 정의된 기능의 동작과 인터페이스는 물론 라이브러리 유형과 매크로의 용도에 대해 설명합니다. 이 정보 중 일부는 이전에 AVR® MCU용 MPLAB® XC8 C 컴파일러 사용자 가이드에 포함되어 있었습니다. 장치별 라이브러리 정보는 이 컴파일러 가이드에 계속 포함되어 있습니다.
  • 8비트 장치와 MPLAB XC8 C 컴파일러로 막 시작하는 경우 MPLAB® XC8 사용자의
  • 임베디드 엔지니어를 위한 가이드 - AVR® MCU(DS50003108)에는 MPLAB X IDE에서 프로젝트 설정 및 첫 번째 MPLAB XC8 C 프로젝트용 코드 작성에 대한 정보가 포함되어 있습니다. 이 가이드는 이제 컴파일러와 함께 배포됩니다.
  • Hexmate 사용자 가이드는 Hexmate를 독립 실행형 애플리케이션으로 실행하는 사용자를 위한 것입니다.

새로운 소식

다음은 현재 컴파일러에서 지원하는 새로운 AVR 대상 기능입니다. 부제목의 버전 번호는 다음 기능을 지원하는 첫 번째 컴파일러 버전을 나타냅니다.

버전 2.45
범용 라이센스 관리자(XC8-3175, XCLM-224) 컴파일러와 함께 사용되는 라이센스 관리자의 macOS 버전은 이제 범용화되어 Intel 및 M1 기반 시스템 모두에 대한 기본 지원을 제공합니다. 이제 Linux 버전의 라이센스 관리자에는 glibc 버전 2.25 이상이 필요합니다. Mac 범용 바이너리(XC8-3168, XC8-2951) 이제 macOS용 컴파일러 바이너리 파일이 범용화되어 Intel 및 M1 기반 시스템 모두에 대한 기본 지원을 제공합니다. 부동 소수점 라이브러리 크기 감소(XC8-3112, XC8-3071) sinf() pow(), sqrt(), expf(), log1fp() 및 nextafterf()를 포함한 부동 소수점 라이브러리 함수가 개선되었습니다. , 이러한 루틴의 코드 크기가 줄어듭니다. 새로운 장치 지원 이제 AVR16EA28, AVR16EA32, AVR16EA48, AVR32EA28, AVR32EA32, AVR32EA48, AVR16EB14, AVR16EB20, AVR16EB28 및 AVR16EB32 AVR 부품에 대한 지원이 제공됩니다.

버전 2.41

  • Bootrow 지원(XC8-3053) 컴파일러는 HEX 파일의 주소 0x860000에 .bootrow 접두사가 있는 모든 섹션의 내용을 배치합니다. 이 섹션은 부트로더에서만 액세스할 수 있는 키 및 기타 보안 정보를 저장하도록 설계된 BOOTROW 메모리에 사용됩니다.
  • 중복 반환 제거(XC8-3048) 이제 컴파일러는 사용자 정의 링커 스크립트를 사용할 때 테일 점프가 있는 함수에서 중복 ret 명령을 제거합니다. 이는 이전에 수행한 것과 유사한 최적화이지만 이제는 사용자 정의 링커 스크립트가 사용되고 가장 적합한 할당 체계가 작동하지 않는 경우에도 모든 고아 섹션에서 수행됩니다.
  • 시간 유형 변경(XC8-2982, 2932) C99 표준 라이브러리 유형인 time_t가 long long에서 unsigned long 유형으로 변경되어 mktime()과 같은 일부 시간 관련 함수에서 코드 크기가 향상되었습니다.
  • 새로운 nop (XC8-2946, 2945) NOP() 매크로가 추가되었습니다. . 이 매크로는 nop 무작동 명령을 출력에 삽입합니다.
  • XCLM 업데이트(XC8-2944) 컴파일러와 함께 사용되는 라이선스 관리자가 업데이트되었으며 이제 컴파일러의 라이선스 세부 정보를 확인할 때 더 빠르게 응답합니다.
  • Tramp정렬된 호출(XC8-2760) 이제 컴파일러는 명령어의 상대 형식이 일반적으로 대상 범위를 벗어날 때 긴 형식의 호출 명령어를 더 짧은 상대 호출로 대체할 수 있습니다. 이 상황에서 컴파일러는 rcall 명령어를 'tr'이 되는 jmp 호출 명령어로 대체하려고 시도합니다.amp예를 들어 필요한 주소로 oline' 실행amp르 :

버전 2.40

  • 새로운 장치 지원 AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 및 AVR64EA48과 같은 AVR 부품에 대한 지원이 이제 가능합니다.
  • 향상된 절차적 추상화 PA(절차적 추상화) 최적화 도구가 개선되어 함수 호출 명령(call/rcall)이 포함된 코드를 간략하게 설명할 수 있습니다. 이는 스택이 함수에 인수를 전달하거나 함수에서 반환 값을 얻는 데 사용되지 않는 경우에만 발생합니다. 스택은 가변 인수 목록이 있는 함수를 호출할 때 또는 이 목적으로 지정된 레지스터보다 더 많은 인수를 사용하는 함수를 호출할 때 사용됩니다. 이 기능은 – mno-pa-outline-calls 옵션을 사용하여 비활성화할 수 있습니다. 또는 -mno-pa-on-을 사용하여 객체 파일 및 함수에 대해 절차적 추상화를 완전히 비활성화할 수 있습니다.file -mno-pa-on-function을 사용하거나 선택적으로 함수와 함께 nopa 속성(__nopa 지정자)을 사용합니다.
  • 코드 적용 매크로 이제 컴파일러는 유효한 -mcodecov 옵션이 지정된 경우 매크로 __CODECOV를 정의합니다.
  • 메모리 예약 옵션 xc8-cc 드라이버는 이제 AVR 대상용으로 빌드할 때 -mreserve=space@start:end 옵션을 허용합니다. 이 옵션은 데이터 또는 프로그램 메모리 공간에 지정된 메모리 범위를 예약하여 링커가 이 영역에 코드나 개체를 채우는 것을 방지합니다.
  • Smarter smart IO printf 핵심 코드에 대한 일반적인 조정, %n 변환 지정자를 독립적인 변형으로 처리, 필요에 따라 vararg pop 루틴에 연결, 처리를 위해 가능한 경우 더 짧은 데이터 유형 사용 등 Smart IO 기능에 대한 몇 가지 개선이 이루어졌습니다. IO 함수 인수, 필드 폭 및 정밀 처리 시 공통 코드 인수분해. 이를 통해 상당한 코드 및 데이터 절감 효과를 얻을 수 있을 뿐만 아니라 IO 실행 속도도 향상될 수 있습니다.

버전 2.39(기능 안전 릴리스)
네트워크 서버 라이선스 이 MPLAB XC8 기능 안전 컴파일러 릴리스는 네트워크 서버 라이선스를 지원합니다.

버전 2.36
없음.

버전 2.35

  • 새로운 장치 지원 ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 및 AVR64DD32와 같은 AVR 부품에 대한 지원이 가능합니다.
  • 향상된 컨텍스트 스위칭 새로운 -mcall-isr-prologues 옵션은 인터럽트 함수가 항목에 레지스터를 저장하는 방법과 인터럽트 루틴이 종료될 때 해당 레지스터를 복원하는 방법을 변경합니다. -mcall-prologues 옵션과 유사한 방식으로 작동하지만 인터럽트 기능(ISR)에만 영향을 미칩니다.
  • 훨씬 더 향상된 컨텍스트 전환 새로운 -mgas-isr-prologues 옵션은 작은 인터럽트 서비스 루틴을 위해 생성된 컨텍스트 전환 코드를 제어합니다. 이 기능을 활성화하면 어셈블러가 레지스터 사용을 위해 ISR을 스캔하고 필요한 경우에만 이러한 사용된 레지스터를 저장하게 됩니다.
  • 구성 가능한 플래시 매핑 AVR DA 및 AVR DB 제품군의 일부 장치에는 데이터 메모리에 매핑될 프로그램 메모리의 32k 섹션을 지정하는 SFR(예: FLMAP)이 있습니다. 새로운 – mconst-data-in-config-mapped-progmem 옵션을 사용하면 링커가 모든 정규화된 데이터를 하나의 32k 섹션에 배치하고 관련 SFR 레지스터를 자동으로 초기화하여 이 데이터가 데이터 메모리 공간에 매핑되도록 할 수 있습니다. , 더 효과적으로 액세스할 수 있습니다.
  • Microchip 통합 표준 라이브러리 모든 MPLAB XC 컴파일러는 이제 이번 MPLAB XC8 릴리스에서 사용할 수 있는 Microchip 통합 표준 라이브러리를 공유합니다. AVR® MCU용 MPLAB® XC8 C 컴파일러 사용자 가이드에는 더 이상 이러한 표준 기능에 대한 문서가 포함되어 있지 않습니다. 이 정보는 이제 Microchip 통합 표준 라이브러리 참조 가이드에서 확인할 수 있습니다. 이전에 avr-libc에 의해 정의된 일부 기능은 더 이상 사용할 수 없습니다. (라이브러리 기능을 참조하세요.)
  • 스마트 IO 새로운 통합 라이브러리의 일부로 printf 및 scanf 제품군의 IO 기능은 이제 프로그램에서 이러한 기능이 사용되는 방식에 따라 각 빌드에서 사용자 정의 생성됩니다. 이렇게 하면 프로그램에서 사용하는 리소스를 크게 줄일 수 있습니다.
  • 스마트 IO 지원 옵션 스마트 IO 함수(예: printf() 또는 scanf())에 대한 호출을 분석할 때 컴파일러는 항상 형식 문자열에서 결정하거나 호출에 필요한 변환 지정자를 인수에서 추론할 수 없습니다. 이전에는 컴파일러가 항상 다음을 수행했습니다. 가정하지 않고 완전한 기능을 갖춘 IO 기능이 최종 프로그램 이미지에 연결되었는지 확인합니다. 새로운 -msmart-io-format=fmt 옵션이 추가되어 대신 스마트 IO에서 사용하는 변환 지정자를 사용자가 컴파일러에 알릴 수 있습니다. 사용법이 모호한 함수로 지나치게 긴 IO 루틴이 연결되는 것을 방지합니다.(자세한 내용은 smart-io-format 옵션을 참조하세요.)
  • 사용자 정의 섹션 배치 이전에는 링커 스크립트가 동일한 이름을 가진 출력 섹션을 정의한 경우 -Wl,–section-start 옵션만 요청된 주소에 지정된 섹션을 배치했습니다. 그렇지 않은 경우 해당 섹션은 링커가 선택한 주소에 배치되었으며 해당 옵션은 기본적으로 무시되었습니다. 이제 링커 스크립트가 섹션을 정의하지 않은 경우에도 모든 사용자 정의 섹션에 대해 옵션이 적용됩니다. 그러나 .text, .bss 또는 .data와 같은 표준 섹션의 경우 가장 적합한 할당자가 배치를 완전히 제어할 수 있으며 옵션은 아무런 영향을 미치지 않습니다. 사용자 안내서에 설명된 대로 -Wl,-Tsection=addr 옵션을 사용하십시오.

버전 2.32

  • 스택 안내 PRO 컴파일러 라이선스로 제공되는 컴파일러의 스택 안내 기능을 사용하면 프로그램에서 사용하는 스택의 최대 깊이를 추정할 수 있습니다. 프로그램의 호출 그래프를 구성 및 분석하고, 각 기능의 스택 사용량을 결정하고, 프로그램에서 사용하는 스택의 깊이를 유추할 수 있는 보고서를 생성합니다. 이 기능은 -mchp-stack-usage 명령줄 옵션을 통해 활성화됩니다. 실행 후 스택 사용량 요약이 인쇄됩니다. 자세한 스택 보고서는 맵 파일에서 확인할 수 있으며 일반적인 방법으로 요청할 수 있습니다.
  • 새로운 장치 지원 다음 AVR 부품에 대한 지원이 제공됩니다: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 및 AVR32DB48.
  • 수납된 장치 지원 AVR16DA28, AVR16DA32 및 AVR16DA48 AVR 부품에 대해서는 더 이상 지원이 제공되지 않습니다.

버전 2.31
없음.

버전 2.30

  • 데이터 초기화를 방지하는 새로운 옵션 새로운 -mno-data-init 드라이버 옵션은 데이터 초기화 및 bss 섹션 삭제를 방지합니다. 이는 어셈블리 파일에서 do_clear_bss 기호의 출력을 억제함으로써 작동하며, 이는 결국 링커에 의해 해당 루틴이 포함되는 것을 방지합니다.
  • 향상된 최적화 중복 반환 명령 제거, skip-if-bit-is 명령에 따른 일부 점프 제거, 개선된 절차 추상화 및 이 프로세스 반복 기능을 포함하여 여러 가지 최적화 개선이 이루어졌습니다.
    이제 이러한 최적화 중 일부, 특히 -fsection-anchors를 제어하기 위한 추가 옵션을 사용할 수 있습니다. 이를 통해 하나의 기호를 기준으로 정적 개체에 대한 액세스를 수행할 수 있습니다. -mpaiterations=n: 절차적 추상화 반복 횟수를 기본값인 2에서 변경할 수 있습니다. 그리고 -mpa-callcost-shortcall은 링커가 긴 호출을 완화할 수 있기를 바라면서 더욱 공격적인 절차적 추상화를 수행합니다. 이 마지막 옵션은 기본 가정이 실현되지 않는 경우 코드 크기를 늘릴 수 있습니다.
  • 새로운 장치 지원 다음 AVR 부품에 대한 지원이 제공됩니다: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 및 A VR128DB64.
  • 수납된 장치 지원 ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C 및 ATA664251 AVR 부품에 대해서는 더 이상 지원이 제공되지 않습니다.

버전 2.29(기능 안전 릴리스)

  • 컴파일러 내장을 위한 헤더 파일 컴파일러가 MISRA와 같은 언어 사양을 준수할 수 있는지 확인하려면 , 업데이트되었습니다. 이 헤더에는 __builtin_avr_nop() 및 __builtin_avr_delay_cycles() 와 같은 모든 내장 함수에 대한 프로토타입이 포함되어 있습니다. 일부 내장 기능은 MISRA를 준수하지 않을 수 있습니다. 이는 컴파일러 명령줄에 __XC_STRICT_MISRA 정의를 추가하여 생략할 수 있습니다. 고정 너비 유형을 사용하도록 내장 및 해당 선언이 업데이트되었습니다.

버전 2.20

  • 새로운 장치 지원 ATTINY1624, ATTINY1626 및 ATTINY1627 AVR 부품에 대한 지원이 제공됩니다.
  • 더 나은 최적 할당 할당 더 나은 최적화를 허용하는 순서로 섹션이 할당되도록 컴파일러의 최적 할당자(BFA)가 개선되었습니다. BFA는 이제 명명된 주소 공간을 지원하고 데이터 초기화를 더 잘 처리합니다.
  • 향상된 절차적 추상화 이제 절차적 추상화 최적화가 더 많은 코드 시퀀스에서 수행됩니다. 이 최적화로 인해 코드 크기가 증가했을 수 있는 이전 상황은 최적화 코드가 링커의 가비지 수집 프로세스를 인식하도록 하여 해결되었습니다.
  • AVR 어셈블러 부재 AVR 어셈블러는 더 이상 이 배포판에 포함되지 않습니다.

버전 2.19(기능 안전 릴리스)
없음.

버전 2.10

  • 코드 적용 범위 이 릴리스에는 프로젝트의 소스 코드가 실행된 정도를 쉽게 분석할 수 있는 코드 적용 범위 기능이 포함되어 있습니다. 활성화하려면 -mcodecov=ram 옵션을 사용하세요. 하드웨어에서 프로그램을 실행한 후 코드 적용 범위 정보가 장치에 수집되며, 이는 코드 적용 범위 플러그인을 통해 MPLAB X IDE로 전송되고 표시될 수 있습니다. 이 플러그인에 대한 정보를 얻으려면 IDE 설명서를 참조하세요.
    #pragma nocodecov는 적용 범위 분석에서 후속 기능을 제외하는 데 사용될 수 있습니다. 이상적으로는 전체 파일을 적용 범위 분석에서 제외하기 위해 파일 시작 부분에 pragma를 추가해야 합니다. 또는 __attribute__((nocodecov))를 사용하여 커버리지 분석에서 특정 함수를 제외할 수 있습니다.
  • 장치 설명 파일 avr_chipinfo.html이라는 새로운 장치 파일은 컴파일러 배포판의 docs 디렉토리에 있습니다. 이 파일에는 컴파일러가 지원하는 모든 장치가 나열되어 있습니다. 장치 이름을 클릭하면 해당 장치에 대해 허용되는 모든 구성 비트 설정/값 쌍을 보여주는 페이지가 열립니다(예:amp레.
  • 절차적 추상화 어셈블리 코드의 공통 블록을 해당 블록의 추출된 복사본에 대한 호출로 대체하는 절차적 추상화 최적화가 컴파일러에 추가되었습니다. 이는 레벨 2, 3 또는 s 최적화를 선택할 때 컴파일러에 의해 자동으로 호출되는 별도의 애플리케이션에 의해 수행됩니다. 이러한 최적화는 코드 크기를 줄이지만 실행 속도와 코드 디버깅 가능성을 감소시킬 수 있습니다. -mno-pa 옵션을 사용하여 더 높은 최적화 수준에서 절차적 추상화를 비활성화하거나 -mpa를 사용하여 더 낮은 최적화 수준(라이센스에 따라)에서 활성화할 수 있습니다. -mno-pa-on-을 사용하여 객체 파일에 대해 비활성화할 수 있습니다.file=filename 을 사용하거나 -mno-pa-on-function=function을 사용하여 함수에 대해 비활성화합니다. 소스 코드 내에서 함수 정의와 함께 __attribute__((nopa))를 사용하거나 __attribute__((nopa,noinline))으로 확장되어 함수 인라인이 발생하는 것을 방지하는 __nopa를 사용하여 함수에 대한 절차적 추상화를 비활성화할 수 있습니다. 인라인 코드가 추상화되어 있습니다.
  • pragma의 잠금 비트 지원 이제 #pragma config를 사용하여 AVR 잠금 비트 및 기타 구성 비트를 지정할 수 있습니다. 이 pragma와 함께 사용할 설정/값 쌍에 대해서는 avr_chipinfo.html 파일(위에 언급됨)을 확인하세요.
  • 새로운 장치 지원 AVR28DA128, AVR64DA128, AVR32DA128 및 AVR48DA128 부품에 대한 지원이 가능합니다.

버전 2.05

  • 비용 대비 더 많은 비트 이 컴파일러 및 라이선스 관리자의 macOS 버전은 이제 64비트 애플리케이션입니다. 이렇게 하면 최신 버전의 macOS에서 컴파일러가 경고 없이 설치 및 실행됩니다.
  • 프로그램 메모리의 Const 개체 컴파일러는 이제 const 한정 개체를 RAM에 두는 대신 프로그램 플래시 메모리에 배치할 수 있습니다. const 한정 전역 데이터가 프로그램 플래시 메모리에 저장되고 이 데이터가 적절한 프로그램 메모리 명령어를 사용하여 직간접적으로 액세스될 수 있도록 컴파일러가 수정되었습니다. 이 새로운 기능은 기본적으로 활성화되어 있지만 -mno-const-data-in-progmem 옵션을 사용하여 비활성화할 수 있습니다. avrxmega3 및 avrtiny 아키텍처의 경우 이 기능은 필요하지 않으며 항상 비활성화됩니다. 프로그램 메모리가 이러한 장치의 데이터 주소 공간에 매핑되기 때문입니다.
  • 이 컴파일러의 무료 무허가(무료) 버전에 대한 표준은 이제 레벨 2까지 최적화를 허용합니다. 이렇게 하면 동일하지는 않지만 이전에 표준 라이선스를 사용하여 가능했던 것과 유사한 출력이 허용됩니다.
  • Welcome AVRASM2 2비트 장치용 AVRASM8 어셈블러가 이제 XC8 컴파일러 설치 프로그램에 포함되었습니다. 이 어셈블러는 XC8 컴파일러에서 사용되지 않지만 손으로 ​​작성한 어셈블리 소스를 기반으로 하는 프로젝트에 사용할 수 있습니다.
  • 새 장치 지원 ATMEGA1608, ATMEGA1609, ATMEGA808 및 ATMEGA809 부품에 대한 지원이 가능합니다.

버전 2.00

  • 최상위 드라이버 xc8-cc라고 하는 새 드라이버는 이제 이전 avr-gcc 드라이버와 xc8 드라이버 위에 있으며 대상 장치 선택에 따라 적절한 컴파일러를 호출할 수 있습니다. 이 드라이버는 실행 중인 컴파일러에 대해 변환되거나 전달되는 GCC 스타일 옵션을 허용합니다. 이 드라이버를 사용하면 AVR 또는 PIC 대상과 함께 유사한 의미 체계를 가진 유사한 옵션 집합을 사용할 수 있으므로 컴파일러를 호출하는 데 권장되는 방법입니다. 필요한 경우 이전 컴파일러 버전에서 허용된 이전 스타일 옵션을 사용하여 이전 avr-gcc 드라이버를 직접 호출할 수 있습니다.
  • 공통 C 인터페이스 이 컴파일러는 이제 MPLAB 공통 C 인터페이스를 준수할 수 있으므로 소스 코드를 모든 MPLAB XC 컴파일러에서 보다 쉽게 ​​포팅할 수 있습니다. -mext=cci 옵션은 이 기능을 요청하여 많은 언어 확장에 대한 대체 구문을 활성화합니다.
  • 새 라이브러리언 드라이버 새 라이브러리언 드라이버는 이전 PIC libr 라이브러리언과 AVR avr-ar 라이브러리언 위에 위치합니다. 이 드라이버는 실행 중인 라이브러리언을 통해 변환되거나 전달되는 GCC 아카이버 스타일 옵션을 허용합니다. 새 드라이버를 사용하면 유사한 의미를 지닌 유사한 옵션 세트를 사용하여 PIC 또는 AVR 라이브러리 파일을 생성하거나 조작할 수 있으므로 라이브러리언을 호출하는 데 권장되는 방법입니다. 레거시 프로젝트에 필요한 경우 이전 컴파일러 버전에서 허용된 이전 스타일 옵션을 사용하여 이전 라이브러리 관리자를 직접 호출할 수 있습니다.

마이그레이션 문제

다음은 이제 컴파일러에서 다르게 처리되는 기능입니다. 코드를 이 컴파일러 버전으로 포팅하는 경우 이러한 변경으로 인해 소스 코드를 수정해야 할 수 있습니다. 부제목의 버전 번호는 후속 변경 사항을 지원하는 첫 번째 컴파일러 버전을 나타냅니다.

버전 2.45
없음.

버전 2.41
부정확한 fma 함수가 제거되었습니다(XC8-2913). C99 표준 라이브러리( )는 단일 반올림에 대해 무한 정밀도의 곱셈-덧셈을 계산하지 않고 대신 각 작업마다 반올림 오류를 누적했습니다. 이러한 함수는 제공된 라이브러리에서 제거되었습니다.

버전 2.40
없음.

버전 2.39(기능 안전 릴리스)
없음.

버전 2.36
없음.

버전 2.35

  • 문자열 대 베이스 처리(XC8-2420) 다른 XC 컴파일러와의 일관성을 보장하기 위해 strtol() 등과 같은 XC8 문자열 대 함수는 지정된 베이스가 36보다 큰 경우 더 이상 입력 문자열을 변환하려고 시도하지 않습니다. 대신 을 설정합니다. C 표준은 이 기본 값을 초과할 때 함수의 동작을 지정하지 않습니다.
  • 부적절한 속도 최적화 레벨 3 최적화(-O3)를 선택할 때 절차적 추상화 최적화가 활성화되었습니다. 이러한 최적화는 코드 속도를 희생하여 코드 크기를 줄이므로 수행되어서는 안 됩니다. 이 최적화 수준을 사용하는 프로젝트는 이 릴리스로 빌드할 때 코드 크기와 실행 속도에 차이가 있을 수 있습니다.
  • 라이브러리 기능 많은 표준 C 라이브러리 함수에 대한 코드는 이제 Microchip의 통합 표준 라이브러리에서 제공됩니다. 이 라이브러리는 일부 상황에서 이전 avr-libc 라이브러리에서 제공한 것과 다른 동작을 보일 수 있습니다. 예를 들어amp파일을 사용하면 더 이상 부동 형식 지정자에 대한 형식화된 IO 지원을 켜기 위해 lprintf_flt 라이브러리(-lprintf_flt 옵션)에 연결할 필요가 없습니다. Microchip 통합 표준 라이브러리의 스마트 IO 기능으로 인해 이 옵션이 중복됩니다. 또한 플래시의 const 문자열에서 작동하는 문자열 및 메모리 함수(예: strcpy_P() 등)에 _P 접미사가 붙은 루틴을 사용할 필요가 없습니다. 표준 C 루틴(예: strcpy())은 const-data-in-program-memory 기능이 활성화되면 해당 데이터에 대해 올바르게 작동합니다.

버전 2.32
없음.

버전 2.31
없음.

버전 2.30
없음.

버전 2.29(기능 안전 릴리스)
없음.

버전 2.2
변경된 DFP 레이아웃 이제 컴파일러는 DFP(Device Family Pack)에서 사용하는 다른 레이아웃을 가정합니다. 즉, 이전 DFP는 이 릴리스에서 작동하지 않을 수 있으며 이전 컴파일러는 최신 DFP를 사용할 수 없습니다.

버전 2.19(기능 안전 릴리스)
없음.

버전 2.10
없음

버전 2.05
프로그램 메모리의 Const 개체 기본적으로 const 한정 개체는 여기에 설명된 대로 프로그램 메모리에 배치되고 액세스됩니다. 이는 프로젝트의 크기와 실행 속도에 영향을 주지만 RAM 사용량은 줄어듭니다. 필요한 경우 -mno-const-data-in-progmem 옵션을 사용하여 이 기능을 비활성화할 수 있습니다.

버전 2.00

  • 구성 퓨즈 이제 장치 구성 퓨즈는 config pragma와 설정 값 쌍을 사용하여 퓨즈 상태를 지정하여 프로그래밍할 수 있습니다(예: #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3).
  • 절대 개체 및 함수 개체 및 함수는 이제 CCI __at(address) 지정자를 사용하여 메모리의 특정 주소에 배치할 수 있습니다.amp르 :
    • #포함하다
      int foobar __at(0x800100);
      char __at(0x250) getID(int 오프셋) { … }
      이 지정자에 대한 인수는 첫 번째 바이트 또는 명령어가 배치될 주소를 나타내는 상수여야 합니다. RAM 주소는 0x800000의 오프셋을 사용하여 표시됩니다. 이 기능을 사용하려면 CCI를 활성화하세요.
  • 새로운 인터럽트 함수 구문 이제 컴파일러는 C 함수가 인터럽트 핸들러임을 나타내기 위해 CCI __interrupt(num) 지정자를 허용합니다. 지정자는 인터럽트 번호를 사용합니다. 예를 들어amp르: #include 무효 __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }

해결된 문제

다음은 컴파일러에 적용된 수정 사항입니다. 이는 생성된 코드의 버그를 수정하거나 사용자 가이드에서 의도했거나 지정한 대로 컴파일러의 작동을 변경할 수 있습니다. 부제목의 버전 번호는 다음에 나오는 문제에 대한 수정 사항이 포함된 첫 번째 컴파일러 버전을 나타냅니다. 제목의 괄호 안에 있는 레이블은 추적 데이터베이스에서 해당 문제를 식별하는 것입니다. 지원팀에 문의해야 하는 경우 유용할 수 있습니다.
일부 장치 관련 문제는 장치와 연결된 DFP(Device Family Pack)에서 수정되었습니다. DFP의 변경 사항에 대한 정보와 최신 팩을 다운로드하려면 MPLAB Pack Manager를 참조하십시오.

버전 2.45

  • 로밍 라이센스 오류(XCLM-235) 2.28 이후의 glibc 버전을 사용하는 Linux 플랫폼에서 로밍 라이센스가 올바르게 작동하지 못했습니다.
  • 구조 배열의 내부 오류(XC8-3069) 구조의 다차원 배열 구성원이 처리될 때 주소 공간 한정자가 배열에 올바르게 전파되지 않았습니다. 이로 인해 주소 공간 한정자 정보가 일치하지 않고 내부 컴파일러 오류가 발생했습니다. 이 상황은 수정되었습니다.
  • 초기화되지 않은 스트림에 잘못된 쓰기(ML-353, XC8-3100) FDEV_SETUP_STREAM 또는 _init_stdout/_init_stderr을 사용하여 표준 출력/오류 스트림이 명시적으로 설정되지 않은 경우 여기에 쓰려고 하면 정의되지 않은 동작이 발생합니다. 이는 perror()와 같은 stdlib 함수의 쓰기에도 영향을 미쳤습니다. 초기화되기 전에 이러한 스트림에 대한 모든 쓰기는 이제 무시됩니다.
  • 지원되지 않는 수정자(XC8-2505) avr-libc 라이브러리는 printf 스타일 변환 지정자의 * 수정자를 지원하지 않았습니다.amp파일 "%.*f". 이는 이제 Microchip 통합 표준 라이브러리의 도입으로 지원됩니다.
  • 초기화되지 않은 여러 경고(XC8-2409) 초기화되지 않은 const 배열이 발견되면 컴파일러가 동일한 경고 메시지를 여러 개 발행했습니다. 메시지는 한 번만 발행되어야 했는데, 지금은 이 상황이 발생하는 경우입니다.

버전 2.41

  • Ventura(XC8-3088)의 동글 문제 컴파일러 라이센스에 사용된 동글이 macOS Ventura 호스트에서 제대로 읽히지 않아 라이센스 실패가 발생할 수 있습니다. XCLM 라이센스 관리자를 변경하면 이 문제가 해결됩니다.
  • 잘못된 메모리 할당 표시(XC8-2925) 단순 동적 메모리 할당 구현을 사용할 때 요청된 표준 라이브러리 메모리 관리 함수(malloc() 등)를 사용하여 메모리의 SIZE_MAX 바이트(또는 이에 가까운 값)를 할당하려고 시도합니다. 이러한 상황에서는 이제 NULL 포인터가 반환되고 errno가 ENOMEM으로 설정됩니다.
  • 부정확한 fma 함수가 제거되었습니다(XC8-2913). C99 표준 라이브러리 fma() 계열 함수( )는 단일 반올림에 대해 무한 정밀도의 곱셈-덧셈을 계산하지 않고 대신 각 작업마다 반올림 오류를 누적했습니다. 이러한 함수는 제공된 라이브러리에서 제거되었습니다.
  • 문자열 변환의 잘못된 처리(XC8-2921, XC8-2652) strtod()에 의한 변환을 위한 '주제 시퀀스'에 지수 형식의 부동 소수점 숫자로 보이는 내용이 포함되어 있고 e/E 뒤에 예기치 않은 문자가 있는 경우 문자가 있는 경우 endptr이 제공된 경우 뒤에 있는 문자를 가리키는 주소가 할당되었지만 변환되지 않았기 때문에 e//E 문자 자체를 가리켜야 했습니다. 예를 들어ample, strtod("100exx", &ep)는 100.00을 반환하고 ep가 문자열의 "exx" 부분을 가리키도록 설정해야 하지만, 함수는 올바른 값을 반환했지만 문자열의 "xx" 부분을 설정했습니다.

버전 2.40

  • 너무 완화됨(XC8-2876) -mrelax 옵션을 사용할 때 컴파일러가 일부 섹션을 함께 할당하지 않아 코드 크기가 덜 최적화되었습니다. 이는 새로운 MUSL 라이브러리를 사용한 코드나 약한 기호에서 발생했을 수 있습니다.
  • 경고(XC8-2875)에 명시된 대로 매핑 기능이 비활성화되지 않았습니다. const-data-in-config-mapped-progmem 기능은 활성화되는 const-data-in-progmem 기능에 의존합니다. 옵션을 사용하여 const-data-in-config-mapped-progmem 기능이 명시적으로 활성화되고 const-data-in-progmem 기능이 비활성화된 경우 const-data-in-in-progmem 기능이 비활성화되었다는 경고 메시지에도 불구하고 링크 단계가 실패합니다. -config-mapped-progmem 기능이 자동으로 비활성화되었는데 이는 완전히 정확하지 않습니다. 이제 이 상황에서는 const-data-in-config-mapped-progmem 기능이 완전히 비활성화됩니다.
  • NVMCTRL(XC8-2848)에 올바르게 액세스하도록 DFP가 변경됨 AVR64EA 장치에서 사용되는 런타임 시작 코드는 NVMCTRL 레지스터가 CCP(구성 변경 보호) 아래에 있고 사용된 페이지에 IO SFR을 설정할 수 없다는 점을 고려하지 않았습니다. const-data-in-config-mapped-progmem 컴파일러 기능을 사용합니다. AVR-Ex_DFP 버전 2.2.55의 변경 사항을 통해 런타임 시작 코드가 이 레지스터에 올바르게 쓸 수 있습니다.
  • 플래시 매핑을 피하기 위한 DFP 변경(XC8-2847) AVR128DA28/32/48/64 Silicon Errata(DS80000882)에서 보고된 플래시 매핑 장치 기능 문제에 대한 해결 방법이 구현되었습니다. const-data-in-config-mapped-progmem 컴파일러 기능은 영향을 받는 장치에 기본적으로 적용되지 않으며 이 변경 사항은 AVR-Dx_DFP 버전 2.2.160에 나타납니다.
  • sinhf 또는 coshf의 빌드 오류(XC8-2834) sinhf() 또는 coshf() 라이브러리 함수를 사용하려고 하면 정의되지 않은 참조를 설명하는 링크 오류가 발생했습니다. 참조된 누락된 함수가 이제 컴파일러 배포판에 포함되었습니다.
  • nopa를 사용한 빌드 오류(XC8-2833) __asm__()을 사용하여 지정된 어셈블러 이름이 있는 함수에 nopa 속성을 사용하면 어셈블러에서 오류 메시지가 발생합니다. 이 조합은 불가능합니다.
  • 포인터 인수로 인한 가변 함수 오류(XC8-2755, XC8-2731) 가변 개수의 인수가 있는 함수에서는 const-data-in-progmem 기능이 다음과 같은 경우 가변 인수 목록에 24비트(__memx 유형) 포인터가 전달될 것으로 예상합니다. 활성화되었습니다. 데이터 메모리에 대한 포인터인 인수가 16비트 개체로 전달되어 최종적으로 읽을 때 코드 오류가 발생했습니다. const-data-in-progmem 기능이 활성화되면 모든 16비트 포인터 인수가 이제 24비트 포인터로 변환됩니다.
  • strtoxxx 라이브러리 함수 실패(XC8-2620) const-data-in-progmem 기능이 활성화된 경우 strtoxxx 라이브러리 함수의 endptr 매개변수가 프로그램 메모리에 없는 소스 문자열 인수에 대해 제대로 업데이트되지 않았습니다.
  • 잘못된 캐스트에 대한 경고(XC8-2612) 예를 들어 const-in-progmem 기능이 활성화되고 문자열 리터럴의 주소가 데이터 주소 공간으로 명시적으로 캐스트되면(const 한정자를 삭제하는 경우) 컴파일러는 이제 오류를 발행합니다.ample, (uint8_t *) “Hello World!” . const 데이터 포인터가 명시적으로 데이터 주소 공간으로 캐스팅될 때 주소가 유효하지 않을 수 있으면 경고가 발생합니다.
  • 초기화되지 않은 const 객체 배치(XC8-2408) 초기화되지 않은 const 휘발성 객체 const
    프로그램 메모리 전체 또는 일부를 데이터 주소 공간에 매핑하는 장치의 프로그램 메모리에 배치되지 않았습니다. 이러한 장치의 경우 해당 개체는 이제 프로그램 메모리에 배치되어 다른 장치와 작동이 일관성을 유지합니다.

버전 2.39(기능 안전 릴리스)
없음.

버전 2.36
지연 시 오류(XC8-2774) 기본 자유 모드 최적화의 사소한 변경으로 인해 피연산자 표현식이 지연 내장 함수로 상수 접히는 것이 방지되어 결과적으로 상수가 아닌 것으로 처리되고 오류가 발생했습니다. __builtin_avr_delay_cycles는 컴파일 시간 정수를 예상합니다. 끊임없는.

버전 2.35

  • __at(XC8-2653)을 사용한 연속 할당 동일한 이름을 가진 섹션에 여러 개체를 배치하고 __at()를 사용하여 연속 할당이 올바르게 작동하지 않았습니다. 예를 들어amp르 :
    const char arr1[] __attribute__((section(“.mysec”))) __at (0x500) = {0xAB, 0xCD}; const char arr2[] __attribute__((section(".mysec"))) = {0xEF, 0xFE}; arr2 바로 뒤에 arr1를 배치했어야 했습니다.
  • 섹션 시작 주소 지정(XC8-2650) -Wl,–section-start 옵션이 지정된 시작 주소에 섹션을 배치하는 데 자동으로 실패했습니다. 이 문제는 사용자 정의 이름이 지정된 모든 섹션에서 해결되었습니다. 그러나 -Wl,-T 옵션을 사용하여 배치해야 하는 .text 또는 .bss와 같은 표준 섹션에서는 작동하지 않습니다. 완화 시 링커가 충돌함(XC8-2647) -mrelax 최적화가 활성화되어 있고 사용 가능한 메모리에 맞지 않는 코드 또는 데이터 섹션이 있는 경우 링커가 충돌했습니다. 이제 이러한 상황에서는 오류 메시지가 대신 발행됩니다.
  • no-fallback-back(XC8-2646) –nofallback 옵션이 올바르게 구현되지 않았거나 문서화되지 않았습니다. 이제 컴파일러에 라이선스가 없는 경우 컴파일러가 더 낮은 최적화 설정으로 돌아가지 않고 대신 오류가 발생하도록 하기 위해 이를 선택할 수 있습니다.
  • 부적절한 속도 최적화(XC8-2637) 레벨 3 최적화(-O3)를 선택할 때 절차적 추상화 최적화가 활성화되었습니다. 이러한 최적화는 코드 속도를 희생하여 코드 크기를 줄이므로 수행되어서는 안 됩니다.
  • 잘못된 EEPROM 액세스(XC8-2629) – mconst-data-in-progmem 옵션이 활성화된 경우(기본 상태) eeprom_read_block 루틴이 Xmega 장치에서 올바르게 작동하지 않아 EEPROM 메모리가 올바르게 읽히지 않게 되었습니다.
  • 잘못된 메모리 할당(XC8-2593, XC8-2651) -Ttext 또는 -Tdata 링커 옵션(예:amp-Wl 드라이버 옵션을 사용하여 전달된 파일)이 지정되면 해당 텍스트/데이터 영역 원본이 업데이트되었습니다. 그러나 최종 주소가 적절하게 조정되지 않아 대상 장치의 메모리 범위를 초과하는 영역이 발생할 수 있습니다.
  • 과도하게 속성이 부여된 함수로 인한 충돌(XC8-2580) 두 개 이상의 인터럽트, 신호 또는 nmi 속성(예: __attribute__((__signal__, __interrupt__))을 사용하여 함수가 선언된 경우 컴파일러가 충돌했습니다.
  • 잘못된 ATtiny 인터럽트 코드(XC8-2465) ATtiny 장치용으로 빌드하고 최적화가 비활성화된 경우(-O0), 인터럽트 기능이 범위를 벗어난 피연산자를 트리거했을 수 있습니다.
  • 옵션이 전달되지 않음(XC8-2452) 쉼표로 구분된 여러 링커 옵션과 함께 -Wl 옵션을 사용할 때 일부 링커 옵션이 링커에 전달되지 않았습니다.
  • 프로그램 메모리를 간접적으로 읽는 중 오류(XC8-2450) 어떤 경우에는 포인터에서 프로그램 메모리로 XNUMX바이트 값을 읽을 때 컴파일러가 내부 오류(인식할 수 없는 insn )를 생성했습니다.

버전 2.32
라이브러리의 두 번째 액세스 실패(XC8-2381) 기존 라이브러리 아카이브에 액세스하기 위해 xc8-ar.exe 라이브러리 아카이버의 Windows 버전을 두 번째 호출하면 이름을 바꿀 수 없다는 오류 메시지와 함께 실패했을 수 있습니다.

버전 2.31
설명할 수 없는 컴파일러 오류(XC8-2367) 시스템 임시 디렉터리가 '.' 점을 포함하는 경로로 설정된 Windows 플랫폼에서 실행되는 경우 문자가 없으면 컴파일러가 실행되지 않았을 수 있습니다.

버전 2.30

  • 개요 이후 전역 레이블 위치가 잘못됨(XC8-2299) 절차적 추상화에 의해 제외된 어셈블리 시퀀스 내에 전역 레이블을 배치하는 손으로 작성한 어셈블리 코드가 올바르게 재배치되지 않았을 수 있습니다.
  • 편안한 충돌(XC8-2287) -mrelax 옵션을 사용하면 테일 점프 완화 최적화가 섹션 끝에 없는 ret 명령을 제거하려고 시도할 때 링커가 충돌할 수 있습니다.
  • 레이블을 값으로 최적화할 때 충돌이 발생함(XC8-2282) "레이블을 값으로" GNU C 언어 확장을 사용하는 코드로 인해 절차적 추상화 최적화가 충돌하고 범위 범위 수정 오류가 발생했을 수 있습니다.
  • 그렇지 않음 const (XC8-2271) strstr() 및 기타 함수의 프로토타입은 const -mconst-data-in-progmem 기능이 비활성화된 경우 더 이상 반환된 문자열 포인터에 비표준 한정자를 지정하지 않습니다. avrxmega3 및 avrtiny 장치에서는 이 기능이 영구적으로 활성화됩니다.
  • 이니셜라이저 손실(XC8-2269) 번역 단위에서 두 개 이상의 변수가 섹션(__section 또는 __attribute__((section)) 사용)에 배치되었고 첫 번째 변수가 XNUMX으로 초기화되었거나 이니셜라이저가 없는 경우, 동일한 섹션에 배치된 동일한 번역 단위의 다른 변수는 손실되었습니다.

버전 2.29(기능 안전 릴리스)
없음.

버전 2.20

  • 긴 명령 관련 오류(XC8-1983) AVR 대상을 사용할 때 명령줄이 매우 크고 따옴표, 백슬래시 등과 같은 특수 문자가 포함된 경우 파일을 찾을 수 없다는 오류로 인해 컴파일러가 중지되었을 수 있습니다.
  • 할당되지 않은 rodata 섹션(XC8-1920) AVR 링커가 avrxmega3 및 avrtiny 아키텍처용으로 빌드할 때 사용자 지정 rodata 섹션에 대한 메모리를 할당하지 못하여 메모리 중첩 오류가 발생할 수 있습니다.

버전 2.19(기능 안전 릴리스)
없음.

버전 2.10

  • 재배치 실패(XC8-1891) 가장 적합한 할당자는 링커 완화 후 섹션 사이에 메모리 '구멍'을 남겨 두는 것입니다. 메모리 조각화 외에도 PC 기준 점프 또는 호출이 범위를 벗어나는 것과 관련된 링커 재배치 오류가 발생할 가능성이 높아졌습니다.
  • 완화로 변환되지 않는 명령(XC8-1889) 완화된 경우 대상에 도달할 수 있는 점프 또는 호출 명령에 대해 링커 완화가 발생하지 않았습니다.
  • 없어진 기능(XC8E-388) clock_div_t 및 clock_prescale_set() 과 같은 는 ATmega324PB, ATmega328PB, ATtiny441 및 ATtiny841을 포함한 장치에 대해 정의되지 않았습니다.
  • 누락된 매크로 전처리기 매크로 _XC8_MODE_, __XC8_VERSION, __XC 및 __XC8은 컴파일러에 의해 자동으로 정의됩니다. 이제 이러한 기능을 사용할 수 있습니다.

버전 2.05

  • 내부 컴파일러 오류(XC8-1822) Windows에서 빌드할 때 코드를 최적화할 때 내부 컴파일러 오류가 생성되었을 수 있습니다.
  • RAM 오버플로가 감지되지 않음(XC8-1800, XC8-1796) 사용 가능한 RAM을 초과한 프로그램은 일부 상황에서 컴파일러에서 감지되지 않아 런타임 코드 오류가 발생했습니다.
  • 생략된 플래시 메모리(XC8-1792) avrxmega3 및 avrtiny 장치의 경우 플래시 메모리의 일부가 MPLAB X IDE에 의해 프로그래밍되지 않은 상태로 남아 있을 수 있습니다.
  • main 실행 실패(XC8-1788) 프로그램에 정의된 전역 변수가 없는 일부 상황에서는 런타임 시작 코드가 종료되지 않고 main() 함수에 도달하지 못했습니다.
  • 잘못된 메모리 정보(XC8-1787) avrxmega3 및 avrtiny 장치의 경우 avr-size 프로그램은 읽기 전용 데이터가 프로그램 메모리 대신 RAM을 소비하고 있다고 보고했습니다.
  • 잘못된 프로그램 메모리 읽기(XC8-1783) 데이터 주소 공간에 매핑된 프로그램 메모리가 있는 장치용으로 컴파일되고 PROGMEM 매크로/속성을 사용하여 개체를 정의하는 프로젝트가 잘못된 주소에서 이러한 개체를 읽었을 수 있습니다.
  • 속성 관련 내부 오류(XC8-1773) 포인터 이름과 역참조된 유형 사이에 __at() 또는 attribute() 토큰을 사용하여 포인터 객체를 정의한 경우 내부 오류가 발생했습니다.amp르, char * __at(0x800150) cp; 이제 이러한 코드가 발견되면 경고가 발행됩니다.
  • main 실행 실패(XC8-1780, XC8-1767, XC8-1754) EEPROM 변수를 사용하거나 구성 pragma를 사용하여 퓨즈를 정의하면 잘못된 데이터 초기화가 발생하거나 main( ).
  • 작은 장치의 퓨즈 오류(XC8-1778, XC8-1742) attiny4/5/9/10/20/40 장치의 헤더 파일에 퓨즈 길이가 잘못 지정되어 퓨즈를 정의하는 코드를 빌드하려고 할 때 링커 오류가 발생했습니다. .
  • 분할 오류(XC8-1777) 간헐적인 분할 오류가 수정되었습니다.
  • 어셈블러 충돌(XC8-1761) Ubuntu 18에서 컴파일러가 실행될 때 avr-as 어셈블러가 충돌했을 수 있습니다.
  • 객체가 지워지지 않음(XC8-1752) 초기화되지 않은 정적 저장 기간 객체가 런타임 시작 코드에 의해 지워지지 않았을 수 있습니다.
  • 충돌하는 장치 사양이 무시됨(XC8-1749) 여러 장치 사양 옵션이 사용되고 다른 장치를 표시할 때 컴파일러에서 오류가 생성되지 않았습니다.
  • 힙에 의한 메모리 손상(XC8-1748) __heap_start 기호가 잘못 설정되어 일반 변수가 힙에 의해 손상될 가능성이 있었습니다.
  • 링커 재배치 오류(XC8-1739) 코드에 정확히 4k 바이트 떨어진 대상이 있는 rjmp 또는 rcall이 포함된 경우 링커 재배치 오류가 발생할 수 있습니다.

버전 2.00
없음.

알려진 문제

다음은 컴파일러 작업의 제한 사항입니다. 이는 일반적인 코딩 제한 사항이거나 사용자 설명서에 포함된 정보와의 차이일 수 있습니다. 제목의 괄호 안에 있는 레이블은 추적 데이터베이스에서 해당 문제를 식별하는 것입니다. 지원팀에 문의해야 하는 경우 이 방법이 도움이 될 수 있습니다. 라벨이 없는 항목은 운영 방식을 설명하는 제한사항이며 영구적으로 유효할 가능성이 높습니다.

MPLAB X IDE 통합

  • MPLAB IDE 통합 MPLAB IDE에서 컴파일러를 사용하려면 컴파일러를 설치하기 전에 MPLAB IDE를 설치해야 합니다.
  • 배열 디버그 정보(XC8-3157) 컴파일러에서 생성된 디버그 정보는 __memx 주소 공간의 배열에 대한 개체 유형을 정확하게 전달하지 않습니다. 이렇게 하면 IDE에서 개체를 관찰할 수 없습니다.

코드 생성

  • 섹션 앵커 옵션이 있는 Segfault(XC8-3045) 가변 인수 목록이 있는 함수를 정의하고 -fsection-anchors 옵션을 사용하는 프로그램이 내부 컴파일러 오류: 세그먼트화 오류를 트리거했을 수 있습니다.
  • 동기화되지 않은 디버그 정보(XC8-2948) 링커 완화 최적화로 인해 명령이 축소되는 경우(예:amprcall 명령에 대한 호출), 섹션에서 둘 이상의 축소 작업이 발생하는 경우 주소 매핑에 대한 소스 라인이 동기화 상태로 유지되지 않을 수 있습니다. 아래 예에서amp예를 들어, 상대적인 호출로 완화되는 foo에 대한 두 개의 호출이 있습니다.
  • PA 메모리 할당 실패(XC8-2881) 절차적 추상화 최적화 프로그램을 사용할 때 프로그램이 사용 가능한 용량을 맞출 수 있어야 함에도 불구하고 코드 크기가 장치에서 사용 가능한 프로그램 메모리 양에 가까울 때 링커가 메모리 할당 오류를 보고할 수 있습니다. 공간.
  • 그다지 스마트하지 않은 Smart-IO(XC8-2872) 컴파일러의 smart-io 기능은 const-data-in-progmem 기능이 비활성화되었거나 장치에 모든 기능이 있는 경우 snprintf 기능에 대해 유효하지만 차선책인 코드를 생성합니다. 플래시는 데이터 메모리에 매핑됩니다.
  • 덜 스마트한 Smart-IO(XC8-2869) 컴파일러의 smart-io 기능은 -flto 및 -fno-builtin 옵션이 모두 사용되는 경우 유효하지만 최적이 아닌 코드를 생성합니다.
  • 최적이 아닌 읽기 전용 데이터 배치(XC8-2849) 링커는 현재 APPCODE 및 APPDATA 메모리 섹션이나 메모리 맵의 [No-]Read-While-Write 구분을 인식하지 못합니다. 결과적으로 링커가 부적합한 메모리 영역에 읽기 전용 데이터를 할당할 가능성이 적습니다. const-data-in-progmem 기능이 활성화된 경우, 특히 const-data-in-config-mapped-progmem 기능도 활성화된 경우 데이터가 잘못 배치될 가능성이 높아집니다. 필요한 경우 이러한 기능을 비활성화할 수 있습니다.
  • 개체 파일 처리 순서(XC8-2863) 링커에서 개체 파일을 처리하는 순서는 절차적 추상화 최적화(-mpa 옵션) 사용에 따라 다를 수 있습니다. 이는 여러 모듈에 걸쳐 약한 기능을 정의하는 코드에만 영향을 미칩니다.
  • 절대 링커 오류(XC8-2777) RAM 시작 시 주소에서 객체가 절대화되고 초기화되지 않은 객체도 정의된 경우 링커 오류가 발생할 수 있습니다.
  • 짧은 웨이크업 ID(XC8-2775) ATA5700/2 장치의 경우 PHID0/1 레지스터는 16비트 너비가 아닌 32비트 너비로만 정의됩니다.
  • 기호 호출 시 링커 충돌(XC8-2758) 소스 코드가 –Wl,–defsym 링커 옵션을 사용하여 정의된 기호를 호출할 때 -mrelax 드라이버 옵션을 사용하면 링커가 충돌할 수 있습니다.
  • 잘못된 초기화(XC8-2679) 일부 전역/정적 바이트 크기 개체의 초기 값이 데이터 메모리에 배치되는 위치와 런타임 시 변수에 액세스되는 위치 간에 불일치가 있습니다.
  • 잘못된 간접 함수 호출(XC8-2628) 경우에 따라 구조의 일부로 저장된 함수 포인터를 통해 이루어진 함수 호출이 실패할 수 있습니다.
  • strtof는 8진수 부동 소수점에 대해 2626을 반환합니다. (XCXNUMX-XNUMX) 라이브러리 함수 strtof() et al 및 scanf() et al은 지수를 지정하지 않는 XNUMX진수 부동 소수점 숫자를 항상 XNUMX으로 변환합니다. 예를 들어amp파일: strtof(“0x1”, &endptr); 0이 아닌 1 값을 반환합니다.
  • 부정확한 스택 권고자 메시징(XC8-2542, XC8-2541) 경우에 따라 재귀 또는 사용된 불확정 스택(아마도 alloca() 사용을 통해)에 관한 스택 권고자 경고가 표시되지 않습니다.
  • 중복된 인터럽트 코드 오류(XC8-2421) 둘 이상의 인터럽트 함수에 동일한 본문이 있는 경우 컴파일러는 하나의 인터럽트 함수 호출에 대한 출력을 다른 하나에 가질 수 있습니다. 이로 인해 모든 호출 방해 레지스터가 불필요하게 저장되고 현재 인터럽트 핸들러의 에필로그가 실행되기 전에도 인터럽트가 활성화되어 코드 오류가 발생할 수 있습니다.
  • 잘못된 DFP 경로로 인한 잘못된 출력(XC8-2376) 잘못된 DFP 경로로 컴파일러가 호출되고 선택한 장치에 대한 '사양' 파일이 있는 경우 컴파일러는 누락된 장치 제품군 팩을 보고하지 않고 대신 '사양'을 선택합니다. 파일이 잘못 출력될 수 있습니다. '사양' 파일은 분산 DFP의 최신 버전이 아닐 수 있으며 내부 컴파일러 테스트에만 사용하기 위한 것입니다.
  • 메모리 겹침이 감지되지 않음(XC8-1966) 컴파일러는 __at()를 통해 주소에서 절대적으로 만들어진 객체와 __section() 지정자를 사용하고 동일한 주소에 연결된 다른 객체의 메모리 겹침을 감지하지 않습니다.
  • 라이브러리 함수 및 __memx 오류(XC8-1763) __memx 주소 공간의 인수를 사용하여 호출된 libgcc 부동 함수가 실패할 수 있습니다. 라이브러리 루틴은 일부 C 연산자에서 호출되므로 예를 들어amp파일에서 다음 코드가 영향을 받습니다. return regFloatVar > memxFloatVar;
  • 제한된 libgcc 구현(AVRTC-731) ATTiny4/5/9/10/20/40 제품의 경우 libgcc의 표준 C/Math 라이브러리 구현이 매우 제한적이거나 존재하지 않습니다.
  • 프로그램 메모리 제한(AVRTC-732) 128kb를 초과하는 프로그램 메모리 이미지는 툴체인에서 지원됩니다. 그러나 -mrelax 옵션을 사용할 때 필요한 함수 스텁을 생성하는 대신 완화 및 유용한 오류 메시지 없이 링커가 중단되는 것으로 알려진 인스턴스가 있습니다.
  • 이름 공간 제한 사항(AVRTC-733) 이름이 지정된 주소 공간은 사용자 가이드 섹션 특수 유형 한정자에 언급된 제한 사항에 따라 도구 체인에서 지원됩니다.
  • 시간대 라이브러리 함수는 GMT를 가정하고 현지 시간대를 지원하지 않으므로 localtime()은 gmtime()과 동일한 시간을 반환합니다.amp르.

문서 / 리소스

AVR MCU용 MICROCHIP XC8 C 컴파일러 버전 2.45 릴리스 노트 [PDF 파일] 지침
AVR MCU, XC8 C, XC8 C 컴파일러 버전 2.45 AVR MCU용 릴리스 노트, 컴파일러 버전 2.45 AVR MCU용 릴리스 노트, 버전 2.45 AVR MCU용 릴리스 노트, AVR MCU용 릴리스 노트, AVR MCU, AVR MCU용 노트

참고문헌

댓글을 남겨주세요

이메일 주소는 공개되지 않습니다. 필수 항목은 표시되어 있습니다. *