VI MẠCH - logoTrình biên dịch MPLAB XC8 C Phiên bản 2.39 Ghi chú phát hành cho AVR MCU
Hướng dẫn sử dụng

TÀI LIỆU NÀY CHỨA THÔNG TIN QUAN TRỌNG LIÊN QUAN ĐẾN MÁY TÍNH MPLAB XC8 C KHI NHẮM MỤC TIÊU THIẾT BỊ MICROCHIP AVR. VUI LÒNG ĐỌC TRƯỚC KHI CHẠY PHẦN MỀM NÀY.
XEM LƯU Ý PHÁT HÀNH MÁY TÍNH MPLAB XC8 C CHO TÀI LIỆU PIC NẾU BẠN ĐANG SỬ DỤNG MÁY TÍNH CHO THIẾT BỊ PIC 8-BIT.

Quaview

1.1. Giới thiệu
Bản phát hành trình biên dịch Microchip MPLAB® XC8 C này là một trình biên dịch an toàn chức năng, dựa trên bản phát hành v2.36 của trình biên dịch này và hiện hỗ trợ Giấy phép Máy chủ Mạng.
1.2. Ngày phát hành
Ngày phát hành chính thức của phiên bản trình biên dịch này là ngày 27 tháng 2022 năm XNUMX.
1.3. Phiên bản trước
Phiên bản trình biên dịch MPLAB XC8 C trước đó là 2.36, được phát hành vào ngày 25 tháng 2022 năm XNUMX.
1.4. 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.
1.5. Giấy phép Thành phần và Phiên bản® he MPLAB
Trình biên dịch XC8 C 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 tự do và có sẵn cho công chúng.
Mã nguồn cho các công cụ theo GNU GPL có thể được tải xuống riêng từ Microchip's webđịa điểm. Bạn có thể đọc GNU GPL trong tệp có tên nằm trong thư mục con của thư mục avr/doc cài đặt license.txt 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 các tệp tiêu đề, 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 được GPL đề cập.
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.
1.6. 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; và macOS 10.15.5. Các tệp nhị phân cho Windows đã được ký mã. Các tệp nhị phân cho macOS đã được ký mã và công chứng.
Nếu bạn đang chạy máy chủ cấp phép mạng, chỉ những máy tính có hệ điều hành được trình biên dịch hỗ trợ mới có thể được sử dụng để lưu trữ máy chủ cấp phép. Kể từ phiên bản xclm 2.0, máy chủ cấp phép mạng có thể được cài đặt trên nền tảng Microsoft Windows Server, nhưng máy chủ cấp phép không cần chạy trên phiên bản máy chủ của hệ điều hành.
1.7. 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 biết đến tại thời điểm phát hành. Xem (trong trình biên dịch avr_chipinfo.html thư mục) để biết danh sách tất cả các thiết bị được hỗ trợ. Các tệp này cũng liệt kê các cài đặt tài liệu bit cấu hình cho từng thiết bị.
1.8. 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 MPLAB XC Chức năng An toàn
Trình biên dịch 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.
1.9. Cài đặt và kích hoạt
Xem thêm phần Các vấn đề và Giới hạn 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 nhớ 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 cài đặt trình biên dịch (Windows), (Linux) hoặc (macOS) .exe .run .app, v.d. và làm theo hướng dẫn trên màn hình.
XC8-1.00.11403-windows.exe
Thư mục cài đặt mặc định được khuyến nghị. 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 gốc. Cài đặt bằng tài khoản macOS có quyền quản trị viên.
Kích hoạt bây giờ được thực hiện riêng để cài đặt. Xem tài liệu Trình quản lý Giấy phép 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ừ ngày kết thúc giai đoạn đánh giá. Cảnh báo tương tự cũng được đưa ra nếu bạn đang 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 một người dùng.
Trình quản lý giấy phép XC hiện hỗ trợ chuyển vùng 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 tắt mạng trong một khoảng thời gian ngắn. Sử dụng tính năng này, bạn có thể ngắt kết nối khỏi mạng và vẫn sử dụng trình biên dịch MPLAB XC của mình. 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.

1.9.1. 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 lệnh Run (phím logo Windows + R). %temp% 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 đó.

1.10. Tài liệu biên dịch

MICROCHIP MPLAB XC8 C Trình biên dịch phiên bản 2.39 Ghi chú phát hành cho MCU AVR - tài liệuHướ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 các mục tiêu AVR 8-bit, MPLAB® XC8 C Compiler User's Guide for AVR
MCU chứa thông tin về các tùy chọn và tính năng của trình biên dịch có thể áp dụng cho kiến ​​trúc này.

1.11. Hỗ trợ khách hàng
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

