Trình biên dịch MPLAB® XC8 C Phiên bản 2.41 Ghi chú phát hành cho AVR® MCU
Hướng dẫn sử dụng

Phần mềm phát triển trình biên dịch MPLAB XC8 C
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.
Giới thiệu chung
1.1. Giới thiệu
Bản phát hành này của trình biên dịch Microchip MPLAB® XC8 C có một số tính năng mới và các bản sửa lỗi.
1.2. 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 8 tháng 2023 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.40 được xây dựng vào ngày 3 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
Trình biên dịch MPLAB 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. Máy chủ cấp phép mạng MPLAB XC khả dụng 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 Hate Enterprise Linux cũng như các phiên bản cũ hơn của các hệ điều hành được hỗ trợ. Tuy nhiên, 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ĐH đượ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 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 (trong thư mục 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ê
avr_chipinfo.html cài đặt bit cấu hình tài liệu cho từng thiết bị.
1.7. 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.
1.8. 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 Nên sử dụng thư mục cài đặt mặc định. 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.8.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 %temp% vào lệnh Run (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 đó.
1.9. 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.
1.10. 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
Để 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:
- Hướng dẫn sử dụng trình biên dịch MPLAB® XC8 C cho AVR® MCU (bản sửa đổi G)
- Chuỗi công cụ AVR® GNU sang Hướng dẫn di chuyển MPLAB® XC8 (bản sửa đổi A)
- Hướng dẫn sử dụng Hexmate (bản sửa đổi B)
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 yêu cầu 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 của AVR sang Trình biên dịch MPLAB XC8 C của Microchip. 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 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 trình 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, Hướng dẫn sử dụng MPLAB® XC8 dành cho kỹ sư nhúng – AVR® MCUs (DS50003108) có thông tin về cách thiết lập dự án trong MPLAB X IDE và viết mã cho các dự án của bạn. dự án MPLAB XC8 C đầu tiê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.
3.1. 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ố at.bootrow đị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ữ các 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ự phòng (XC8-3048) Giờ đây, trình biên dịch sẽ loại bỏ các lệnh dư thừa trong các hàm ret bằng một 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à một tối ưu hóa tương tự như đã thực hiện trước đó, nhưng nó hiệ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à lược đồ phân bổ phù hợp nhất không hoạt động. Thay đổi loại thời gian (XC8-2982, 2932) Loại thư viện chuẩn C99, đã được thay đổi từ time_t thành một loại, giúp cải thiện kích thước mã trong một số hàm long long liên quan đến thời gian, chẳng hạn như. mktime dài chưa được ký ()
Nop mới (XC8-2946, 2945) Macro đã được thêm vào. Macro này chèn một no- NOP() hướng dẫn hoạt động nop 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 được sắp xếp (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 tương đối của các lệnh thường nằm ngoài phạm vi đích của chúng. Trong tình huống này, trình biên dịch sẽ cố gắng thay thế bằng các lệnh gọi rcall một lệnh sẽ ‘trampoline’ đến địa chỉ được yêu cầu, ví dụ:ample: jmp
gọi tramp_foo ; được gọi là foo
…
gọi tramp_foo
…
tramp_foo:
jmp foo
Việc tối ưu hóa này, cùng với các tối ưu hóa luồng chương trình tương tự, được kiểm soát bởi tùy chọn -mrelax.
3.2. 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 thiện để mã có chứa lệnh gọi hàm (/ ) có thể được sử dụng. Điều này sẽ chỉ diễn ra cuộc gọi rcall nếu ngăn xếp không được sử dụng để truyền đối số và cũng không nhận 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ố biến 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ị vô hiệu hóa bằng cách sử dụng tùy chọn hoặc sự trừu tượng hóa thủ tục có thể bị vô hiệu hóa hoàn toàn đối với một tệp đối tượng hoặc hàm bằng cách sử dụng- và tương ứng hoặc bằng cách sử dụng thuộc tính (chỉ định) một cách có chọn lọc với các hàm.
mno-pa-phác thảo-cuộc gọi -mno-pa-on-file -mno-pa-on-function nopa Macro bảo hiểm mã Trình biên dịch hiện xác định macro nếu một tùy chọn hợp lệ là __nopa __CODECOV -mcodecov được chỉ định.
Tùy chọn đặt trước bộ nhớ Trình điều khiển giờ đây sẽ chấp nhận tùy chọn xc8-cc -mreserve=space@start:end khi xây dựng cho các mục tiêu AVR. Tùy chọn này bảo lưu phạm vi bộ nhớ đã chỉ định trong không gian bộ nhớ dữ liệu hoặc chương trình, ngăn trình liên kết điền mã hoặc đối tượng vào vùng này. IO thông minh 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 IO thông minh, bao gồm các điều chỉnh chung đối với mã lõi printf, coi bộ xác định chuyển đổi %n là một biến thể độc lập, liên kết trong các thói quen pop vararg 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à bao thanh toán mã phổ biến trong độ rộng trường và xử lý 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.
3.3. 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.4. Phiên bản 2.36
Không có.
3.5. 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ể đị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. Tùy chọn mới – mconst-data-in-config-mapped-progmem có thể được sử dụng để yêu cầu trình liên kết đặt tất cả dữ liệu đủ điều kiện const 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 bộ nhớ dữ liệu không gian, 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ả các trình biên dịch MPLAB XC sẽ dùng chung Thư viện tiêu chuẩn hợp nhất của Microchip, thư viện này hiện có sẵn với phiên bản MPLAB XC8 này. Hướng dẫn sử dụng trình biên dịch MPLA# XC8 C cho AVO MCU 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 hiện 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. (Xem chức năng Lila.)
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 I0 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ợ ICI 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ư print f() 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 – msmart-io-format=fmt mới đã đượ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 thông số 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. (Xem Tùy chọn định dạng smart-io để 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 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, trình phân bổ 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 này sẽ không có hiệu lực. Sử dụng tùy chọn -ton, -Tsection=addr, như được mô tả trong hướng dẫn sử dụng.
3.6. 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 bật thông qua tùy chọn dòng lệnh -mchp-stack-usage. 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, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32 và AVR32DB48. Hỗ trợ thiết bị đã rút lại Không còn hỗ trợ cho các phần AVR sau: AVR16DA28, AVR16DA32 và, AVR16DA48.
3.7. Phiên bản 2.31
Không có.
3.8. 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 dữ liệu sao chép và xóa các ký hiệu bss trong cụm 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à -f section-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-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 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.
Hỗ trợ thiết bị mới Hỗ trợ có sẵn cho các phần AVR sau: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48 và 128VR64DB Thiết bị đã thu hồi Hỗ trợ 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.
3.9. Phiên bản 2.29 (Bản phát hành an toàn chức năng)
Tiêu đề file cho trình biên dịch tích hợp sẵn Để đảm bảo rằng trình biên dịch có thể tuân thủ các đặ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 chức năng dựng sẵn, chẳng hạn như dựng sẵn_avr_nop ( ) và dựng sẵn avr delay_cycles () . Một số nội dung tích hợp có thể không tuân thủ MISRA; chúng có thể được bỏ qua bằng cách thêm định nghĩaXCSTRICT_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.
3.10. 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.
3.11. Phiên bản 2.19 (Bản phát hành an toàn chức năng)
Không có.
3.12. Phiên bản 2.10
Bảo hiểm mã Bản phát hành này bao gồm một tính năng bảo hiểm 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 bản 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ả giá trị/cài đặt bit cấu hình được phép cho thiết bị đó, với ví dụ:amples. 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 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 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-file=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-on-function=function. Bên trong mã nguồn của bạn, tính năng 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 thuộc tính ( (nopa, noinline) ) và do đó ngăn 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 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. Hỗ trợ thiết bị mới Hỗ trợ có sẵn cho các phần sau: AVR28DAl28, AVR64DAl28, AVR32DA 128 và AVR48DA 128.
3.13. 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 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 đủ tiêu chuẩ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 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.
3.14. 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ư 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
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.
4.1. Phiên bản 2.41
Đã loại bỏ các hàm fma không chính xác (XC8-2913) Thư viện chuẩn C99 hàm fma 0 -family ( ) đã không tính toán cộng-nhân với độ chính xác vô hạn cho một lần làm tròn, 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 hàm này đã bị xóa khỏi thư viện được cung cấp.
4.2. Phiên bản 2.40
Không có.
4.3. Phiên bản 2.39 (Bản phát hành an toàn chức năng)
Không có.
4.4. Phiên bản 2.36 Không có.
4.5. Phiên bản 2.35
Xử lý chuỗi thành 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 chuỗi thành 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 errno thành EINVAL. Tiêu chuẩn C không chỉ định hành vi của các hàm khi giá trị cơ bản 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ũamptập tin, không cần phải liên kết trong thư viện 1printf flt (tùy chọn -1printf_flt) để bật định dạng I0 hỗ trợ cho các chỉ định định dạng float. Thông minh I0 các tính năng 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 ) 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.6. Phiên bản 2.32
Không có.
4.7. Phiên bản 2.31
Không có.
4.8. 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 áp dụng
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àu sắc được mô tả). Đ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 -mnoconst-data-in-progmem.
4.6. Phiên bản 2.00
Các cầu chì cấu hình Các 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 một 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 trình xác định CCI (địa chỉ), ví dụ:amplê:
#bao gồm
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
Đối số cho trình xác định này phải là một hằng số đại diện cho địa chỉ mà 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 độ lệch 0x800000. Cho phép 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 bây giờ chấp nhận chỉ định CCI _interrupt (num) để chỉ ra rằng các hàm C là các trình xử lý ngắt. Trình xác định lấy một số ngắt, ví dụ:amplê:
#bao gồm
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Các vấn đề cố định
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 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ị (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.
5.1. Phiên bản 2.41
Các vấn đề về Dongle trên Dongle của Ventura (XC8-3088) được sử dụng để cấp phép cho trình biên dịch có thể không được đọc chính xác trên máy chủ macOS Ventura, dẫn đến lỗi cấp phép. Các thay đổi đối với trình quản lý giấy phép XCLM khắc phụ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 chức năng quản lý bộ nhớ thư viện chuẩn (malloc () et al) đã thành công không chính xác. Nó không tính đến việc cần thêm byte ngoài khối được yêu cầu khi sử dụng triển khai cấp phát bộ nhớ động đơn giản. Một con trỏ NULL bây giờ sẽ được trả về và errno được đặt thành ENOMEM trong các tình huống như vậy.
Đã xóa các chức năng fma không chính xác (XC8-2913) Thư viện tiêu chuẩn C99 hàm fma ( ) -family ( ) đã không tính toán cộng-nhân với độ chính xác vô hạn cho một lần làm tròn, 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 hàm này đã bị xóa khỏi thư viện được cung cấp.
Xử lý chuyển đổi chuỗi kém (XC8-2921, XC8-2652) Khi một ‘chuỗi chủ đề’ để chuyển đổi bởi strtod Cr 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/E, thì khi endptr đã được cung cấp, nó được gán một địa chỉ nếu nó trỏ đến ký tự sau e/E, trong khi lẽ ra nó phải trỏ đến chính ký tự e/E, vì ký tự đó chưa được chuyển đổi. Đối với 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ị đúng nhưng đặt ep trỏ đến phần “xx” của chuỗi .
5.2. Phiên bản 2.40
Quá thoải mái (XCS-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 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 lập bản đồ không bị tắt như đã nêu trong cảnh báo (XC8-2875) Tính năng const-data-in-config-mappedprogmem phụ thuộc vào tính năng const-data-in-progmem đang được bật. Nếu tính năng const-data-inconfig-mapped-progmem được bật rõ ràng bằng tùy chọn này và tính năng const-data-inprogmem 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-con fig- tính năng 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 I0 SFR cho trang được sử dụng bởi chương trình const-data-in-configmapped-progmem tính năng trình biên dịch. Các 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 thanh ghi này.
DFP thay đổi để tránh ánh xạ flash (XC8-2847) Một giải pháp khắc phục sự cố với tính năng thiết bị ánh xạ flash được báo cáo trong AVR128DA28/32/48/64 Silicon Errata (D580000882) đã được triển khai. Tính năng trình biên dịch const-data-in-config-mapped-progmem sẽ không được áp dụng theo mặc định 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 bản dựng với sinhf hoặc coshf (XC8-2834) Nỗ lực 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.
Tạo lỗi với nopa (XC,8-2833) Việc sử dụng thuộc tính nopa với một hàm có tên trình biên dịch chương trình được chỉ định bằng cách sử dụng asm ( ) đã kích hoạt các thông báo lỗi từ trình biên dịch chương trình. Sự kết hợp này là không thể.
Lỗi chức năng 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 khi tính năng const-data-in-progmem được bật. Các đối số là con trỏ tới bộ nhớ dữ liệu đã được chuyển dưới dạng đối tượng 16 bit, gây ra lỗi mã khi chúng được đọc lần cuối. Khi tính năng constdata-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.
chức năng thư viện strtoxxx không thành công (XC8-2620) Khi bật tính năng const-data-in-progmem, tham số endptr trong 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 cho các diễn viên không hợp lệ (XC8-2612) Trình biên dịch bây giờ sẽ báo 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ỏ từ hạn định const), ví dụ:ample, (uint 8_t *) “Xin chào thế giới!”. Sẽ có cảnh báo nếu địa chỉ có thể không hợp lệ khi con trỏ dữ liệu const được truyền rõ ràng tới 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 const và const chưa được khởi tạo không được đặt trong bộ nhớ chương trình trên các thiết bị ánh xạ tất cả 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, làm cho hoạt động của chúng nhất quán với các thiết bị khác.
5.3. Phiên bản 2.39 (Bản phát hành an toàn chức năng)
Không có.
5.4. 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 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 là hằng số và gây ra lỗi: avr delay_cycles dựng sẵn mong đợi một hằng số nguyên thời gian biên dịch.
5.5. Phiên bản 2.35
Phân bổ liền kề bằng cách sử dụng _at (XC8-2653) Việc 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ê:
const char arr1[] __attribute__((phần(“.mysec”))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((phần(“.mysec”))) = {0xEF, 0xFE};
nên đặt mảng 2 ngay sau mảng 1.
Chỉ định địa chỉ bắt đầu phần (XC8-2650) -W1, 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, phải được đặt bằng tùy chọn -W1, -T.
Trình liên kết gặp sự cố khi thư giãn (XC8-2647) Khi tối ưu hóa -mrelax được bật 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 đã gặp sự cố. 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.
No no-fall-back (XC8-2646) –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 (X03-2637) 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.
EEPROM xấu truy cập (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ụ:ample được chuyển qua bằng cách sử dụng tùy chọn trình điều khiển -vl) đượ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ụ: thuộc tính ( ( 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 thông qua (XC8-2452) Khi sử dụng tùy chọn có 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 đọc gián tiếp 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 lỗi bên trong (không thể nhận dạng insn) khi đọc giá trị hai byte từ một con trỏ vào bộ nhớ chương trình
5.6. Phiên bản 2.32
Lần truy cập thứ hai của thư viện không thành công (XC8-2381) Gọi phiên bản Windows của xc8-ar. Trình lưu trữ thư viện .exe lần thứ hai để truy cập kho lưu trữ thư viện hiện có có thể đã thất bại với thông báo lỗi không thể đổi tên.
5.7. Phiên bản 2.31
Trình biên dịch không giải thích được lỗi (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.
5.8. 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 các nhãn toàn cầu trong các trình tự hợp ngữ được xác định bằng yếu tố trừu tượng theo thủ tục có thể đã không được định vị lại chính xác.
Một 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 nhảy đuôi cố gắng xóa lệnh ret không có ở 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 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) Nguyên mẫu cho st rstr ( ) 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 nhiều hơn một biến trong đơn vị dịch được đặt trong một phần (sử dụng _phần hoặc _attribute_ ( (phần) )) và biến đầu tiên đó 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 đơn vị dịch đã được đặt trong cùng một phần đã bị mất.
5.1. Phiên bản 2.29 (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 một file không tìm thấy lỗi, 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 chỉ định (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 (Phát hành an toàn chức năng)
Không có.
5.4. Phiên bản 2.10
di dời thất bại (XC8-1891) Bộ cấp phát phù hợp nhất là để 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-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_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 SDI.
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 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 có kích thước avr đã báo cáo rằng dữ liệu chỉ đọc đang tiêu tốn RAM thay vì bộ nhớ chương trình.
Đọc sai bộ nhớ chương trình (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 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
_at () hoặc thuộc tính () mã thông báo ở 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ầu chì bằng cách sử dụng pragma cấu hình 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 được 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 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ì.
PHÂN LOẠI lỗi (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 mã (XC8-1761) Trình hợp 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ố 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 rjmp hoặc rcall với mục tiêu cách xa 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 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ể 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. MPLAB X IDE Tích hợp
IDE MPLAB tích hợp 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ã
Segfault với tùy chọn section-anchors (XC8-3045) Chương trình đã xác định các hàm có danh sách đối số biến 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 thư giãn trình liên kết tối ưu hóa thu nhỏ hướng dẫn (ví dụ:ample call to rcall), ánh xạ dòng nguồn tới địa chỉ có thể không được đồng bộ hóa khi có nhiều hơn một hoạt động thu nhỏ xảy ra trong một phần.
Trong 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 khả dụng trên thiết bị, mặc dù chương trình có thể vừa với dung lượng khả dụng.
Không thông minh lắm Smart-I0 (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 dưới mức tối ưu cho hàm snprint f nếu tính năng const-data-in-progmem đã bị tắt hoặc nếu thiết bị có tất cả flash được ánh xạ vào bộ nhớ dữ liệu.
Smart-I0 thậm chí 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 mã hợp lệ nhưng dưới mức tối ưu 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 biết về các phần bộ nhớ APPCODE và APPDATA, cũng như sự phân chia [Không đọc-trong khi ghi trong bản đồ bộ nhớ. Do đó, 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 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. Các tính năng này có thể bị vô hiệu hóa nếu cần.
Đối tượng file lệnh xử lý (XC8-2863) Thứ tự các đối tượng files sẽ được xử lý bởi trình liên kết có thể khác nhau dựa trên việc sử dụng tối ưu hóa trừu tượng thủ tục (tùy chọn -mpa). Điều này sẽ chỉ ảnh hưởng đến mã xác định các chức năng yếu trên nhiều mô-đun.
Lỗi trình liên kết với tuyệt đối (XC8-2777) Khi một đối tượng đã được tạo tuyệt đối tại một địa chỉ ở đầ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 các thiết bị ATA5700/2, các thanh ghi PHIDO/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 một ký hiệu đã được xác định bằng tùy chọn trình liên kết -cc., –de f sym.
Khởi tạo không chính xác (XC8-2679) Có là 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.
Các cuộc gọi chức năng gián tiếp không hợp lệ (XC8-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ũamplê:
strtof (“Oxl”, &endptr) ;
sẽ trả về giá trị 0, không phải I.
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ã.
Đầu ra không hợp lệ 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à ‘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 chéo 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 ( )) và các đối tượng khác bằng cách sử dụng bộ xác định phần ( ) 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:
trả về 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 -mre lax đượ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 đó localtime() sẽ trả về cùng thời gian với gmtime() , ví dụ:ample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm