MICROCHIP MPLAB XC8 C 컴파일러 소프트웨어
이 문서에는 MICROCHIP AVR 장치를 대상으로 할 때 MPLAB XC8 C 컴파일러와 관련된 중요한 정보가 포함되어 있습니다.
이 소프트웨어를 실행하기 전에 읽어 보십시오. 8비트 PIC 장치용 컴파일러를 사용하는 경우 PIC 문서에 대한 MPLAB XC8 C 컴파일러 릴리스 노트를 참조하십시오.
위에view
소개
이 Microchip MPLAB® XC8 C 컴파일러 릴리스에는 몇 가지 새로운 기능, 버그 수정 및 새로운 장치 지원이 포함되어 있습니다.
빌드 날짜
이 컴파일러 버전의 공식 빌드 날짜는 3년 2022월 XNUMX일입니다.
이전 버전
이전 MPLAB XC8 C 컴파일러 버전은 2.39년 27월 2022일에 구축된 기능 안전 컴파일러인 2.36였습니다. 이전 표준 컴파일러는 27년 2022월 XNUMX일에 구축된 버전 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비트 버전을 포함하여 다양한 운영 체제에서 사용할 수 있습니다. 우분투 10; 및 macOS 18.04. Windows용 바이너리는 코드 서명되었습니다. Mac OS용 바이너리는 코드 서명되고 공증되었습니다.
네트워크 라이선스 서버를 실행 중인 경우 컴파일러에서 지원하는 운영 체제가 있는 컴퓨터만 라이선스 서버를 호스팅하는 데 사용할 수 있습니다. xclm 버전 2.0부터는 네트워크 라이센스 서버를 Microsoft Windows Server 플랫폼에 설치할 수 있지만 라이센스 서버는 운영 체제의 서버 버전에서 실행할 필요가 없습니다.
지원되는 장치
이 컴파일러는 출시 당시 알려진 모든 8비트 AVR MCU 장치를 지원합니다. 지원되는 모든 장치 목록은 (컴파일러의 doc 디렉토리에서)를 참조하십시오. 이것들 files는 또한 각 장치에 대한 구성 비트 설정을 나열합니다.
에디션 및 라이선스 업그레이드
MPLAB XC8 컴파일러는 라이선스(PRO) 또는 라이선스가 없는(무료) 제품으로 활성화할 수 있습니다. 컴파일러에 라이선스를 부여하려면 활성화 키를 구입해야 합니다. 라이센스는 무료 제품에 비해 더 높은 수준의 최적화를 허용합니다. 라이선스가 없는 컴파일러는 라이선스 없이 무기한으로 작동할 수 있습니다.
MPLAB XC8 기능 안전 컴파일러는 Microchip에서 구입한 기능 안전 라이선스로 활성화해야 합니다. 이 라이센스 없이는 컴파일러가 작동하지 않습니다. 활성화되면 최적화 수준을 선택하고 모든 컴파일러 기능을 사용할 수 있습니다. 이 MPLAB XC Functional Safety Compiler 릴리스는 네트워크 서버 라이센스를 지원합니다.
라이센스 유형 및 라이센스가 있는 컴파일러 설치에 대한 정보는 MPLAB XC C 컴파일러 설치 및 라이센싱(DS50002059) 문서를 참조하십시오.
설치 및 활성화
이 컴파일러에 포함된 최신 라이센스 관리자에 대한 중요한 정보는 마이그레이션 문제 및 제한 사항 섹션도 참조하십시오.
MPLAB IDE를 사용하는 경우 이 도구를 설치하기 전에 최신 MPLAB X IDE 버전 5.0 이상을 설치해야 합니다. 컴파일러를 설치하기 전에 IDE를 종료하십시오. .exe(Windows), .run(Linux) 또는 앱(macOS) 컴파일러 설치 프로그램(예: XC8-1.00.11403-windows.exe)을 실행하고 화면의 지시를 따릅니다.
기본 설치 디렉터리를 권장합니다. Linux를 사용하는 경우 터미널을 사용하고 루트 계정에서 컴파일러를 설치해야 합니다. 관리자 권한이 있는 macOS 계정을 사용하여 설치합니다.
활성화는 이제 설치와 별도로 수행됩니다. 자세한 내용은 MPLAB® XC C 컴파일러용 라이센스 관리자(DS52059) 문서를 참조하십시오.
평가판 라이선스로 컴파일러를 실행하기로 선택한 경우 평가 기간 종료 후 14일 이내에 컴파일하는 동안 경고가 표시됩니다. HPA 구독 종료 후 14일 이내인 경우 동일한 경고가 발행됩니다.
XC Network License Server는 별도의 설치 프로그램이며 단일 사용자 컴파일러 설치 프로그램에 포함되어 있지 않습니다.
XC License Manager는 이제 부동 네트워크 라이센스의 로밍을 지원합니다. 모바일 사용자를 대상으로 하는 이 기능을 사용하면 유동 라이센스가 짧은 시간 동안 네트워크에서 꺼질 수 있습니다. 이 기능을 사용하면 네트워크 연결을 끊고 MPLAB XC 컴파일러를 계속 사용할 수 있습니다. 이 기능에 대한 자세한 내용은 XCLM 설치의 doc 폴더를 참조하십시오. MPLAB X IDE에는 로밍을 시각적으로 관리할 수 있는 라이선스 창(Tools > Licenses)이 포함되어 있습니다.
설치 문제 해결
Windows 운영 체제에서 컴파일러를 설치하는 데 어려움이 있는 경우 다음 제안 사항을 시도해 보십시오.
- 관리자 권한으로 설치를 실행하십시오.
- 설치 프로그램의 권한을 '모든 권한'으로 설정합니다. (오른쪽 클릭 file, 속성, 보안 탭 선택, 사용자 선택, 편집.)
- 임시 폴더의 권한을 “모든 권한!
임시 폴더의 위치를 확인하려면 실행 명령(Windows 로고 키 + R)에 %temp%를 입력합니다. 그러면 file 해당 디렉터리를 표시하는 탐색기 대화 상자를 통해 해당 폴더의 경로를 결정할 수 있습니다.
컴파일러 문서
스크린샷에 표시된 것처럼 MPLAB X IDE 대시보드에서 파란색 도움말 버튼을 클릭하면 브라우저에서 열리는 HTML 페이지에서 컴파일러의 사용자 가이드를 열 수 있습니다.
8비트 AVR 대상용으로 빌드하는 경우 AVR® MCU용 MPLAB® XC8 C 컴파일러 사용 설명서에는 이 아키텍처에 적용할 수 있는 컴파일러 옵션 및 기능에 대한 정보가 포함되어 있습니다.
고객 지원
Microchip은 이 컴파일러 버전에 관한 버그 보고서, 제안 또는 의견을 환영합니다. 지원 시스템을 통해 버그 보고서나 기능 요청을 지시하십시오.
문서 업데이트
온라인 및 최신 버전의 MPLAB XC8 문서는 Microchip의 온라인 기술 문서를 참조하십시오. web대지.
이 릴리스의 신규 또는 업데이트된 AVR 설명서:
- MUSL 저작권 고지
- MPLAB XC C 컴파일러(개정판 M) 설치 및 라이선스
- 임베디드 엔지니어를 위한 MPLAB XC8 사용 설명서 – AVR MCU(개정판 A)
- AVR MCU용 MPLAB XC8 C 컴파일러 사용 설명서(개정판 F)
- Microchip 통합 표준 라이브러리 참조 가이드(개정판 B)
Microchip 통합 표준 라이브러리 참조 가이드는 Microchip 통합 표준 라이브러리에서 정의한 기능의 동작 및 인터페이스와 라이브러리 유형 및 매크로의 용도를 설명합니다. 이 정보 중 일부는 이전에 AVR® MCU용 MPLAB® XC8 C 컴파일러 사용 설명서에 포함되어 있었습니다. 장치별 라이브러리 정보는 이 컴파일러 가이드에 계속 포함되어 있습니다.
8비트 장치와 MPLAB XC8 C 컴파일러로 막 시작하는 경우 임베디드 엔지니어를 위한 MPLAB® XC8 사용 설명서 - AVR® MCU(DS50003108)에 MPLAB X IDE에서 프로젝트를 설정하고 코드를 작성하는 방법에 대한 정보가 있습니다. 첫 번째 MPLAB XC8 C 프로젝트를 위해. 이 가이드는 이제 컴파일러와 함께 배포됩니다.
Hamate 사용자 안내서는 이 릴리스의 docs 디렉토리에 포함되었습니다. 이 가이드는 Hamate를 독립 실행형 애플리케이션으로 실행하는 사용자를 위한 것입니다.
새로운 소식
다음은 현재 컴파일러에서 지원하는 새로운 AVR 대상 기능입니다. 부제목의 버전 번호는 다음 기능을 지원하는 첫 번째 컴파일러 버전을 나타냅니다.
버전 2.40
새로운 장치 지원 이제 다음 AVR 부품에 대한 지원을 사용할 수 있습니다.
향상된 절차적 추상화 절차적 추상화(PA) 최적화 도구가 개선되어 함수 호출 명령( 호출 호출 ) )을 포함하는 코드를 요약할 수 있습니다. 이것은 스택이 인수를 전달하거나 함수에서 반환 값을 얻는 데 사용되지 않는 경우에만 발생합니다. 스택은 변수 인수 목록이 있는 함수를 호출하거나 이 용도로 지정된 레지스터보다 더 많은 인수를 사용하는 함수를 호출할 때 사용됩니다. 이 기능은 monk-pa-outline-calls 옵션을 사용하여 비활성화하거나 객체에 대해 절차적 추상화를 완전히 비활성화할 수 있습니다. file 또는 -monk-pa-on-을 사용하여 기능file 및 -mo.-pa-on-function 각각 또는 nipa 속성( nipa 지정자)을 함수와 함께 선택적으로 사용
코드 검사 매크로 유효한 mcodecov 옵션이 지정된 경우 컴파일러는 이제 매크로 __CODECOV를 정의합니다.
메모리 예약 옵션 이제 xc8-cc 드라이버는 AVR 대상용으로 빌드할 때 -mreserve=space@start: end 옵션을 허용합니다. 이 옵션은 데이터 또는 프로그램 메모리 공간에 지정된 메모리 범위를 예약하여 링커가 이 영역에 코드나 개체를 채우는 것을 방지합니다.
더 똑똑해진 스마트 IO printf 코어 코드에 대한 일반적인 조정, %n 변환 지정자를 독립 변형으로 처리, 요청 시 가변 인수 팝 루틴에 연결, IO 함수 인수 처리를 위해 가능한 경우 더 짧은 데이터 유형 사용을 포함하여 Smart IO 함수에 대한 몇 가지 개선 사항이 있습니다. , 필드 너비 및 정밀 처리에서 공통 코드를 팩터링합니다. 이를 통해 코드 및 데이터를 크게 절약할 수 있을 뿐만 아니라 IO 실행 속도를 높일 수 있습니다.
버전 2.39(기능 안전 릴리스)
네트워크 서버 라이선스 이 MPLAB XC8 기능 안전 컴파일러 릴리스는 네트워크 서버 라이센스를 지원합니다.
버전 2.36
없음.
버전 2.35
새로운 장치 지원 다음 AVR 부품에 대한 지원이 가능합니다: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 및 AVR64DD32.
향상된 컨텍스트 전환 새로운 -mcall-isr-prologues 옵션은 인터럽트 기능이 진입 시 레지스터를 저장하는 방법과 인터럽트 루틴이 종료될 때 해당 레지스터를 복원하는 방법을 변경합니다. -mcall-prologues 옵션과 유사한 방식으로 작동하지만 인터럽트 기능(ISR)에만 영향을 미칩니다.
더욱 향상된 컨텍스트 전환 새로운 -mgas-isr-prologues 옵션은 작은 인터럽트 서비스 루틴에 대해 생성된 컨텍스트 itch 코드를 제어합니다. 이 기능을 활성화하면 어셈블러가 레지스터 사용을 위해 ISR을 스캔하고 필요한 경우에만 이러한 사용된 레지스터를 저장하게 됩니다.
구성 가능한 플래시 매핑 AVR DA 및 AVR DB 제품군의 일부 장치에는 데이터 메모리에 매핑될 프로그램 메모리의 32k 섹션을 지정하는 SFR(예: FLMAP)이 있습니다. 새로운 - mconst-data-in-config-mapped-proem 옵션을 사용하여 링커가 모든 cons 한정 데이터를 하나의 32k 섹션에 배치하고 관련 SFR 레지스터를 자동으로 초기화하여 이 데이터가 데이터 메모리 공간에 매핑되도록 할 수 있습니다. , 보다 효과적으로 액세스할 수 있습니다.
Microchip 통합 표준 라이브러리 모든 MPLAB XC 컴파일러는 이번 MPLAB XC8 릴리스에서 사용할 수 있는 Microchip 통합 표준 라이브러리를 공유합니다. MPLAB® XC8 C 컴파일러 사용 설명서/또는 AVR® MCU에는 더 이상 이러한 표준 기능에 대한 설명서가 포함되어 있지 않습니다. 이 정보는 이제 Microchip 통합 표준 라이브러리 참조 가이드에서 찾을 수 있습니다. avr-libc에서 이전에 정의한 일부 기능은 더 이상 사용할 수 없습니다. (라이브러 참조):'. 기능성…)
스마트 IO 새로운 통합 라이브러리의 일부로 인쇄 및 스캔 제품군의 IO 기능은 이제 이러한 기능이 프로그램에서 사용되는 방식에 따라 각 빌드에서 사용자 지정으로 생성됩니다. 이렇게 하면 프로그램에서 사용하는 리소스를 크게 줄일 수 있습니다.
스마트 IO 지원 옵션 스마트 IO 함수(예: printf() 또는 scanf())에 대한 호출을 분석할 때 컴파일러는 항상 형식 문자열에서 결정하거나 호출에 필요한 변환 지정자를 인수에서 추론할 수 없습니다. 이전에는 컴파일러가 항상 어떤 가정도 하지 않고 완전히 작동하는 IO 기능이 최종 프로그램 이미지에 연결되도록 했습니다. 새 – msmart-io-format=fmt 옵션이 추가되어 사용자가 사용법이 모호한 스마트 IO 함수에서 사용하는 변환 지정자를 사용자가 대신 알릴 수 있어 과도하게 긴 IO 루틴이 연결되는 것을 방지할 수 있습니다. (자세한 내용은 smart-io-format 옵션을 참조하십시오.)
사용자 지정 섹션 배치 이전에 -Wl, –section-start 옵션은 링커 스크립트가 동일한 이름의 출력 섹션을 정의한 경우 요청된 주소에 지정된 섹션만 배치했습니다. 그렇지 않은 경우 섹션은 링커가 선택한 주소에 배치되었고 옵션은 본질적으로 무시되었습니다. 이제 링커 스크립트가 섹션을 정의하지 않더라도 모든 사용자 지정 섹션에 대해 옵션이 적용됩니다. 그러나 표준 섹션의 경우 . 텍스트, . bss 또는 . 데이터에서 최적 할당자는 여전히 배치를 완전히 제어할 수 있으며 옵션은 아무런 영향을 미치지 않습니다. 사용 설명서에 설명된 대로 -Wl, -Tsection=add 옵션을 사용합니다.
버전 2.32
스택 안내 PRO 컴파일러 라이선스와 함께 사용할 수 있는 컴파일러의 스택 안내 기능을 사용하여 프로그램에서 사용하는 모든 스택의 최대 깊이를 추정할 수 있습니다. 프로그램의 호출 그래프를 구성 및 분석하고, 각 함수의 스택 사용량을 결정하고, 프로그램에서 사용하는 스택의 깊이를 유추할 수 있는 보고서를 생성합니다. 이 기능은 -mchp-stack-usage 명령줄 옵션을 통해 활성화됩니다. 실행 후 스택 사용량 요약이 인쇄됩니다. 지도에서 자세한 스택 보고서를 사용할 수 있습니다. file, 일반적인 방법으로 요청할 수 있습니다.
새로운 장치 지원 지원 다음 AVR 부품에 사용할 수 있습니다.
철회된 장치 지원 지원 다음 AVR 부품에는 더 이상 사용할 수 없습니다: AVR16DA28, AVR16DA32 및 AVR16DA48.
버전 2.31
없음.
버전 2.30
데이터 초기화를 방지하는 새로운 옵션 새로운 -mno-data-ini t 드라이버 옵션은 데이터 초기화 및 bss 섹션 지우기를 방지합니다. 어셈블리에서 do_ copy_ data 및 do_ clear_ bss 기호의 출력을 억제하여 작동합니다. files, 그러면 링커가 해당 루틴을 포함하는 것을 방지합니다.
향상된 최적화 중복 반환 명령 제거, skip-if-bit-is 명령에 따른 일부 점프 제거, 개선된 절차 추상화 및 이 프로세스 반복 기능을 포함하여 여러 가지 최적화 개선이 이루어졌습니다.
이제 추가 옵션을 사용하여 이러한 최적화 중 일부, 특히 -f 섹션 앵커를 제어할 수 있습니다. 이를 통해 하나의 기호에 대해 정적 객체에 액세스할 수 있습니다. -mpai derations=n, 절차적 추상화 반복 횟수를 기본값 2에서 변경할 수 있습니다. -mpa- call cost- shortcall은 링커가 긴 호출을 완화할 수 있기를 바라며 보다 적극적인 절차적 추상화를 수행합니다. 이 마지막 옵션은 기본 가정이 실현되지 않는 경우 코드 크기를 증가시킬 수 있습니다.
새로운 장치 지원 다음 AVR 부품에 대한 지원이 가능합니다: AVR16DA28, AVR16DA32,
AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 및 AVR128DB64.
접힌 장치 지원 다음 AVR 부품에 대한 지원은 더 이상 제공되지 않습니다.
버전 2.29(기능 안전 릴리스)
헤더 file 컴파일러 내장용 컴파일러가 MISRA와 같은 언어 사양을 준수할 수 있도록 하기 위해 머리글 file에 의해 자동으로 포함됩니다. , 업데이트되었습니다. 이 헤더에는 _buil tin _avrnop() 및 _buil tin_ avr delay_cycles()와 같은 모든 내장 함수의 프로토타입이 포함되어 있습니다. 일부 내장 기능은 MISRA와 호환되지 않을 수 있습니다. 이는 컴파일러 명령줄에 define _Xe_ STRICT_MISRA를 추가하여 생략할 수 있습니다. 내장 및 해당 선언이 고정 너비 유형을 사용하도록 업데이트되었습니다.
버전 2.20
새로운 장치 지원 다음 AVR 부품에 대한 지원이 가능합니다: ATTINY1624, ATTINY1626 및 ATTINY1627.
더 나은 최적 할당 더 나은 최적화를 허용하는 순서로 섹션이 할당되도록 컴파일러의 BFA(최적 할당자)가 개선되었습니다. BFA는 이제 명명된 주소 공간을 지원하고 데이터 초기화를 더 잘 처리합니다.
향상된 절차적 추상화 절차적 추상화 최적화는 이제 더 많은 코드 시퀀스에서 수행됩니다. 이 최적화로 인해 코드 크기가 증가했을 수 있는 이전 상황은 최적화 코드가 링커의 가비지 수집 프로세스를 인식하도록 하여 해결되었습니다.
AVR 어셈블러 부재 AVR 어셈블러는 더 이상 이 배포판에 포함되지 않습니다.
버전 2.19(기능 안전 릴리스)
없음.
버전 2.10
코드 적용 범위 이 릴리스에는 프로젝트의 소스 코드가 실행된 범위를 쉽게 분석할 수 있는 코드 적용 범위 기능이 포함되어 있습니다. 활성화하려면 -mcodecov=ram 옵션을 사용하십시오. 하드웨어에서 프로그램을 실행한 후 장치에서 코드 커버리지 정보가 수집되고 코드 커버리지 플러그인을 통해 MPLAB X IDE로 전송되어 표시될 수 있습니다. 이 플러그인에 대한 정보는 IDE 문서를 참조하십시오. #pragma mcodecov는 커버리지 분석에서 후속 기능을 제외하는 데 사용할 수 있습니다. 이상적으로 pragma는 시작 부분에 추가되어야 합니다. file 전체를 제외하려면 file 커버리지 분석에서. 또는 속성( (mcodecov) )을 사용하여 커버리지 분석에서 특정 기능을 제외할 수 있습니다.
장치 설명 files 새로운 장치 file avr 칩인포라고 합니다. html은 컴파일러 배포판의 docs 디렉토리에 있습니다. 이것 file 컴파일러에서 지원하는 모든 장치를 나열합니다. 장치 이름을 클릭하면 해당 장치에 허용되는 모든 구성 비트 설정/값 쌍을 보여주는 페이지가 열립니다.amp레.
절차적 추상화 어셈블리 코드의 공통 블록을 해당 블록의 추출된 사본에 대한 호출로 대체하는 절차적 추상화 최적화가 컴파일러에 추가되었습니다. 이들은 레벨 2, 3 또는 최적화를 선택할 때 컴파일러에 의해 자동으로 호출되는 별도의 애플리케이션에 의해 수행됩니다. 이러한 최적화는 코드 크기를 줄이지만 실행 속도와 코드 디버깅 가능성을 줄일 수 있습니다.
절차적 추상화는 -mno-pa 옵션을 사용하여 더 높은 최적화 수준에서 비활성화하거나 -mpa를 사용하여 더 낮은 최적화 수준(라이선스에 따라)에서 활성화할 수 있습니다. 개체에 대해 비활성화할 수 있습니다. file -mno-pa-on- 사용file=filefunction= function에서 -mno-pa를 사용하여 기능에 대해 비활성화합니다.
소스 코드 내에서 함수의 정의와 함께 _attribute_((nopa))를 사용하거나 속성((nopa, noinline))으로 확장되는 _nopa를 사용하여 함수에 대해 절차적 추상화를 비활성화할 수 있으므로 함수 인라인이 발생하지 않습니다. 인라인 코드의 추상화가 있습니다.
pragma의 잠금 비트 지원 이제 #pragma config를 사용하여 AVR 잠금 비트와 기타 구성 비트를 지정할 수 있습니다. avr 칩 정보를 확인하십시오. HTML file (위에서 언급한) 이 pragma와 함께 사용할 설정/값 쌍.
새로운 장치 지원 AVR28DA128, AVR64DA128, AVR32DA128 및 AVR48DA128 부품에 대한 지원이 가능합니다.
버전 2.05
당신의 돈을 위해 더 많은 비트 이 컴파일러 및 라이선스 관리자의 macOS 버전은 이제 64비트 애플리케이션입니다. 이렇게 하면 최신 버전의 macOS에서 컴파일러가 경고 없이 설치 및 실행됩니다.
프로그램 메모리의 Const 개체 컴파일러는 이제 const 한정 개체를 RAM에 두지 않고 프로그램 플래시 메모리에 배치할 수 있습니다. const 한정 전역 데이터가 프로그램 플래시 메모리에 저장되고 적절한 프로그램 메모리 명령을 사용하여 이 데이터에 직간접적으로 액세스할 수 있도록 컴파일러가 수정되었습니다. 이 새로운 기능은 기본적으로 활성화되어 있지만 -mno-const-data-in-progmem 옵션을 사용하여 비활성화할 수 있습니다. avrxmega3 및 avrtiny 아키텍처의 경우 프로그램 메모리가 이러한 장치의 데이터 주소 공간에 매핑되기 때문에 이 기능이 필요하지 않으며 항상 비활성화됩니다.
표준 무료 이 컴파일러의 무허가(무료) 버전은 이제 레벨 2까지 최적화를 허용합니다. 이렇게 하면 동일하지는 않지만 이전에 표준 라이선스를 사용하여 가능했던 것과 유사한 출력이 허용됩니다.
환영합니다 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 라이브러리를 생성하거나 조작하는 데 사용할 유사한 시맨틱을 가진 유사한 옵션 세트를 사용할 수 있습니다. file 따라서 사서 호출에 권장되는 방법입니다. 레거시 프로젝트에 필요한 경우 이전 컴파일러 버전에서 허용된 이전 스타일 옵션을 사용하여 이전 라이브러리를 직접 호출할 수 있습니다.
마이그레이션 문제
다음은 이제 컴파일러에서 다르게 처리되는 기능입니다. 코드를 이 컴파일러 버전으로 포팅하는 경우 이러한 변경 사항은 소스 코드를 수정해야 할 수 있습니다. 부제목의 버전 번호는 후속 변경 사항을 지원하는 첫 번째 컴파일러 버전을 나타냅니다.
버전 2.40
없음.
버전 2.39(기능 안전 릴리스)
없음.
버전 2.36
없음.
버전 2.35
스트링 대 베이스 처리(XCS-2420) 다른 XC 컴파일러와의 일관성을 보장하기 위해 strtol() 등과 같은 XC8 string-to 함수는 지정된 기준이 36보다 큰 경우 더 이상 입력 문자열을 변환하려고 시도하지 않고 대신 errno를 EINVAL로 설정합니다. C 표준은 이 기본 값을 초과할 때 함수의 동작을 지정하지 않습니다.
부적절한 속도 최적화 절차적 추상화 최적화는 수준 3 최적화(-03)를 선택할 때 활성화되었습니다. 이러한 최적화는 코드 속도를 희생시키면서 코드 크기를 줄이므로 수행해서는 안 됩니다. 이 최적화 수준을 사용하는 프로젝트는 이 릴리스로 빌드할 때 코드 크기와 실행 속도의 차이를 볼 수 있습니다.
라이브러리 기능 많은 표준 C 라이브러리 기능에 대한 코드는 이제 Microchip의 통합 표준 라이브러리에서 제공되며 이전 avr-libc 라이브러리에서 제공하는 것과 비교하여 일부 상황에서 다른 동작을 나타낼 수 있습니다. 예를 들어amp파일에서 부동 형식 지정자에 대해 형식화된 IO 지원을 켜기 위해 더 이상 lprintf_flt 라이브러리(-print _flt 옵션)에 링크할 필요가 없습니다. Microchip 통합 표준 라이브러리의 스마트 IO 기능은 이 옵션을 중복시킵니다. 또한 플래시의 const 문자열에서 작동하는 문자열 및 메모리 함수(예: strcpy_P() 등 ..)에 _p 접미사 루틴을 사용할 필요가 없습니다. 표준 C 루틴(예: strcpy())은 const-data-in-program-memory 기능이 활성화된 경우 이러한 데이터로 올바르게 작동합니다.
버전 2.32
없음.
버전 2.31
없음.
버전 2.30
없음.
버전 2.29(기능 안전 릴리스)
없음.
버전 2.20
변경된 DFP 레이아웃 이제 컴파일러는 DFP(Device Family Pack)에서 사용하는 다른 레이아웃을 가정합니다. 즉, 이전 DFP는 이 릴리스에서 작동하지 않을 수 있으며 이전 컴파일러는 최신 DFP를 사용할 수 없습니다.
버전 2.19(기능 안전 릴리스)
없음.
버전 2.10
없음
버전 2.05
프로그램 메모리의 Const 객체 기본적으로 const 한정 객체는 프로그램 메모리에 배치되고 액세스됩니다(여기에 설명된 대로). 이것은 프로젝트의 크기와 실행 속도에 영향을 주지만 RAM 사용량을 줄여야 합니다. 이 기능은 필요한 경우 -mnoconst-data-in-progmem 옵션을 사용하여 비활성화할 수 있습니다.
버전 2.00
구성 퓨즈 장치 구성 퓨즈는 이제 퓨즈 상태를 지정하기 위해 설정 값 쌍이 뒤따르는 config pragma를 사용하여 프로그래밍할 수 있습니다.
#pragma config WDT0N = 설정
#pragma 구성 B0DLEVEL = B0DLEVEL_4V3
절대 객체 및 함수 객체와 함수는 이제 CCI _at(주소) 지정자를 사용하여 메모리의 특정 주소에 배치할 수 있습니다.amp르: #include int foobar at(Ox800100); char at(Ox250) get ID(int offset) { … } 이 지정자에 대한 인수는 첫 번째 바이트 또는 명령이 배치될 주소를 나타내는 상수여야 합니다. RAM 주소는 오프셋 0x800000을 사용하여 표시됩니다. 이 기능을 사용하려면 CCI를 활성화하십시오.
새로운 인터럽트 함수 구문 컴파일러는 이제 CCI 인터럽트(숫자) 지정자를 허용하여 C 함수가 인터럽트 핸들러임을 나타냅니다. 지정자는 예를 들어 인터럽트 번호를 사용합니다.amp르: #include 무효 인터럽트(SPI STC_ vect _num) spi Isr(무효) { … }
해결된 문제
다음은 컴파일러에 적용된 수정 사항입니다. 이는 생성된 코드의 버그를 수정하거나 사용자 안내서에서 의도하거나 지정한 대로 컴파일러의 작동을 변경할 수 있습니다. 부제목의 버전 번호는 다음 문제에 대한 수정 사항이 포함된 첫 번째 컴파일러 버전을 나타냅니다. 제목의 괄호로 묶인 레이블은 추적 데이터베이스에서 해당 문제를 식별합니다. 지원팀에 문의해야 하는 경우 유용할 수 있습니다.
일부 장치 관련 문제는 장치와 연결된 DFP(Device Family Pack)에서 수정되었습니다. DFP의 변경 사항에 대한 정보와 최신 팩을 다운로드하려면 MPLAB Pack Manager를 참조하십시오.
버전 2.40
너무 편안함(XCS-2876) -mrelax 옵션을 사용할 때 컴파일러가 일부 섹션을 함께 할당하지 않아 코드 크기가 최적화되지 않았습니다. 이것은 새로운 MUSL 라이브러리를 사용하는 코드나 약한 기호로 인해 발생했을 수 있습니다.
경고에 명시된 대로 매핑 기능이 비활성화되지 않음(XCS-2875) cost-data-in-config mappedprogmem 기능은 사용 가능한 cost-data-in-proem 기능에 의존합니다. 옵션을 사용하여 cost-data-ipconfig-mapped-proem 기능을 명시적으로 활성화하고 cost-data-inprogmem 기능을 비활성화한 경우 cons data-in-config-mapped- proem 기능이 자동으로 비활성화되어 완전히 정확하지 않았습니다. const-data-in-config-mapped-proem 기능은 이제 이 상황에서 완전히 비활성화됩니다.
NVMCTRL에 올바르게 액세스하도록 DFP 변경사항(XCS-2848) AVR64EA 장치에서 사용하는 런타임 시작 코드는 NVMCTRL 레지스터가 구성 변경 보호(CCP) 아래에 있고 IO SFR을 const-data-in configmapped-proem 컴파일러에서 사용하는 페이지로 설정할 수 없다는 점을 고려하지 않았습니다. 특징. AVR-Ex_DFP 버전 2.2.55의 변경 사항으로 인해 런타임 시작 코드가 이 레지스터에 올바르게 쓸 수 있습니다.
플래시 매핑을 피하기 위한 DFP 변경(XCS-2847) AVR128DA28/32/48/64 Silicon Errata(DS80000882)에서 보고된 플래시 매핑 장치 기능의 문제에 대한 해결 방법이 구현되었습니다. const-data-in-config-mapped-proem 컴파일러 기능은 영향을 받는 장치에 기본적으로 적용되지 않으며 이 변경 사항은 AVR-Ex_DFP 버전 2.2.160에 나타납니다.
sinhf 또는 coshf의 빌드 오류(XCS-2834) sinhf() 또는 coshf() 라이브러리 함수를 사용하려고 하면 정의되지 않은 참조를 설명하는 링크 오류가 발생했습니다. 참조된 누락된 함수가 이제 컴파일러 배포에 포함되었습니다.
nopa로 빌드 오류(XCS-2833) as ()를 사용하여 지정된 어셈블러 이름이 있는 함수와 함께 nopa 특성을 사용하면 어셈블러에서 오류 메시지가 트리거됩니다. 이 조합은 불가능합니다.
포인터 인수가 있는 Variadic 함수 오류(XCS-2755, XCS-2731) 가변 개수의 인수가 있는 함수는 cost-data-in-proem 기능이 활성화될 때 가변 인수 목록에 전달될 24비트(_memo 유형) 포인터를 예상합니다. 데이터 메모리에 대한 포인터인 인수는 16비트 개체로 전달되어 궁극적으로 읽을 때 코드 오류가 발생했습니다. cons data-in-proem 기능이 활성화되면 이제 모든 16비트 포인터 인수가 24비트 포인터로 변환됩니다. strtoxxx 라이브러리 함수 실패(XCS-2620) const-data-in-proem 기능이 활성화된 경우 strtoxxx 라이브러리 함수의 enter 매개변수가 프로그램 메모리에 없는 소스 문자열 인수에 대해 제대로 업데이트되지 않았습니다.
잘못된 캐스트에 대한 경고(XCS-2612) cost-in-proem 기능이 활성화되고 문자열 리터럴의 주소가 명시적으로 데이터 주소 공간으로 캐스트된 경우(const 한정자 삭제) 컴파일러는 이제 오류를 발행합니다.ample, (uint8 t *) "Hello World!". const 데이터 포인터가 명시적으로 데이터 주소 공간으로 캐스팅될 때 주소가 유효하지 않을 수 있는 경우 경고가 발생합니다.
초기화되지 않은 const 개체 배치(XCS-2408) 초기화되지 않은 const 및 const 휘발성 개체는 프로그램 메모리의 전체 또는 일부를 데이터 주소 공간에 매핑하는 장치의 프로그램 메모리에 배치되지 않았습니다. 이러한 장치의 경우 이러한 개체는 이제 프로그램 메모리에 배치되어 다른 장치와 일관된 작업을 수행합니다.
버전 2.39(기능 안전 릴리스)
없음.
버전 2.36
지연 시 오류(XCS-2774) 기본 자유 모드 최적화의 사소한 변경으로 지연 내장 함수에 대한 피연산자 표현식의 상수 폴딩이 방지되어 비접촉으로 처리되고 오류 트리거: _buil tin avr delay_ cycles expect ac omfile 시간 정수 상수.
버전 2.35
_at를 사용한 연속 할당(XCS-2653) 이름이 같고 at()을 사용하는 섹션에 있는 여러 개체 위치의 연속 할당이 올바르게 작동하지 않았습니다. 예를 들어ample: constchararrl [ ] at tri butte ((sect on(".misses"))) at (Ox50 0 ) = {Oxo , Ox CD} ; 비용 char arr2[ ] at tri butte ((section(".my s eke"))) = {Oxen, Ox FE }; aril 바로 뒤에 arr2를 배치해야 합니다.
섹션 시작 주소 지정(XCS-2650) -Wal, –section-start 옵션은 지정된 시작 주소에 섹션을 배치하는 데 자동으로 실패했습니다. 이 문제는 모든 사용자 정의 섹션에서 수정되었습니다. 그러나 와 같은 표준 섹션에서는 작동하지 않습니다. 텍스트 또는 . bss는 -Wl, -T 옵션을 사용하여 배치해야 합니다.
휴식 시 링커 충돌(XCS-2647) -relax 최적화가 활성화되고 사용 가능한 메모리에 맞지 않는 코드 또는 데이터 섹션이 있을 때 링커가 충돌했습니다. 이제 그러한 상황에서 오류 메시지가 대신 발행됩니다.
잘못된 EEPROM 액세스(XCS-2629) -monist-data-in-proem 옵션이 활성화된 경우(기본 상태) leproma _read_ 블록 루틴이 Mega 장치에서 올바르게 작동하지 않아 EEPROM 메모리가 올바르게 읽히지 않았습니다.
잘못된 메모리 할당(XCS-2593, XCS-2651) -Text 또는 -Tata 링커 옵션(예:amp-Wl 드라이버 옵션을 사용하여 전달된 파일)이 지정되고 해당 텍스트/데이터 영역 원본이 업데이트되었습니다. 그러나 그에 따라 끝 주소가 조정되지 않아 대상 장치의 메모리 범위를 초과하는 영역이 발생할 수 있습니다.
잘못된 ATtiny 인터럽트 코드(XCS-2465) Tatin 장치용으로 빌드하고 최적화가 비활성화된 경우(-00) 인터럽트 기능이 어셈블러 범위를 벗어난 피연산자 메시지를 트리거했을 수 있습니다.
전달되지 않는 옵션(XCS-2452) 쉼표로 구분된 여러 링커 옵션과 함께 -Wl 옵션을 사용할 때 일부 링커 옵션이 링커에 전달되지 않았습니다.
간접적으로 프로그램 메모리 읽기 오류(XCS-2450) 경우에 따라 프로그램 메모리에 대한 포인터에서 XNUMX바이트 값을 읽을 때 컴파일러가 내부 오류(인식할 수 없는 insn)를 생성했습니다.
버전 2.32
라이브러리의 두 번째 액세스 실패(XCS-2381) xc8-ar의 Windows 버전 호출. exe 라이브러리 아카이버가 기존 라이브러리 아카이브에 두 번째로 액세스하면 이름을 바꿀 수 없음 오류 메시지와 함께 실패했을 수 있습니다.
버전 2.31
설명할 수 없는 컴파일러 오류(XCS-2367) 점이 포함된 경로로 설정된 시스템 임시 디렉토리가 있는 Windows 플랫폼에서 실행할 때'.' 문자, 컴파일러가 실행에 실패했을 수 있습니다.
버전 2.30
아웃라이닝 후 전역 레이블이 잘못 배치됨(XCS-2299) 절차적 추상화에 의해 제외된 어셈블리 시퀀스 내에 전역 레이블을 배치하는 손으로 작성한 어셈블리 코드가 올바르게 재배치되지 않았을 수 있습니다.
편안한 충돌(XCS-2287) -merlad 옵션을 사용하면 테일 점프 완화 최적화가 섹션의 끝에 있지 않은 ret 명령을 제거하려고 시도할 때 링커가 충돌할 수 있습니다.
레이블을 값으로 최적화할 때 충돌이 발생함(XCS-2282) "Labels as values" GNU C 언어 확장을 사용하는 코드로 인해 절차적 추상화 최적화가 충돌하고 Outlined VMA range spans 수정 오류가 발생할 수 있습니다.
그렇게 불변하지 않음(XCS-2271) 시작() 및 기타 함수의 프로토타입은 다음과 같습니다. -monist-data inprogmem 기능이 비활성화된 경우 반환된 문자열 포인터에 더 이상 비표준 비용 한정자를 지정하지 않습니다. avrxmega3 및 avertin 장치에서는 이 기능이 영구적으로 활성화됩니다.
이니셜라이저 분실(XCS-2269) 번역 단위에서 둘 이상의 변수가 섹션(섹션 또는 특성((섹션)) 사용)에 배치되고 첫 번째 변수가 XNUMX으로 초기화되었거나 초기화가 없는 경우 동일한 번역 단위의 다른 변수에 대한 초기화 같은 섹션에 배치된 파일이 손실되었습니다.
버전 2.29(기능 안전 릴리스)
없음.
버전 2.20
긴 명령 오류(XCS-1983) AVR 대상을 사용할 때 컴파일러가 file 명령줄이 매우 크고 따옴표, 백슬래시 등과 같은 특수 문자가 포함된 경우 오류를 찾을 수 없습니다.
할당되지 않은 로드 데이터 섹션(XCS-1920) AVR 링커는 avrxmega3 및 avrtiny 아키텍처용으로 빌드할 때 사용자 정의 rodata 섹션에 대한 메모리를 할당하지 못하여 잠재적으로 메모리 중첩 오류를 생성합니다.
버전 2.19(기능 안전 릴리스)
없음.
버전 2.10
재배치 실패(XCS-1891) 가장 적합한 할당자는 링커 이완 후 섹션 사이에 메모리 '구멍'을 남겨두었습니다. 이는 메모리 조각화 외에도 pc 관련 점프 또는 호출이 범위를 벗어나는 것과 관련된 링커 재배치 오류가 발생할 가능성을 높였습니다.
이완으로 변환되지 않는 명령어(XCS-1889) 완화된 경우 대상에 도달할 수 있는 점프 또는 호출 명령에 대해서는 링커 완화가 발생하지 않았습니다.
없어진 기능(XCSE-388) 의 여러 정의 clock_ div_ t 및 clock_prescale_set()과 같은 ATmega324PB, ATmega328PB, ATtiny441 및 ATtiny841을 포함한 장치에 대해 정의되지 않았습니다.
누락된 매크로 전처리기 매크로_ xcs _MODE_, _xcs VERSION, _xc 및 xcs는 컴파일러에서 자동으로 정의되지 않았습니다. 이제 사용할 수 있습니다.
버전 2.05
내부 컴파일러 오류(XCS-1822) Windows에서 빌드할 때 코드를 최적화할 때 내부 컴파일러 오류가 생성되었을 수 있습니다.
RAM 오버플로가 감지되지 않음(XCS-1800, XCS-1796) 사용 가능한 RAM을 초과한 프로그램은 일부 상황에서 컴파일러에서 감지되지 않아 런타임 코드 오류가 발생했습니다.
생략된 플래시 메모리(XCS-1792) avrxmega3 및 avrtiny 장치의 경우 플래시 메모리의 일부가 MPLAB X IDE에 의해 프로그래밍되지 않은 상태로 남아 있을 수 있습니다.
기본 실행 실패(XCS-1788) 프로그램에 정의된 전역 변수가 없는 일부 상황에서 런타임 시작 코드가 종료되지 않고 main() 함수에 도달하지 못했습니다.
잘못된 메모리 정보(XCS-1787) avrxmega3 및 avrtiny 장치의 경우 avr-size 프로그램에서 읽기 전용 데이터가 프로그램 메모리 대신 RAM을 소비한다고 보고했습니다.
잘못된 프로그램 메모리 읽기(XCS-1783) 프로그램 메모리가 데이터 주소 공간에 매핑되고 PROGMEM 매크로/특성을 사용하여 개체를 정의하는 장치용으로 컴파일된 프로젝트는 잘못된 주소에서 이러한 개체를 읽었을 수 있습니다.
속성이 있는 내부 오류(XCS-1773) 다음을 사용하여 포인터 개체를 정의한 경우 내부 오류가 발생했습니다.
_at() 또는 attribute() 포인터 이름과 역참조 유형 사이의 토큰(예:amp르, 숯 *
_at(0x80015 0) CP; 이러한 코드가 발견되면 이제 경고가 발행됩니다.
메인 실행 실패 (XCS-1780, XCS-1767, XCS-1754) EEPROM 변수를 사용하거나 config pragma를 사용하여 퓨즈를 정의하면 main() 에 도달하기 전에 런타임 시작 코드에서 잘못된 데이터 초기화 및/또는 잠긴 프로그램 실행이 발생할 수 있습니다.
초소형 장치의 퓨즈 오류(XCS-1778, XCS-1742) attiny4/5/9/10/20/40 장치의 헤더에 잘못된 퓨즈 길이가 지정되었습니다. file퓨즈를 정의한 코드를 빌드하려고 할 때 링커 오류로 이어지는 s.
세분화 오류(XCS-1777) 간헐적인 세그먼테이션 오류가 수정되었습니다.
어셈블러 충돌(XCS-1761) 컴파일러가 Ubuntu 18에서 실행될 때 avr-as 어셈블러가 충돌했을 수 있습니다.
지워지지 않은 개체(XCS-1752) 초기화되지 않은 정적 저장 기간 개체는 런타임 시작 코드에 의해 지워지지 않았을 수 있습니다.
충돌하는 장치 사양이 무시됨(XCS-1749) 여러 장치 사양 옵션을 사용하고 다른 장치를 표시할 때 컴파일러에서 오류를 생성하지 않았습니다.
힙에 의한 메모리 손상(XCS-1748) heap_start 기호가 잘못 설정되어 일반 변수가 힙에 의해 손상될 가능성이 있었습니다.
링커 재배치 오류(XCS-1739) 정확히 4k 바이트 떨어져 있는 대상이 있는 rjmp 또는 rcall이 코드에 포함된 경우 링커 재배치 오류가 발생했을 수 있습니다.
버전 2.00
없음.
알려진 문제
다음은 컴파일러 작동의 제한 사항입니다. 일반적인 코딩 제한일 수 있습니다.
사용 설명서에 포함된 정보와 다른 경우. 제목의 괄호로 묶인 레이블은 추적 데이터베이스에서 해당 문제를 식별합니다. 지원팀에 문의해야 하는 경우 도움이 될 수 있습니다. 레이블이 없는 항목은 운영 방식을 설명하고 영구적으로 적용될 가능성이 있는 제한 사항입니다.
MPLAB X IDE 통합
MPLAB IDE 통합 Compiler가 MPLAB IDE에서 사용되는 경우 Compiler를 설치하기 전에 MPLAB IDE를 설치해야 합니다.
코드 생성
PA 메모리 할당 실패(XCS-2881) 절차적 추상화 최적화 프로그램을 사용하는 경우 프로그램이 사용 가능한 공간에 맞출 수 있어야 하는 경우에도 코드 크기가 장치에서 사용 가능한 프로그램 메모리 양에 근접하면 링커에서 메모리 할당 오류를 보고할 수 있습니다.
똑똑하지 않은 Smart-IO(XCS-2872) 컴파일러의 smart-io 기능은 coast-data-in-proem 기능이 비활성화되었거나 장치의 모든 플래시가 데이터 메모리에 매핑된 경우 sprint 기능에 대해 유효하지만 최적이 아닌 코드를 생성합니다.
덜 스마트한 Smart-IO(XCS-2869) 컴파일러의 smart-io 기능은 -floe 및 -fno-buil tin 옵션이 모두 사용될 때 유효하지만 차선책인 코드를 생성합니다.
최적이 아닌 읽기 전용 데이터 배치(XCS-2849) 링커는 현재 APPCODE 및 APPDATA 메모리 섹션이나 메모리 맵의 [No-]Read-While-Write 구분을 인식하지 못합니다. 결과적으로 링커가 부적합한 메모리 영역에 읽기 전용 데이터를 할당할 가능성이 적습니다. coast-data-in-pragma 기능이 활성화된 경우, 특히 coast-data-in-config-mapped-proem 기능도 활성화된 경우 데이터가 잘못 배치될 가능성이 높아집니다. 필요한 경우 이러한 기능을 비활성화할 수 있습니다.
물체 file 처리 순서(XCS-2863) 개체가 있는 순서 files는 절차적 추상화 최적화(-mpa 옵션)의 사용에 따라 달라질 수 있는 링커에 의해 처리됩니다. 이것은 여러 모듈에서 약한 기능을 정의하는 코드에만 영향을 미칩니다.
절대값의 링커 오류(XCS-2777) RAM 시작 시 주소에서 개체가 절대화되고 초기화되지 않은 개체도 정의된 경우 링커 오류가 발생할 수 있습니다.
짧은 웨이크업 ID(XCS-2775) ATA5700/2 장치의 경우 PHID0/1 레지스터는 16비트 폭이 아닌 32비트 폭으로만 정의됩니다.
기호 호출 시 링커 충돌(XCS-2758) -Wl, –defsym 링커 옵션을 사용하여 정의된 기호를 소스 코드에서 호출할 때 -merlad 드라이버 옵션을 사용하면 링커가 충돌할 수 있습니다.
잘못된 초기화(XCS-2679) 일부 글로벌/정적 바이트 크기 개체의 초기 값이 데이터 메모리에 배치되는 위치와 런타임 시 변수에 액세스되는 위치 사이에 불일치가 있습니다.
잘못 시작된 경우 비어 있음(XCS-2652) 지정된 ()로 변환할 대상 문자열에 지수 형식의 부동 소수점 숫자로 보이는 것이 포함되어 있고 e 문자 뒤에 예기치 않은 문자가 있는 경우 빈 주소(제공된 경우)는 다음 문자를 가리킵니다. e 자체가 아니라 e입니다. 예를 들어ample: 진술("hooey", 비어 있음); x 문자를 가리키는 비어 있는 결과가 됩니다.
잘못된 간접 함수 호출(XCS-2628) 경우에 따라 구조의 일부로 저장된 함수 포인터를 통해 이루어진 함수 호출이 실패할 수 있습니다.
strtof는 2626진수 부동 소수점에 대해 XNUMX을 반환합니다(XCS-XNUMX). 라이브러리 함수 strtof() 등 및 scanf() 등은 항상 지수를 지정하지 않는 XNUMX진수 부동 소수점 숫자를 다음으로 변환합니다.
영. 예를 들어ample: 고정자("올빼미", &empty); 0이 아닌 1의 값을 반환합니다.
부정확한 스택 조언자 메시징(XCS-2542, XCS-2541) 경우에 따라 재귀 또는 사용된 불확정 스택(아마도 alloca() 사용을 통해)에 관한 스택 권고자 경고가 내보내지지 않습니다.
중복 인터럽트 코드 실패(XCS-2421) 둘 이상의 인터럽트 함수가 동일한 본문을 갖는 경우 컴파일러는 하나의 인터럽트 함수 호출에 대한 출력을 다른 함수에 가질 수 있습니다. 이로 인해 호출이 중단된 모든 레지스터가 불필요하게 저장되고 현재 인터럽트 처리기의 에필로그가 실행되기 전에도 인터럽트가 활성화되어 코드 오류가 발생할 수 있습니다.
프로그램 메모리에 없는 Const 개체(XCS-2408) avrxmega3 및 avertins 프로젝트의 경우 이상화되지 않은 const 객체는 프로그램 메모리에 배치되었다는 경고가 표시되더라도 데이터 메모리에 배치됩니다. 이것은 데이터 메모리 공간에 매핑된 프로그램 메모리가 없는 장치에는 영향을 미치지 않으며 초기화된 개체에도 영향을 미치지 않습니다.
잘못된 DFP 경로가 있는 잘못된 출력(XCS-2376) 컴파일러가 잘못된 DFP 경로 및 '사양'으로 호출된 경우 file 선택한 장치에 대해 존재하는 경우 컴파일러는 누락된 장치 제품군 팩을 보고하지 않고 대신 '사양'을 선택합니다. file그러면 잘못된 출력이 발생할 수 있습니다. '스펙' files는 배포된 DFP에서 최신 상태가 아닐 수 있으며 내부 컴파일러 테스트에만 사용하기 위한 것입니다.
감지되지 않은 메모리 중첩(XCS-1966) 컴파일러는 (at()를 통해) 주소에서 절대적으로 만들어진 개체와 섹션() 지정자를 사용하고 동일한 주소에 연결된 다른 개체의 메모리 겹침을 감지하지 않습니다.
라이브러리 기능 및 _meme 실패(XCS-1763) _memo 주소 공간에 인수가 있는 호출된 limbic float 함수는 실패할 수 있습니다. 라이브러리 루틴은 일부 C 연산자에서 호출되므로 예를 들어amp파일에서 다음 코드가 영향을 받습니다. return regFloatVar > memxFloatVar;
제한된 변연계 구현(AVRTC-731) ATTiny4/5/9/10/20/40 제품의 경우 변연계의 표준 C/수학 라이브러리 구현은 매우 제한적이거나 존재하지 않습니다.
프로그램 메모리 제한(AVRTC-732) 128kb 이상의 프로그램 메모리 이미지는 도구 체인에서 지원됩니다. 그러나 -relax 옵션을 사용할 때 필요한 함수 스텁을 생성하는 대신 완화 및 유용한 오류 메시지 없이 링커가 중단되는 알려진 인스턴스가 있습니다.
이름 공간 제한(AVRTC-733) 명명된 주소 공간은 사용자 가이드 섹션 특수 유형 한정자에 언급된 제한 사항에 따라 도구 체인에서 지원됩니다.
시간대 그만큼 라이브러리 함수는 GMT를 가정하고 현지 시간대를 지원하지 않으므로 현지 시간()은 예를 들어 gummite()와 같은 시간을 반환합니다.amp르.
고객 지원
file//응용 프로그램/microehip/xc8/v 2 .40/docs/Read me_X C 8_ for A VR. HTM
문서 / 리소스
![]() |
MICROCHIP MPLAB XC8 C 컴파일러 소프트웨어 [PDF 파일] 사용 설명서 MPLAB XC8 C, MPLAB XC8 C 컴파일러 소프트웨어, 컴파일러 소프트웨어, 소프트웨어 |