Để có 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 trang web trực tuyến của Microchip
Tài liệu kỹ thuật 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:
Cài đặt và cấp phép Trình biên dịch MPLAB® XC C (DS50002059) phiên bản L
Hướng dẫn Tham khảo Thư viện Tiêu chuẩn Hợp nhất của Microchip mô tả hành vi và giao diện với các chức năng được xác định bởi Thư viện Tiêu chuẩn Hợp nhất của 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 MPLA® XC8 C Compiler User!s Guide® for AVR
MCU. Thông tin thư viện dành riêng cho thiết bị vẫn có trong hướng dẫn trình biên dịch này.
Hướng dẫn sử dụng Hexmate đã được đưa vào thư mục trong phiên bản này. Hướng dẫn này dành cho những tài liệu đang chạy Hexmate như một ứng dụng độc lập.
Các phần sau đây cung cấp thông tin sửa chữa và bổ sung cho thông tin tìm thấy trong hướng dẫn người dùng đi kèm với trình biên dịch.

2.1. định dạng smart-io
Tùy chọn-msmart-io-format=fmt fmt, trong đó là một chuỗi chứa các thông số kỹ thuật chuyển đổi IO được định dạng, thông báo cho trình biên dịch rằng các thông số kỹ thuật được liệt kê được sử dụng bởi các chức năng IO thông minh.
Để giảm kích thước mã, trình biên dịch tùy chỉnh mã thư viện được liên kết với họ in và quét của các chức năng IO thông minh, dựa trên các thông số kỹ thuật chuyển đổi có trong các chuỗi định dạng được đối chiếu trên tất cả các lệnh gọi đến các chức năng này. Tính năng này hoàn toàn tự động và không thể tắt được.
Trong một số trường hợp, trình biên dịch không thể xác định thông tin sử dụng từ lệnh gọi hàm IO được định dạng. Nếu tùy chọn đã được sử dụng, thông số kỹ thuật chuyển đổi cần thiết cho các chức năng này được lấy từ chuỗi; mặt khác, trình biên dịch không đưa ra giả định nào về cách sử dụng các hàm -msmart-io-format=fmt fmt và đảm bảo rằng các hàm IO được định dạng đầy đủ chức năng được liên kết vào hình ảnh chương trình cuối cùng.
Ví dụample, hãy xem xét các cuộc gọi sau tới các chức năng IO thông minh.

vscanf(“%d:%li”, va_list1);
vprintf(“%-s%d”, va_list2);
vprintf(fmt1, va_list3);// cách sử dụng mơ hồ
vscanf(fmt2, va_list4);// cách sử dụng mơ hồ

Khi xử lý hai lệnh gọi cuối cùng, trình biên dịch không thể suy ra bất kỳ thông tin sử dụng nào từ các chuỗi định dạng cũng như các đối số. Trong những trường hợp này, tùy chọn -msmart-io-format có thể được sử dụng và có khả năng sẽ cho phép tạo các hàm I0 được định dạng tối ưu hơn, do đó giảm kích thước mã của chương trình. Đối với người yêu cũample, nếu các chuỗi định dạng được trỏ tới bởi fmtl và fmt2 chỉ sử dụng chung các chỉ định chuyển đổi “%d”, “%i” và “ %s”, thì -msmart-io-format=fmt=”%d%i%s ” tùy chọn nên được ban hành.

Chuỗi màu có thể chứa bất kỳ thông số kỹ thuật chuyển đổi hợp lệ nào, bao gồm cờ và công cụ sửa đổi (ví dụ:amptập tin “%-13. 91s”) và phải phản ánh chính xác những gì được sử dụng bởi các chức năng có cách sử dụng không rõ ràng. Không bao gồm một đặc điểm kỹ thuật trong chút đối số mà nó đã được sử dụng bởi các hàm I0 được định dạng có thể dẫn đến lỗi mã.
Nếu fmt là một chuỗi rỗng hoặc hoặc không chứa thông số kỹ thuật chuyển đổi rõ ràng, cảnh báo sẽ được đưa ra và các chức năng I0 được định dạng đầy đủ chức năng sẽ được liên kết với hình ảnh chương trình cuối cùng.
Tùy chọn này có thể được sử dụng nhiều lần trên dòng lệnh. Thông số kỹ thuật chuyển đổi được sử dụng với mỗi tùy chọn được tích lũy.

2.2. bỏ qua-khung-con trỏ Tùy chọn
Tùy chọn – f omit- frame-pointer hướng dẫn trình biên dịch sử dụng trực tiếp con trỏ ngăn xếp để truy cập các đối tượng trên ngăn xếp và nếu có thể, bỏ qua mã lưu, khởi tạo và khôi phục thanh ghi khung. Nó được bật tự động ở tất cả các mức tối ưu hóa khác không.
Phủ nhận tùy chọn, sử dụng -fno-omit- frame-pointer, có thể hỗ trợ gỡ lỗi mã được tối ưu hóa; tuy nhiên, tùy chọn này không đảm bảo rằng con trỏ khung sẽ luôn được sử dụng.

