Cathetan Rilis MPLAB® XC8 C Compiler Versi 2.41 kanggo AVR® MCU
Manual Pamilik
Piranti Lunak Pangembangan Compiler MPLAB XC8 C
DOKUMEN IKI NGANDUH INFORMASI PENTING GANTI KOMPILER MPLAB XC8 C nalika nargetake piranti AVR MICROCHIP.
MANGGA WACANA SADUNGE MANGKOK SOFTWARE IKI. NDELENG Cathetan rilis kompiler MPLAB XC8 C kanggo DOKUMEN PIC yen sampeyan nggunakake kompiler kanggo piranti PIC 8-BIT.
Swaraview
1.1. Pambuka
Rilis kompiler Microchip MPLAB® XC8 C iki ngemot sawetara fitur anyar lan perbaikan bug.
1.2. Tanggal Mbangun
Tanggal mbangun resmi versi kompiler iki yaiku 8 Februari 2023.
1.3. Versi sadurungé
Versi kompiler MPLAB XC8 C sadurunge yaiku 2.40 dibangun ing 3 Juli 2022.
1.4. Manual Keamanan Fungsional
Manual Safety Fungsional kanggo kompiler MPLAB XC kasedhiya ing paket dokumentasi nalika sampeyan tuku lisensi safety fungsional.
1.5. Lisensi Komponen lan Versi
Compiler MPLAB XC8 C kanggo piranti AVR MCU ditulis lan disebarake miturut Lisensi Umum Umum GNU (GPL) sing tegese kode sumbere disebarake kanthi bebas lan kasedhiya kanggo umum.
Kode sumber kanggo piranti ing GNU GPL bisa diundhuh kanthi kapisah saka Microchip websitus. Sampeyan bisa maca GNU GPL ing file sing dijenengi ana ing subdirektori direktori install license.txt avr/doc. Diskusi umum babagan prinsip sing ndasari GPL bisa ditemokake ing kene.
Kode dhukungan sing diwenehake kanggo file header, skrip linker, lan perpustakaan runtime minangka kode kepemilikan lan ora dilindhungi ing GPL.
Compiler iki minangka implementasine saka GCC versi 5.4.0, binutils versi 2.26, lan nggunakake avr-libc versi 2.0.0.
1.6. Requirements Sistem
Compiler MPLAB XC8 C lan piranti lunak lisensi sing digunakake kasedhiya kanggo macem-macem sistem operasi, kalebu versi 64-bit ing ngisor iki: Edisi profesional Microsoft® Windows® 10; Ubuntu® 18.04; lan macOS® 10.15.5. Binari kanggo Windows wis ditandatangani kode. Binari kanggo macOS wis ditandatangani kode lan diaktakake. Server Lisensi Jaringan MPLAB XC kasedhiya kanggo macem-macem sistem operasi 64-bit, kalebu Microsoft Windows 10 lan ndhuwur; Ubuntu 18.04 lan ndhuwur; utawa macOS 10.15 lan ndhuwur. Server uga bisa mlaku ing macem-macem sistem operasi liyane kalebu Windows Server, distribusi Linux, kayata Oracle® Enterprise Linux® lan Red Hate Enterprise Linux uga versi lawas saka sistem operasi sing didhukung. Nanging, Server Lisensi Jaringan MPLAB XC ora diuji ing sistem operasi kasebut. Server Lisensi Jaringan MPLAB XC bisa ditindakake ing Mesin Virtual saka OS sing didhukung nggunakake lisensi mesin virtual kanggo lisensi jaringan (SW006021-VM). Kabeh versi 32-bit saka Server Jaringan MPLAB XC ora diterusake wiwit versi 3.00.
Piranti sing Didhukung
Compiler iki ndhukung kabeh piranti AVR MCU 8-bit sing kasedhiya nalika diluncurake. Deleng (ing direktori compiler) kanggo dhaptar kabeh piranti sing didhukung. File-file iki uga dhaptar
avr_chipinfo.html setelan bit konfigurasi doc kanggo saben piranti.
1.7. Edisi lan Nganyarke Lisensi
Compiler MPLAB XC8 bisa diaktifake minangka produk dilisensi (PRO) utawa ora dilisensi (Gratis). Sampeyan kudu tuku kunci aktivasi kanggo menehi lisensi kompiler. A lisènsi ngidini kanggo tingkat sing luwih dhuwur saka Optimization dibandhingake Free produk. Kompiler tanpa lisensi bisa dioperasikake tanpa lisensi. Compiler Safety Fungsional MPLAB XC8 kudu diaktifake kanthi lisensi safety fungsional sing dituku saka Microchip. Compiler ora bakal operate tanpa lisensi iki. Sawise diaktifake, sampeyan bisa milih level optimasi lan nggunakake kabeh fitur kompiler. Rilis Compiler Keamanan Fungsional MPLAB XC iki ndhukung Lisensi Server Jaringan.
Deleng dokumen Nginstal lan Lisensi MPLAB XC C Compiler (DS50002059) kanggo informasi babagan jinis lisensi lan instalasi kompiler kanthi lisensi.
1.8. Instalasi lan Aktivasi
Deleng uga bagean Masalah lan Watesan Migrasi kanggo informasi penting babagan manajer lisensi paling anyar sing kalebu ing kompiler iki.
Yen nggunakake MPLAB IDE, priksa manawa sampeyan nginstal MPLAB X IDE versi 5.0 utawa luwih anyar sadurunge nginstal alat iki. Mungkasi IDE sadurunge nginstal compiler. Jalanake (Windows), (Linux) utawa (macOS) .exe .run .app compiler installer aplikasi, contone lan tindakake pituduh ing layar. XC8-1.00.11403-windows.exe Direktori instalasi gawan dianjurake. Yen sampeyan nggunakake Linux, sampeyan kudu nginstal compiler nggunakake terminal lan saka akun root. Instal nggunakake akun macOS kanthi hak istimewa administrator.
Aktivasi saiki ditindakake kanthi kapisah kanggo instalasi. Deleng dokumen License Manager kanggo MPLAB® XC C Compiler (DS52059) kanggo informasi luwih lengkap.
Yen sampeyan milih nglakokake kompiler miturut lisensi evaluasi, sampeyan saiki bakal entuk bebaya sajrone kompilasi nalika sampeyan ana ing 14 dina sawise pungkasan periode evaluasi. Bebaya sing padha ditanggepi yen sampeyan ana ing 14 dina saka pungkasan langganan HPA.
Server Lisensi Jaringan XC minangka installer sing kapisah lan ora kalebu ing installer kompiler pangguna siji.
Manajer Lisensi XC saiki ndhukung roaming lisensi jaringan ngambang. Ditujukake kanggo pangguna seluler, fitur iki ngidini lisensi ngambang kanggo mateni jaringan kanggo wektu sing cendhak. Nggunakake fitur iki, sampeyan bisa medhot saka jaringan lan isih nggunakake MPLAB XC compiler. Deleng folder doc instalasi XCLM kanggo informasi luwih lengkap babagan fitur iki.
MPLAB X IDE kalebu jendhela Lisensi (Alat> Lisensi) kanggo ngatur roaming kanthi visual.
1.8.1. Ngatasi Masalah Instalasi
Yen sampeyan ngalami kangelan nginstal compiler ing salah sawijining sistem operasi Windows, coba saran ing ngisor iki.
Jalanake instalasi minangka administrator.
Setel idin saka aplikasi installer kanggo 'Full kontrol'. (Klik kanan file, pilih Properties, tab Security, pilih user, edit.)
Setel ijin folder temp dadi 'Kontrol Lengkap'.
Kanggo nemtokake lokasi folder temp, ketik %temp% ing printah Run (tombol logo Windows + R).
Iki bakal mbukak dialog panjelajah file sing nuduhake direktori kasebut lan ngidini sampeyan nemtokake dalan folder kasebut.
1.9. Dokumentasi Compiler
Pandhuan pangguna compiler bisa dibukak saka kaca HTML sing mbukak ing browser nalika ngeklik tombol bantuan biru ing dashboard MPLAB X IDE, kaya sing dituduhake ing gambar.
Yen sampeyan nggawe target AVR 8-bit, Pandhuan Pangguna Compiler MPLAB® XC8 C kanggo AVR® MCU ngemot informasi babagan opsi lan fitur kompiler sing ditrapake kanggo arsitektur iki.
1.10. Dhukungan Pelanggan
Microchip nampani laporan bug, saran utawa komentar babagan versi kompiler iki. Mangga langsung laporan bug utawa panjalukan fitur liwat Sistem Dhukungan.
Update Dokumentasi
Kanggo versi on-line lan paling anyar saka dokumentasi MPLAB XC8, bukak Dokumentasi Teknis Online Microchip websitus. Dokumentasi AVR anyar utawa dianyari ing rilis iki:
- Pandhuan Pangguna Compiler MPLAB® XC8 C kanggo AVR® MCU (revisi G)
- AVR® GNU Toolchain menyang Pandhuan Migrasi MPLAB® XC8 (revisi A)
- Pandhuan Pangguna Hexmate (revisi B)
AVR® GNU Toolchain to MPLAB® XC8 Migration Guide njlèntrèhaké owah-owahan kanggo kode sumber lan opsi mbangun sing bisa uga dibutuhake yen sampeyan mutusake kanggo migrasi proyek basis C saka AVR 8-bit GNU Toolchain menyang Microchip MPLAB XC8 C Compiler. Microchip Unified Standard Library Reference Guide njlèntrèhaké prilaku lan antarmuka kanggo fungsi ditetepake dening Microchip Unified Standard Library, uga dimaksudaké nggunakake jinis perpustakaan lan macro. Sawetara informasi iki sadurunge ana ing Pandhuan Pangguna Compiler MPLAB® XC8 C kanggo AVR® MCU. Informasi perpustakaan khusus piranti isih ana ing pandhuan kompiler iki.
Yen sampeyan lagi miwiti nganggo piranti 8-bit lan Compiler MPLAB XC8 C, Pandhuan Pangguna MPLAB® XC8 kanggo Insinyur Tertanam - AVR® MCUs (DS50003108) duwe informasi babagan nyiyapake proyek ing MPLAB X IDE lan nulis kode kanggo sampeyan. project MPLAB XC8 C pisanan. Pandhuan iki saiki disebarake karo compiler.
Pandhuan Pangguna Hexmate ditujokake kanggo sing nglakokake Hexmate minangka aplikasi mandiri.
Apa Anyar
Ing ngisor iki minangka fitur target AVR anyar sing saiki didhukung kompiler. Nomer versi ing subjudul nuduhake versi kompiler pisanan sing ndhukung fitur-fitur sabanjure.
3.1. Versi 2.41
Dhukungan bootrow (XC8-3053) Compiler bakal nempatake isi bagean apa wae kanthi prefiks at.bootrow alamat 0x860000 ing file HEX. Bagean iki digunakake kanggo memori BOOTROW, sing dirancang kanggo panyimpenan tombol lan informasi aman liyane sing mung bisa diakses kanggo bootloader.
Eliminasi bali keluwih (XC8-3048) Compiler saiki bakal ngilangi instruksi keluwih ing fungsi ret karo mlumpat buntut nalika script linker adat digunakake. Iki minangka optimasi sing padha karo sing ditindakake sadurunge, nanging saiki ditindakake ing kabeh bagean yatim piatu, sanajan skrip linker khusus digunakake lan skema alokasi sing paling apik ora ana. Pangowahan jinis wektu (XC8-2982, 2932) Tipe perpustakaan standar C99, wis diganti saka time_t kanggo jinis, kang menehi dandan kode-ukuran ing sawetara fungsi long long related wektu, kayata. mktime dawa ora ditandatangani ()
Nop anyar (XC8-2946, 2945) Makro wis ditambahake menyang. Makro iki nglebokake no- NOP() instruksi operasi nop menyang output.
Nganyari XCLM (XC8-2944) Pangatur lisensi sing digunakake karo kompiler wis dianyari lan saiki luwih responsif nalika mriksa rincian lisensi kompiler.
Tramptelpon olined (XC8-2760) Compiler saiki bisa nindakake panggantos saka long-form instruksi telpon karo telpon relatif luwih cendhek nalika wangun relatif saka instruksi biasane bakal metu saka sawetara tujuan. Ing kahanan iki, compiler bakal nyoba kanggo ngganti karo instruksi kanggo nelpon rcall instruksi sing bakal 'trampeksekusi oline menyang alamat sing dibutuhake, contoneamplan: jmp
njur tramp_foo ;ditelpon foo
…
njur tramp_ mboh
…
tramp_mboh:
jmp wuh
Optimasi iki, bebarengan karo optimasi aliran program sing padha, dikontrol dening opsi -mrelax.
3.2. Versi 2.40
Dhukungan dhukungan piranti anyar saiki kasedhiya kanggo bagean AVR ing ngisor iki: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32, AVR64EA48, AVRXNUMXEAXNUMX, lan AVRXNUMXEA.
Abstraksi prosedural sing luwih apik Alat optimasi abstraksi prosedural (PA) wis ditambahake supaya kode sing ngemot instruksi panggilan fungsi (/ ) bisa digambarake. Iki mung bakal njupuk Panggonan telpon rcall yen tumpukan ora digunakake kanggo pass bantahan utawa njupuk Nilai bali saka fungsi. Tumpukan digunakake nalika nelpon fungsi karo dhaftar argumen variabel utawa nalika nelpon fungsi sing njupuk bantahan luwih saka ana ndhaftar ditetepake kanggo maksud iki. Fitur iki bisa dipateni nggunakake opsi, utawa abstraksi prosedural bisa dipateni kabeh kanggo file utawa fungsi obyek kanthi nggunakake- lan, mungguh, utawa kanthi nggunakake atribut (spesifik) kanthi selektif karo fungsi.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa Macro jangkoan kode Compiler saiki nemtokake makro yen pilihan sing bener yaiku __nopa __CODECOV -mcodecov sing ditemtokake.
Opsi leladen memori Pembalap saiki bakal nampa pilihan xc8-cc -mreserve=space@start:end nalika mbangun kanggo target AVR. Opsi iki nyimpen jangkoan memori sing ditemtokake ing ruang memori data utawa program, supaya linker ora ngisi kode utawa obyek ing wilayah iki. Smarter smart IO Sawetara dandan wis digawe kanggo fungsi Smart IO, kalebu njiwet umum kanggo kode inti printf, nganggep %n konversi specifier minangka varian independen, ngubungake ing vararg pop rutin ing dikarepake, nggunakake jinis data sing luwih cendhek yen bisa kanggo nangani. Argumen fungsi IO, lan faktoring kode umum ing jembar lapangan lan penanganan presisi. Iki bisa nyebabake penghematan kode lan data sing signifikan, uga nambah kacepetan eksekusi IO.
3.3. Versi 2.39 (Rilis Keamanan Fungsional)
Lisensi Server Jaringan Rilis iki saka Compiler Keamanan Fungsional MPLAB XC8 ndhukung Lisensi Server Jaringan.
3.4. Versi 2.36
ora ana.
3.5. Versi 2.35
Dhukungan dhukungan piranti anyar kasedhiya kanggo bagean AVR ing ngisor iki: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28, lan AVR64DD32.
Ngalih konteks sing luwih apik Opsi -mcall-isr-prologues anyar ngganti cara fungsi interupsi nyimpen registrasi ing entri lan carane registrasi kasebut dibalekake nalika rutin interupsi mandheg. Kerjane kanthi cara sing padha karo pilihan -mcall-prologues, nanging mung mengaruhi fungsi interupsi (ISR).
Ngalih konteks sing luwih apik Pilihan -mgas-isr-prologues anyar ngontrol kode switch konteks sing digawe kanggo rutin layanan interrupt cilik. Yen diaktifake, fitur iki bakal duwe assembler mindai ISR kanggo panggunaan registrasi lan mung nyimpen registrasi sing digunakake yen dibutuhake.
Pemetaan lampu kilat sing bisa dikonfigurasi Sawetara piranti ing kulawarga AVR DA lan AVR DB duwe SFR (contone FLMAP) sing nemtokake bagean memori program 32k sing bakal dipetakan menyang memori data. Pilihan anyar - mconst-data-in-config-mapped-progmem bisa digunakake kanggo nduwe linker nyeleh kabeh data const-qualified ing siji bagean 32k lan kanthi otomatis initialize ndhaftar SFR cocog kanggo mesthekake yen data iki wis dipetakan menyang memori data. papan, ing ngendi bakal diakses kanthi luwih efektif.
Microchip Unified Standard Libraries Kabeh kompiler MPLAB XC bakal nuduhake Microchip Unified Standard Library, sing saiki kasedhiya karo rilis MPLAB XC8 iki. Pandhuan Pangguna Compiler MPLA# XC8 C kanggo AVO MCU ora kalebu dokumentasi kanggo fungsi standar kasebut. Informasi iki saiki bisa ditemokake ing Microchip Unified Standard Library Reference Guide. Elinga yen sawetara fungsi sing sadurunge ditetepake dening avr-libc ora kasedhiya maneh. (Deleng fungsi Lila.)
Smart I0 Minangka bagéan saka perpustakaan terpadu anyar, fungsi I0 ing printf lan scanf kulawargané saiki adat-kui ing saben mbangun, adhedhasar carane fungsi iki digunakake ing program. Iki bisa nyuda sumber daya sing digunakake dening program.
Opsi pitulungan Smart ICI Nalika nganalisa telpon menyang fungsi I0 pinter (kayata print f () utawa scanf ()), compiler ora bisa tansah nemtokake saka string format utawa nyimpulake saka bantahan sing specifiers konversi dibutuhake dening telpon. Sadurunge, compiler mesthi ora nggawe asumsi lan mesthekake yen fungsi 10 kanthi fungsi disambung menyang gambar program pungkasan. Opsi anyar - msmart-io-format=fmt wis ditambahake supaya kompiler bisa diwenehi informasi dening pangguna babagan penentu konversi sing digunakake dening fungsi I0 pinter sing panggunaane ora jelas, nyegah 10 rutinitas sing dawa banget disambung. (Deleng Opsi format smart-io kanggo rincian liyane.)
Nempatake bagean khusus Sadurunge, pilihan -W1, -section-start mung diselehake ing bagean kasebut ing alamat sing dijaluk nalika script linker nemtokake bagean output kanthi jeneng sing padha. Yen ora, bagean kasebut diselehake ing alamat sing dipilih dening linker lan pilihan kasebut ora digatekake. Saiki pilihan kasebut bakal diajeni kanggo kabeh bagean khusus, sanajan skrip linker ora nemtokake bagean kasebut. Elinga, Nanging, kanggo bagean standar, kayata . teks,. bss utawa. data, allocator paling pas isih bakal duwe kontrol lengkap liwat panggonan seko sing, lan pilihan ora duwe efek. Gunakake pilihan -ton, -Tsection=addr, kaya sing diterangake ing pandhuan pangguna.
3.6. Versi 2.32
Tuntunan Tumpukan Kasedhiya karo lisensi kompiler PRO, fitur tuntunan tumpukan kompiler bisa digunakake kanggo ngira ambane maksimum tumpukan sing digunakake dening program. Iki mbangun lan nganalisa grafik panggilan program, nemtokake panggunaan tumpukan saben fungsi, lan ngasilake laporan, saka ngendi ambane tumpukan sing digunakake dening program kasebut bisa disimpulake. Fitur iki diaktifake liwat opsi baris printah -mchp-stack-usage. Ringkesan panggunaan tumpukan dicithak sawise eksekusi. Laporan tumpukan rinci kasedhiya ing peta file, sing bisa dijaluk kanthi cara biasa.
Dhukungan dhukungan piranti anyar kasedhiya kanggo bagean AVR ing ngisor iki: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, AVR32DB48, AVR16DB28, AVR16DB32, lan Dhukungan piranti sing ditarik ora kasedhiya maneh kanggo bagean AVR ing ngisor iki: AVR16DA48, AVRXNUMXDAXNUMX lan, AVRXNUMXDAXNUMX.
3.7. Versi 2.31
ora ana.
3.8. Versi 2.30
Opsi anyar kanggo nyegah initialization data Opsi driver -mno-data-init anyar nyegah wiwitan data lan ngresiki bagean bss. Kerjane kanthi nyuda output data salinan do lan nindakake simbol bss sing jelas ing perakitan files, kang siji bakal nyegah Gawan sing rutin dening linker.
Optimizations Meningkat A sawetara dandan Optimization wis digawe, kalebu mbusak instruksi bali keluwih, mbusak sawetara mlumpat sawise skip-yen-dicokot-instruksi, lan abstraksi prosedural apik lan kemampuan kanggo iterate proses iki. Opsi tambahan saiki kasedhiya kanggo ngontrol sawetara optimasi kasebut, khusus -f bagean-jangkar, sing ngidini akses obyek statis bisa ditindakake relatif marang siji simbol; -mpa-iterations=n, sing ngidini jumlah pengulangan abstraksi prosedural diganti saka standar 2; lan, -mpa-callcost-shortcall, kang nindakake abstraksi prosedural luwih agresif, ing pangarep-arep sing linker bisa ngendhokke telpon dawa. Opsi pungkasan iki bisa nambah ukuran kode yen asumsi dhasar ora diwujudake.
Dhukungan Dhukungan piranti anyar kasedhiya kanggo bagean AVR ing ngisor iki: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DA32, AVR128DB48 VR128DB64. Dhukungan Dhukungan piranti sing ditarik ora kasedhiya maneh kanggo bagean AVR ing ngisor iki: ATA5272, ATA5790, ATA5790N, ATA5791, ATA5795, ATA6285, ATA6286, ATA6612C, ATA6613C, ATA6614Q, ATA6616Q, ATA6617.
3.9. Versi 2.29 (Rilis Keamanan Fungsional)
Header file kanggo compiler built-in Kanggo mesthekake yen compiler bisa cocog karo spesifikasi basa kayata MISRA, header file, kang otomatis klebu dening , wis dianyari. Header iki ngemot prototipe kanggo kabeh fungsi sing dibangun, kayata builtin_avr_nop ( ) lan builtin avr delay_cycles (). Sawetara built-in bisa uga ora cocog karo MISRA; iki bisa diilangi kanthi nambah defineXCSTRICT_MISRA ing baris printah compiler. Kasedhiya lan deklarasi wis dianyari kanggo nggunakake jinis jembar tetep.
3.10. Versi 2.20
Dhukungan dhukungan piranti anyar kasedhiya kanggo bagean AVR ing ngisor iki: ATTINY1624, ATTINY1626, lan ATTINY1627.
Alokasi pas paling apik Alokasi pas paling apik (BFA) ing kompilator wis apik supaya bagean dialokasikan kanthi urutan sing ngidini optimasi luwih apik. BFA saiki ndhukung spasi alamat sing dijenengi lan luwih apik nangani initialization data.
Abstraksi prosedural sing luwih apik Optimisasi abstraksi prosedural saiki ditindakake ing urutan kode sing luwih akeh. Kahanan sadurunge optimasi iki bisa nambah ukuran kode wis ditangani kanthi nggawe kode optimasi ngerti proses pengumpulan sampah linker.
Ora ana AVR Assembler AVR Assembler ora ana maneh karo distribusi iki.
3.11. Versi 2.19 (Rilis Keamanan Fungsional)
ora ana.
3.12. Versi 2.10
Cakupan Kode Rilis iki kalebu fitur jangkoan kode sing nggampangake analisa babagan sejauh mana kode sumber proyek wis dieksekusi. Gunakake pilihan -mcodecov=ram kanggo ngaktifake. Sawise eksekusi program ing hardware sampeyan, informasi jangkoan kode bakal diklumpukake ing piranti, lan iki bisa ditransfer menyang lan ditampilake dening MPLAB X IDE liwat plugin jangkoan kode. Deleng dokumentasi IDE kanggo informasi babagan plugin iki bisa dipikolehi. #pragma nocodecov bisa digunakake kanggo ngilangi fungsi sakteruse saka analisis jangkoan. Saenipun pragma kudu ditambahake ing wiwitan file kanggo ngilangi kabeh file saka analisis jangkoan. Utawa, _attribute_ ( (nocodecov) ) bisa digunakake kanggo ngilangi fungsi tartamtu saka analisis jangkoan.
Katrangan piranti files Piranti anyar file disebut avr_chipinfo . html dumunung ing direktori docs saka distribusi compiler. Iki file dhaptar kabeh piranti sing didhukung dening compiler. Klik ing jeneng piranti, lan bakal mbukak kaca sing nuduhake kabeh setelan bit konfigurasi sing diidini / nyeri nilai kanggo piranti kasebut, karo mantanamples. abstraksi prosedural
Optimasi abstraksi prosedural, sing ngganti blok kode perakitan umum kanthi panggilan menyang salinan sing diekstrak saka blok kasebut, wis ditambahake menyang kompiler. Iki dileksanakake dening aplikasi kapisah, kang kanthi otomatis invoked dening compiler nalika milih tingkat 2, 3 utawa s optimizations. Optimizations iki nyuda ukuran kode, nanging bisa nyuda kacepetan eksekusi lan kode debugability. abstraksi prosedural bisa dipatèni ing tingkat Optimization luwih nggunakake pilihan -mno-pa, utawa bisa aktif ing tingkat Optimization ngisor (tundhuk lisensi) nggunakake -mpa. Bisa dipateni kanggo obyek file nggunakake -mno-pa-on-file=filejeneng, utawa dipatèni kanggo fungsi kanthi nggunakake -mno-pa-on-function = fungsi. Ing kode sumber sampeyan, abstraksi prosedural bisa dipateni kanggo fungsi kanthi nggunakake atribut ( (nopa) ) kanthi definisi fungsi kasebut, utawa kanthi nggunakake nopa, sing ditambahi dadi atribut ( (nopa, noinline) ) lan kanthi mangkono nyegah fungsi inlining ora kedadeyan. lan ana abstraksi kode inline.
Dhukungan bit kunci ing pragma Konfigurasi #pragma saiki bisa digunakake kanggo nemtokake bit kunci AVR uga bit konfigurasi liyane. Priksa avr_chipinfo . html file (kasebut ing ndhuwur) kanggo pasangan setelan / nilai digunakake karo pragma iki. Dhukungan dhukungan piranti anyar kasedhiya kanggo bagean ing ngisor iki: AVR28DAl28, AVR64DAl28, AVR32DA 128, lan AVR48DA 128.
3.13. Versi 2.05
Luwih akeh dhuwit kanggo sampeyan Versi macOS saka kompiler lan manajer lisensi iki saiki dadi aplikasi 64-bit. Iki bakal mesthekake yen compiler bakal nginstal lan mbukak tanpa bebaya ing versi macOS anyar.
Objek Const ing memori program Compiler saiki bisa nyelehake obyek const-qualified ing memori Flash program, tinimbang duwe iki dumunung ing RAM. Compiler wis diowahi supaya cons t-qualified data global disimpen ing memori flash program lan data iki bisa langsung lan ora langsung diakses nggunakake instruksi program-memori cocok. Fitur anyar iki diaktifake kanthi gawan nanging bisa dipateni nggunakake pilihan -mno-const-data-in-progmem. Kanggo arsitektur avrxmega3 lan avrtiny, fitur iki ora dibutuhake lan tansah dipatèni, wiwit memori program wis dipetakan menyang papan alamat data kanggo piranti iki.
Standar kanggo versi kompiler sing ora dilisensi (Gratis) saiki ngidini optimasi nganti level 2. Iki bakal ngidini output sing padha, sanajan ora identik, karo sing bisa ditindakake sadurunge nggunakake lisensi Standar.
Welcome AVRASM2 Assembler AVRASM2 kanggo piranti 8-bit saiki kalebu ing installer compiler XC8. assembler iki ora digunakake dening XC8 compiler, nanging kasedhiya kanggo proyèk adhedhasar sumber Déwan ditulis tangan.
Dhukungan piranti anyar kasedhiya kanggo bagean ing ngisor iki: ATMEGA1608, ATMEGA1609, ATMEGA808, lan ATMEGA809.
3.14. Versi 2.00
Top-level Driver A driver anyar, disebut xc8-cc, saiki lenggah ndhuwur driver avr-gcc sadurungé lan driver xc8, lan bisa nelpon compiler cocok adhedhasar pilihan saka piranti target. Pembalap iki nampa opsi gaya GCC, sing diterjemahake utawa diterusake menyang kompiler sing dieksekusi. Pembalap iki ngidini opsi sing padha karo semantik sing padha kanggo digunakake karo target AVR utawa PIC lan kanthi mangkono minangka cara sing disaranake kanggo njaluk kompiler. Yen dibutuhake, driver avr-gcc lawas bisa langsung ditelpon nggunakake opsi gaya lawas sing ditampa ing versi kompiler sadurungé.
Antarmuka C Umum Kompiler iki saiki bisa selaras karo Antarmuka C Umum MPLAB, ngidini kode sumber luwih gampang ditransfer ing kabeh kompiler MPLAB XC. Opsi -mext=cci njaluk fitur iki, mbisakake sintaksis alternatif kanggo akeh ekstensi basa.
Pembalap pustakawan anyar A pembalap pustakawan anyar dipanggonke ing ndhuwur pustakawan PIC sadurunge lan pustakawan AVR avr-ar. Pembalap iki nampa opsi gaya GCC-archiver, sing diterjemahake utawa diterusake menyang pustakawan sing dieksekusi. Pembalap anyar ngidini pilihan sing padha karo semantik sing padha kanggo digunakake kanggo nggawe utawa ngapusi perpustakaan PIC utawa AVR. file lan kanthi mangkono cara sing disaranake kanggo ngundang pustakawan. Yen dibutuhake kanggo proyek warisan, pustakawan sadurunge bisa langsung ditelpon nggunakake opsi gaya lawas sing ditampa ing versi kompiler sadurungé.
Masalah Migrasi
Ing ngisor iki minangka fitur sing saiki ditangani kanthi beda dening compiler. Owah-owahan iki mbutuhake modifikasi kode sumber yen ngirim kode menyang versi kompiler iki. Nomer versi ing subjudul nuduhake versi kompiler pisanan sing ndhukung owah-owahan sabanjure.
4.1. Versi 2.41
Fungsi fma sing ora akurat dibusak (XC8-2913) Pustaka standar C99 fma 0 -fungsi kulawarga ( ) ora ngetung multiply-nambah kanthi presisi tanpa wates menyang babak siji, nanging nglumpukake kesalahan pembulatan kanthi saben operasi. Fungsi kasebut wis dibusak saka perpustakaan sing diwenehake.
4.2. Versi 2.40
ora ana.
4.3. Versi 2.39 (Rilis Keamanan Fungsional)
ora ana.
4.4. Versi 2.36 Ora ana.
4.5. Versi 2.35
Nangani basis string-to (XC8-2420) Kanggo mesthekake konsistensi karo kompiler XC liyane, fungsi string-to XC8, kaya strtol () etc., ora bakal nyoba ngowahi string input yen basis sing ditemtokake luwih gedhe tinimbang 36 lan tinimbang bakal nyetel errno kanggo EINVAL. Standar C ora nemtokake prilaku fungsi nalika nilai dhasar iki ngluwihi.
Optimasi kacepetan sing ora cocog Optimasi abstraksi prosedural diaktifake nalika milih optimasi level 3 (-03). Optimasi iki nyuda ukuran kode kanthi biaya kacepetan kode, mula ora kudu ditindakake. Proyek sing nggunakake tingkat optimasi iki bisa uga ndeleng beda ukuran kode lan kacepetan eksekusi nalika dibangun nganggo rilis iki.
Fungsi perpustakaan Kode kanggo akeh fungsi perpustakaan C standar saiki teka saka Perpustakaan Standar Bersatu Microchip, sing bisa uga nuduhake prilaku sing beda ing sawetara kahanan dibandhingake karo sing diwenehake dening perpustakaan avr-libc mantan. Kanggo example, iku ora perlu kanggo link ing perpustakaan 1printf flt (-1printf_flt pilihan) kanggo nguripake format I0 dhukungan kanggo specifiers format float. Sing pinter I0 fitur saka Microchip Unified Standard Library ndadekake pilihan iki keluwih. Kajaba iku, nggunakake _P suffixed rutin kanggo senar lan fungsi memori (contone strcpy_P () etc.) sing operate ing const strings ing lampu kilat ora perlu maneh. Rutinitas C standar (contone strcpy ) bakal bisa digunakake kanthi bener karo data kasebut nalika fitur const-data-in-program-memory diaktifake.
4.6. Versi 2.32
ora ana.
4.7. Versi 2.31
ora ana.
4.8. Versi 2.30
ora ana.
4.1. Versi 2.29 (Rilis Keamanan Fungsional)
ora ana.
4.2. Versi 2.20
Ngganti tata letak DFP Compiler saiki nganggep tata letak sing beda sing digunakake dening DFPs (Device Family Packs). Iki tegese DFP lawas bisa uga ora bisa digunakake karo rilis iki, lan kompiler lawas ora bakal bisa nggunakake DFP paling anyar.
4.3. Versi 2.19 (Rilis Keamanan Fungsional)
ora ana.
4.4. Versi 2.10
ora ana
4.5. Versi 2.05
Objek Const ing memori program Elinga yen kanthi standar, obyek const-qualfiied bakal diselehake lan diakses ing memori program (minangka hue diterangake). Iki bakal mengaruhi ukuran lan kacepetan eksekusi proyek sampeyan, nanging kudu nyuda panggunaan RAM. Fitur iki bisa dipateni, yen dibutuhake, nggunakake pilihan -mnoconst-data-in-progmem.
4.6. Versi 2.00
Sekring Konfigurasi Sekring konfigurasi piranti saiki bisa diprogram nggunakake pragma konfigurasi sing diterusake karo pasangan nilai-set kanggo nemtokake status sekring, contone.
#pragma config WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
Objek lan fungsi mutlak Obyek lan fungsi saiki bisa diselehake ing alamat tartamtu ing memori nggunakake specifier CCI (alamat), kanggo ex.ample:
#kalebu
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
Argumentasi kanggo specifier iki kudu konstanta sing makili alamat ing ngendi byte pisanan utawa instruksi bakal diselehake. Alamat RAM dituduhake kanthi nggunakake offset 0x800000. Aktifake CCI kanggo nggunakake fitur iki.
Sintaks fungsi interupsi anyar Compiler saiki nampa specifier CCI _interrupt (num) kanggo nunjukake yen fungsi C minangka panangan interrupt. Specifier njupuk nomer interupsi, contoneample:
#kalebu
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Masalah tetep
Ing ngisor iki minangka koreksi sing wis digawe kanggo compiler. Iki bisa uga ndandani kewan omo ing kode sing digawe utawa ngowahi operasi compiler menyang sing dimaksudake utawa ditemtokake dening pandhuan pangguna. Nomer versi ing subheadings nuduhake versi kompiler pisanan sing ngemot mbenakake kanggo masalah sabanjure. Label ing kurung ing judhul yaiku identifikasi masalah kasebut ing basis data pelacakan. Iki bisa uga migunani yen sampeyan kudu ngubungi dhukungan.
Elinga yen sawetara masalah khusus piranti didandani ing Device Family Pack (DFP) sing digandhengake karo piranti kasebut. Deleng Manajer Paket MPLAB kanggo informasi babagan owah-owahan sing digawe kanggo DFP lan download paket paling anyar.
5.1. Versi 2.41
Masalah Dongle ing Ventura (XC8-3088) Dongle digunakake kanggo menehi lisensi kompiler bisa uga ora diwaca kanthi bener ing host macOS Ventura, sing nyebabake gagal lisensi. Owah-owahan menyang manajer lisensi XCLM mbenerake masalah iki.
Indikasi alokasi memori sing salah (XC8-2925) Nyoba kanggo nyedhiakke SIZE_MAX bait (utawa nilai cedhak iki) saka memori nggunakake fungsi manajemen memori perpustakaan standar (malloc () et al) salah kasil. Iku ora njupuk menyang akun sing bita ekstra dibutuhake saliyane pamblokiran dijaluk nalika nggunakake implementasine alokasi memori dinamis prasaja. A pointer NULL saiki bakal bali lan errno disetel kanggo ENOMEM ing kahanan kaya mengkono.
Fungsi fma sing ora akurat dibusak (XC8-2913) Pustaka standar C99 fma ( ) -fungsi kulawarga ( ) ora ngetung multiply-nambah kanthi presisi tanpa wates menyang babak siji, nanging nglumpukake kesalahan pembulatan kanthi saben operasi. Fungsi kasebut wis dibusak saka perpustakaan sing diwenehake.
Penanganan konversi string sing ora apik (XC8-2921, XC8-2652) Nalika 'urutan subyek' kanggo konversi dening strtod Cr ngemot nomer floating-point ing format eksponensial lan ana karakter sing ora dikarepke sawise karakter e / E, banjur ing ngendi endptr wis diwenehake, alamat kasebut diwenehi alamat sing wis nunjukake karakter sawise e / E, dene kudu nuduhake karakter e / E dhewe, amarga sing durung diowahi. Kanggo example, strtod ("100exx", & ep) kudu ngasilake 100.00 lan nyetel ep kanggo nuding bagean "exx" saka senar, dene fungsi kasebut ngasilake nilai sing bener nanging nyetel ep kanggo nuding bagean "xx" saka senar. .
5.2. Versi 2.40
Terlalu santai (XCS-2876) Nalika nggunakake opsi -mrelax, compiler ora nyedhiakke sawetara bagean bebarengan, asil ing ukuran kode kurang optimal. Iki bisa uga kedadeyan kanthi kode sing nggunakake perpustakaan MUSL anyar utawa kanthi simbol sing lemah.
Fitur pemetaan ora dipateni kaya sing kasebut ing bebaya (XC8-2875) Fitur const-data-in-config-mappedprogmem gumantung ing fitur const-data-in-progmem sing diaktifake. Yen fitur const-data-inconfig-mapped-progmem diaktifake kanthi jelas nggunakake opsi kasebut lan fitur const-data-inprogmem dipateni, langkah link gagal, sanajan ana pesen bebaya sing nyatakake yen const-data-in-con fig- fitur mapped-progmem wis otomatis dipatèni, kang ora tanggung bener. Fitur const-data-in-config-mapped-progmem saiki dipateni kanthi lengkap ing kahanan iki.
Owah-owahan DFP kanggo ngakses NVMCTRL kanthi bener (XC8-2848) Kode wiwitan runtime sing digunakake dening piranti AVR64EA ora nyathet yen ndhaftar NVMCTRL ana ing Configuration Change Protection (CCP) lan ora bisa nyetel I0 SFR menyang kaca sing digunakake dening const-data-in-configmapped-progmem fitur kompiler. Owah-owahan sing digawe ing versi AVR-Ex_DFP 2.2.55 bakal ngidini kode wiwitan runtime kanggo nulis kanthi bener menyang register iki.
owah-owahan DFP kanggo ngindhari pemetaan lampu kilat (XC8-2847) A karya-mubeng kanggo masalah karo fitur piranti flash-mapping kacarita ing AVR128DA28/32/48/64 Silicon Errata (D580000882) wis dipun ginakaken. Fitur compiler const-data-in-config-mapped-progmem ora bakal ditrapake kanthi gawan kanggo piranti sing kena pengaruh, lan owah-owahan iki bakal katon ing versi AVR-Dx_DFP 2.2.160.
Mbangun kesalahan karo sinhf utawa coshf (XC8-2834) Nyoba kanggo nggunakake fungsi perpustakaan sinhf () utawa coshf () nyebabake kesalahan link, njlèntrèhaké referensi undefined. Fungsi sing ilang sing dirujuk saiki wis kalebu ing distribusi kompiler.
Mbangun kesalahan nganggo nopa (XC,8-2833) Nggunakake atribut nopa kanthi fungsi sing wis diwenehi jeneng assembler kanthi nggunakake asm () micu pesen kesalahan saka assembler. Kombinasi iki ora bisa ditindakake.
Gagal fungsi variadik kanthi argumen pointer (XC8-2755, XC8-2731) Fungsi karo nomer variabel argumen ngarepake 24-bit (jinis memx) pitunjuk bakal liwati ing dhaftar argumen variabel nalika fitur const-data-in-progmem diaktifake. Argumen-argumen sing dadi penunjuk memori data diterusake minangka obyek 16-bit, nyebabake kegagalan kode nalika pungkasane diwaca. Nalika fitur constdata-in-progmem diaktifake, kabeh argumen pointer 16-bit saiki diowahi dadi pointer 24-bit.
fungsi perpustakaan strtoxxx gagal (XC8-2620) Nalika fitur const-data-in-progmem diaktifake, parameter endptr ing fungsi perpustakaan strtoxxx ora dianyari bener kanggo bantahan senar sumber ora ing memori program.
Tandha kanggo cast sing ora valid (XC8-2612) Compiler saiki bakal nerbitake kesalahan yen fitur const-in-progmem diaktifake lan alamat string literal dilebokake sacara eksplisit menyang ruang alamat data (ngeculake kualifikasi const), kanggo example, (uint 8_t *) "Hello World!". Bebaya masalah yen alamat bisa uga ora sah nalika pointer data const sacara eksplisit dikirim menyang papan alamat data.
Penempatan obyek const sing ora diinisialisasi (XC8-2408) Const lan const obyek molah malih uninitialized ora diselehake ing memori program ing piranti sing map kabeh utawa bagéan saka memori program menyang papan alamat data. Kanggo piranti kasebut, obyek kasebut saiki diselehake ing memori program, nggawe operasi kasebut konsisten karo piranti liyane.
5.3. Versi 2.39 (Rilis Keamanan Fungsional)
ora ana.
5.4. Versi 2.36
Kesalahan nalika tundha (XC8-2774) owah-owahan suntingan ing standar Free mode Optimizations nyegah lempitan pancet ekspresi operand kanggo wektu tundha dibangun ing fungsi, asil ing dianggep minangka non-konstanta lan micu kesalahan: builtin avr delay_cycles ngarepake wektu kompilasi pancet integer.
5.5. Versi 2.35
Alokasi sesambungan nggunakake _at (XC8-2653) Alokasi sing cedhak karo macem-macem obyek ing bagean kanthi jeneng sing padha lan nggunakake _at ( ) ora bisa digunakake kanthi bener. Kanggo example:
const char arr1[] __attribute__((bagean(“.mysec”))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((bagean(“.mysec”))) = {0xEF, 0xFE};
kudu diselehake arr2 sanalika sawise arr1.
Nemtokake bagean wiwitan alamat (XC8-2650) Ing -W1, -section-wiwitan pilihan iki meneng gagal kanggo nyelehake bagean ing alamat wiwitan nominasi. Jeksa Agung bisa ngetokake iki wis didandani kanggo sembarang bagean khusus-jeneng; nanging, ora bakal bisa digunakake kanggo bagean standar, kayata. teks utawa . bss, sing kudu diselehake nggunakake pilihan -W1, -T.
Linker tubrukan nalika sayah (XC8-2647) Nalika optimasi -mrelax diaktifake lan ana kode utawa data bagean sing ora pas menyang memori kasedhiya, linker tabrakan. Saiki, ing kahanan kaya mengkono, pesen kesalahan ditanggepi tinimbang.
Ora ana-mudhun-bali (XC8-2646) The Opsi -nofallback ora ditindakake kanthi bener, utawa didokumentasikake. Iki saiki bisa dipilih kanggo mesthekake yen kompiler ora bakal bali menyang setelan optimasi sing luwih murah yen kompiler ora dilisensi, lan bakal ngetokake kesalahan.
Optimisasi kacepetan sing ora cocog (X03-2637) Optimasi abstraksi prosedural diaktifake nalika milih optimasi level 3 (-03). Optimasi iki nyuda ukuran kode kanthi biaya kacepetan kode, mula ora kudu ditindakake.
EEPROM ala akses (XC8-2629) Ing tumindake eeprom_read_block ora bisa digunakake kanthi bener ing piranti Xmega nalika pilihan -mconst-data-in-progmem diaktifake (sing minangka standar), nyebabake memori EEPROM ora diwaca kanthi bener.
Alokasi memori ora bener (XC8-2593, XC8-2651) Nalika ing -Ttext utawa -Tdata linker pilihan (kanggo example liwat nggunakake pilihan driver -vl) wis kasebut, teks sing cocog / asal wilayah data dianyari; Nanging, alamat pungkasan ora disetel, sing bisa nyebabake wilayah kasebut ngluwihi jangkoan memori piranti target.
Kacilakan kanthi fungsi kakehan (XC8-2580) Compiler ambruk yen sawijining fungsi diumumake kanthi nggunakake luwih saka siji atribut interrupt, sinyal utawa nmi, contone, atribut ( ( sinyal , interrupt ) ).
Kode interupsi ATtiny ora valid (XC8-2465) Nalika mbangun kanggo piranti ATtiny lan optimizations dipatèni (-00), fungsi interupsi bisa uga wis micu operan metu saka sawetara pesen assembler.
Pilihan sing ora dilewati (XC8-2452) Nalika nggunakake opsi kanthi macem-macem opsi linker sing dipisahake koma, ora kabeh opsi linker dikirim menyang linker.
Kesalahan ora langsung maca memori program (X03-2450) Ing sawetara kasus, kompiler ngasilake kesalahan internal (insn ora bisa dingerteni) nalika maca nilai rong bait saka pointer menyang memori program.
5.6. Versi 2.32
Akses kaping pindho saka perpustakaan gagal (XC8-2381) Njaluk versi Windows saka xc8-ar. arsip perpustakaan .exe kaping pindho kanggo ngakses arsip perpustakaan sing ana bisa uga gagal amarga pesen kesalahan ora bisa diganti.
5.7. Versi 2.31
Compiler sing ora dijelasake gagal (XC8-2367) Nalika mlaku ing platform Windows sing nduweni direktori sauntara sistem disetel menyang path sing kalebu titik '.' karakter, compiler bisa uga gagal kanggo nglakokaké.
5.8. Versi 2.30
Label global salah panggonan sawise outline (XC8-2299) Kode perakitan sing ditulis tangan sing nempatake label global ing urutan perakitan sing difaktorake dening abstraksi prosedural bisa uga ora diowahi kanthi bener.
Kacilakan santai (XC8-2287) Nggunakake pilihan -mrelax bisa nyebabake linker nabrak nalika optimasi istirahat buntut mlumpat nyoba mbusak instruksi ret sing ora ana ing mburi bagean.
Kacilakan nalika ngoptimalake label minangka nilai (XC8-2282) Kode nggunakake ekstensi basa GNU C "Label minangka nilai" bisa nyebabake optimasi abstraksi prosedural kacilakan, kanthi sawetara VMA sing digarisake kesalahan fixup.
Ora dadi const (XC8-2271) Prototipe kanggo st rstr ( ) lan fungsi liyane saka ora maneh nemtokake kualifikasi const non-standar ing pitunjuk senar bali nalika fitur -mconst-data-inprogmem dipatèni. Elinga yen karo piranti avrxmega3 lan avrtiny, fitur iki diaktifake kanthi permanen.
initializers ilang (XC8-2269) Nalika luwih saka siji variabel ing unit terjemahan diselehake ing bagean (nggunakake _section utawa _attribute_ ( (bagean) )), lan variabel pisanan kasebut nol diinisialisasi utawa ora duwe initializer, initializer kanggo variabel liyane ing unit terjemahan sing padha sing diselehake. ing bagean padha ilang.
5.1. Versi 2.29 (Rilis Keamanan Fungsional)
ora ana.
5.2. Versi 2.20
Kesalahan karo printah dawa (XC8-1983) Nalika nggunakake target AVR, compiler bisa mandheg karo a file ora ketemu kesalahan, yen baris printah gedhe banget lan ngemot karakter khusus kayata kuotasi, backslashes, etc.
Bagean rodata sing ora ditugasake (XC8-1920) Linker AVR gagal nemtokake memori kanggo bagean rodata khusus nalika mbangun arsitektur avrxmega3 lan avrtiny, sing bisa nyebabake kesalahan tumpang tindih memori.
5.3. Versi 2.19 (Rilis Keamanan Fungsional)
ora ana.
5.4. Versi 2.10
Gagal relokasi (XC8-1891) Alokasi paling pas yaiku ninggalake 'bolongan' memori ing antarane bagean sawise istirahat linker. Kajaba saka fragmentasi memori, iki nambah kemungkinan ana kegagalan relokasi linker sing ana hubungane karo lompatan relatif pc utawa telpon dadi metu saka jangkauan.
Instructions not transformed by relaxation (XC8-1889) Linker relaxation ora kedadeyan kanggo mlumpat utawa nelpon instruksi sing target bisa tekan yen anteng.
ilang fungsi (XC8E-388) Saperangan definisi saka , kayata clock_div_t lan clock_prescale set () , ora ditetepake kanggo piranti, kalebu ATmega324PB, ATmega328PB, ATtiny441, lan ATtiny841.
Macro sing ilang Macro preprocessor _XC8_MODE_, _XC8_VERS ION, _XC, lan _XC8 ora ditetepake kanthi otomatis dening compiler. Iki saiki kasedhiya.
5.5. Versi 2.05
Kesalahan kompiler internal (XC8-1822) Nalika mbangun ing Windows, bisa uga ana kesalahan kompiler internal nalika ngoptimalake kode.
kebanjiran RAM ora dideteksi (XC8-1800, XC8-1796) Program sing ngluwihi RAM kasedhiya ora dideteksi dening compiler ing sawetara kahanan, asil ing Gagal kode runtime.
Memori lampu kilat diilangi (XC8-1792) Kanggo piranti avrxmega3 lan avrtiny, bagean saka memori lampu kilat bisa uga ora diprogram dening MPLAB X. IDE.
Gagal nglakokake utama (XC8-1788) Ing sawetara kahanan nalika program ora ana variabel global sing ditemtokake, kode wiwitan runtime ora metu lan fungsi utama () ora tau tekan.
Informasi memori sing salah (XC8-1787) Kanggo piranti avrxmega3 lan avrtiny, program ukuran avr nglaporake manawa data mung diwaca nggunakake RAM tinimbang memori program.
Maca memori program salah (XC8-1783) Proyek sing diklumpukake kanggo piranti kanthi memori program sing dipetakan menyang ruang alamat data lan sing nemtokake obyek nggunakake makro/atribut PROGMEM bisa uga wis maca obyek kasebut saka alamat sing salah.
Kesalahan internal kanthi atribut (XC8-1773) Ana kesalahan internal yen sampeyan nemtokake obyek pointer karo
_at () utawa atribut () token ing antarane jeneng pointer lan jinis dereferenced, contoneample, char *
_ing (0x800150) cp; Bebaya saiki ditanggepi yen kode kasebut ditemoni.
Gagal nglakokake utama (XC8-1780, XC8-1767, XC8-1754) Nggunakake variabel EEPROM utawa netepake sekring nggunakake pragma konfigurasi bisa nyebabake wiwitan data sing salah lan/utawa ngunci eksekusi program ing kode wiwitan runtime, sadurunge tekan utama ( ).
Kesalahan sekring karo piranti cilik (XC8-1778, XC8-1742) Piranti attiny4/5/9/10/20/40 nduweni dawa sekring sing salah sing ditemtokake ing header. files sing mimpin kanggo kesalahan linker nalika nyoba kanggo mbangun kode sing ditetepake sekring.
Segmentasi fault (XC8-1777) Fault segmentasi intermiten wis didandani.
Kacilakan Assembler (XC8-1761) Assembler avr-as bisa uga nabrak nalika kompiler diluncurake ing Ubuntu 18.
Obyek ora diresiki (XC8-1752) Obyek durasi panyimpenan statis sing ora diinisialisasi bisa uga durung dibusak dening kode wiwitan runtime.
Spesifikasi piranti sing bentrok diabaikan (XC8-1749) Compiler ora ngasilake kesalahan nalika macem-macem opsi spesifikasi piranti digunakake lan nuduhake piranti beda.
Korupsi memori dening numpuk (XC8-1748) The Simbol _heap_start salah disetel, nyebabake kemungkinan variabel biasa rusak dening heap.
Kesalahan relokasi linker (XC8-1739) Kesalahan relokasi linker bisa uga ana nalika kode ngemot rjmp utawa rcall kanthi target 4k bita.
5.6. Versi 2.00
ora ana.
Masalah sing Dikenal
Ing ngisor iki watesan ing operasi compiler. Iki bisa uga minangka watesan kode umum, utawa panyimpangan saka informasi sing ana ing manual pangguna. Label ing kurung ing judhul yaiku identifikasi masalah kasebut ing basis data pelacakan. Iki bisa uga migunani yen sampeyan kudu ngubungi dhukungan. Item sing ora duwe label minangka watesan sing nggambarake modi operandi lan sing bisa ditrapake kanthi permanen.
6.1. MPLAB X IDE Integrasi
IDE MPLAB integrasi Yen Compiler arep digunakake saka MPLAB IDE, sampeyan kudu nginstal MPLAB IDE sadurunge nginstal Compiler.
6.2. Generasi Kode
Segfault karo opsi bagean-anchors (XC8-3045) Program sing nemtokake fungsi karo dhaptar argumen variabel lan sing nggunakake opsi -fsection-anchors bisa uga wis micu kesalahan kompiler internal: Segmentation fault.
Info debug ora sinkron (XC8-2948) Nalika optimasi relaksasi linker nyusut instruksi (kanggo example telpon kanggo instruksi rcall), baris sumber kanggo alamat pemetaan bisa uga ora tetep ing sink nalika ana luwih saka siji operasi shrink dumadi ing bagean.
Ing ngisor iki mantanample, ana rong telpon kanggo foo sing mungkasi munggah anteng kanggo telpon relatif.
Gagal alokasi memori PA (XC8-2881) Nalika nggunakake pangoptimal abstraksi prosedural, linker bisa nglaporake kesalahan alokasi memori nalika ukuran kode cedhak karo jumlah memori program sing kasedhiya ing piranti, sanajan program kasebut kudu pas karo ruang sing kasedhiya.
Ora pinter Smart-I0 (XC8-2872) Fitur smart-io compiler bakal ngasilake kode sing bener nanging sub-optimal kanggo fungsi snprint f yen fitur const-data-in-progmem wis dipateni utawa yen piranti wis kabeh lampu kilat dipetakan menyang memori data.
Malah kurang pinter Smart-I0 (XC8-2869) Fitur smart-io compiler bakal ngasilake kode sing bener nanging suboptimal nalika opsi -flto lan -fno-builtin digunakake.
Penempatan data mung maca suboptimal (XC8-2849) Linker saiki ora ngerti bagean memori APPCODE lan APPDATA, utawa divisi [No-Read-While-Write ing peta memori. Akibaté, ana kemungkinan cilik linker bisa nyedhiakke data mung diwaca ing area memori sing ora cocog. Kamungkinan data misplaced mundhak yen fitur const-data-in-progmem diaktifake, utamané yen fitur const-data-in-config-map-progmem uga diaktifake. Fitur kasebut bisa dipateni yen dibutuhake.
obyek file urutan pangolahan (XC8-2863) Urutan kang obyek files bakal diproses dening linker bisa beda-beda adhedhasar nggunakake optimizations abstraksi prosedural (-mpa pilihan). Iki mung bakal mengaruhi kode sing nemtokake fungsi sing lemah ing pirang-pirang modul.
Kesalahan linker kanthi mutlak (XC8-2777) Nalika obyek wis digawe mutlak ing alamat ing wiwitan RAM lan obyek uninitialized uga wis ditetepake, kesalahan linker bisa micu.
ID wake-up singkat (XC8-2775) Kanggo piranti ATA5700/2, ndhaftar PHIDO/1 mung ditetepake minangka ambane 16 bit, tinimbang ambane 32 bit.
Linker kacilakan nalika nelpon simbol (XC8-2758) Linker bisa nabrak yen opsi driver -mrelax digunakake nalika kode sumber nelpon simbol sing wis ditetepake nggunakake -cc., -de f sym pilihan linker.
Initialization salah (XC8-2679) Ana punika bedo antarane nilai awal kanggo sawetara global / statis obyek ukuran byte diselehake ing memori data lan ngendi variabel bakal diakses ing runtime.
Panggilan fungsi ora langsung sing ala (XC8-2628) Ing sawetara kasus, telpon fungsi sing digawe liwat pointer fungsi sing disimpen minangka bagéan saka struktur bisa gagal.
strtof ngasilake nol kanggo heksadesimal floats (XC8-2626) Fungsi perpustakaan strtof et al lan scanf ( ) et al, bakal tansah ngowahi nomer floating-point heksadesimal sing ora nemtokake eksponen menyang nul. Kanggo example:
srtof ("Oxl", & endptr);
bakal ngasilake nilai 0, dudu aku.
Olahpesen penasehat tumpukan ora akurat (XC8-2542, XC8-2541) Ing sawetara kedadean, bebaya stack advisor babagan rekursi utawa tumpukan indeterminate digunakake (bisa liwat nggunakake alloca ()) ora cemlorot.
Gagal nganggo kode interupsi duplikat (XC8-2421) Yen luwih saka siji fungsi interupsi nduweni awak sing padha, kompiler bisa uga duwe output kanggo siji fungsi interrupt nelpon liyane. Iki bakal nyebabake kabeh ndhaptar telpon-clobbered disimpen kanthi ora perlu, lan interrupts bakal diaktifake sanajan sadurunge epilog saka panangan interupsi saiki wis mlaku, sing bisa nyebabake kegagalan kode.
Output ala karo path DFP ora valid (XC8-2376) Yen kompiler dijaluk nganggo jalur DFP sing ora bener lan 'spec' file ana kanggo piranti sing dipilih, compiler ora nglaporake paket kulawarga piranti sing ilang lan milih 'spesifikasi' file, sing banjur bisa nyebabake output sing ora bener. 'spesifikasi' files bisa uga ora anyar karo DFPs sing disebarake lan mung digunakake kanggo testing compiler internal.
Memori tumpang tindih ora dideteksi (XC8-1966) Compiler ora ndeteksi tumpang tindih memori obyek digawe Absolute ing alamat (liwat _at ()) lan obyek liyane nggunakake bagean () specifier lan sing disambung menyang alamat sing padha.
Gagal karo fungsi perpustakaan lan _memx (XC8-1763) Disebut fungsi float libgcc kanthi argumen ing ruang alamat memx bisa uga gagal. Elinga yen rutin perpustakaan diarani saka sawetara operator C, supaya, kanggo Example, kode ing ngisor iki kena pengaruh:
bali regFloatVar > memxFloatVar;
Implementasi libgcc winates (AVRTC-731) Kanggo produk ATTiny4/5/9/10/20/40, implementasi perpustakaan C / Math standar ing libgcc winates banget utawa ora ana.
Batasan memori program (AVRTC-732) Gambar memori program ngluwihi 128 kb didhukung dening toolchain; Nanging, ana kedadean dikenal linker aborts tanpa istirahat lan tanpa pesen kesalahan mbiyantu tinimbang ngasilaken stubs fungsi dibutuhake nalika pilihan -mre lax digunakake.
Watesan papan jeneng (AVRTC-733) Spasi alamat sing dijenengi didhukung dening toolchain, miturut watesan sing kasebut ing bagean pandhuan pangguna Kualifikasi Tipe Khusus.
Zona wektu The fungsi perpustakaan nganggep GMT lan ora ndhukung zona wektu lokal, saéngga localtime ( ) bakal bali ing wektu sing padha karo gmtime ( ), kanggo example.
file///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Dokumen / Sumber Daya
![]() |
MICROCHIP MPLAB XC8 C Compiler Development Software [pdf] Manual Pamilik MPLAB XC8 C, MPLAB XC8 C Compiler Development Software, Compiler Development Software, Development Software, Software |