Ghi chú phát hành phiên bản trình biên dịch MICROCHIP XC8 C 2.45 cho AVR MCU

Thông tin sản phẩm
Trình biên dịch MPLAB XC8 C là một công cụ phần mềm được sử dụng để nhắm mục tiêu các thiết bị Microchip AVR. Nó được thiết kế để biên dịch mã C và tạo ra các tệp thực thi files cho các thiết bị này. Phiên bản trình biên dịch được đề cập trong hướng dẫn sử dụng này là 2.45, có ngày xây dựng chính thức là ngày 18 tháng 2023 năm 2.41. Phiên bản trước đó là 8, được xây dựng vào ngày 2023 tháng 8 năm 8. Trình biên dịch đi kèm với Hướng dẫn An toàn Chức năng, cung cấp thông tin bổ sung và hướng dẫn khi sử dụng trình biên dịch MPLAB XC với các ứng dụng an toàn chức năng. Sách hướng dẫn này được bao gồm trong gói tài liệu khi bạn mua giấy phép an toàn chức năng. Trình biên dịch MPLAB XCXNUMX C hỗ trợ tất cả các thiết bị MCU AVR XNUMX bit có sẵn tại thời điểm phát hành. Bạn có thể tham khảo avr_chipinfo.html file trong thư mục tài liệu của trình biên dịch để biết danh sách tất cả các thiết bị được hỗ trợ và cài đặt bit cấu hình của chúng. Có nhiều phiên bản khác nhau của trình biên dịch MPLAB XC8. Phiên bản được cấp phép (PRO) cung cấp mức độ tối ưu hóa cao hơn so với phiên bản miễn phí. Để kích hoạt trình biên dịch dưới dạng sản phẩm được cấp phép, bạn cần mua khóa kích hoạt. Tuy nhiên, phiên bản không có giấy phép có thể được sử dụng vô thời hạn mà không cần giấy phép. Đối với các ứng dụng an toàn chức năng, có sẵn trình biên dịch An toàn chức năng MPLAB XC8. Nó yêu cầu giấy phép an toàn chức năng được mua từ Microchip để kích hoạt. Sau khi được kích hoạt, tất cả các mức tối ưu hóa và tính năng trình biên dịch có thể được sử dụng. Trình biên dịch an toàn chức năng MPLAB XC cũng hỗ trợ Giấy phép máy chủ mạng. Bạn có thể tìm thấy thông tin chi tiết về các vấn đề cài đặt, kích hoạt, loại giấy phép và di chuyển trong tài liệu Cài đặt và cấp phép Trình biên dịch MPLAB XC C (DS50002059).
Hướng dẫn sử dụng sản phẩm
- Trước khi chạy phần mềm MPLAB XC8 C Compiler, hãy đọc hướng dẫn sử dụng để biết thông tin quan trọng và hướng dẫn cụ thể dành cho các thiết bị Microchip AVR.
- Nếu bạn đang sử dụng trình biên dịch cho thiết bị PIC 8 bit, hãy tham khảo Ghi chú phát hành trình biên dịch MPLAB XC8 C cho tài liệu PIC.
- Đảm bảo rằng hệ điều hành của bạn đáp ứng các yêu cầu hệ thống để chạy trình biên dịch. Các tệp nhị phân cho macOS đã được ký mã và công chứng. Máy chủ cấp phép mạng MPLAB XC có sẵn cho Microsoft Windows 10 trở lên, Ubuntu 18.04 trở lên và macOS 10.15 trở lên. Lưu ý rằng Máy chủ cấp phép mạng MPLAB XC không được thử nghiệm trên các hệ điều hành này.
- Máy chủ cấp phép mạng MPLAB XC có thể chạy trên Máy ảo của hệ điều hành được hỗ trợ bằng cách sử dụng giấy phép máy ảo cho giấy phép mạng (SW006021-VM). Tất cả các phiên bản 32-bit của Máy chủ Mạng MPLAB XC đều bị ngừng hoạt động kể từ phiên bản 3.00.
- Để kích hoạt Trình biên dịch MPLAB XC8 C dưới dạng sản phẩm được cấp phép (PRO), hãy mua khóa kích hoạt. Điều này sẽ cung cấp mức độ tối ưu hóa cao hơn so với phiên bản miễn phí. Tuy nhiên, trình biên dịch không có giấy phép có thể được vận hành vô thời hạn mà không cần giấy phép.
- Nếu bạn đang sử dụng Trình biên dịch an toàn chức năng MPLAB XC8 cho các ứng dụng an toàn chức năng thì nó phải được kích hoạt bằng giấy phép an toàn chức năng được mua từ Microchip. Trình biên dịch sẽ không hoạt động nếu không có giấy phép này. Sau khi được kích hoạt, bạn có thể chọn bất kỳ mức tối ưu hóa nào và sử dụng tất cả các tính năng của trình biên dịch. Giấy phép Máy chủ Mạng được hỗ trợ bởi bản phát hành này của Trình biên dịch An toàn Chức năng MPLAB XC.
- Để biết hướng dẫn chi tiết về cài đặt, kích hoạt và cấp phép Trình biên dịch MPLAB XC8 C, hãy tham khảo tài liệu Cài đặt và cấp phép Trình biên dịch MPLAB XC50002059 C (DSXNUMX).
- Nếu bạn đang chạy trình biên dịch theo giấy phép đánh giá, bạn sẽ nhận được cảnh báo trong quá trình biên dịch khi bạn ở trong vòng 14 ngày kể từ khi kết thúc giai đoạn đánh giá. Cảnh báo tương tự sẽ được đưa ra nếu bạn còn trong vòng 14 ngày kể từ ngày kết thúc đăng ký HPA.
Quaview
Giới thiệu
Bản phát hành trình biên dịch Microchip MPLAB® XC8 C này chứa một số tính năng mới, sửa lỗi và hỗ trợ cho các thiết bị mới.
Ngày xây dựng
Ngày xây dựng chính thức của phiên bản trình biên dịch này là ngày 18 tháng 2023 năm XNUMX.
Phiên bản trước
Phiên bản trình biên dịch MPLAB XC8 C trước đó là 2.41, được xây dựng vào ngày 8 tháng 2023 năm XNUMX.
Hướng dẫn an toàn chức năng
Sổ tay An toàn Chức năng dành cho trình biên dịch MPLAB XC có sẵn trong gói tài liệu khi bạn mua giấy phép an toàn chức năng.
Giấy phép thành phần và phiên bản
Trình biên dịch MPLAB XC8 C dành cho các công cụ MCU AVR được viết và phân phối theo Giấy phép Công cộng GNU (GPL), có nghĩa là mã nguồn của nó được phân phối miễn phí và có sẵn cho công chúng. Mã nguồn của các công cụ thuộc GNU GPL có thể được tải xuống riêng biệt với mã nguồn của Microchip. webđịa điểm. Bạn có thể đọc GNU GPL trong file được đặt tên nằm trong thư mục con của thư mục cài đặt của bạn. Một cuộc thảo luận chung về các nguyên tắc cơ bản của GPL có thể được tìm thấy ở đây. Mã hỗ trợ được cung cấp cho tiêu đề files, tập lệnh liên kết và thư viện thời gian chạy là mã độc quyền và không nằm trong GPL. Trình biên dịch này là một triển khai của GCC phiên bản 5.4.0, binutils phiên bản 2.26 và sử dụng avr-libc phiên bản 2.0.0.
Yêu cầu hệ thống
Trình biên dịch MPLAB XC8 C và phần mềm cấp phép mà nó sử dụng có sẵn cho nhiều hệ điều hành, bao gồm các phiên bản 64-bit sau: Phiên bản chuyên nghiệp của Microsoft® Windows® 10, Ubuntu® 18.04, macOS® 13.2 (Ventura) và Fedora 34. Các tệp nhị phân dành cho Windows đã được ký mã. Các tệp nhị phân cho macOS đã được ký mã và công chứng. Máy chủ cấp phép mạng MPLAB XC có sẵn cho nhiều hệ điều hành 64 bit, bao gồm Microsoft Windows 10 trở lên; Ubuntu 18.04 trở lên; hoặc macOS 10.15 trở lên. Máy chủ cũng có thể chạy trên nhiều hệ điều hành khác bao gồm Windows Server, các bản phân phối Linux, chẳng hạn như Oracle® Enterprise Linux® và Red Hat® Enterprise Linux cũng như các phiên bản cũ hơn của hệ điều hành được hỗ trợ. Tuy nhiên, MPLAB XC Network License Server chưa được thử nghiệm trên các hệ điều hành này. Máy chủ cấp phép mạng MPLAB XC có thể chạy trên Máy ảo của hệ điều hành được hỗ trợ bằng cách sử dụng giấy phép máy ảo cho giấy phép mạng (SW006021-VM). Tất cả các phiên bản 32-bit của Máy chủ Mạng MPLAB XC đều bị ngừng hoạt động kể từ phiên bản 3.00.
Thiết bị được hỗ trợ
Trình biên dịch này hỗ trợ tất cả các thiết bị AVR MCU 8 bit có sẵn tại thời điểm phát hành. Xem avr_chipinfo.html (trong thư mục tài liệu của trình biên dịch) để biết danh sách tất cả các thiết bị được hỗ trợ. Những tập tin này cũng liệt kê các cài đặt bit cấu hình cho từng thiết bị.
Phiên bản và nâng cấp giấy phép
Trình biên dịch MPLAB XC8 có thể được kích hoạt dưới dạng sản phẩm được cấp phép (PRO) hoặc không được cấp phép (Miễn phí). Bạn cần mua khóa kích hoạt để cấp phép cho trình biên dịch của mình. Giấy phép cho phép mức độ tối ưu hóa cao hơn so với sản phẩm Miễn phí. Trình biên dịch không có giấy phép có thể được vận hành vô thời hạn mà không cần giấy phép. Trình biên dịch An toàn Chức năng MPLAB XC8 phải được kích hoạt bằng giấy phép an toàn chức năng được mua từ Microchip. Trình biên dịch sẽ không hoạt động nếu không có giấy phép này. Sau khi được kích hoạt, bạn có thể chọn bất kỳ mức tối ưu hóa nào và sử dụng tất cả các tính năng của trình biên dịch. Bản phát hành này của Trình biên dịch an toàn chức năng MPLAB XC hỗ trợ Giấy phép Máy chủ Mạng. Xem tài liệu Cài đặt và cấp phép Trình biên dịch MPLAB XC C (DS50002059) để biết thông tin về các loại giấy phép và cài đặt trình biên dịch có giấy phép.
Cài đặt và kích hoạt
Xem thêm phần Các vấn đề và hạn chế di chuyển để biết thông tin quan trọng về trình quản lý giấy phép mới nhất có trong trình biên dịch này. Nếu sử dụng MPLAB IDE, hãy đảm bảo cài đặt MPLAB X IDE phiên bản 5.0 mới nhất trở lên trước khi cài đặt công cụ này. Thoát khỏi IDE trước khi cài đặt trình biên dịch. Chạy ứng dụng trình cài đặt trình biên dịch .run (Linux) hoặc .app (macOS), ví dụ XC8-1.00.11403-windows.exe và làm theo hướng dẫn trên màn hình. Thư mục cài đặt mặc định được khuyến khích. Nếu bạn đang sử dụng Linux, bạn phải cài đặt trình biên dịch bằng thiết bị đầu cuối và từ tài khoản root. Cài đặt bằng tài khoản macOS với đặc quyền của quản trị viên. Kích hoạt bây giờ được thực hiện riêng biệt để cài đặt. Xem tài liệu Trình quản lý giấy phép dành cho Trình biên dịch MPLAB® XC C (DS52059) để biết thêm thông tin. Nếu bạn chọn chạy trình biên dịch theo giấy phép đánh giá, giờ đây bạn sẽ nhận được cảnh báo trong quá trình biên dịch khi bạn ở trong vòng 14 ngày kể từ khi kết thúc giai đoạn đánh giá. Cảnh báo tương tự sẽ được đưa ra nếu bạn còn trong vòng 14 ngày kể từ ngày kết thúc đăng ký HPA. Máy chủ cấp phép mạng XC là một trình cài đặt riêng biệt và không được bao gồm trong trình cài đặt trình biên dịch dành cho một người dùng. Trình quản lý giấy phép XC hiện hỗ trợ chuyển vùng các giấy phép mạng nổi. Nhằm vào người dùng di động, tính năng này cho phép giấy phép thả nổi ngừng hoạt động trên mạng trong một khoảng thời gian ngắn. Khi sử dụng tính năng này, bạn có thể ngắt kết nối mạng mà vẫn sử dụng trình biên dịch MPLAB XC. Xem thư mục tài liệu của bản cài đặt XCLM để biết thêm về tính năng này. MPLAB X IDE bao gồm cửa sổ Giấy phép (Công cụ > Giấy phép) để quản lý chuyển vùng một cách trực quan.
Giải quyết các vấn đề cài đặt
Nếu bạn gặp khó khăn khi cài đặt trình biên dịch trong bất kỳ hệ điều hành Windows nào, hãy thử các đề xuất sau.
- Chạy cài đặt với tư cách quản trị viên.
- Đặt quyền của ứng dụng trình cài đặt thành 'Kiểm soát hoàn toàn'. (Nhấp chuột phải vào tệp, chọn Thuộc tính, tab Bảo mật, chọn người dùng, chỉnh sửa.)
- Đặt quyền của thư mục tạm thời thành 'Kiểm soát hoàn toàn'.
Để xác định vị trí của thư mục tạm thời, hãy nhập %temp% vào lệnh Chạy (phím logo Windows + R). Thao tác này sẽ mở hộp thoại trình khám phá tệp hiển thị thư mục đó và sẽ cho phép bạn xác định đường dẫn của thư mục đó.
Tài liệu biên dịch
Hướng dẫn sử dụng của trình biên dịch có thể được mở từ trang HTML mở ra trong trình duyệt của bạn khi nhấp vào nút trợ giúp màu xanh lam trong bảng điều khiển MPLAB X IDE, như được chỉ ra trong ảnh chụp màn hình.
Nếu bạn đang xây dựng cho mục tiêu AVR 8-bit, Hướng dẫn sử dụng trình biên dịch MPLAB® XC8 C cho AVR® MCU chứa thông tin về các tùy chọn trình biên dịch và các tính năng áp dụng cho kiến trúc này.
Hỗ trợ khách hàng
Bạn có thể đặt câu hỏi cho những người dùng khác của sản phẩm này trong Diễn đàn XC8. Microchip hoan nghênh các báo cáo lỗi, đề xuất hoặc nhận xét về phiên bản trình biên dịch này. Vui lòng gửi bất kỳ báo cáo lỗi hoặc yêu cầu tính năng nào qua Hệ thống hỗ trợ.
Cập nhật tài liệu
Để biết các phiên bản trực tuyến và cập nhật của tài liệu MPLAB XC8, vui lòng truy cập Tài liệu kỹ thuật trực tuyến của Microchip webđịa điểm.
Tài liệu AVR mới hoặc được cập nhật trong phiên bản này:
Không có
- Hướng dẫn di chuyển Chuỗi công cụ AVR® GNU sang MPLAB® XC8 mô tả các thay đổi đối với mã nguồn và các tùy chọn xây dựng có thể cần thiết nếu bạn quyết định di chuyển một dự án dựa trên C từ Chuỗi công cụ GNU 8 bit AVR sang Trình biên dịch Microchip MPLAB XC8 C.
- Hướng dẫn tham khảo Thư viện Tiêu chuẩn Hợp nhất Microchip mô tả hoạt động và giao diện của các chức năng được xác định bởi Thư viện Tiêu chuẩn Hợp nhất Microchip, cũng như mục đích sử dụng của các loại thư viện và macro. Một số thông tin này trước đây có trong Hướng dẫn sử dụng trình biên dịch MPLAB® XC8 C dành cho AVR® MCU. Thông tin thư viện dành riêng cho thiết bị vẫn có trong hướng dẫn biên dịch này.
- Nếu bạn mới bắt đầu với các thiết bị 8-bit và Trình biên dịch MPLAB XC8 C, thì Người dùng MPLAB® XC8
- Hướng dẫn dành cho Kỹ sư nhúng – AVR® MCU (DS50003108) có thông tin về cách thiết lập dự án trong MPLAB X IDE và viết mã cho dự án MPLAB XC8 C đầu tiên của bạn. Hướng dẫn này hiện được phân phối cùng với trình biên dịch.
- Hướng dẫn sử dụng Hexmate dành cho những người đang chạy Hexmate như một ứng dụng độc lập.
Có gì mới
Sau đây là các tính năng mục tiêu AVR mới mà trình biên dịch hiện hỗ trợ. Số phiên bản trong các tiêu đề phụ cho biết phiên bản trình biên dịch đầu tiên hỗ trợ các tính năng tiếp theo.
Phiên bản 2.45
Trình quản lý giấy phép chung (XC8-3175, XCLM-224) Phiên bản macOS của trình quản lý giấy phép được sử dụng với trình biên dịch hiện đã phổ biến, cung cấp hỗ trợ riêng cho cả máy dựa trên Intel và M1. Phiên bản Linux của trình quản lý giấy phép hiện yêu cầu ít nhất phiên bản 2.25 của glibc. Tệp nhị phân phổ quát của Mac (XC8-3168, XC8-2951) Các tệp nhị phân của trình biên dịch dành cho macOS hiện đã phổ biến, cung cấp hỗ trợ gốc cho cả máy dựa trên Intel và M1. Giảm kích thước thư viện dấu phẩy động (XC8-3112, XC8-3071) Các cải tiến đã được thực hiện đối với các hàm thư viện dấu phẩy động, bao gồm sinf() pow(), sqrt(), expf(), log1fp() và nextafterf() , giúp giảm kích thước mã cho các quy trình này. Hỗ trợ thiết bị mới Hỗ trợ hiện có sẵn cho các bộ phận AVR sau: AVR16EA28, AVR16EA32, AVR16EA48, AVR32EA28, AVR32EA32, AVR32EA48, AVR16EB14, AVR16EB20, AVR16EB28 và AVR16EB32.
Phiên bản 2.41
- Hỗ trợ bootrow (XC8-3053) Trình biên dịch sẽ đặt nội dung của bất kỳ phần nào có tiền tố .bootrow tại địa chỉ 0x860000 trong tệp HEX. Các phần này được sử dụng cho bộ nhớ BOOTROW, được thiết kế để lưu trữ khóa và thông tin bảo mật khác mà chỉ bộ tải khởi động mới có thể truy cập được.
- Loại bỏ trả về dư thừa (XC8-3048) Giờ đây, trình biên dịch sẽ loại bỏ các hướng dẫn ret dư thừa trong các hàm bằng bước nhảy đuôi khi sử dụng tập lệnh trình liên kết tùy chỉnh. Đây là cách tối ưu hóa tương tự như cách được thực hiện trước đó, nhưng hiện tại nó được thực hiện trên tất cả các phần mồ côi, ngay cả khi tập lệnh trình liên kết tùy chỉnh được sử dụng và sơ đồ phân bổ phù hợp nhất không được áp dụng.
- Thay đổi loại thời gian (XC8-2982, 2932) Loại thư viện tiêu chuẩn C99, time_t đã được thay đổi từ loại dài thành loại dài không dấu, giúp cải thiện kích thước mã trong một số hàm liên quan đến thời gian, chẳng hạn như mktime().
- Nop mới (XC8-2946, 2945) NOP() macro đã được thêm vào . Macro này chèn lệnh không hoạt động vào đầu ra.
- Cập nhật lên XCLM (XC8-2944) Trình quản lý giấy phép được sử dụng với trình biên dịch đã được cập nhật và hiện phản hồi nhanh hơn khi kiểm tra chi tiết giấy phép của trình biên dịch.
- Trampcác cuộc gọi oline (XC8-2760) Giờ đây, trình biên dịch có thể thực hiện thay thế các lệnh gọi dạng dài bằng các lệnh gọi tương đối ngắn hơn khi các dạng lệnh tương đối thường nằm ngoài phạm vi đích của chúng. Trong trường hợp này, trình biên dịch sẽ cố gắng thay thế bằng lệnh rcall thành lệnh gọi jmp sẽ 'trampoline' đến địa chỉ được yêu cầu, ví dụ:amplê:
Phiên bản 2.40
- Hỗ trợ thiết bị mới Hiện đã có hỗ trợ cho các phần AVR sau: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32 và AVR64EA48.
- Cải thiện sự trừu tượng hóa thủ tục Công cụ tối ưu hóa sự trừu tượng hóa thủ tục (PA) đã được cải tiến để có thể phác thảo mã chứa lệnh gọi hàm (gọi/rcall). Điều này sẽ chỉ diễn ra nếu ngăn xếp không được sử dụng để truyền đối số cũng như không lấy giá trị trả về từ hàm. Ngăn xếp được sử dụng khi gọi một hàm có danh sách đối số thay đổi hoặc khi gọi một hàm nhận nhiều đối số hơn số thanh ghi được chỉ định cho mục đích này. Tính năng này có thể bị tắt bằng cách sử dụng tùy chọn – mno-pa-outline-calls hoặc có thể tắt hoàn toàn tính năng trừu tượng hóa thủ tục đối với tệp đối tượng và chức năng bằng cách sử dụng -mno-pa-on-file -mno-pa-on-function, tương ứng hoặc bằng cách sử dụng thuộc tính nopa (chỉ định __nopa) một cách có chọn lọc với các hàm.
- Macro bao phủ mã Trình biên dịch hiện xác định macro __CODECOV nếu tùy chọn -mcodecov hợp lệ được chỉ định.
- Tùy chọn đặt trước bộ nhớ Trình điều khiển xc8-cc giờ đây sẽ chấp nhận tùy chọn -mreserve=space@start:end khi xây dựng cho các mục tiêu AVR. Tùy chọn này dự trữ phạm vi bộ nhớ được chỉ định trong không gian bộ nhớ dữ liệu hoặc chương trình, ngăn không cho trình liên kết điền mã hoặc đối tượng trong khu vực này.
- IO thông minh hơn Một số cải tiến đã được thực hiện đối với các chức năng Smart IO, bao gồm các chỉnh sửa chung đối với mã lõi printf, xử lý thông số chuyển đổi %n như một biến thể độc lập, liên kết trong các quy trình vararg pop theo yêu cầu, sử dụng các loại dữ liệu ngắn hơn nếu có thể để xử lý Các đối số hàm IO và tính toán mã chung trong xử lý độ rộng trường và độ chính xác. Điều này có thể giúp tiết kiệm đáng kể mã và dữ liệu cũng như tăng tốc độ thực thi của IO.
Phiên bản 2.39 (Bản phát hành an toàn chức năng)
Giấy phép Máy chủ Mạng Bản phát hành này của Trình biên dịch An toàn Chức năng MPLAB XC8 hỗ trợ Giấy phép Máy chủ Mạng.
Phiên bản 2.36
Không có.
Phiên bản 2.35
- Hỗ trợ thiết bị mới Có hỗ trợ cho các phần AVR sau: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 và AVR64DD32.
- Cải thiện chuyển đổi ngữ cảnh Tùy chọn -mcall-isr-prologues mới thay đổi cách các chức năng ngắt lưu các thanh ghi khi nhập cảnh và cách các thanh ghi đó được khôi phục khi thói quen ngắt kết thúc. Nó hoạt động theo cách tương tự như tùy chọn -mcall-prologues, nhưng chỉ ảnh hưởng đến các chức năng ngắt (ISR).
- Chuyển đổi ngữ cảnh thậm chí còn được cải thiện nhiều hơn Tùy chọn -mgas-isr-prologues mới kiểm soát mã chuyển đổi ngữ cảnh được tạo cho các quy trình dịch vụ ngắt nhỏ. Khi được bật, tính năng này sẽ yêu cầu trình biên dịch chương trình quét ISR để biết cách sử dụng thanh ghi và chỉ lưu các thanh ghi đã sử dụng này nếu được yêu cầu.
- Ánh xạ flash có thể cấu hình Một số thiết bị trong dòng AVR DA và AVR DB có SFR (ví dụ FLMAP) chỉ định phần 32k nào của bộ nhớ chương trình sẽ được ánh xạ vào bộ nhớ dữ liệu. Tùy chọn mới – mconst-data-in-config-mapped-progmem có thể được sử dụng để trình liên kết đặt tất cả dữ liệu đủ tiêu chuẩn vào một phần 32k và tự động khởi tạo thanh ghi SFR có liên quan để đảm bảo rằng dữ liệu này được ánh xạ vào không gian bộ nhớ dữ liệu , nơi nó sẽ được truy cập hiệu quả hơn.
- Thư viện tiêu chuẩn thống nhất của Microchip Tất cả các trình biên dịch MPLAB XC sẽ dùng chung Thư viện tiêu chuẩn thống nhất của Microchip, hiện có sẵn trong phiên bản MPLAB XC8 này. Hướng dẫn sử dụng trình biên dịch MPLAB® XC8 C dành cho AVR® MCU không còn bao gồm tài liệu về các chức năng tiêu chuẩn này nữa. Thông tin này hiện có thể được tìm thấy trong Hướng dẫn tham khảo thư viện tiêu chuẩn thống nhất của Microchip. Lưu ý rằng một số chức năng được xác định trước đó bởi avr-libc không còn khả dụng nữa. (Xem chức năng Thư viện.)
- IO thông minh Là một phần của thư viện hợp nhất mới, các hàm IO trong dòng printf và scanf hiện được tạo tùy chỉnh trên mỗi bản dựng, dựa trên cách sử dụng các hàm này trong chương trình. Điều này có thể làm giảm đáng kể các tài nguyên được sử dụng bởi một chương trình.
- Tùy chọn hỗ trợ IO thông minh Khi phân tích các lệnh gọi đến các hàm IO thông minh (chẳng hạn như printf() hoặc scanf(), trình biên dịch không thể luôn xác định từ chuỗi định dạng hoặc suy ra từ các đối số các chỉ định chuyển đổi mà lệnh gọi yêu cầu. Trước đây, trình biên dịch sẽ luôn thực hiện không có giả định nào và đảm bảo rằng các chức năng IO đầy đủ chức năng được liên kết với hình ảnh chương trình cuối cùng. Tùy chọn -msmart-io-format=fmt mới đã được thêm vào để người dùng có thể thông báo cho trình biên dịch về các chỉ định chuyển đổi được IO thông minh sử dụng các chức năng có cách sử dụng không rõ ràng, ngăn không cho các quy trình IO quá dài được liên kết. (Xem Tùy chọn định dạng io thông minh để biết thêm chi tiết.)
- Đặt các phần tùy chỉnh Trước đây, tùy chọn -Wl,–section-start chỉ đặt phần được chỉ định tại địa chỉ được yêu cầu khi tập lệnh liên kết xác định phần đầu ra có cùng tên. Khi trường hợp đó không xảy ra, phần này được đặt tại một địa chỉ do trình liên kết chọn và về cơ bản tùy chọn này bị bỏ qua. Bây giờ tùy chọn sẽ được áp dụng cho tất cả các phần tùy chỉnh, ngay cả khi tập lệnh liên kết không xác định phần đó. Tuy nhiên, lưu ý rằng đối với các phần tiêu chuẩn, chẳng hạn như .text, .bss hoặc .data , bộ cấp phát phù hợp nhất sẽ vẫn có toàn quyền kiểm soát vị trí của chúng và tùy chọn sẽ không có hiệu lực. Sử dụng tùy chọn -Wl,-Tsection=addr, như được mô tả trong hướng dẫn sử dụng.
Phiên bản 2.32
- Hướng dẫn ngăn xếp Có sẵn với giấy phép trình biên dịch PRO, tính năng hướng dẫn ngăn xếp của trình biên dịch có thể được sử dụng để ước tính độ sâu tối đa của bất kỳ ngăn xếp nào được chương trình sử dụng. Nó xây dựng và phân tích biểu đồ cuộc gọi của một chương trình, xác định mức sử dụng ngăn xếp của từng chức năng và tạo ra một báo cáo, từ đó có thể suy ra độ sâu của ngăn xếp mà chương trình sử dụng. Tính năng này được kích hoạt thông qua tùy chọn dòng lệnh -mchp-stack-use. Bản tóm tắt cách sử dụng ngăn xếp được in sau khi thực thi. Báo cáo ngăn xếp chi tiết có sẵn trong tệp bản đồ, bạn có thể yêu cầu báo cáo này theo cách thông thường.
- Hỗ trợ thiết bị mới Hỗ trợ có sẵn cho các bộ phận AVR sau: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 và AVR32DB48.
- Hỗ trợ thiết bị đã rút lại Hỗ trợ không còn khả dụng cho các bộ phận AVR sau: AVR16DA28, AVR16DA32 và AVR16DA48.
Phiên bản 2.31
Không có.
Phiên bản 2.30
- Tùy chọn mới để ngăn chặn việc khởi tạo dữ liệu Tùy chọn trình điều khiển -mno-data-init mới ngăn chặn việc khởi tạo dữ liệu và xóa các phần bss. Nó hoạt động bằng cách ngăn chặn đầu ra của các ký hiệu do_clear_bss trong các tệp hợp ngữ, điều này sẽ ngăn cản trình liên kết đưa các quy trình đó vào.
- Tối ưu hóa nâng cao Một số cải tiến tối ưu hóa đã được thực hiện, bao gồm loại bỏ các hướng dẫn trả về dư thừa, loại bỏ một số bước nhảy theo hướng dẫn bỏ qua nếu-bit-là, đồng thời cải thiện tính trừu tượng của thủ tục và khả năng lặp lại quy trình này.
Các tùy chọn bổ sung hiện có sẵn để kiểm soát một số tối ưu hóa này, cụ thể là -fsection-neo, cho phép thực hiện truy cập các đối tượng tĩnh liên quan đến một ký hiệu; -mpa- iterations=n , cho phép thay đổi số lần lặp trừu tượng hóa thủ tục từ mặc định là 2; và -mpa-callcost-shortcall, thực hiện trừu tượng hóa thủ tục mạnh mẽ hơn, với hy vọng rằng trình liên kết có thể giảm bớt các cuộc gọi dài. Tùy chọn cuối cùng này có thể tăng kích thước mã nếu các giả định cơ bản không được thực hiện. - Hỗ trợ thiết bị mới Hỗ trợ có sẵn cho các bộ phận AVR sau: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 và A VR128DB64.
- Hỗ trợ thiết bị đã thu gọn Hỗ trợ không còn khả dụng cho các bộ phận AVR sau: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C và ATA664251.
Phiên bản 2.29 (Bản phát hành an toàn chức năng)
- Tệp tiêu đề dành cho trình biên dịch tích hợp. Để đảm bảo rằng trình biên dịch có thể tuân theo các đặc tả ngôn ngữ như MISRA, , đã được cập nhật. Tiêu đề này chứa nguyên mẫu cho tất cả các hàm dựng sẵn, chẳng hạn như __buildin_avr_nop() và __buildin_avr_delay_cycles() . Một số phần mềm tích hợp có thể không tuân thủ MISRA; những điều này có thể được bỏ qua bằng cách thêm định nghĩa __XC_STRICT_MISRA vào dòng lệnh của trình biên dịch. Các phần dựng sẵn và các khai báo của chúng đã được cập nhật để sử dụng các loại có chiều rộng cố định.
Phiên bản 2.20
- Hỗ trợ thiết bị mới Hỗ trợ có sẵn cho các bộ phận AVR sau: ATTINY1624, ATTINY1626 và ATTINY1627.
- Phân bổ phù hợp nhất tốt hơn Công cụ phân bổ phù hợp nhất (BFA) trong trình biên dịch đã được cải thiện để các phần được phân bổ theo thứ tự cho phép tối ưu hóa tốt hơn. BFA hiện hỗ trợ không gian địa chỉ được đặt tên và xử lý khởi tạo dữ liệu tốt hơn.
- Sự trừu tượng hóa thủ tục được cải thiện Việc tối ưu hóa sự trừu tượng hóa thủ tục hiện được thực hiện trên nhiều chuỗi mã hơn. Các tình huống trước đây khi tối ưu hóa này có thể làm tăng kích thước mã đã được giải quyết bằng cách làm cho mã tối ưu hóa nhận biết được quy trình thu gom rác của trình liên kết.
- Không có AVR Assembler AVR Assembler không còn được bao gồm trong bản phân phối này.
Phiên bản 2.19 (Bản phát hành an toàn chức năng)
Không có.
Phiên bản 2.10
- Phạm vi bảo hiểm mã Bản phát hành này bao gồm một tính năng bao phủ mã tạo điều kiện thuận lợi cho việc phân tích mức độ mà mã nguồn của dự án đã được thực thi. Sử dụng tùy chọn -mcodecov=ram để kích hoạt nó. Sau khi thực thi chương trình trên phần cứng của bạn, thông tin về phạm vi mã sẽ được đối chiếu trong thiết bị và thông tin này có thể được chuyển đến và hiển thị bởi MPLAB X IDE thông qua plugin mã phạm vi. Xem tài liệu IDE để biết thông tin về plugin này.
#pragma nocodecov có thể được sử dụng để loại trừ các chức năng tiếp theo khỏi phân tích phạm vi bảo hiểm. Lý tưởng nhất là pragma nên được thêm vào đầu tệp để loại trừ toàn bộ tệp đó khỏi phân tích phạm vi. Ngoài ra, __attribute__((nocodecov)) có thể được sử dụng để loại trừ một hàm cụ thể khỏi phân tích phạm vi. - Các tệp mô tả thiết bị Một tệp thiết bị mới có tên avr_chipinfo.html nằm trong thư mục tài liệu của bản phân phối trình biên dịch. Tệp này liệt kê tất cả các thiết bị được trình biên dịch hỗ trợ. Nhấp vào tên thiết bị và nó sẽ mở ra một trang hiển thị tất cả các cặp giá trị/cài đặt bit cấu hình được phép cho thiết bị đó, với ví dụ:ampđồng nghiệp.
- Trừu tượng hóa thủ tục Tối ưu hóa trừu tượng hóa thủ tục, thay thế các khối mã hợp ngữ thông thường bằng các lệnh gọi đến bản sao được trích xuất của khối đó, đã được thêm vào trình biên dịch. Chúng được thực hiện bởi một ứng dụng riêng biệt, được trình biên dịch tự động gọi khi chọn tối ưu hóa cấp 2, 3 hoặc s. Những tối ưu hóa này làm giảm kích thước mã nhưng chúng có thể làm giảm tốc độ thực thi và khả năng gỡ lỗi của mã. Tính năng trừu tượng hóa thủ tục có thể bị tắt ở mức tối ưu hóa cao hơn bằng cách sử dụng tùy chọn -mno-pa hoặc có thể được bật ở mức tối ưu hóa thấp hơn (tùy theo giấy phép của bạn) bằng cách sử dụng -mpa. Nó có thể bị vô hiệu hóa đối với một tệp đối tượng bằng cách sử dụng -mno-pa-on-file=filename hoặc bị vô hiệu hóa đối với một chức năng bằng cách sử dụng -mno-pa-on- function=function. Bên trong mã nguồn của bạn, tính năng trừu tượng hóa thủ tục có thể bị vô hiệu hóa đối với một hàm bằng cách sử dụng __attribute__((nopa)) với định nghĩa của hàm hoặc bằng cách sử dụng __nopa, mở rộng thành __attribute__((nopa,noinline)) và do đó ngăn cản việc nội tuyến hàm diễn ra và có sự trừu tượng của mã nội tuyến.
- Hỗ trợ bit khóa trong pragma Cấu hình #pragma bây giờ có thể được sử dụng để chỉ định các bit khóa AVR cũng như các bit cấu hình khác. Kiểm tra tệp avr_chipinfo.html (đã đề cập ở trên) để biết các cặp cài đặt/giá trị sẽ sử dụng với pragma này.
- Hỗ trợ thiết bị mới Hỗ trợ có sẵn cho các phần sau: AVR28DA128, AVR64DA128, AVR32DA128 và AVR48DA128.
Phiên bản 2.05
- Nhiều bit hơn cho đồng tiền của bạn Phiên bản macOS của trình biên dịch và trình quản lý giấy phép này hiện là ứng dụng 64 bit. Điều này sẽ đảm bảo rằng trình biên dịch sẽ cài đặt và chạy mà không có cảnh báo trên các phiên bản macOS gần đây.
- Các đối tượng hằng số trong bộ nhớ chương trình Trình biên dịch giờ đây có thể đặt các đối tượng đủ tiêu chuẩn hằng số vào bộ nhớ Flash của chương trình, thay vì đặt chúng trong RAM. Trình biên dịch đã được sửa đổi để dữ liệu toàn cục đủ tiêu chuẩn hằng được lưu trữ trong bộ nhớ flash chương trình và dữ liệu này có thể được truy cập trực tiếp và gián tiếp bằng cách sử dụng các lệnh bộ nhớ chương trình thích hợp. Tính năng mới này được bật theo mặc định nhưng có thể bị tắt bằng tùy chọn -mno-const-data-in-progmem. Đối với kiến trúc avrxmega3 và avrtiny, tính năng này không bắt buộc và luôn bị tắt vì bộ nhớ chương trình được ánh xạ vào không gian địa chỉ dữ liệu cho các thiết bị này.
- Tiêu chuẩn dành cho miễn phí Các phiên bản không có giấy phép (Miễn phí) của trình biên dịch này hiện cho phép tối ưu hóa lên đến và bao gồm cả cấp độ 2. Điều này sẽ cho phép đầu ra tương tự, mặc dù không giống hệt, với những gì trước đây có thể sử dụng giấy phép Tiêu chuẩn.
- Chào mừng AVRASM2 Trình hợp ngữ AVRASM2 dành cho thiết bị 8-bit hiện được bao gồm trong trình cài đặt trình biên dịch XC8. Trình hợp ngữ này không được sử dụng bởi trình biên dịch XC8, nhưng có sẵn cho các dự án dựa trên nguồn hợp ngữ viết tay.
- Hỗ trợ thiết bị mới Hỗ trợ có sẵn cho các phần sau: ATMEGA1608, ATMEGA1609, ATMEGA808 và ATMEGA809.
Phiên bản 2.00
- Trình điều khiển cấp cao nhất Một trình điều khiển mới, được gọi là xc8-cc, hiện nằm trên trình điều khiển avr-gcc trước đó và trình điều khiển xc8 và trình điều khiển này có thể gọi trình biên dịch thích hợp dựa trên việc lựa chọn thiết bị đích. Trình điều khiển này chấp nhận các tùy chọn kiểu GCC, được dịch hoặc chuyển qua trình biên dịch đang được thực thi. Trình điều khiển này cho phép một tập hợp các tùy chọn tương tự với ngữ nghĩa tương tự được sử dụng với bất kỳ mục tiêu AVR hoặc PIC nào và do đó là cách được đề xuất để gọi trình biên dịch. Nếu được yêu cầu, trình điều khiển avr-gcc cũ có thể được gọi trực tiếp bằng cách sử dụng các tùy chọn kiểu cũ được chấp nhận trong các phiên bản trình biên dịch trước đó.
- Giao diện Common C Trình biên dịch này giờ đây có thể phù hợp với Giao diện C chung của MPLAB, cho phép chuyển mã nguồn dễ dàng hơn qua tất cả các trình biên dịch MPLAB XC. Tùy chọn -mext=cci yêu cầu tính năng này, cho phép cú pháp thay thế cho nhiều phần mở rộng ngôn ngữ.
- Trình điều khiển thủ thư mới Trình điều khiển thủ thư mới được đặt phía trên thủ thư PIC trước đó và thủ thư avr-ar AVR. Trình điều khiển này chấp nhận các tùy chọn kiểu lưu trữ GCC, được dịch hoặc chuyển qua thủ thư đang được thực thi. Trình điều khiển mới cho phép sử dụng một bộ tùy chọn tương tự với ngữ nghĩa tương tự để tạo hoặc thao tác bất kỳ tệp thư viện PIC hoặc AVR nào và do đó là cách được khuyến nghị để gọi thủ thư. Nếu được yêu cầu đối với các dự án cũ, thủ thư trước đó có thể được gọi trực tiếp bằng cách sử dụng các tùy chọn kiểu cũ mà nó đã chấp nhận trong các phiên bản trình biên dịch trước đó.
Vấn đề di chuyển
Sau đây là các tính năng hiện được trình biên dịch xử lý theo cách khác. Những thay đổi này có thể yêu cầu sửa đổi mã nguồn của bạn nếu chuyển mã sang phiên bản trình biên dịch này. Số phiên bản trong các tiêu đề phụ cho biết phiên bản trình biên dịch đầu tiên hỗ trợ các thay đổi tiếp theo.
Phiên bản 2.45
Không có.
Phiên bản 2.41
Đã xóa các hàm fma không chính xác (XC8-2913) Thư viện chuẩn C99 ( ) đã không tính toán phép cộng nhân với độ chính xác vô hạn cho một phép làm tròn đơn lẻ mà thay vào đó, các lỗi làm tròn tích lũy với mỗi thao tác. Các chức năng này đã bị xóa khỏi thư viện được cung cấp.
Phiên bản 2.40
Không có.
Phiên bản 2.39 (Bản phát hành an toàn chức năng)
Không có.
Phiên bản 2.36
Không có.
Phiên bản 2.35
- Xử lý chuỗi cơ sở (XC8-2420) Để đảm bảo tính nhất quán với các trình biên dịch XC khác, các hàm chuyển chuỗi XC8, như strtol(), v.v., sẽ không còn cố gắng chuyển đổi chuỗi đầu vào nếu cơ sở được chỉ định lớn hơn 36 và thay vào đó sẽ đặt . Tiêu chuẩn C không chỉ định hành vi của các hàm khi vượt quá giá trị cơ bản này.
- Tối ưu hóa tốc độ không phù hợp Tối ưu hóa trừu tượng hóa thủ tục đã được bật khi chọn tối ưu hóa cấp 3 (-O3). Những tối ưu hóa này làm giảm kích thước mã nhưng phải trả giá bằng tốc độ mã, do đó lẽ ra không nên thực hiện. Các dự án sử dụng mức tối ưu hóa này có thể thấy sự khác biệt về kích thước mã và tốc độ thực thi khi được xây dựng bằng bản phát hành này.
- Chức năng thư viện Mã cho nhiều chức năng thư viện C tiêu chuẩn hiện đến từ Thư viện tiêu chuẩn thống nhất của Microchip, có thể thể hiện hành vi khác trong một số trường hợp so với hành vi được cung cấp bởi thư viện avr-libc trước đây. Dành cho người yêu cũamptập tin, không còn cần thiết phải liên kết trong thư viện lprintf_flt (tùy chọn -lprintf_flt) để bật hỗ trợ IO được định dạng cho các bộ xác định định dạng float. Các tính năng IO thông minh của Thư viện tiêu chuẩn thống nhất Microchip khiến tùy chọn này trở nên dư thừa. Ngoài ra, việc sử dụng các thường trình có hậu tố _P cho các hàm chuỗi và bộ nhớ (ví dụ: strcpy_P(), v.v.) hoạt động trên các chuỗi const trong flash không còn cần thiết nữa. Các thủ tục C tiêu chuẩn (ví dụ: strcpy() sẽ hoạt động chính xác với dữ liệu đó khi tính năng const-data-in-program-memory được bật.
Phiên bản 2.32
Không có.
Phiên bản 2.31
Không có.
Phiên bản 2.30
Không có.
Phiên bản 2.29 (Bản phát hành an toàn chức năng)
Không có.
Phiên bản 2.2
Đã thay đổi bố cục DFP Trình biên dịch hiện giả định một bố cục khác được sử dụng bởi DFP (Gói dòng thiết bị). Điều này có nghĩa là một DFP cũ hơn có thể không hoạt động với bản phát hành này và các trình biên dịch cũ hơn sẽ không thể sử dụng các DFP mới nhất.
Phiên bản 2.19 (Bản phát hành an toàn chức năng)
Không có.
Phiên bản 2.10
Không có
Phiên bản 2.05
Các đối tượng hằng trong bộ nhớ chương trình Lưu ý rằng theo mặc định, các đối tượng đủ tiêu chuẩn hằng sẽ được đặt và truy cập trong bộ nhớ chương trình (như được mô tả ở đây). Điều này sẽ ảnh hưởng đến kích thước và tốc độ thực thi dự án của bạn nhưng sẽ giảm mức sử dụng RAM. Tính năng này có thể bị tắt nếu cần bằng cách sử dụng tùy chọn -mno-const-data-in-progmem.
Phiên bản 2.00
- Cầu chì cấu hình Cầu chì cấu hình thiết bị hiện có thể được lập trình bằng cách sử dụng pragma cấu hình theo sau là các cặp giá trị cài đặt để chỉ định trạng thái cầu chì, ví dụ: #pragma config WDTON = SET #pragma config BODLEVEL = BODLEVEL_4V3
- Các đối tượng và hàm tuyệt đối Bây giờ, các đối tượng và hàm có thể được đặt tại địa chỉ cụ thể trong bộ nhớ bằng cách sử dụng bộ chỉ định CCI __at(address), ví dụ:amplê:
- #bao gồm
int foobar __at(0x800100);
char __at(0x250) getID(int offset) { … }
Đối số cho bộ xác định này phải là một hằng số đại diện cho địa chỉ mà byte hoặc lệnh đầu tiên sẽ được đặt. Địa chỉ RAM được biểu thị bằng cách sử dụng độ lệch 0x800000. Kích hoạt CCI để sử dụng tính năng này.
- #bao gồm
- Cú pháp hàm ngắt mới Trình biên dịch bây giờ chấp nhận bộ xác định CCI __interrupt(num) để chỉ ra rằng các hàm C là các trình xử lý ngắt. Bộ chỉ định lấy một số ngắt, ví dụample: #include void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Các vấn đề đã được khắc phục
Sau đây là những chỉnh sửa đã được thực hiện đối với trình biên dịch. Những điều này có thể sửa các lỗi trong mã được tạo hoặc thay đổi hoạt động của trình biên dịch theo hướng dẫn của người dùng hoặc được chỉ định. Số phiên bản trong các tiêu đề phụ cho biết phiên bản trình biên dịch đầu tiên có chứa các bản sửa lỗi cho các vấn đề tiếp theo. (Các) nhãn trong ngoặc trong tiêu đề là thông tin nhận dạng của vấn đề đó trong cơ sở dữ liệu theo dõi. Những điều này có thể hữu ích nếu bạn cần liên hệ với bộ phận hỗ trợ.
Lưu ý rằng một số sự cố cụ thể của thiết bị đã được khắc phục trong Gói gia đình thiết bị (DFP) được liên kết với thiết bị. Xem Trình quản lý gói MPLAB để biết thông tin về các thay đổi được thực hiện đối với DFP và để tải xuống các gói mới nhất.
Phiên bản 2.45
- Lỗi giấy phép chuyển vùng (XCLM-235) Giấy phép chuyển vùng không hoạt động chính xác trên nền tảng Linux sử dụng phiên bản glibc muộn hơn 2.28.
- Lỗi nội bộ với mảng cấu trúc (XC8-3069) Khi các thành viên mảng đa chiều của cấu trúc được xử lý, bộ định tính không gian địa chỉ không được truyền chính xác tới mảng. Điều này dẫn đến sự không khớp trong thông tin định tính không gian địa chỉ và lỗi trình biên dịch nội bộ. Tình trạng này đã được khắc phục.
- Lỗi ghi vào các luồng chưa được khởi tạo (ML-353, XC8-3100) Nếu các luồng lỗi/đầu ra tiêu chuẩn không được thiết lập rõ ràng bằng cách sử dụng FDEV_SETUP_STREAM hoặc _init_stdout/_init_stderr thì việc cố gắng ghi vào chúng sẽ dẫn đến hành vi không xác định. Điều này cũng ảnh hưởng đến việc ghi từ các hàm stdlib, chẳng hạn như perror(). Mọi thao tác ghi vào các luồng này trước khi chúng được khởi tạo sẽ bị bỏ qua.
- Công cụ sửa đổi không được hỗ trợ (XC8-2505) Thư viện avr-libc không hỗ trợ công cụ sửa đổi * trong các công cụ xác định chuyển đổi kiểu printf, ví dụ:amptập tin “%.*f”. Điều này hiện được hỗ trợ với sự ra đời của Thư viện tiêu chuẩn thống nhất Microchip.
- Nhiều cảnh báo chưa được khởi tạo (XC8-2409) Trình biên dịch đưa ra nhiều thông báo cảnh báo giống hệt nhau khi gặp phải mảng const chưa được khởi tạo. Thông báo lẽ ra chỉ được gửi một lần, trường hợp này xảy ra hiện nay.
Phiên bản 2.41
- Sự cố về Dongle trên Ventura (XC8-3088) Dongle được sử dụng để cấp phép cho trình biên dịch có thể không được đọc đúng cách trên máy chủ macOS Ventura, dẫn đến lỗi cấp phép. Những thay đổi đối với trình quản lý giấy phép XCLM sẽ khắc phục được sự cố này.
- Chỉ báo phân bổ bộ nhớ không chính xác (XC8-2925) Cố gắng phân bổ SIZE_MAX byte (hoặc giá trị gần bằng giá trị này) của bộ nhớ bằng cách sử dụng các hàm quản lý bộ nhớ thư viện tiêu chuẩn (malloc() và cộng sự) được yêu cầu khi sử dụng triển khai phân bổ bộ nhớ động đơn giản. Một con trỏ NULL bây giờ sẽ được trả về và không được đặt thành ENOMEM trong những tình huống như vậy.
- Đã xóa các hàm fma không chính xác (XC8-2913) Thư viện chuẩn C99 các hàm fma()-family ( ) đã không tính toán phép cộng nhân với độ chính xác vô hạn cho một phép làm tròn đơn lẻ mà thay vào đó, các lỗi làm tròn tích lũy với mỗi thao tác. Các chức năng này đã bị xóa khỏi thư viện được cung cấp.
- Xử lý chuyển đổi chuỗi không tốt (XC8-2921, XC8-2652) Khi một 'chuỗi chủ đề' để chuyển đổi bằng strtod() chứa số dường như là số dấu phẩy động ở định dạng hàm mũ và có một ký tự không mong muốn sau e/E ký tự, thì nơi endptr đã được cung cấp, nó được gán một địa chỉ trỏ đến ký tự sau ký tự , trong khi lẽ ra nó phải trỏ đến chính ký tự e//E, vì địa chỉ đó chưa được chuyển đổi. Dành cho người yêu cũample, strtod(“100exx”, &ep) phải trả về 100.00 và đặt ep để trỏ đến phần “exx” của chuỗi, trong khi hàm trả về giá trị chính xác nhưng lại đặt phần “xx” của chuỗi.
Phiên bản 2.40
- Quá thoải mái (XC8-2876) Khi sử dụng tùy chọn -mrelax, trình biên dịch không phân bổ một số phần lại với nhau, dẫn đến kích thước mã ít tối ưu hơn. Điều này có thể xảy ra với mã sử dụng thư viện MUSL mới hoặc với các ký hiệu yếu.
- Tính năng ánh xạ không bị tắt như đã nêu trong cảnh báo (XC8-2875) Tính năng const-data-in-config-mapped-progmem phụ thuộc vào tính năng const-data-in-progmem được bật. Nếu tính năng const-data-in-config-mapped-progmem được bật rõ ràng bằng tùy chọn này và tính năng const-data-in-progmem bị tắt thì bước liên kết không thành công, mặc dù có thông báo cảnh báo cho biết rằng const-data-in Tính năng -config-mapped-progmem đã tự động bị tắt, điều này không hoàn toàn chính xác. Tính năng const-data-in-config-mapped-progmem hiện đã bị tắt hoàn toàn trong trường hợp này.
- DFP thay đổi để truy cập chính xác NVMCTRL (XC8-2848) Mã khởi động thời gian chạy được sử dụng bởi các thiết bị AVR64EA không tính đến việc thanh ghi NVMCTRL nằm trong Bảo vệ thay đổi cấu hình (CCP) và không thể đặt IO SFR cho trang được sử dụng bởi tính năng biên dịch const-data-in-config-mapped-progmem. Những thay đổi được thực hiện trong AVR-Ex_DFP phiên bản 2.2.55 sẽ cho phép mã khởi động thời gian chạy ghi chính xác vào sổ đăng ký này.
- Các thay đổi của DFP để tránh ánh xạ flash (XC8-2847) Giải pháp khắc phục sự cố với tính năng của thiết bị ánh xạ flash được báo cáo trong AVR128DA28/32/48/64 Silicon Errata (DS80000882) đã được triển khai. Theo mặc định, tính năng trình biên dịch const-data-in-config-mapped-progmem sẽ không được áp dụng cho các thiết bị bị ảnh hưởng và thay đổi này sẽ xuất hiện trong AVR-Dx_DFP phiên bản 2.2.160.
- Lỗi xây dựng với sinhf hoặc coshf (XC8-2834) Việc cố gắng sử dụng các hàm thư viện sinhf() hoặc coshf() đã dẫn đến lỗi liên kết, mô tả một tham chiếu không xác định. Hàm bị thiếu được tham chiếu hiện đã được đưa vào bản phân phối trình biên dịch.
- Xây dựng lỗi với nopa (XC8-2833) Sử dụng thuộc tính nopa với hàm đã có tên trình biên dịch mã được chỉ định bằng cách sử dụng thông báo lỗi đã kích hoạt __asm__() từ trình biên dịch chương trình. Sự kết hợp này là không thể.
- Lỗi hàm biến đổi với các đối số con trỏ (XC8-2755, XC8-2731) Các hàm có số lượng đối số thay đổi yêu cầu con trỏ 24-bit (loại __memx) được chuyển vào danh sách đối số biến đổi khi tính năng const-data-in-progmem được kích hoạt đã bật. Các đối số là con trỏ tới bộ nhớ dữ liệu đang được chuyển dưới dạng đối tượng 16 bit, gây ra lỗi mã khi chúng được đọc cuối cùng. Khi tính năng const-data-in-progmem được bật, tất cả các đối số con trỏ 16 bit hiện được chuyển đổi thành con trỏ 24 bit.
- Các hàm thư viện strtoxxx không thành công (XC8-2620) Khi tính năng const-data-in-progmem được bật, tham số endptr trong các hàm thư viện strtoxxx không được cập nhật đúng cách cho các đối số chuỗi nguồn không có trong bộ nhớ chương trình.
- Cảnh báo về các phiên bản không hợp lệ (XC8-2612) Trình biên dịch bây giờ sẽ phát ra lỗi nếu tính năng const-in-progmem được bật và địa chỉ của một chuỗi ký tự được chuyển rõ ràng sang không gian địa chỉ dữ liệu (bỏ qualfiier const), ví dụ:ample, (uint8_t *) “Xin chào thế giới!” . Cảnh báo sẽ được đưa ra nếu địa chỉ có thể không hợp lệ khi con trỏ dữ liệu const được chuyển rõ ràng sang không gian địa chỉ dữ liệu.
- Vị trí của các đối tượng const chưa được khởi tạo (XC8-2408) Các đối tượng dễ bay hơi chưa được khởi tạo và const const
không được đặt trong bộ nhớ chương trình trên các thiết bị ánh xạ toàn bộ hoặc một phần bộ nhớ chương trình của chúng vào không gian địa chỉ dữ liệu. Đối với các thiết bị này, các đối tượng như vậy hiện được đặt trong bộ nhớ chương trình, giúp hoạt động của chúng nhất quán với các thiết bị khác.
Phiên bản 2.39 (Bản phát hành an toàn chức năng)
Không có.
Phiên bản 2.36
Lỗi khi trì hoãn (XC8-2774) Những thay đổi nhỏ trong tối ưu hóa Chế độ miễn phí mặc định đã ngăn cản việc gấp liên tục các biểu thức toán hạng thành các hàm tích hợp độ trễ, dẫn đến việc chúng bị coi là không hằng số và gây ra lỗi: __buildin_avr_delay_cycles mong đợi một số nguyên thời gian biên dịch không thay đổi.
Phiên bản 2.35
- Phân bổ liền kề bằng __at (XC8-2653) Phân bổ liền kề nhiều vị trí đối tượng trong một phần có cùng tên và sử dụng __at() không hoạt động chính xác. Dành cho người yêu cũamplê:
const char arr1[] __attribute__((section(“.mysec”))) __at (0x500) = {0xAB, 0xCD}; const char Array2[] __attribute__((section(“.mysec”))) = {0xEF, 0xFE}; lẽ ra nên đặt mảng2 ngay sau mảng1 - Chỉ định địa chỉ bắt đầu phần (XC8-2650) Tùy chọn -Wl,–section-start đã âm thầm không thể đặt các phần tại địa chỉ bắt đầu được chỉ định. Sự cố này đã được khắc phục đối với mọi phần có tên tùy chỉnh; tuy nhiên, nó sẽ không hoạt động đối với bất kỳ phần tiêu chuẩn nào, chẳng hạn như .text hoặc .bss, những phần này phải được đặt bằng tùy chọn -Wl,-T. Trình liên kết gặp sự cố khi thư giãn (XC8-2647) Khi bật tối ưu hóa -mrelax và có các phần mã hoặc dữ liệu không vừa với bộ nhớ khả dụng, trình liên kết bị lỗi. Bây giờ, trong trường hợp như vậy, thay vào đó, các thông báo lỗi sẽ được đưa ra.
- Không có dự phòng ngược (XC8-2646) Tùy chọn –nofallback không được triển khai chính xác hoặc không được ghi lại. Giờ đây, bạn có thể chọn tùy chọn này để đảm bảo rằng trình biên dịch sẽ không quay lại cài đặt tối ưu hóa thấp hơn nếu trình biên dịch không được cấp phép và thay vào đó sẽ phát sinh lỗi.
- Tối ưu hóa tốc độ không phù hợp (XC8-2637) Tối ưu hóa trừu tượng hóa thủ tục đã được bật khi chọn tối ưu hóa cấp 3 (-O3). Những tối ưu hóa này làm giảm kích thước mã nhưng phải trả giá bằng tốc độ mã, do đó lẽ ra không nên thực hiện.
- Truy cập EEPROM kém (XC8-2629) Quy trình eeprom_read_block không hoạt động chính xác trên các thiết bị Xmega khi tùy chọn – mconst-data-in-progmem được bật (là trạng thái mặc định), dẫn đến bộ nhớ EEPROM không được đọc chính xác.
- Cấp phát bộ nhớ không hợp lệ (XC8-2593, XC8-2651) Khi tùy chọn trình liên kết -Ttext hoặc -Tdata (ví dụ:amptập tin được truyền qua bằng cách sử dụng tùy chọn trình điều khiển -Wl) được chỉ định, nguồn gốc vùng văn bản/dữ liệu tương ứng đã được cập nhật; tuy nhiên, địa chỉ cuối không được điều chỉnh tương ứng, điều này có thể dẫn đến vùng vượt quá phạm vi bộ nhớ của thiết bị mục tiêu.
- Sự cố với hàm được phân bổ quá mức (XC8-2580) Trình biên dịch bị lỗi nếu một hàm được khai báo bằng cách sử dụng nhiều thuộc tính ngắt, tín hiệu hoặc nmi, ví dụ: __attribute__((__signal__, __interrupt__)).
- Mã ngắt ATtiny không hợp lệ (XC8-2465) Khi xây dựng cho thiết bị ATtiny và tối ưu hóa bị tắt (-O0), các chức năng ngắt có thể đã kích hoạt toán hạng ngoài phạm vi
- Các tùy chọn không được chuyển qua (XC8-2452) Khi sử dụng tùy chọn -Wl với nhiều tùy chọn trình liên kết được phân tách bằng dấu phẩy, không phải tất cả các tùy chọn trình liên kết đều được chuyển đến trình liên kết.
- Lỗi gián tiếp đọc bộ nhớ chương trình (XC8-2450) Trong một số trường hợp, trình biên dịch tạo ra lỗi nội bộ (không thể nhận dạng được insn ) khi đọc giá trị hai byte từ con trỏ vào bộ nhớ chương trình
Phiên bản 2.32
Truy cập thư viện lần thứ hai không thành công (XC8-2381) Gọi phiên bản Windows của trình lưu trữ thư viện xc8-ar.exe lần thứ hai để truy cập vào kho lưu trữ thư viện hiện có có thể đã không thành công với thông báo lỗi không thể đổi tên.
Phiên bản 2.31
Lỗi trình biên dịch không giải thích được (XC8-2367) Khi chạy trên nền tảng Windows có thư mục tạm thời của hệ thống được đặt thành đường dẫn bao gồm dấu chấm '.' ký tự, trình biên dịch có thể đã không thực thi được.
Phiên bản 2.30
- Nhãn chung bị đặt sai vị trí sau khi phác thảo (XC8-2299) Mã tập hợp viết tay đặt nhãn chung trong các trình tự tập hợp được tính toán bằng cách trừu tượng hóa thủ tục có thể đã không được định vị lại chính xác.
- Sự cố thư giãn (XC8-2287) Việc sử dụng tùy chọn -mrelax có thể đã khiến trình liên kết gặp sự cố khi tối ưu hóa thư giãn bước nhảy đuôi cố gắng loại bỏ lệnh ret không nằm ở cuối phần.
- Sự cố khi tối ưu hóa nhãn dưới dạng giá trị (XC8-2282) Mã sử dụng tiện ích mở rộng ngôn ngữ GNU C “Nhãn dưới dạng giá trị” có thể đã khiến quá trình tối ưu hóa tính trừu tượng hóa thủ tục gặp sự cố, kèm theo lỗi khắc phục phạm vi kéo dài.
- Không phải vậy const (XC8-2271) Nguyên mẫu của strstr() và các hàm khác từ không còn chỉ định bộ định tính không chuẩn trên các con trỏ chuỗi được trả về khi tính năng const -mconst-data-in-progmem bị vô hiệu hóa. Lưu ý rằng với thiết bị avrxmega3 và avrtiny, tính năng này được bật vĩnh viễn.
- Mất bộ khởi tạo (XC8-2269) Khi có nhiều biến trong một đơn vị dịch được đặt trong một phần (sử dụng __section hoặc __attribute__((section)) ) và biến đầu tiên như vậy không được khởi tạo hoặc không có bộ khởi tạo, bộ khởi tạo cho các biến khác trong cùng đơn vị dịch được đặt trong cùng một phần đều bị mất.
Phiên bản 2.29 (Bản phát hành an toàn chức năng)
Không có.
Phiên bản 2.20
- Lỗi với các lệnh dài (XC8-1983) Khi sử dụng mục tiêu AVR, trình biên dịch có thể đã dừng với lỗi không tìm thấy tệp, nếu dòng lệnh quá lớn và chứa các ký tự đặc biệt như dấu ngoặc kép, dấu gạch chéo ngược, v.v.
- Phần rodata chưa được gán (XC8-1920) Trình liên kết AVR không thể gán bộ nhớ cho các phần rodata tùy chỉnh khi xây dựng cho kiến trúc avrxmega3 và avrtiny, có khả năng gây ra lỗi chồng lấp bộ nhớ
Phiên bản 2.19 (Bản phát hành an toàn chức năng)
Không có.
Phiên bản 2.10
- Lỗi tái định vị (XC8-1891) Bộ cấp phát phù hợp nhất đã để lại các 'lỗ hổng' bộ nhớ giữa các phần sau khi thư giãn trình liên kết. Ngoài việc bộ nhớ bị phân mảnh, điều này còn làm tăng khả năng xảy ra lỗi di chuyển trình liên kết liên quan đến các bước nhảy hoặc cuộc gọi liên quan đến máy tính nằm ngoài phạm vi phủ sóng.
- Các hướng dẫn không được chuyển đổi bằng cách thư giãn (XC8-1889) Thư giãn trình liên kết không xảy ra đối với các lệnh gọi hoặc nhảy có mục tiêu có thể truy cập được nếu thư giãn.
- Mất tích chức năng (XC8E-388) Một số định nghĩa từ , chẳng hạn như clock_div_t và clock_prescale_set() , không được xác định cho các thiết bị, bao gồm ATmega324PB, ATmega328PB, ATtiny441 và ATtiny841.
- Thiếu macro Các macro tiền xử lý _XC8_MODE_, __XC8_VERSION, __XC và __XC8 được trình biên dịch tự động xác định. Những thứ này hiện đã có sẵn.
Phiên bản 2.05
- Lỗi trình biên dịch nội bộ (XC8-1822) Khi xây dựng trong Windows, lỗi trình biên dịch nội bộ có thể đã được tạo ra khi tối ưu hóa mã.
- Không phát hiện thấy tràn RAM (XC8-1800, XC8-1796) Các chương trình vượt quá lượng RAM khả dụng đó không được trình biên dịch phát hiện trong một số trường hợp, dẫn đến lỗi mã thời gian chạy.
- Bộ nhớ flash bị bỏ qua (XC8-1792) Đối với các thiết bị avrxmega3 và avrtiny, các phần của bộ nhớ flash có thể đã không được MPLAB X IDE lập trình.
- Không thực thi được main (XC8-1788) Trong một số trường hợp chương trình không có biến toàn cục được xác định, mã khởi động thời gian chạy không thoát và hàm main() không bao giờ đạt được.
- Thông tin bộ nhớ không chính xác (XC8-1787) Đối với các thiết bị avrxmega3 và avrtiny, chương trình kích thước avr đã báo cáo rằng dữ liệu chỉ đọc đang tiêu thụ RAM thay vì bộ nhớ chương trình.
- Đọc bộ nhớ chương trình không chính xác (XC8-1783) Các dự án được biên dịch cho các thiết bị có bộ nhớ chương trình được ánh xạ vào không gian địa chỉ dữ liệu và xác định các đối tượng sử dụng macro/thuộc tính PROGMEM có thể đã đọc các đối tượng này từ địa chỉ sai.
- Lỗi nội bộ với các thuộc tính (XC8-1773) Đã xảy ra lỗi nội bộ nếu bạn xác định các đối tượng con trỏ bằng mã thông báo __at() hoặc attribute() ở giữa tên con trỏ và loại không được tham chiếu, ví dụ:amptập tin, char * __at(0x800150) cp; Một cảnh báo hiện được đưa ra nếu gặp phải mã đó.
- Việc không thực thi chính (XC8-1780, XC8-1767, XC8-1754) Việc sử dụng các biến EEPROM hoặc xác định các cầu chì bằng cách sử dụng pragma cấu hình có thể đã gây ra việc khởi tạo dữ liệu không chính xác và/hoặc khóa việc thực thi chương trình trong mã khởi động thời gian chạy, trước khi tiếp cận main( ).
- Lỗi cầu chì với các thiết bị nhỏ (XC8-1778, XC8-1742) Các thiết bị attiny4/5/9/10/20/40 có độ dài cầu chì không chính xác được chỉ định trong tệp tiêu đề của chúng, dẫn đến lỗi liên kết khi cố gắng xây dựng mã xác định cầu chì .
- Lỗi phân đoạn (XC8-1777) Lỗi phân đoạn không liên tục đã được sửa.
- Sự cố trình biên dịch (XC8-1761) Trình biên dịch avr-as có thể đã gặp sự cố khi trình biên dịch chạy trên Ubuntu 18.
- Các đối tượng chưa bị xóa (XC8-1752) Các đối tượng thời lượng lưu trữ tĩnh chưa được khởi tạo có thể chưa bị xóa bằng mã khởi động thời gian chạy.
- Đã bỏ qua thông số kỹ thuật thiết bị xung đột (XC8-1749) Trình biên dịch không tạo ra lỗi khi sử dụng nhiều tùy chọn thông số thiết bị và chỉ ra các thiết bị khác nhau.
- Hỏng bộ nhớ theo đống (XC8-1748) Biểu tượng __heap_start được đặt không chính xác, dẫn đến khả năng các biến thông thường bị hỏng bởi vùng nhớ heap.
- Lỗi di chuyển trình liên kết (XC8-1739) Lỗi di chuyển trình liên kết có thể đã được phát ra khi mã chứa rjmp hoặc rcall với mục tiêu cách chính xác 4k byte.
Phiên bản 2.00
Không có.
Các vấn đề đã biết
Sau đây là những hạn chế trong hoạt động của trình biên dịch. Đây có thể là những hạn chế chung về mã hóa hoặc sai lệch so với thông tin có trong hướng dẫn sử dụng. (Các) nhãn trong ngoặc trong tiêu đề là thông tin nhận dạng của vấn đề đó trong cơ sở dữ liệu theo dõi. Điều này có thể có ích nếu bạn cần liên hệ với bộ phận hỗ trợ. Những mục không có nhãn là những hạn chế mô tả cách thức hoạt động và có khả năng duy trì hiệu lực vĩnh viễn.
Tích hợp MPLAB X IDE
- Tích hợp MPLAB IDE Nếu muốn sử dụng Trình biên dịch từ MPLAB IDE thì bạn phải cài đặt MPLAB IDE trước khi cài đặt Trình biên dịch.
- Thông tin gỡ lỗi mảng (XC8-3157) Thông tin gỡ lỗi do trình biên dịch tạo ra không truyền tải chính xác loại đối tượng cho các mảng trong không gian địa chỉ __memx. Điều này sẽ ngăn cản việc quan sát đối tượng trong IDE.
Tạo mã
- Segfault với tùy chọn neo phần (XC8-3045) Chương trình xác định các hàm với danh sách đối số thay đổi và sử dụng tùy chọn -fsection-anchors có thể đã gây ra lỗi trình biên dịch nội bộ: Lỗi phân đoạn
- Thông tin gỡ lỗi không đồng bộ (XC8-2948) Khi tối ưu hóa thư giãn trình liên kết thu nhỏ hướng dẫn (ví dụ:ample gọi tới hướng dẫn rcall), ánh xạ dòng nguồn tới địa chỉ có thể không đồng bộ khi có nhiều thao tác thu gọn xảy ra trong một phần. Ở ví dụ dưới đâyample, có hai cuộc gọi đến foo cuối cùng trở nên thoải mái đối với các cuộc gọi tương đối.
- Lỗi cấp phát bộ nhớ PA (XC8-2881) Khi sử dụng trình tối ưu hóa trừu tượng hóa thủ tục, trình liên kết có thể báo cáo lỗi cấp phát bộ nhớ khi kích thước mã gần bằng dung lượng bộ nhớ chương trình có sẵn trên thiết bị, mặc dù chương trình có thể vừa với dung lượng có sẵn. không gian.
- Không thông minh lắm Smart-IO (XC8-2872) Tính năng smart-io của trình biên dịch sẽ tạo mã hợp lệ nhưng chưa tối ưu cho hàm snprintf nếu tính năng const-data-in-progmem bị tắt hoặc nếu thiết bị có tất cả các tính năng đó flash được ánh xạ vào bộ nhớ dữ liệu.
- Smart-IO thậm chí còn kém thông minh hơn (XC8-2869) Tính năng smart-io của trình biên dịch sẽ tạo ra mã hợp lệ nhưng ở mức tối ưu phụ khi cả hai tùy chọn -flto và -fno-buildin đều được sử dụng.
- Vị trí dữ liệu chỉ đọc dưới mức tối ưu (XC8-2849) Trình liên kết hiện không nhận biết được các phần bộ nhớ APPCODE và APPDATA cũng như các phân chia [Không-]Đọc-Trong khi-Ghi trong bản đồ bộ nhớ. Kết quả là có một khả năng nhỏ là trình liên kết có thể phân bổ dữ liệu chỉ đọc trong vùng bộ nhớ không phù hợp. Khả năng dữ liệu bị thất lạc sẽ tăng lên nếu tính năng const-data-in-progmem được bật, đặc biệt nếu tính năng const-data-in-config-mapped-progmem cũng được bật. Những tính năng này có thể bị vô hiệu hóa nếu cần thiết.
- Thứ tự xử lý tệp đối tượng (XC8-2863) Thứ tự mà trình liên kết sẽ xử lý các tệp đối tượng có thể khác nhau dựa trên việc sử dụng các tối ưu hóa trừu tượng hóa thủ tục (tùy chọn -mpa). Điều này sẽ chỉ ảnh hưởng đến mã xác định các hàm yếu trên nhiều mô-đun.
- Lỗi trình liên kết tuyệt đối (XC8-2777) Khi một đối tượng được đặt ở dạng tuyệt đối tại một địa chỉ khi bắt đầu RAM và các đối tượng chưa được khởi tạo cũng đã được xác định, lỗi trình liên kết có thể được kích hoạt.
- ID đánh thức ngắn (XC8-2775) Đối với thiết bị ATA5700/2, các thanh ghi PHID0/1 chỉ được xác định là rộng 16 bit, thay vì rộng 32 bit.
- Trình liên kết gặp sự cố khi gọi biểu tượng (XC8-2758) Trình liên kết có thể gặp sự cố nếu tùy chọn trình điều khiển -mrelax được sử dụng khi mã nguồn gọi biểu tượng đã được xác định bằng tùy chọn trình liên kết –Wl,–defsym.
- Khởi tạo không chính xác (XC8-2679) Có sự khác biệt giữa vị trí đặt các giá trị ban đầu cho một số đối tượng có kích thước byte chung/tĩnh trong bộ nhớ dữ liệu và vị trí các biến sẽ được truy cập khi chạy.
- Lệnh gọi hàm gián tiếp không hợp lệ (XC8-2628) Trong một số trường hợp, lệnh gọi hàm được thực hiện thông qua con trỏ hàm được lưu trữ như một phần của cấu trúc có thể không thành công.
- strtof trả về số 8 cho các số thập lục phân (XC2626-XNUMX) Các hàm thư viện strtof() et al và scanf() et al, sẽ luôn chuyển đổi một số dấu phẩy động thập lục phân không chỉ định số mũ thành XNUMX. Dành cho người yêu cũample: strtof(“0x1”, &endptr); sẽ trả về giá trị 0, không phải 1.
- Thông báo cố vấn ngăn xếp không chính xác (XC8-2542, XC8-2541) Trong một số trường hợp, cảnh báo cố vấn ngăn xếp liên quan đến đệ quy hoặc ngăn xếp không xác định được sử dụng (có thể thông qua việc sử dụng alloca()) không được phát ra.
- Lỗi với mã ngắt trùng lặp (XC8-2421) Khi có nhiều hàm ngắt có cùng phần thân, trình biên dịch có thể có đầu ra cho một hàm ngắt gọi hàm kia. Điều này sẽ dẫn đến việc tất cả các thanh ghi bị chặn cuộc gọi sẽ được lưu một cách không cần thiết và các ngắt sẽ được kích hoạt ngay cả trước khi phần kết của trình xử lý ngắt hiện tại chạy, điều này có thể dẫn đến lỗi mã.
- Đầu ra lỗi với đường dẫn DFP không hợp lệ (XC8-2376) Nếu trình biên dịch được gọi với đường dẫn DFP không hợp lệ và tệp 'spec' tồn tại cho thiết bị đã chọn thì trình biên dịch sẽ không báo cáo gói dòng thiết bị bị thiếu và thay vào đó chọn 'spec' tập tin, điều này có thể dẫn đến kết quả đầu ra không hợp lệ. Tệp 'spec' có thể không cập nhật với DFP được phân phối và chỉ nhằm mục đích sử dụng với thử nghiệm trình biên dịch nội bộ.
- Không phát hiện chồng chéo bộ nhớ (XC8-1966) Trình biên dịch không phát hiện sự chồng chéo bộ nhớ của các đối tượng được đặt tuyệt đối tại một địa chỉ (thông qua __at()) và các đối tượng khác sử dụng chỉ định __section() và được liên kết với cùng một địa chỉ.
- Lỗi với các hàm thư viện và __memx (XC8-1763) Các hàm float libgcc được gọi có đối số trong vùng địa chỉ __memx có thể bị lỗi. Lưu ý rằng các thủ tục thư viện được gọi từ một số toán tử C, ví dụ:ample, đoạn mã sau bị ảnh hưởng: return regFloatVar > memxFloatVar;
- Việc triển khai libgcc bị hạn chế (AVRTC-731) Đối với các sản phẩm ATTiny4/5/9/10/20/40, việc triển khai thư viện C / Math tiêu chuẩn trong libgcc là rất hạn chế hoặc không có.
- Giới hạn bộ nhớ chương trình (AVRTC-732) Hình ảnh bộ nhớ chương trình vượt quá 128 kb được chuỗi công cụ hỗ trợ; tuy nhiên, có những trường hợp đã biết về việc trình liên kết bị hủy bỏ mà không có sự thư giãn và không có thông báo lỗi hữu ích thay vì tạo ra các sơ khai chức năng cần thiết khi sử dụng tùy chọn -mrelax.
- Giới hạn không gian tên (AVRTC-733) Không gian địa chỉ được đặt tên được chuỗi công cụ hỗ trợ, tuân theo các giới hạn được đề cập trong phần hướng dẫn người dùng Bộ định tính loại đặc biệt.
- Múi giờ các hàm thư viện giả định GMT và không hỗ trợ múi giờ địa phương, do đó localtime() sẽ trả về cùng thời gian với gmtime() , ví dụ:amplà.
Tài liệu / Tài nguyên
![]() |
Ghi chú phát hành phiên bản trình biên dịch MICROCHIP XC8 C 2.45 cho AVR MCU [tập tin pdf] Hướng dẫn AVR MCU, XC8 C, XC8 C Phiên bản trình biên dịch 2.45 Ghi chú phát hành cho AVR MCU, Ghi chú phát hành phiên bản trình biên dịch 2.45 cho AVR MCU, Ghi chú phát hành phiên bản 2.45 cho AVR MCU, Ghi chú phát hành cho AVR MCU, Ghi chú cho AVR MCU, AVR MCU |