2.3. hủy vòng lặp Tùy chọn
Các – funrol I-loops và -(tùy chọn unroll-all-loops kiểm soát các tối ưu hóa định hướng theo tốc độ nhằm loại bỏ độ trễ phân nhánh trong các vòng lặp. Các vòng lặp không được kiểm soát thường làm tăng tốc độ thực thi của mã được tạo, với chi phí là kích thước mã lớn hơn.
Tùy chọn – funrol I-loops mở các vòng lặp trong đó số lần lặp có thể được xác định tại thời điểm biên dịch hoặc khi mã đi vào vòng lặp. Tùy chọn -funroll-all-loops tích cực hơn, hủy kiểm soát tất cả các vòng lặp, ngay cả khi số lần lặp không xác định. Nó thường kém hiệu quả hơn trong việc cải thiện tốc độ thực thi so với tùy chọn – funrol 1-loops.

2.4. mỡ-Ito-đối tượng Lựa chọn
Tùy chọn – f fat-1 to-obj ects yêu cầu trình biên dịch tạo đối tượng fat files, chứa cả hai
mã đối tượng và GIMPLE (một trong những biểu diễn nội bộ của GCC), được ghi vào các phần ELF duy nhất. Những đối tượng như vậy files hữu ích cho mã thư viện có thể được liên kết với các dự án sử dụng và không sử dụng trình tối ưu hóa thời gian liên kết tiêu chuẩn, được kiểm soát bởi tùy chọn -flto.
Dạng – fno-fat-lto-objects của tùy chọn này, là mặc định nếu không có tùy chọn nào được chỉ định, ngăn chặn việc đưa mã đối tượng vào đối tượng files, dẫn đến việc xây dựng nhanh hơn. Tuy nhiên, đối tượng như vậy files phải luôn được liên kết bằng trình tối ưu hóa thời gian liên kết tiêu chuẩn.

2.5. Tùy chọn phân vùng Ito
Các – flto-partiti trên = một Igo ri thm tùy chọn kiểm soát thuật toán được sử dụng để phân vùng đối tượng files khi chạy trình tối ưu hóa thời gian liên kết. Đối số none vô hiệu hóa hoàn toàn việc phân vùng và thực hiện bước tối ưu hóa thời gian liên kết trực tiếp từ giai đoạn phân tích toàn bộ chương trình (WPA). Chế độ hoạt động này sẽ tạo ra kết quả tối ưu nhất, với chi phí là yêu cầu bộ nhớ trình biên dịch lớn hơn và thời gian xây dựng lâu hơn, mặc dù đây không phải là vấn đề với các chương trình nhỏ. Phân vùng đối tượng files có thể cải thiện hiệu suất xây dựng. Đối số một chỉ định rằng chính xác một phân vùng sẽ được sử dụng và đối số lto1 chỉ định phân vùng phản ánh được xác định bởi nguồn ban đầu fileS. Đối số mặc định là cân bằng, chỉ định phân vùng thành các khối có kích thước bằng nhau, khi có thể.

2.6. Bổ sung cho Mục 3.6.11 Tùy chọn trình liên kết được ánh xạ
-wl, –phần-bắt đầu = giây tion=địa chỉ bị thiếu trong bảng các tùy chọn trình liên kết thường được sử dụng, có thể truy cập bằng tùy chọn trình điều khiển trình biên dịch -wl. Tùy chọn này cho phép đặt các phần có tên tùy chỉnh tại địa chỉ đã chỉ định. Nó không thể được sử dụng để đặt các phần tiêu chuẩn, như ( . data, . chào bạn, . văn bản), phải được đặt bằng tùy chọn -wl, -'r.

2.7. Sửa đổi Mục 4.14.2 Thay đổi và Liên kết Mục được Phân bổ
Lưu ý rằng trái ngược với thông tin có trong phần này của Hướng dẫn sử dụng, những thay đổi được thực hiện đối với trình biên dịch trong bản phát hành này hiện có nghĩa là các phần tùy chỉnh có thể được liên kết bằng cách sử dụng -w1, –giáo phái ion- bắt đầu=phần=acicir tùy chọn và không phải sửa đổi tập lệnh liên kết.

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.

3.1. 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.

3.2. Phiên bản 2.36 
Không có.
3.3. 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 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 vào 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 bối cảnh thậm chí còn được cải thiện nhiều hơn Cái mới -mgas-isr-lời mở đầu tùy chọn kiểm soát mã chuyển đổi ngữ cảnh được tạo cho các thói quen 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ể định 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. Có thể sử dụng tùy chọn mới – mconst-data-in-config-mapped-progmem để yêu cầu trình liên kết đặt tất cả dữ liệu đủ điều kiện chống lại t 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 dữ liệu không gian bộ nhớ, nơi nó sẽ được truy cập hiệu quả hơn.

Thư viện tiêu chuẩn hợp nhất của Microchip Tất cả MPLAB Trình biên dịch XC sẽ chia sẻ Thư viện tiêu chuẩn hợp nhất của Microchip, hiện có sẵn với phiên bản MPLAB XC8 này. Các MPLAB® Trình biên dịch XC8 C
Hướng dẫn sử dụng AVR® Vũ trụ không còn bao gồm tài liệu cho các chức năng tiêu chuẩn này. Thông tin này bây giờ có thể được tìm thấy trong Hướng dẫn Tham khảo Thư viện Tiêu chuẩn Hợp nhất của Microchip. Lưu ý rằng một số chức năng được xác định trước đây bởi avr-libc không còn nữa. (Nhìn thấy Chức năng thư viện.)
I0 thông minh Là một phần của các thư viện hợp nhất mới, các hàm JO trong họ 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 các hàm này được sử dụng 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ợ I0 thông minh Khi phân tích các cuộc gọi đến các chức năng I0 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ố mà các chỉ định chuyển đổi được yêu cầu bởi cuộc gọi. Trước đây, trình biên dịch sẽ luôn không đưa ra giả định nào và đảm bảo rằng 10 chức năng đầy đủ chức năng được liên kết với hình ảnh chương trình cuối cùng. Một tùy chọn mới – msma rt-io- format=fmt đã được thêm vào để người dùng thay vào đó có thể thông báo cho trình biên dịch về các chỉ định chuyển đổi được sử dụng bởi các hàm I0 thông minh có cách sử dụng không rõ ràng, ngăn 10 quy trình quá dài được liên kết. (Nhìn thấy định dạng io thông minh Tùy chọn để biết thêm chi tiết.)
Đặt các phần tùy chỉnh Trước đây, tùy chọn -W1, –section-start chỉ đặt phần được chỉ định tại địa chỉ được yêu cầu khi tập lệnh trình liên kết xác định phần đầu ra có cùng tên. Khi không đúng như vậy, phần này được đặt tại một địa chỉ do trình liên kết chọn và tùy chọn này về cơ bản bị bỏ qua. Bây giờ, tùy chọn sẽ được ưu tiên cho tất cả các phần tùy chỉnh, ngay cả khi tập lệnh trì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ư . chữ, . bss hoặc . dữ liệu, người phân bổ phù hợp nhất sẽ vẫn có toàn quyền kiểm soát vị trí của họ và tùy chọn này sẽ không có hiệu lực. Sử dụng -wl, -Tsection=địa chỉ tùy chọn, như được mô tả trong hướng dẫn sử dụng.

3.4. 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 một báo cáo, từ đó có thể suy ra độ sâu của các 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 sử dụng -mchp-stack-. Một bản tóm tắt về việc sử dụng ngăn xếp được in sau khi thực hiện. Một báo cáo ngăn xếp chi tiết có sẵn trong bản đồ file, có thể được yêu cầu theo cách thông thường.
Hỗ trợ thiết bị mới Hỗ trợ có sẵn cho các phần AVR sau: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTNY824, 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 phần AVR sau: AVR 16DA28, AVR16DA32 và, AVR16DA48.

3.5. Phiên bản 2.31 Không có.
3.6. Phiên bản 2.30
Tùy chọn mới để ngăn khởi tạo dữ liệu Tùy chọn trình điều khiển -mno-data-init mới ngăn khởi tạo dữ liệu và xóa các phần bss. Nó hoạt động bằng cách chặn đầu ra của các ký hiệu do_copy_data và do_clear_bss trong hợp ngữ files, điều này sẽ lần lượt ngăn trình liên kết đưa vào các quy trình đó.
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 truy cập các đối tượng tĩnh được thực hiện liên quan đến một biểu tượng; -mpa-lặp lại =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-shortcal 1, thực hiện trừu tượng hóa thủ tục tích cực hơn, với hy vọng rằng trình liên kết có thể thư giãn 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.
Mới hỗ trợ thiết bị Hỗ trợ có sẵn cho các phần AVR sau: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR 128DB 32 , AVR128DB48 và 128VR64DB
Thiết bị đã rút lại Hỗ trợ Không còn hỗ trợ cho các phần AVR sau: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616C, ATA6617C và ATA664251.

3.7. Phiên bản 2.29 (Bản phát hành an toàn chức năng)
Tiêu đề file cho bunt-in của trình biên dịch Để đảm bảo rằng trình biên dịch có thể phù hợp với đặc tả ngôn ngữ như MISRA, tiêu đề file, được tự động bao gồm bởi , đã được cập nhật. Tiêu đề này chứa các nguyên mẫu cho tất cả các hàm dựng sẵn, chẳng hạn như in_avr_nop ( ) và _builtin_avr_delay_cycles () tích hợp. Một số nội dung tích hợp có thể không tuân thủ MISRA; những thứ 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à phần 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.

3.8. Phiên bản 2.20
Mới hỗ trợ thiết bị Hỗ trợ có sẵn cho các bộ phận AVR sau: ATTINY 1624, ATTINY1626 và ATTINY 1 627.
Phân bổ phù hợp nhất tốt hơn Trình cấp phát 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.
Cải thiện trừu tượng hóa thủ tục Việc tối ưu hóa thủ tục trừu tượng hóa hiện đang đượ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. 3.9. Phiên bản 2.19 (An toàn chức năng Phóng thích)
Không có.
3.10. Phiên bản 2.10
Phạm vi 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ề mức độ phù hợp của 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ức độ phù hợp của mã. 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 bản 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 file để loại trừ toàn bộ đó file từ các phân tích bảo hiểm. Ngoài ra, _attribute_ ( (nocodecov)) có thể được sử dụng để loại trừ một chức năng cụ thể khỏi phân tích phạm vi bảo hiểm.
Mô tả thiết bị files một thiết bị mới file được gọi là avr_chipinfo.html nằm trong thư mục tài liệu của

phân phối trình biên dịch. Cái này file 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 thủ tục Tối ưu hóa thủ tục trừu tượng hóa, thay thế các khối mã hợp ngữ phổ biến bằng các lệnh gọi đến một 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 gọi tự động khi chọn mức 2, 3 hoặc s tối ưu hóa. 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 mã.
Tính năng trừu tượng hóa thủ tục có thể bị tắt ở các 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 ở các mức tối ưu hóa thấp hơn (tuân 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 cho một đối tượng file sử dụng -mno-pa-on-f ile=filetên hoặc bị vô hiệu hóa cho một chức năng bằng cách sử dụng -mno-pa-onfunotion=f chú thích.
Bên trong mã nguồn của bạn, tính trừu tượng hóa theo 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 thuộc tính_ ( (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 chức năng nội tuyến diễn ra và có sự trừu tượng của mã nội tuyến.
Hỗ trợ khóa bit trong pragma Cấu hình #pragma hiện 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 avr_chipinfo.html file (đã đề cập ở trên) cho các cặp cài đặt/giá trị để sử dụng với pragma này.
Mới hỗ trợ thiết bị Hỗ trợ có sẵn cho các phần sau: AVR28DAl28, AVR64DAl28, AVR32DAl28 và AVR48DAl28.

3.11. Phiên bản 2.05
Thêm bit cho buck 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.
Đối tượng const trong bộ nhớ chương trình Trình biên dịch bây giờ có thể đặt các đối tượng đủ điều kiện const trong 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 sao cho dữ liệu toàn cầu đủ tiêu chuẩn được lưu trữ trong bộ nhớ flash của 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 miễn phí Các phiên bản không được cấp 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 xuất ra kết quả 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 biên dịch 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.
Mới hỗ trợ thiết bị Hỗ trợ có sẵn cho các phần sau: ATMEGA1608, ATMEGA 1609, ATMEGA808 và ATMEGA809.

3.12. Phiên bản 2.00
Trình điều khiển cấp cao nhấ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 C chung Trình biên dịch này giờ đây có thể phù hợp với Giao diện MPLAB Common C, 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 A trình điều khiển thủ thư mới được định vị phía trên thủ thư thư viện PIC trước đó và thủ thư AVR avr-ar. Trình điều khiển này chấp nhận các tùy chọn kiểu trình lưu trữ GCC, được dịch cho 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 với bất kỳ thư viện PIC hoặc AVR nào file và do đó là cách được khuyến nghị để gọi thủ thư. Nếu được yêu cầu cho các dự án kế thừa, 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

Các tính năng sau đây hiện đang đượ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.

4.1. Phiên bản 2.39 (Bản phát hành an toàn chức năng)
Không có.
4.2. Phiên bản 2.36 Không có.
4.3. Phiên bản 2.35
Xử lý cơ sở chuỗi thành (XC8-2420) Để đảm bảo tính nhất quán với các trình biên dịch XC khác, chuỗi XC8 các hàm, như strtol(), v.v., sẽ không 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 errno thành EINVAL. Tiêu chuẩn C không chỉ định hành vi của các chức năng khi giá trị cơ sở này bị vượt quá.
Tối ưu hóa tốc độ không phù hợp Tối ưu hóa trừu tượng theo thủ tục đã được bật khi chọn tối ưu hóa cấp 3 (-03). Những tối ưu hóa này làm giảm kích thước mã với chi phí là tốc độ mã, do đó không nên được 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 với 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 hợp 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. Đối với người yêu cũample, không còn cần phải liên kết trong thư viện 1printf flt (tùy chọn -1printf_flt) để bật hỗ trợ I0 được định dạng cho các bộ xác định định dạng float. 10 tính năng thông minh của Thư viện tiêu chuẩn hợp nhất của 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ủ tục 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 quy trình C tiêu chuẩn (ví dụ: strcpy 0 ) 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.

4.4. Phiên bản 2.32
Không có.
4.5. Phiên bản 2.31
Không có.
4.6. Phiên bản 2.30
Không có.
4.1. Phiên bản 2.29 (Bản phát hành an toàn chức năng)
Không có.
4.2. Phiên bản 2.20
Đã 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.

4.3. Phiên bản 2.19 (Bản phát hành an toàn chức năng)
Không có.
4.4. Phiên bản 2.10 Không có
4.5. Phiên bản 2.05
Các đối tượng const trong bộ nhớ chương trình Lưu ý rằng theo mặc định, các đối tượng đủ tiêu chuẩn const sẽ được đặt và truy cập trong bộ nhớ chương trình (như mô tả của cô ấy). Điều này sẽ ảnh hưởng đến kích thước và tốc độ thực hiện 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 -mnocons t-data-in-pr ogmem.

4.6. Phiên bản 2.00
Cầu chì cấu hình Cầu chì cấu hình thiết bị giờ đây 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
Đối tượng và chức năng tuyệt đối Các đối tượng và chức năng hiện có thể được đặt tại địa chỉ cụ thể trong bộ nhớ bằng cách sử dụng CCI _at (địa chỉ) người xác định, ví dụamplê:
nếu bao gồm
int foobar tại (0)0300100);
char at(0x250) getID(int offset) ( Đối số cho bộ xác định này phải là hằng số đại diện cho địa chỉ tại đó byte đầu tiên hoặc lệnh sẽ được đặt. Địa chỉ RAM được biểu thị bằng cách sử dụng giá trị bù của Ox800000. Kích hoạt CCI để sử dụng tính năng này.
Cú pháp hàm ngắt mới Trình biên dịch hiện chấp nhận CCI _interrupt (số) specifier để chỉ ra rằng các chức năng C là trình xử lý ngắt. Trình xác định lấy một số ngắt, ví dụ:amplê:

Các vấn đề đã được khắc phục

Các sửa đổi sau đây đã được thực hiện cho 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 thành hoạt động được dự định hoặc chỉ định bởi hướng dẫn người dùng. 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 chứa các bản sửa lỗi cho các sự cố tiếp theo. (Các) nhãn trong ngoặc đơn trong tiêu đề là thông tin nhận dạng của vấn đề đó trong cơ sở dữ liệu theo dõi. Chúng 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ị (DR)) đượ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.

5.1. Phiên bản 2.39 (Bản phát hành an toàn chức năng)
Không có.
5.2. Phiên bản 2.36
Lỗi khi trì hoãn (XCS2774) Những thay đổi nhỏ trong tối ưu hóa chế độ Miễn phí mặc định đã ngă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 được coi là không phải hằng số và gây ra lỗi. in_avr_delay_cycles được xây dựng mong đợi một hằng số nguyên thời gian biên dịch.

5.3. Phiên bản 2.35
Tiếp giáp phân bổ sử dụng _at (XCS2653) Phân bổ liền kề nhiều đối tượng đặt trong một phần có cùng tên và sử dụng _at () không hoạt động chính xác. Đối với người yêu cũamplê:
thuộc tính const char arrl[ ] (phần(“.mysec”) tại (0x500) = (OxAB, OxCD);
thuộc tính const char arr2[ ] (sectionr.mysec”)= (OxEF, OxFE);
nên đặt arr2 ngay sau arri.
Chỉ định địa chỉ bắt đầu phần (XCS2650) Các -wl, tùy chọn –section-start không thể đặt các phần tại địa chỉ bắt đầu được chỉ định. Vấn đề này đã được khắc phục cho bất kỳ phần được đặt tên tùy chỉnh nào; 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ư . văn bản hoặc . bss, mà phải được đặt bằng cách sử dụng một - ừ, -T tùy chọn.
Trình liên kết gặp sự cố khi thư giãn (XCS2647) Khi nào tối ưu hóa -mrelax đã được bật và chúng là 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 khôngrơi xuốngtrở lại (XCS2646) Các –tùy chọn dự phòng không được triển khai chính xác, cũng như không được ghi lại. Điều này hiện có thể được chọn để đảm bảo rằng trình biên dịch sẽ không quay trở 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ẽ báo lỗi.
Tối ưu hóa tốc độ không phù hợp (XCS2637) Tối ưu hóa trừu tượng theo thủ tục đã được bật khi chọn tối ưu hóa cấp 3 (-03). Những tối ưu hóa này làm giảm kích thước mã với chi phí là tốc độ mã, do đó không nên được thực hiện.
Truy cập EEPROM không hợp lệ (XCS2629) 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ệ (X03-2593, XC8-2651) Khi tùy chọn trình liên kết -Ttext hoặc -Tdata (ví dụ:ample được chuyể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ị đích.
Sự cố với chức năng đượ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 sử dụng nhiều hơn một trong các thuộc tính ngắt, tín hiệu hoặc nmi, ví dụ: _attribute_ ( ( tín hiệu, ngắt ) ).
Mã ngắt ATtiny không hợp lệ (XC8-2465) Khi xây dựng cho các thiết bị ATtiny và tối ưu hóa đã bị vô hiệu hóa (-00), các chức năng ngắt có thể đã kích hoạt các thông báo trình biên dịch hợp ngữ nằm ngoài phạm vi toán hạng.
Các tùy chọn không được chuyển qua (XC8-2452) Khi sử dụng -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 (X03-2450) Trong một số trường hợp, trình biên dịch tạo ra một lỗi nội bộ (insn không thể nhận ra) khi đọc một giá trị hai byte từ một con trỏ tới bộ nhớ chương trình

5.4. Phiên bản 2.32
Lần truy cập thư viện thứ hai không thành công (X03-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 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.

5.5. Phiên bản 2.31
Không giải thích được lỗi trình biên dịch (XC8-2367) Khi chạy trên Cửa sổ các nền tảng 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.

5.6. Phiên bản 2.30
Nhãn chung bị đặt sai vị trí sau khi phác thảo (XC8-2299) Mã hợp ngữ viết tay đặt chung các nhãn trong trình tự lắp ráp được xác định 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) Sử dụng -mthư giãn tùy chọn có thể đã khiến trình liên kết gặp sự cố khi tối ưu hóa thư giãn nhảy đuôi đã cố gắng loại bỏ lệnh ret không ở cuối phần.
Sự cố khi tối ưu hóa nhãn dưới dạng giá trị (XC8-2282) Mã bằng cách sử dụng "Nhãn dưới dạng giá trị" GNU C tiện ích mở rộng ngôn ngữ có thể đã khiến quá trình tối ưu hóa trừu tượng hóa thủ tục gặp sự cố, với lỗi sửa lỗi kéo dài phạm vi VMA được phác thảo.
Không phải như vậy const (XC8-2271) Các nguyên mẫu cho strstr() và các chức năng khác từ không còn chỉ định vòng loại const không chuẩn trên các con trỏ chuỗi được trả về khi tính năng -mconst-data- inprogmem bị tắt. Lưu ý rằng với các thiết bị avrxmega3 và avrtiny, tính năng này được bật vĩnh viễn.
Trình khởi tạo bị mất (XC8-2269) Khi có nhiều biến trong bản dịch đơn vị đã được đặt trong một phần (sử dụng phần or thuộc tính ( (tiết diện) )), 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, các bộ khởi tạo cho các biến khác trong cùng một đơn vị dịch được đặt trong cùng một phần đã bị mất.

5.1. Phiên bản 2.2 9 (Bản phát hành an toàn chức năng) Không có. 
5.2. 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 lilt, 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ớ

5.3. Phiên bản 2.19 (Bản phát hành an toàn chức năng)
Không có.
5.4. 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 phân mảnh bộ nhớ, điều này 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 liên quan đến máy tính hoặc các cuộc gọi nằm ngoài phạm vi.
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-3 ) Một số định nghĩa từ , chẳng hạn như clock_div_t và clock_presc ale_s et () , 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ý _XC 8_MODE_, XC 8 VERS ION, XC và xc8 không được trình biên dịch tự động xác định. Những thứ này hiện có sẵn.

5.5. 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 lỗi tràn RAM (XC8-1800, XC8-1796) Các chương trình vượt quá mức 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 lập trình bởi MPLAB X IDE.
Không thể thực thi chính (XC8-1788) Trong một số trường hợp khi chương trình không xác định biến toàn cục, mã khởi động thời gian chạy không thoát và không bao giờ đạt được hàm main ().
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 điên cuồng đ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 bằng macro/thuộc tính PROGMEM có thể đã đọc các đối tượng này từ địa chỉ sai.
Lỗi bên trong với các thuộc tính (XC8-1773) Đã xảy ra lỗi bên trong nếu bạn đã xác định các đối tượng con trỏ bằng mã thông báo _at 0 hoặc thuộc tính() ở giữa tên con trỏ và loại được hủy đăng ký, ví dụ:ample, char * _at (0x800150) cp; Một cảnh báo hiện được đưa ra nếu gặp phải mã như vậy.

Không chạy được main (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 cấu hình pragma có thể đã gây ra khởi tạo dữ liệu không chính xác và/hoặc khóa thực thi chương trình trong mã khởi động thời gian chạy, trước khi đến 0 chính.

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/10120140 có độ dài cầu chì không chính xác được chỉ định trong tiêu đề của chúng files dẫn đến lỗi trình 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) Một lỗi phân khúc không liên tục đã được sửa chữa.

Sự cố trình biên dịch mã (XC8-1761) Trình biên dịch avr -as có thể đã bị lỗi khi trình biên dịch được chạy trong Ubuntu 18.

Các đối tượng không 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ể không bị xóa bởi mã khởi động thời gian chạy.

Thông số kỹ thuật thiết bị xung đột bị bỏ qua (XC8-1749) trình biên dịch không tạo ra lỗi khi nhiều tùy chọn đặc tả thiết bị được sử dụng và chỉ định các thiết bị khác nhau.

Bộ nhớ bị hỏng theo đống (XC8-1748) _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 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 rjmn hoặc rcall với mục tiêu cách chính xác 4k byte.

5.6. 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ế mã hóa chung 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 đơn trong thủy triều là nhận dạng của vấn đề đó trong cơ sở dữ liệu theo dõi. Đ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ợ. Những mặt hàng không có nhãn là những hạn chế mô tả chế độ hoạt động và có khả năng duy trì hiệu lực vĩnh viễn.
6.1. IDE MPLAB X Tích hợp
MPLAB Tích hợp IDE Nếu Trình biên dịch được sử dụng 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.
6.2. Tạo mã
Không đúng khởi tạo (XC8-2679) Có sự khác biệt giữa nơi các giá trị ban đầu cho một số đối tượng có kích thước byte tĩnh/toàn cầu được đặt trong bộ nhớ dữ liệu và nơi các biến sẽ được truy cập trong thời gian chạy.
strtod đặt sai endptr (XC8-2652) Trong trường hợp chuỗi chủ đề để chuyển đổi bởi strtod() chứa số có vẻ 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 ký tự e, thì địa chỉ endptr, nếu được cung cấp, sẽ trỏ đến ký tự sau e chứ không phải bản thân e. Đối với người yêu cũample: strtod (“100exy”, endptr) ;

sẽ dẫn đến endptr trỏ đến ký tự x.

Các cuộc gọi chức năng gián tiếp không hợp lệ (X03-2628) Trong một số trường hợp, các lệnh gọi hàm được thực hiện thông qua một 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ề 8 cho số float 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. Đối với người yêu cũample: strtof (“Oxl”, &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ơn một 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 được lưu một cách không cần thiết và các ngắt sẽ được bậ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ã.
const các đối tượng không có trong bộ nhớ chương trình (XC8-2408) Đối với các dự án avrxmega3 và avrtiny, các đối tượng const được đơn vị hóa được đặt vào bộ nhớ dữ liệu, mặc dù có cảnh báo cho thấy rằng chúng đã được đặt trong bộ nhớ chương trình. Điều này sẽ không ảnh hưởng đến các thiết bị không có bộ nhớ chương trình được ánh xạ vào không gian bộ nhớ dữ liệu, cũng như không ảnh hưởng đến bất kỳ đối tượng nào được khởi tạo.
Đầu ra không hợp lệ với đường dẫn DFP không hợp lệ (XCS-2376) Nếu trình biên dịch được gọi với đường dẫn DFP không hợp lệ và 'thông số kỹ thuật' file tồn tại cho thiết bị đã chọn, trình biên dịch không báo cáo gói họ thiết bị bị thiếu và thay vào đó chọn 'thông số kỹ thuật' file, sau đó có thể dẫn đến đầu ra không hợp lệ. 'thông số kỹ thuật' files có thể không được cập nhật với các DFP được phân phối và chỉ nhằm mục đích sử dụng với kiểm tra trình biên dịch nội bộ.
Chồng chéo bộ nhớ không bị phát hiện (XC8-1966) Trình biên dịch không phát hiện sự chồng lấp bộ nhớ của các đối tượng được tạo tuyệt đối tại một địa chỉ (thông qua _at 0 ) và các đối tượng khác bằng cách sử dụng _giáo pháiion() specifier và được liên kết với cùng một địa chỉ.
Lỗi chức năng thư viện và _memx (XC8-1763) Các hàm float libgcc được gọi với một đối số trong không gian địa chỉ _memx có thể không thành công. Lưu ý rằng các thủ tục thư viện được gọi từ một số toán tử C, vì vậy, ví dụ:ample, đoạn mã sau bị ảnh hưởng: return regFloatVar > memxFloatVar;
Triển khai libgcc 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 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ề trình liên kết hủy bỏ mà không 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 tùy chọn -mrelax được sử dụng.
Giới hạn không gian đặt tên (AVRTC-733) Không gian địa chỉ được đặt tên được hỗ trợ bởi chuỗi công cụ, 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 các chức năng thư viện giả sử GMT và không hỗ trợ múi giờ địa phương, do đó loca It ime 0 sẽ trả về cùng thời gian với gmtime ( ), ví dụ:amplà.

Tài liệu / Tài nguyên

MICROCHIP MPLAB XC8 C Trình biên dịch phiên bản 2.39 Ghi chú phát hành cho AVR MCU [tập tin pdf] Hướng dẫn sử dụng
Phiên bản trình biên dịch MPLAB XC8 C 2.39 Ghi chú phát hành cho AVR MCU, MPLAB XC8 C, Phiên bản trình biên dịch 2.39 Ghi chú phát hành cho AVR MCU, Ghi chú phát hành cho AVR MCU
MICROCHIP MPLAB XC8 C Trình biên dịch phiên bản 2.39 Ghi chú phát hành cho AVR MCU [tập tin pdf] Hướng dẫn sử dụng
Phiên bản trình biên dịch MPLAB XC8 C 2.39 Ghi chú phát hành cho AVR MCU, MPLAB XC8 C, Phiên bản trình biên dịch 2.39 Ghi chú phát hành cho AVR MCU, Ghi chú cho AVR MCU
Trình biên dịch MICROCHIP MPLAB XC8 C [tập tin pdf] Hướng dẫn sử dụng
Trình biên dịch MPLAB XC8 C, MPLAB XC8 C, Trình biên dịch

Tài liệu tham khảo

Để lại bình luận

Địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *