Nota Keluaran MPLAB® XC8 C Compiler Versi 2.41 untuk AVR® MCU
Manual Pemilik
Perisian Pembangunan Pengkompil MPLAB XC8 C
DOKUMEN INI MENGANDUNGI MAKLUMAT PENTING BERHUBUNGAN DENGAN PENYUSUN MPLAB XC8 C APABILA MENSASSARKAN PERANTI AVR MICROCHIP.
SILA BACA SEBELUM MENJALANKAN PERISIAN INI. LIHAT NOTA PELEPASAN PENGKOMPILE MPLAB XC8 C UNTUK DOKUMEN PIC JIKA ANDA MENGGUNAKAN PENGKOMPILE UNTUK PERANTI PIC 8-BIT.
Berakhirview
1.1. Pengenalan
Keluaran pengkompil Microchip MPLAB® XC8 C ini mengandungi beberapa ciri baharu dan pembetulan pepijat.
1.2. Tarikh Bina
Tarikh binaan rasmi versi pengkompil ini ialah 8 Februari 2023.
1.3. Versi terdahulu
Versi pengkompil MPLAB XC8 C sebelumnya ialah 2.40 dibina pada 3 Julai 2022.
1.4. Manual Keselamatan Berfungsi
Manual Keselamatan Berfungsi untuk penyusun MPLAB XC tersedia dalam pakej dokumentasi apabila anda membeli lesen keselamatan berfungsi.
1.5. Lesen dan Versi Komponen
Pengkompil MPLAB XC8 C untuk alatan MCU AVR ditulis dan diedarkan di bawah Lesen Awam Am (GPL) GNU yang bermaksud kod sumbernya diedarkan secara bebas dan tersedia kepada orang ramai.
Kod sumber untuk alatan di bawah GNU GPL boleh dimuat turun secara berasingan daripada Microchip webtapak. Anda boleh membaca GNU GPL dalam fail bernama terletak di subdirektori pemasangan license.txt avr/doc direktori anda. Perbincangan umum tentang prinsip yang mendasari GPL boleh didapati di sini.
Kod sokongan yang disediakan untuk fail pengepala, skrip pemaut dan perpustakaan masa jalan adalah kod proprietari dan tidak diliputi di bawah GPL.
Pengkompil ini ialah pelaksanaan GCC versi 5.4.0, binutils versi 2.26 dan menggunakan avr-libc versi 2.0.0.
1.6. Keperluan Sistem
Pengkompil MPLAB XC8 C dan perisian pelesenan yang digunakannya tersedia untuk pelbagai sistem pengendalian, termasuk versi 64-bit yang berikut: Edisi profesional Microsoft® Windows® 10; Ubuntu® 18.04; dan macOS® 10.15.5. Binari untuk Windows telah ditandatangani kod. Binari untuk macOS telah ditandatangani kod dan disahkan notari. Pelayan Lesen Rangkaian MPLAB XC tersedia untuk pelbagai sistem pengendalian 64-bit, termasuk Microsoft Windows 10 dan ke atas; Ubuntu 18.04 dan ke atas; atau macOS 10.15 dan ke atas. Pelayan juga boleh dijalankan pada pelbagai sistem pengendalian lain termasuk Pelayan Windows, pengedaran Linux, seperti Oracle® Enterprise Linux® dan Red Hate Enterprise Linux serta versi lama sistem pengendalian yang disokong. Walau bagaimanapun, Pelayan Lesen Rangkaian MPLAB XC tidak diuji pada sistem pengendalian ini. Pelayan Lesen Rangkaian MPLAB XC boleh dijalankan pada Mesin Maya OS yang disokong menggunakan lesen mesin maya untuk lesen rangkaian (SW006021-VM). Semua versi 32-bit Pelayan Rangkaian MPLAB XC dihentikan bermula dari versi 3.00.
Peranti Disokong
Pengkompil ini menyokong semua peranti AVR MCU 8-bit yang tersedia pada masa dikeluarkan. Lihat (dalam direktori pengkompil) untuk senarai semua peranti yang disokong. Fail-fail ini juga disenaraikan
avr_chipinfo.html tetapan bit konfigurasi dokumen untuk setiap peranti.
1.7. Edisi dan Peningkatan Lesen
Pengkompil MPLAB XC8 boleh diaktifkan sebagai produk berlesen (PRO) atau tidak berlesen (Percuma). Anda perlu membeli kunci pengaktifan untuk melesenkan pengkompil anda. Lesen membolehkan tahap pengoptimuman yang lebih tinggi berbanding dengan produk Percuma. Pengkompil tidak berlesen boleh dikendalikan selama-lamanya tanpa lesen. Penyusun Keselamatan Fungsian MPLAB XC8 mesti diaktifkan dengan lesen keselamatan berfungsi yang dibeli daripada Microchip. Pengkompil tidak akan beroperasi tanpa lesen ini. Setelah diaktifkan, anda boleh memilih mana-mana tahap pengoptimuman dan menggunakan semua ciri pengkompil. Keluaran Penyusun Keselamatan Fungsian MPLAB XC ini menyokong Lesen Pelayan Rangkaian.
Lihat dokumen Memasang dan Melesenkan MPLAB XC C Compiler (DS50002059) untuk maklumat tentang jenis lesen dan pemasangan pengkompil dengan lesen.
1.8. Pemasangan dan Pengaktifan
Lihat juga bahagian Isu dan Had Migrasi untuk mendapatkan maklumat penting tentang pengurus lesen terkini yang disertakan dengan pengkompil ini.
Jika menggunakan MPLAB IDE, pastikan anda memasang MPLAB X IDE versi 5.0 atau lebih baru sebelum memasang alat ini. Keluar dari IDE sebelum memasang pengkompil. Jalankan (Windows), (Linux) atau (macOS) .exe .run aplikasi pemasang pengkompil .app, cth dan ikut arahan pada skrin. XC8-1.00.11403-windows.exe Direktori pemasangan lalai disyorkan. Jika anda menggunakan Linux, anda mesti memasang pengkompil menggunakan terminal dan daripada akaun root. Pasang menggunakan akaun macOS dengan keistimewaan pentadbir.
Pengaktifan kini dijalankan secara berasingan untuk pemasangan. Lihat dokumen Pengurus Lesen untuk Penyusun MPLAB® XC C (DS52059) untuk mendapatkan maklumat lanjut.
Jika anda memilih untuk menjalankan pengkompil di bawah lesen penilaian, anda kini akan mendapat amaran semasa penyusunan apabila anda berada dalam tempoh 14 hari selepas tamat tempoh penilaian anda. Amaran yang sama dikeluarkan jika anda berada dalam tempoh 14 hari selepas tamat langganan HPA anda.
Pelayan Lesen Rangkaian XC ialah pemasang berasingan dan tidak termasuk dalam pemasang pengkompil pengguna tunggal.
Pengurus Lesen XC kini menyokong perayauan lesen rangkaian terapung. Ditujukan kepada pengguna mudah alih, ciri ini membenarkan lesen terapung keluar dari rangkaian untuk tempoh masa yang singkat. Menggunakan ciri ini, anda boleh memutuskan sambungan daripada rangkaian dan masih menggunakan pengkompil MPLAB XC anda. Lihat folder dokumen pemasangan XCLM untuk maklumat lanjut tentang ciri ini.
MPLAB X IDE termasuk tetingkap Lesen (Tools > Licenses) untuk mengurus perayauan secara visual.
1.8.1. Menyelesaikan Isu Pemasangan
Jika anda mengalami kesukaran memasang pengkompil di bawah mana-mana sistem pengendalian Windows, cuba cadangan berikut.
Jalankan pemasangan sebagai pentadbir.
Tetapkan kebenaran aplikasi pemasang kepada 'Kawalan penuh'. (Klik kanan fail, pilih Properties, tab Security, pilih pengguna, edit.)
Tetapkan kebenaran folder temp kepada 'Kawalan Penuh'.
Untuk menentukan lokasi folder temp, taip %temp% ke dalam arahan Run (kunci logo Windows + R).
Ini akan membuka dialog peneroka fail yang menunjukkan direktori itu dan akan membolehkan anda menentukan laluan folder itu.
1.9. Dokumentasi Penyusun
Panduan pengguna pengkompil boleh dibuka dari halaman HTML yang dibuka dalam penyemak imbas anda apabila mengklik butang bantuan biru dalam papan pemuka MPLAB X IDE, seperti yang ditunjukkan dalam tangkapan skrin.
Jika anda membina untuk sasaran AVR 8-bit, Panduan Pengguna Pengkompil MPLAB® XC8 C untuk AVR® MCU mengandungi maklumat tentang pilihan dan ciri pengkompil tersebut yang boleh digunakan pada seni bina ini.
1.10. Sokongan Pelanggan
Microchip mengalu-alukan laporan pepijat, cadangan atau komen mengenai versi pengkompil ini. Sila arahkan sebarang laporan pepijat atau permintaan ciri melalui Sistem Sokongan.
Kemas Kini Dokumentasi
Untuk versi dalam talian dan versi terkini dokumentasi MPLAB XC8, sila lawati Dokumentasi Teknikal Dalam Talian Microchip webtapak. Dokumentasi AVR baharu atau dikemas kini dalam keluaran ini:
- Panduan Pengguna Pengkompil MPLAB® XC8 C untuk AVR® MCU (semakan G)
- AVR® GNU Toolchain ke Panduan Migrasi MPLAB® XC8 (semakan A)
- Panduan Pengguna Hexmate (semakan B)
Rantaian Alat AVR® GNU ke Panduan Migrasi MPLAB® XC8 menerangkan perubahan kepada kod sumber dan membina pilihan yang mungkin diperlukan sekiranya anda memutuskan untuk memindahkan projek berasaskan C daripada AVR 8-bit GNU Toolchain kepada Microchip MPLAB XC8 C Compiler. Panduan Rujukan Perpustakaan Piawaian Microchip Unified menerangkan kelakuan dan antara muka kepada fungsi yang ditakrifkan oleh Perpustakaan Piawai Disatukan Microchip, serta tujuan penggunaan jenis perpustakaan dan makro. Beberapa maklumat ini dahulunya terkandung dalam Panduan Pengguna Pengkompil MPLAB® XC8 C untuk AVR® MCU. Maklumat perpustakaan khusus peranti masih terkandung dalam panduan pengkompil ini.
Jika anda baru bermula dengan peranti 8-bit dan Pengkompil MPLAB XC8 C, Panduan Pengguna MPLAB® XC8 untuk Jurutera Terbenam – AVR® MCUs (DS50003108) mempunyai maklumat tentang menyediakan projek dalam MPLAB X IDE dan kod penulisan untuk anda projek MPLAB XC8 C yang pertama. Panduan ini kini diedarkan dengan pengkompil.
Panduan Pengguna Hexmate bertujuan untuk mereka yang menjalankan Hexmate sebagai aplikasi yang berdiri sendiri.
Apa yang Baru
Berikut ialah ciri sasaran AVR baharu yang kini disokong oleh pengkompil. Nombor versi dalam subtajuk menunjukkan versi pengkompil pertama yang menyokong ciri-ciri berikut.
3.1. Versi 2.41
Sokongan Bootrow (XC8-3053) Pengkompil akan meletakkan kandungan mana-mana bahagian dengan awalan at.bootrow alamat 0x860000 dalam fail HEX. Bahagian ini digunakan untuk memori BOOTROW, yang direka untuk penyimpanan kunci dan maklumat selamat lain yang sepatutnya hanya boleh diakses oleh pemuat but.
Penghapusan pulangan yang berlebihan (XC8-3048) Pengkompil kini akan menghapuskan arahan yang berlebihan dalam fungsi ret dengan lompatan ekor apabila skrip pemaut tersuai digunakan. Ini adalah pengoptimuman yang serupa dengan yang dilakukan sebelum ini, tetapi ia kini dilakukan pada semua bahagian yatim, walaupun skrip pemaut tersuai digunakan dan skema peruntukan terbaik tidak dimainkan. Perubahan jenis masa (XC8-2982, 2932) Jenis perpustakaan standard C99, telah ditukar daripada time_t kepada jenis, yang memberikan peningkatan saiz kod dalam beberapa fungsi panjang yang berkaitan dengan masa, seperti. mktime panjang tidak ditandatangani ()
Nop baharu (XC8-2946, 2945) Makro telah ditambahkan pada. Makro ini memasukkan no- NOP() arahan operasi nop ke dalam output.
Kemas kini kepada XCLM (XC8-2944) Pengurus lesen yang digunakan dengan pengkompil telah dikemas kini dan kini lebih responsif apabila menyemak butiran lesen pengkompil.
Tramppanggilan olined (XC8-2760) Pengkompil kini boleh melakukan penggantian arahan panggilan bentuk panjang dengan panggilan relatif yang lebih pendek apabila bentuk relatif arahan itu biasanya berada di luar julat destinasinya. Dalam keadaan ini, pengkompil akan cuba menggantikan dengan arahan untuk memanggil rcall arahan yang akan 'trampoline' ke alamat yang diperlukan, contohnyaample: jmp
rcall tramp_foo ;was call foo
…
rcall tramp_foo
…
tramp_foo:
jmp foo
Pengoptimuman ini, bersama-sama dengan pengoptimuman aliran program yang serupa, dikawal oleh pilihan -mrelax.
3.2. Versi 2.40
Sokongan sokongan peranti baharu kini tersedia untuk bahagian AVR berikut: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32, AVR64EA48, AVRXNUMXEA.
Abstraksi prosedur yang lebih baik Alat pengoptimuman abstraksi prosedur (PA) telah ditambah baik supaya kod yang mengandungi arahan panggilan fungsi (/ ) boleh digariskan. Ini hanya akan berlaku panggilan rcall jika timbunan tidak digunakan untuk menghantar argumen kepada atau mendapatkan nilai pulangan daripada fungsi. Tindanan digunakan apabila memanggil fungsi dengan senarai argumen boleh ubah atau apabila memanggil fungsi yang mengambil lebih banyak argumen daripada daftar yang ditetapkan untuk tujuan ini. Ciri ini boleh dilumpuhkan menggunakan pilihan, atau abstraksi prosedur boleh dilumpuhkan sepenuhnya untuk fail atau fungsi objek dengan menggunakan-dan, masing-masing, atau dengan menggunakan atribut (penentu) secara selektif dengan fungsi.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa Makro liputan kod Pengkompil kini mentakrifkan makro jika pilihan yang sah adalah __nopa __CODECOV -mcodecov ditentukan.
Pilihan tempahan memori Pemandu kini akan menerima pilihan xc8-cc -mreserve=space@start:end apabila membina untuk sasaran AVR. Pilihan ini menyimpan julat memori yang ditentukan dalam sama ada ruang memori data atau program, menghalang pemaut daripada mengisi kod atau objek dalam kawasan ini. IO pintar yang lebih pintar Beberapa penambahbaikan telah dibuat pada fungsi Smart IO, termasuk tweak umum pada kod teras printf, menganggap penentu penukaran %n sebagai varian bebas, memautkan dalam rutin pop vararg atas permintaan, menggunakan jenis data yang lebih pendek jika boleh untuk pengendalian Argumen fungsi IO, dan pemfaktoran kod biasa dalam lebar medan dan pengendalian ketepatan. Ini boleh menghasilkan penjimatan kod dan data yang ketara, serta meningkatkan kelajuan pelaksanaan IO.
3.3. Versi 2.39 (Keluaran Keselamatan Fungsian)
Lesen Pelayan Rangkaian Keluaran Penyusun Keselamatan Fungsian MPLAB XC8 ini menyokong Lesen Pelayan Rangkaian.
3.4. Versi 2.36
tiada.
3.5. Versi 2.35
Sokongan peranti baharu Sokongan tersedia untuk bahagian AVR berikut: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 dan AVR64DD32.
Penukaran konteks yang dipertingkatkan Pilihan -mcall-isr-prologues baharu mengubah cara fungsi gangguan menyimpan daftar pada entri dan cara daftar tersebut dipulihkan apabila rutin gangguan ditamatkan. Ia berfungsi dengan cara yang serupa dengan pilihan -mcall-prologues, tetapi hanya mempengaruhi fungsi gangguan (ISR).
Pensuisan konteks yang lebih baik Pilihan -mgas-isr-prologues baharu mengawal kod suis konteks yang dijana untuk rutin perkhidmatan gangguan kecil. Apabila didayakan, ciri ini akan membolehkan pemasang mengimbas ISR untuk penggunaan daftar dan hanya menyimpan daftar terpakai ini jika diperlukan.
Pemetaan kilat boleh dikonfigurasikan Sesetengah peranti dalam keluarga AVR DA dan AVR DB mempunyai SFR (cth FLMAP) yang menentukan bahagian 32k memori program yang akan dipetakan ke dalam memori data. Pilihan baru – mconst-data-in-config-mapped-progmem boleh digunakan untuk membolehkan pemaut meletakkan semua data const-qualified dalam satu bahagian 32k dan secara automatik memulakan daftar SFR yang berkaitan untuk memastikan data ini dipetakan ke dalam memori data ruang, di mana ia akan diakses dengan lebih berkesan.
Microchip Unified Standard Libraries Semua penyusun MPLAB XC akan berkongsi Microchip Unified Standard Library, yang kini tersedia dengan keluaran MPLAB XC8 ini. Panduan Pengguna Pengkompil MPLA# XC8 C untuk AVO MCU tidak lagi menyertakan dokumentasi untuk fungsi standard ini. Maklumat ini kini boleh didapati dalam Panduan Rujukan Perpustakaan Standard Disatukan Microchip. Ambil perhatian bahawa beberapa fungsi yang ditakrifkan oleh avr-libc sebelum ini tidak lagi tersedia. (Lihat fungsi Lila.)
Smart I0 Sebagai sebahagian daripada perpustakaan bersatu baharu, fungsi I0 dalam keluarga printf dan scanf kini dijana tersuai pada setiap binaan, berdasarkan cara fungsi ini digunakan dalam program. Ini boleh mengurangkan dengan ketara sumber yang digunakan oleh program.
Pilihan bantuan ICI Pintar Apabila menganalisis panggilan ke fungsi I0 pintar (seperti cetak f () atau scanf ()), pengkompil tidak boleh sentiasa menentukan daripada rentetan format atau membuat kesimpulan daripada argumen penentu penukaran yang diperlukan oleh panggilan. Sebelum ini, pengkompil akan sentiasa tidak membuat andaian dan memastikan bahawa 10 fungsi berfungsi sepenuhnya dikaitkan dengan imej program akhir. Pilihan baharu – msmart-io-format=fmt telah ditambah supaya pengkompil sebaliknya boleh dimaklumkan oleh pengguna tentang penentu penukaran yang digunakan oleh fungsi I0 pintar yang penggunaannya tidak jelas, menghalang 10 rutin yang terlalu panjang daripada dipautkan. (Lihat Pilihan smart-io-format untuk butiran lanjut.)
Meletakkan bahagian tersuai Sebelum ini, pilihan -W1, –section-start hanya meletakkan bahagian yang ditentukan pada alamat yang diminta apabila skrip pemaut menentukan bahagian output dengan nama yang sama. Apabila itu tidak berlaku, bahagian itu diletakkan di alamat yang dipilih oleh pemaut dan pilihan itu pada dasarnya diabaikan. Kini pilihan akan diberi penghormatan untuk semua bahagian tersuai, walaupun skrip pemaut tidak menentukan bahagian tersebut. Walau bagaimanapun, ambil perhatian bahawa untuk bahagian standard, seperti . teks, . bss atau . data, pengagih yang paling sesuai masih mempunyai kawalan penuh ke atas peletakan mereka, dan pilihan itu tidak akan memberi kesan. Gunakan pilihan -ton, -Tsection=addr, seperti yang diterangkan dalam panduan pengguna.
3.6. Versi 2.32
Panduan Tindanan Tersedia dengan lesen pengkompil PRO, ciri panduan tindanan pengkompil boleh digunakan untuk menganggarkan kedalaman maksimum sebarang tindanan yang digunakan oleh program. Ia membina dan menganalisis graf panggilan program, menentukan penggunaan tindanan bagi setiap fungsi, dan menghasilkan laporan, yang daripadanya kedalaman tindanan yang digunakan oleh atur cara boleh disimpulkan. Ciri ini didayakan melalui pilihan baris arahan -mchp-stack-usage. Ringkasan penggunaan tindanan dicetak selepas pelaksanaan. Laporan tindanan terperinci tersedia dalam peta file, yang boleh diminta dengan cara biasa.
Sokongan sokongan peranti baharu tersedia untuk bahagian AVR berikut: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, AVR32DB48, AVR16DB28, AVR16DB32 dan Sokongan peranti yang ditarik balik Sokongan tidak lagi tersedia untuk bahagian AVR berikut: AVR16DA48, AVRXNUMXDAXNUMX dan, AVRXNUMXDAXNUMX.
3.7. Versi 2.31
tiada.
3.8. Versi 2.30
Pilihan baharu untuk menghalang pemulaan data Pilihan pemacu -mno-data-init baharu menghalang pemulaan data dan mengosongkan bahagian bss. Ia berfungsi dengan menekan output data do copy dan lakukan simbol bss yang jelas dalam pemasangan files, yang seterusnya akan menghalang kemasukan rutin tersebut oleh pemaut.
Pengoptimuman yang dipertingkatkan Beberapa penambahbaikan pengoptimuman telah dibuat, termasuk penyingkiran arahan pemulangan berlebihan, penyingkiran beberapa lompatan berikutan arahan langkau-jika-bit-is, dan abstraksi prosedur yang dipertingkatkan serta keupayaan untuk mengulangi proses ini. Pilihan tambahan kini tersedia untuk mengawal beberapa pengoptimuman ini, khususnya -f penambat bahagian, yang membenarkan akses objek statik dilakukan secara relatif kepada satu simbol; -mpa-iteration=n, yang membenarkan bilangan lelaran abstraksi prosedur ditukar daripada lalai 2; dan, -mpa-callcost-shortcall, yang melakukan abstraksi prosedur yang lebih agresif, dengan harapan bahawa pemaut boleh melonggarkan panggilan panjang. Pilihan terakhir ini boleh meningkatkan saiz kod jika andaian asas tidak direalisasikan.
Sokongan sokongan peranti baharu tersedia untuk bahagian AVR berikut: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64DB128, AVR28DA128, AVR32DA128, AVR48DB128, AVR64DA5272DB5790, AVR5790DB5791, AVR5795DA6285, AVR6286DB, AVR6612DA6613, AVR6614DA6616DB6617, AVR664251DB, AVRXNUMXDAXNUMX Sokongan Sokongan peranti yang ditarik balik tidak lagi tersedia untuk bahagian AVR berikut: ATAXNUMX, ATAXNUMX, ATAXNUMXN, ATAXNUMX, ATAXNUMX, ATAXNUMX, ATAXNUMX, ATAXNUMXC, ATAXNUMXC, ATAXNUMXQ, ATAXNUMXQ, ATAXNUMXATAXNUMX.
3.9. Versi 2.29 (Keluaran Keselamatan Fungsian)
Pengepala file untuk pengkompil terbina dalam Untuk memastikan bahawa pengkompil boleh mematuhi spesifikasi bahasa seperti MISRA, kepala file, yang disertakan secara automatik oleh , telah dikemaskini. Pengepala ini mengandungi prototaip untuk semua fungsi terbina dalam, seperti builtin_avr_nop ( ) dan builtin avr delay_cycles () . Sesetengah terbina dalam mungkin tidak mematuhi MISRA; ini boleh ditinggalkan dengan menambahkan defineXCSTRICT_MISRA pada baris arahan pengkompil. Terbina dalam dan pengisytiharannya telah dikemas kini untuk menggunakan jenis lebar tetap.
3.10. Versi 2.20
Sokongan peranti baharu Sokongan tersedia untuk bahagian AVR berikut: ATTINY1624, ATTINY1626 dan ATTINY1627.
Peruntukan kesesuaian terbaik yang lebih baik Pengalokasi kesesuaian terbaik (BFA) dalam pengkompil telah dipertingkatkan supaya bahagian diperuntukkan dalam susunan yang membenarkan pengoptimuman yang lebih baik. BFA kini menyokong ruang alamat yang dinamakan dan mengendalikan pemulaan data dengan lebih baik.
Abstraksi prosedural yang dipertingkatkan Pengoptimuman abstraksi prosedural kini dilakukan pada lebih banyak jujukan kod. Situasi sebelumnya di mana pengoptimuman ini mungkin telah meningkatkan saiz kod telah ditangani dengan membuat kod pengoptimuman menyedari proses pengumpulan sampah pemaut.
Ketiadaan AVR Assembler AVR Assembler tidak lagi disertakan dengan pengedaran ini.
3.11. Versi 2.19 (Keluaran Keselamatan Fungsian)
tiada.
3.12. Versi 2.10
Liputan Kod Keluaran ini termasuk ciri liputan kod yang memudahkan analisis sejauh mana kod sumber projek telah dilaksanakan. Gunakan pilihan -mcodecov=ram untuk mendayakannya. Selepas pelaksanaan program pada perkakasan anda, maklumat liputan kod akan dikumpulkan dalam peranti, dan ini boleh dipindahkan ke dan dipaparkan oleh MPLAB X IDE melalui pemalam liputan kod. Lihat dokumentasi IDE untuk mendapatkan maklumat tentang pemalam ini. #pragma nocodecov boleh digunakan untuk mengecualikan fungsi berikutnya daripada analisis liputan. Sebaik-baiknya pragma perlu ditambah pada permulaan file untuk mengecualikan keseluruhan itu file daripada analisis liputan. Sebagai alternatif, _attribute_ ( (nocodecov) ) boleh digunakan untuk mengecualikan fungsi tertentu daripada analisis liputan.
Perihalan peranti files Peranti baharu file dipanggil avr_chipinfo . html terletak dalam direktori dokumen pengedaran pengkompil. ini file menyenaraikan semua peranti yang disokong oleh pengkompil. Klik pada nama peranti, dan ia akan membuka halaman yang menunjukkan semua tetapan bit konfigurasi yang dibenarkan/sakit nilai untuk peranti itu, dengan bekasamples. Abstraksi prosedur
Pengoptimuman abstraksi prosedur, yang menggantikan blok biasa kod pemasangan dengan panggilan ke salinan yang diekstrak blok itu, telah ditambahkan pada pengkompil. Ini dilakukan oleh aplikasi berasingan, yang digunakan secara automatik oleh pengkompil apabila memilih pengoptimuman tahap 2, 3 atau s. Pengoptimuman ini mengurangkan saiz kod, tetapi ia mungkin mengurangkan kelajuan pelaksanaan dan kebolehnyahpepijatan kod. Abstraksi prosedur boleh dilumpuhkan pada tahap pengoptimuman yang lebih tinggi menggunakan pilihan -mno-pa, atau boleh didayakan pada tahap pengoptimuman yang lebih rendah (tertakluk kepada lesen anda) dengan menggunakan -mpa. Ia boleh dilumpuhkan untuk objek file menggunakan -mno-pa-on-file=filenama, atau dilumpuhkan untuk fungsi dengan menggunakan -mno-pa-on-function=function. Di dalam kod sumber anda, abstraksi prosedur boleh dilumpuhkan untuk fungsi dengan menggunakan atribut ( (nopa) ) dengan definisi fungsi, atau dengan menggunakan nopa, yang berkembang kepada atribut ( (nopa, noinline) ) dan dengan itu menghalang fungsi inlining daripada berlaku dan terdapat abstraksi kod sebaris.
Sokongan bit kunci dalam pragma Konfigurasi #pragma kini boleh digunakan untuk menentukan bit kunci AVR serta bit konfigurasi yang lain. Semak avr_chipinfo . html file (disebutkan di atas) untuk pasangan tetapan/nilai untuk digunakan dengan pragma ini. Sokongan peranti baharu Sokongan tersedia untuk bahagian berikut: AVR28DAl28, AVR64DAl28, AVR32DA 128 dan AVR48DA 128.
3.13. Versi 2.05
Lebih banyak bit untuk wang anda Versi macOS pengkompil dan pengurus lesen ini kini merupakan aplikasi 64-bit. Ini akan memastikan bahawa pengkompil akan memasang dan berjalan tanpa amaran pada versi macOS terkini.
Objek const dalam memori program Pengkompil kini boleh meletakkan objek yang layak const dalam memori Flash program, dan bukannya meletakkan objek ini dalam RAM. Pengkompil telah diubah suai supaya data global yang tidak layak disimpan dalam memori kilat program dan data ini boleh diakses secara langsung dan tidak langsung menggunakan arahan memori program yang sesuai. Ciri baharu ini didayakan secara lalai tetapi boleh dilumpuhkan menggunakan pilihan -mno-const-data-in-progmem. Untuk seni bina avrxmega3 dan avrtiny, ciri ini tidak diperlukan dan sentiasa dilumpuhkan, kerana memori program dipetakan ke dalam ruang alamat data untuk peranti ini.
Standard untuk versi percuma Tanpa Lesen (Percuma) pengkompil ini kini membenarkan pengoptimuman sehingga dan termasuk tahap 2. Ini akan membenarkan output yang serupa, walaupun tidak serupa, kepada apa yang mungkin sebelum ini menggunakan lesen Standard.
Selamat Datang AVRASM2 Penghimpun AVRASM2 untuk peranti 8-bit kini disertakan dalam pemasang pengkompil XC8. Penghimpun ini tidak digunakan oleh pengkompil XC8, tetapi tersedia untuk projek berdasarkan sumber pemasangan tulisan tangan.
Sokongan peranti baharu Sokongan tersedia untuk bahagian berikut: ATMEGA1608, ATMEGA1609, ATMEGA808 dan ATMEGA809.
3.14. Versi 2.00
Pemacu Peringkat Atas Pemacu baharu, dipanggil xc8-cc, kini terletak di atas pemacu avr-gcc sebelumnya dan pemacu xc8, dan ia boleh memanggil pengkompil yang sesuai berdasarkan pemilihan peranti sasaran. Pemacu ini menerima pilihan gaya GCC, yang sama ada diterjemahkan untuk atau dihantar kepada pengkompil yang sedang dilaksanakan. Pemacu ini membenarkan set pilihan yang serupa dengan semantik yang serupa untuk digunakan dengan mana-mana sasaran AVR atau PIC dan dengan itu merupakan cara yang disyorkan untuk menggunakan pengkompil. Jika perlu, pemacu avr-gcc lama boleh dipanggil terus menggunakan pilihan gaya lama yang diterima dalam versi pengkompil terdahulu.
Antara Muka C Biasa Pengkompil ini kini boleh mematuhi Antara Muka C Biasa MPLAB, membolehkan kod sumber dialihkan dengan lebih mudah merentasi semua pengkompil MPLAB XC. Pilihan -mext=cci meminta ciri ini, mendayakan sintaks alternatif untuk banyak sambungan bahasa.
Pemandu pustakawan baharu Pemandu pustakawan baharu diletakkan di atas pustakawan PIC sebelumnya dan pustakawan avr-ar AVR. Pemacu ini menerima pilihan gaya pengarkib GCC, yang sama ada diterjemahkan untuk atau dihantar kepada pustakawan yang sedang dilaksanakan. Pemacu baharu membenarkan set pilihan serupa dengan semantik serupa digunakan untuk mencipta atau memanipulasi mana-mana perpustakaan PIC atau AVR file dan dengan itu cara yang disyorkan untuk memanggil pustakawan. Jika diperlukan untuk projek warisan, pustakawan terdahulu boleh dipanggil terus menggunakan pilihan gaya lama yang diterima dalam versi pengkompil terdahulu.
Isu Migrasi
Berikut ialah ciri yang kini dikendalikan secara berbeza oleh pengkompil. Perubahan ini mungkin memerlukan pengubahsuaian kepada kod sumber anda jika mengalihkan kod ke versi pengkompil ini. Nombor versi dalam subtajuk menunjukkan versi pengkompil pertama yang menyokong perubahan berikut.
4.1. Versi 2.41
Fungsi fma yang tidak tepat dialih keluar (XC8-2913) Perpustakaan standard C99 fma 0 -fungsi keluarga ( ) tidak mengira tambah darab dengan ketepatan tak terhingga kepada satu pembundaran, sebaliknya mengumpul ralat pembundaran dengan setiap operasi. Fungsi ini telah dialih keluar daripada perpustakaan yang dibekalkan.
4.2. Versi 2.40
tiada.
4.3. Versi 2.39 (Keluaran Keselamatan Fungsian)
tiada.
4.4. Versi 2.36 Tiada.
4.5. Versi 2.35
Pengendalian asas rentetan ke (XC8-2420) Untuk memastikan konsistensi dengan penyusun XC lain, fungsi rentetan ke XC8, seperti strtol () dsb., tidak lagi akan cuba menukar rentetan input jika pangkalan yang ditentukan lebih besar daripada 36 dan sebaliknya akan menetapkan errno kepada EINVAL. Piawaian C tidak menyatakan kelakuan fungsi apabila nilai asas ini melebihi.
Pengoptimuman kelajuan yang tidak sesuai Pengoptimuman abstraksi prosedur sedang didayakan apabila memilih pengoptimuman tahap 3 (-03). Pengoptimuman ini mengurangkan saiz kod dengan mengorbankan kelajuan kod, jadi tidak sepatutnya dilakukan. Projek yang menggunakan tahap pengoptimuman ini mungkin melihat perbezaan dalam saiz kod dan kelajuan pelaksanaan apabila dibina dengan keluaran ini.
Fungsi perpustakaan Kod untuk kebanyakan fungsi perpustakaan C standard kini datang daripada Perpustakaan Standard Bersepadu Microchip, yang mungkin menunjukkan tingkah laku yang berbeza dalam beberapa keadaan berbanding dengan yang disediakan oleh perpustakaan avr-libc dahulu. Untuk exampOleh itu, ia tidak lagi perlu untuk memautkan dalam perpustakaan 1printf flt (pilihan-1printf_flt) untuk menghidupkan format I0 sokongan untuk penentu format apungan. Yang bijak I0 ciri Perpustakaan Standard Bersatu Microchip menjadikan pilihan ini berlebihan. Selain itu, penggunaan rutin akhiran _P untuk rentetan dan fungsi ingatan (cth strcpy_P ( ) dsb..) yang beroperasi pada rentetan const dalam denyar tidak lagi diperlukan. Rutin C standard (cth strcpy ) akan berfungsi dengan betul dengan data sedemikian apabila ciri const-data-in-program-memory didayakan.
4.6. Versi 2.32
tiada.
4.7. Versi 2.31
tiada.
4.8. Versi 2.30
tiada.
4.1. Versi 2.29 (Keluaran Keselamatan Fungsian)
tiada.
4.2. Versi 2.20
Reka letak DFP diubah Pengkompil kini menganggap reka letak berbeza yang digunakan oleh DFP (Pek Keluarga Peranti). Ini bermakna DFP yang lebih lama mungkin tidak berfungsi dengan keluaran ini dan pengkompil yang lebih lama tidak akan dapat menggunakan DFP yang terkini.
4.3. Versi 2.19 (Keluaran Keselamatan Fungsian)
tiada.
4.4. Versi 2.10
tiada
4.5. Versi 2.05
Objek const dalam memori program Ambil perhatian bahawa secara lalai, objek const-qualfiied akan diletakkan dan diakses dalam memori program (seperti warna yang diterangkan). Ini akan menjejaskan saiz dan kelajuan pelaksanaan projek anda, tetapi harus mengurangkan penggunaan RAM. Ciri ini boleh dilumpuhkan, jika perlu, menggunakan pilihan -mnoconst-data-in-progmem.
4.6. Versi 2.00
Fius konfigurasi Fius konfigurasi peranti kini boleh diprogramkan menggunakan pragma konfigurasi diikuti dengan pasangan nilai tetapan untuk menentukan keadaan fius, cth.
#pragma config WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
Objek dan fungsi mutlak Objek dan fungsi kini boleh diletakkan pada alamat tertentu dalam ingatan menggunakan penentu CCI (alamat), contohnyaample:
#termasuk
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
Hujah kepada penentu ini mestilah pemalar yang mewakili alamat di mana bait atau arahan pertama akan diletakkan. Alamat RAM ditunjukkan dengan menggunakan offset 0x800000. Dayakan CCI untuk menggunakan ciri ini.
Sintaks fungsi gangguan baharu Pengkompil kini menerima penentu CCI _interrupt (num) untuk menunjukkan bahawa fungsi C ialah pengendali gangguan. Penentu mengambil nombor gangguan, contohnyaample:
#termasuk
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }
Isu Tetap
Berikut adalah pembetulan yang telah dibuat kepada pengkompil. Ini mungkin membetulkan pepijat dalam kod yang dijana atau mengubah operasi pengkompil kepada yang dimaksudkan atau ditentukan oleh panduan pengguna. Nombor versi dalam subtajuk menunjukkan versi pengkompil pertama yang mengandungi pembetulan untuk isu yang berikut. Label dalam kurungan dalam tajuk ialah pengenalan isu itu dalam pangkalan data penjejakan. Ini mungkin berguna jika anda perlu menghubungi sokongan.
Ambil perhatian bahawa beberapa isu khusus peranti dibetulkan dalam Pek Keluarga Peranti (DFP) yang dikaitkan dengan peranti. Lihat Pengurus Pek MPLAB untuk mendapatkan maklumat tentang perubahan yang dibuat pada DFP dan untuk memuat turun pek terkini.
5.1. Versi 2.41
Isu dongle pada Dongle Ventura (XC8-3088). digunakan untuk melesenkan pengkompil mungkin tidak dibaca dengan betul pada hos macOS Ventura, mengakibatkan kegagalan pelesenan. Perubahan kepada pengurus lesen XCLM membetulkan isu ini.
Petunjuk peruntukan memori yang salah (XC8-2925) Percubaan untuk memperuntukkan SIZE_MAX bait (atau nilai yang hampir dengan ini) memori menggunakan fungsi pengurusan memori perpustakaan standard (malloc () et al) tidak berjaya. Ia tidak mengambil kira bahawa bait tambahan diperlukan sebagai tambahan kepada blok yang diminta apabila menggunakan pelaksanaan peruntukan memori dinamik yang mudah. Penunjuk NULL kini akan dikembalikan dan errno ditetapkan kepada ENOMEM dalam situasi sedemikian.
Fungsi fma yang tidak tepat dialih keluar (XC8-2913) Perpustakaan standard C99 fma ( ) -fungsi keluarga ( ) tidak mengira tambah darab dengan ketepatan tak terhingga kepada satu pembundaran, sebaliknya mengumpul ralat pembundaran dengan setiap operasi. Fungsi ini telah dialih keluar daripada perpustakaan yang dibekalkan.
Pengendalian penukaran rentetan yang tidak baik (XC8-2921, XC8-2652) Apabila 'jujukan subjek' untuk penukaran oleh strtod Cr mengandungi apa yang kelihatan sebagai nombor titik terapung dalam format eksponen dan terdapat aksara yang tidak dijangka selepas aksara e/E, maka di mana endptr telah disediakan, ia diberikan alamat yang adakah ia menunjuk kepada aksara selepas e/E, sedangkan ia sepatutnya menunjuk kepada aksara e/E itu sendiri, kerana ia belum ditukar. Untuk example, strtod (“100exx”, &ep) hendaklah mengembalikan 100.00 dan tetapkan ep untuk menunjuk ke bahagian “exx” rentetan, manakala fungsi itu mengembalikan nilai yang betul tetapi menetapkan ep untuk menunjuk ke bahagian “xx” rentetan .
5.2. Versi 2.40
Terlalu santai (XCS-2876) Apabila menggunakan pilihan -mrelax, pengkompil tidak memperuntukkan beberapa bahagian bersama-sama, menyebabkan saiz kod yang kurang optimum. Ini mungkin berlaku dengan kod yang menggunakan perpustakaan MUSL baharu atau dengan simbol yang lemah.
Ciri pemetaan tidak dilumpuhkan seperti yang dinyatakan dalam amaran (XC8-2875) Ciri const-data-in-config-mappedprogmem bergantung pada ciri const-data-in-progmem yang didayakan. Jika ciri const-data-inconfig-mapped-progmem telah didayakan secara eksplisit menggunakan pilihan dan ciri const-data-inprogmem telah dilumpuhkan, langkah pautan gagal, walaupun mesej amaran menyatakan bahawa const-data-in-con fig- ciri mapped-progmem telah dilumpuhkan secara automatik, yang tidak betul sepenuhnya. Ciri const-data-in-config-mapped-progmem kini dilumpuhkan sepenuhnya dalam situasi ini.
Perubahan DFP untuk mengakses NVMCTRL dengan betul (XC8-2848) Kod permulaan masa jalan yang digunakan oleh peranti AVR64EA tidak mengambil kira bahawa daftar NVMCTRL berada di bawah Configuration Change Protection (CCP) dan tidak dapat menetapkan I0 SFR ke halaman yang digunakan oleh const-data-in-configmapped-progmem ciri penyusun. Perubahan yang dibuat dalam AVR-Ex_DFP versi 2.2.55 akan membenarkan kod permulaan masa jalan untuk menulis dengan betul pada daftar ini.
Perubahan DFP untuk dielakkan pemetaan denyar (XC8-2847) Penyelesaian untuk masalah dengan ciri peranti pemetaan denyar yang dilaporkan dalam AVR128DA28/32/48/64 Silicon Errata (D580000882) telah dilaksanakan. Ciri pengkompil const-data-in-config-mapped-progmem tidak akan digunakan secara lalai untuk peranti yang terjejas dan perubahan ini akan muncul dalam AVR-Dx_DFP versi 2.2.160.
Ralat binaan dengan sinhf atau coshf (XC8-2834) Percubaan untuk menggunakan fungsi pustaka sinhf () atau coshf () mengakibatkan ralat pautan, menerangkan rujukan yang tidak ditentukan. Fungsi yang hilang yang dirujuk kini telah dimasukkan dalam pengedaran pengkompil.
Ralat binaan dengan nopa (XC,8-2833) Menggunakan atribut nopa dengan fungsi yang mempunyai nama pemasangnya ditentukan menggunakan asm ( ) mencetuskan mesej ralat daripada pemasang. Gabungan ini tidak mungkin.
Kegagalan fungsi variadik dengan hujah penunjuk (XC8-2755, XC8-2731) Fungsi dengan bilangan argumen pembolehubah menjangkakan penunjuk 24-bit (jenis memx) dihantar dalam senarai argumen pembolehubah apabila ciri const-data-in-progmem didayakan. Argumen yang menjadi penunjuk kepada memori data telah dihantar sebagai objek 16-bit, menyebabkan kegagalan kod apabila ia akhirnya dibaca. Apabila ciri constdata-in-progmem didayakan, semua hujah penunjuk 16-bit kini ditukar kepada penunjuk 24-bit.
fungsi perpustakaan strtoxxx gagal (XC8-2620) Apabila ciri const-data-in-progmem didayakan, parameter endptr dalam fungsi perpustakaan strtoxxx tidak dikemas kini dengan betul untuk argumen rentetan sumber yang tiada dalam memori program.
Makluman untuk hantaran tidak sah (XC8-2612) Pengkompil kini akan mengeluarkan ralat jika ciri const-in-progmem didayakan dan alamat literal rentetan dihantar secara eksplisit ke ruang alamat data (menggugurkan kelayakan const), contohnyaample, (uint 8_t *) “Hello World!”. Amaran adalah isu jika alamat mungkin tidak sah apabila penunjuk data const dihantar secara eksplisit ke ruang alamat data.
Peletakan objek const yang tidak dimulakan (XC8-2408) Objek meruap const dan const yang tidak dimulakan tidak diletakkan dalam memori program pada peranti yang memetakan semua atau sebahagian daripada memori program mereka ke dalam ruang alamat data. Untuk peranti ini, objek tersebut kini diletakkan dalam memori program, menjadikan operasinya konsisten dengan peranti lain.
5.3. Versi 2.39 (Keluaran Keselamatan Fungsian)
tiada.
5.4. Versi 2.36
Ralat semasa melengahkan masa (XC8-2774) Perubahan kecil dalam lalai Pengoptimuman mod percuma menghalang lipatan berterusan ungkapan operan kepada fungsi terbina dalam kelewatan, menyebabkannya dianggap sebagai bukan pemalar dan mencetuskan ralat: avr delay_cycles terbina menjangka pemalar integer masa kompilasi.
5.5. Versi 2.35
Peruntukan bersebelahan menggunakan _at (XC8-2653) Peruntukan bersebelahan tempat berbilang objek dalam bahagian dengan nama yang sama dan menggunakan _at ( ) tidak berfungsi dengan betul. Untuk example:
const char arr1[] __attribute__((section(“.mysec”))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((section(“.mysec”))) = {0xEF, 0xFE};
sepatutnya meletakkan arr2 sejurus selepas arr1.
Menentukan alamat mula bahagian (XC8-2650) The -W1, –pilihan bahagian-mula secara senyap gagal meletakkan bahagian pada alamat mula yang dicalonkan. Isu ini telah dibetulkan untuk mana-mana bahagian yang dinamakan tersuai; walau bagaimanapun, ia tidak akan berfungsi untuk mana-mana bahagian standard, seperti . teks atau . bss, yang mesti diletakkan menggunakan pilihan -W1, -T.
Penyambung ranap apabila berehat (XC8-2647) Apabila pengoptimuman -mrelax didayakan dan terdapat bahagian kod atau data yang tidak sesuai dengan memori yang tersedia, pemaut ranap. Kini, dalam keadaan sedemikian, mesej ralat dikeluarkan sebaliknya.
Tiada no-falling-back (XC8-2646) The -Pilihan nofallback tidak dilaksanakan dengan betul, atau didokumenkan. Ini kini boleh dipilih untuk memastikan bahawa pengkompil tidak akan kembali ke tetapan pengoptimuman yang lebih rendah jika pengkompil tidak berlesen, dan sebaliknya akan mengeluarkan ralat.
Pengoptimuman kelajuan yang tidak sesuai (X03-2637) Pengoptimuman abstraksi prosedur sedang didayakan apabila memilih pengoptimuman tahap 3 (-03). Pengoptimuman ini mengurangkan saiz kod dengan mengorbankan kelajuan kod, jadi tidak sepatutnya dilakukan.
EEPROM buruk akses (XC8-2629) The Rutin eeprom_read_block tidak berfungsi dengan betul pada peranti Xmega apabila pilihan -mconst-data-in-progmem didayakan (iaitu keadaan lalai), mengakibatkan memori EEPROM tidak dibaca dengan betul.
Peruntukan memori tidak sah (XC8-2593, XC8-2651) Apabila -Ttext atau -Tdata pilihan pemaut (untuk cthample melalui menggunakan pilihan pemacu -vl) ditentukan, asal kawasan teks/data yang sepadan telah dikemas kini; walau bagaimanapun, alamat penamat tidak dilaraskan dengan sewajarnya, yang boleh menyebabkan rantau ini melebihi julat memori peranti sasaran.
Ranap sistem dengan fungsi lebih atribut (XC8-2580) Pengkompil ranap jika fungsi diisytiharkan menggunakan lebih daripada satu gangguan, isyarat atau atribut nmi, cth, atribut ( ( isyarat , gangguan ) ).
Kod gangguan ATtiny tidak sah (XC8-2465) Apabila membina untuk peranti ATtiny dan pengoptimuman telah dilumpuhkan (-00), fungsi gangguan mungkin telah mencetuskan mesej pemasang operan di luar julat.
Pilihan tidak dilalui (XC8-2452) Apabila menggunakan pilihan dengan berbilang pilihan pemaut dipisahkan koma, tidak semua pilihan pemaut dihantar kepada pemaut.
Ralat membaca memori program secara tidak langsung (X03-2450) Dalam sesetengah keadaan, pengkompil menghasilkan ralat dalaman (insn tidak dikenali) apabila membaca nilai dua bait dari penuding ke memori program
5.6. Versi 2.32
Akses kedua perpustakaan gagal (XC8-2381) Menggunakan versi Windows xc8-ar. Pengarkib perpustakaan .exe untuk kali kedua untuk mengakses arkib perpustakaan sedia ada mungkin gagal dengan mesej ralat yang tidak dapat menamakan semula.
5.7. Versi 2.31
Penyusun yang tidak dapat dijelaskan kegagalan (XC8-2367) Apabila berjalan pada platform Windows yang mempunyai direktori sementara sistem ditetapkan ke laluan yang mengandungi titik '.' watak, pengkompil mungkin gagal untuk melaksanakan.
5.8. Versi 2.30
Label global tersalah letak selepas menggariskan (XC8-2299) Kod pemasangan tulisan tangan yang meletakkan label global dalam urutan pemasangan yang difaktorkan oleh abstraksi prosedur mungkin tidak diletakkan semula dengan betul.
Kemalangan yang menenangkan (XC8-2287) Menggunakan pilihan -mrelax mungkin telah menyebabkan pemaut ranap apabila pengoptimuman kelonggaran lompat ekor cuba mengalih keluar arahan ret yang tidak berada di penghujung bahagian.
Ranap apabila mengoptimumkan label sebagai nilai (XC8-2282) Kod menggunakan sambungan bahasa GNU C "Label sebagai nilai" mungkin telah menyebabkan pengoptimuman abstraksi prosedur ranap, dengan ralat pembetulan rentang VMA Digariskan.
Tidak begitu const (XC8-2271) Prototaip untuk st rstr ( ) dan fungsi lain daripada tidak lagi menentukan kelayakan const bukan standard pada penunjuk rentetan yang dikembalikan apabila ciri -mconst-data-inprogmem dilumpuhkan. Ambil perhatian bahawa dengan peranti avrxmega3 dan avrtiny, ciri ini didayakan secara kekal.
Pemula yang hilang (XC8-2269) Apabila lebih daripada satu pembolehubah dalam unit terjemahan diletakkan dalam bahagian (menggunakan _section atau _attribute_ ( (bahagian) )), dan pembolehubah yang pertama adalah sifar dimulakan atau tidak mempunyai pemula, pemula untuk pembolehubah lain dalam unit terjemahan yang sama yang diletakkan di bahagian yang sama telah hilang.
5.1. Versi 2.29 (Keluaran Keselamatan Fungsian)
tiada.
5.2. Versi 2.20
Ralat dengan arahan panjang (XC8-1983) Apabila menggunakan sasaran AVR, pengkompil mungkin telah berhenti dengan a file tidak ditemui ralat, jika baris arahan sangat besar dan mengandungi aksara khas seperti petikan, garis miring ke belakang, dsb.
Bahagian rodata yang tidak ditugaskan (XC8-1920) Penyambung AVR gagal menetapkan memori untuk bahagian rodata tersuai apabila membina untuk seni bina avrxmega3 dan avrtiny, yang berpotensi menghasilkan ralat pertindihan memori
5.3. Versi 2.19 (Keluaran Keselamatan Berfungsi)
tiada.
5.4. Versi 2.10
Kegagalan penempatan semula (XC8-1891) Pengalokasi yang paling sesuai ialah meninggalkan 'lubang' memori di antara bahagian selepas kelonggaran penghubung. Selain daripada pemecahan memori, ini meningkatkan kemungkinan terdapat kegagalan penempatan semula pemaut yang berkaitan dengan lompatan relatif pc atau panggilan menjadi keluar dari julat.
Arahan tidak diubah oleh kelonggaran (XC8-1889) Kelonggaran pemaut tidak berlaku untuk arahan lompat atau panggilan yang sasarannya boleh dicapai jika dilonggarkan.
hilang kefungsian (XC8E-388) Beberapa definisi daripada , seperti clock_div_t dan clock_prescale set () , tidak ditakrifkan untuk peranti, termasuk ATmega324PB, ATmega328PB, ATtiny441 dan ATtiny841.
Tiada makro Makro prapemproses _XC8_MODE_, _XC8_VERS ION, _XC dan _XC8 tidak ditakrifkan secara automatik oleh pengkompil. Ini kini tersedia.
5.5. Versi 2.05
Ralat pengkompil dalaman (XC8-1822) Apabila membina di bawah Windows, ralat pengkompil dalaman mungkin telah dihasilkan semasa mengoptimumkan kod.
Limpahan RAM tidak dikesan (XC8-1800, XC8-1796) Program yang melebihi RAM yang tersedia tidak dikesan oleh pengkompil dalam beberapa situasi, mengakibatkan kegagalan kod masa jalan.
Memori denyar ditinggalkan (XC8-1792) Untuk peranti avrxmega3 dan avrtiny, bahagian memori denyar mungkin dibiarkan tidak diprogramkan oleh MPLAB X IDE.
Kegagalan untuk melaksanakan utama (XC8-1788) Dalam sesetengah situasi di mana program tidak mempunyai pembolehubah global yang ditentukan, kod permulaan masa jalan tidak keluar dan fungsi utama ( ) tidak pernah dicapai.
Maklumat memori yang salah (XC8-1787) Untuk peranti avrxmega3 dan avrtiny, program bersaiz avr melaporkan bahawa data baca sahaja menggunakan RAM dan bukannya memori program.
Bacaan memori program salah (XC8-1783) Projek yang disusun untuk peranti dengan memori program dipetakan ke dalam ruang alamat data dan yang mentakrifkan objek menggunakan makro/atribut PROGMEM mungkin telah membaca objek ini dari alamat yang salah.
Ralat dalaman dengan atribut (XC8-1773) Ralat dalaman berlaku jika anda menentukan objek penunjuk dengan
Token _at () atau atribut() di antara nama penunjuk dan jenis yang dinyahrujuk, contohnyaample, char *
_at (0x800150) cp; Amaran kini dikeluarkan jika kod tersebut ditemui.
Kegagalan untuk melaksanakan utama (XC8-1780, XC8-1767, XC8-1754) Menggunakan pembolehubah EEPROM atau mentakrifkan fius menggunakan pragma konfigurasi mungkin telah menyebabkan pengamulaan data yang salah dan/atau mengunci pelaksanaan program dalam kod permulaan masa jalan, sebelum mencapai main ( ).
Ralat fius dengan peranti kecil (XC8-1778, XC8-1742) Peranti attiny4/5/9/10/20/40 mempunyai panjang fius yang salah yang dinyatakan dalam pengepalanya files yang membawa kepada ralat pemaut apabila cuba membina kod yang menentukan fius.
Segmentasi ralat (XC8-1777) Ralat segmentasi terputus-putus telah diperbetulkan.
Kemalangan pemasang (XC8-1761) Penghimpun avr-as mungkin telah ranap apabila pengkompil dijalankan di bawah Ubuntu 18.
Objek tidak dibersihkan (XC8-1752) Objek tempoh storan statik yang tidak dimulakan mungkin tidak dikosongkan oleh kod permulaan masa jalan.
Spesifikasi peranti yang bercanggah diabaikan (XC8-1749) Pengkompil tidak menghasilkan ralat apabila berbilang pilihan spesifikasi peranti digunakan dan menunjukkan peranti berbeza.
Kerosakan memori oleh timbunan (XC8-1748) The Simbol _heap_start telah ditetapkan dengan tidak betul, mengakibatkan kemungkinan pembolehubah biasa rosak oleh timbunan.
Ralat penempatan semula pemaut (XC8-1739) Ralat penempatan semula pemaut mungkin telah dipancarkan apabila kod mengandungi rjmp atau rcall dengan sasaran tepat 4k bait jauhnya.
5.6. Versi 2.00
tiada.
Isu Diketahui
Berikut adalah had dalam operasi pengkompil. Ini mungkin sekatan pengekodan umum, atau penyelewengan daripada maklumat yang terkandung dalam manual pengguna. Label dalam kurungan dalam tajuk ialah pengenalan isu tersebut dalam pangkalan data penjejakan. Ini mungkin memberi manfaat jika anda perlu menghubungi sokongan. Item yang tidak mempunyai label adalah had yang menggambarkan modi operandi dan yang berkemungkinan kekal berkuat kuasa secara kekal.
6.1. MPLAB X IDE Integrasi
IDE MPLAB penyepaduan Jika Pengkompil hendak digunakan daripada MPLAB IDE, maka anda mesti memasang MPLAB IDE sebelum memasang Pengkompil.
6.2. Penjanaan Kod
Segfault dengan pilihan bahagian-anchors (XC8-3045) Program yang mentakrifkan fungsi dengan senarai argumen boleh ubah dan yang menggunakan pilihan -fsection-anchors mungkin telah mencetuskan ralat pengkompil dalaman: Segmentasi kesalahan.
Maklumat nyahpepijat tidak segerak (XC8-2948) Apabila pengoptimuman kelonggaran pemaut mengecut arahan (contohnyaamparahan panggilan ke panggilan), talian sumber untuk menangani pemetaan mungkin tidak kekal selaras apabila terdapat lebih daripada satu operasi pengecutan berlaku dalam bahagian.
Dalam contoh di bawahampOleh itu, terdapat dua panggilan ke foo yang berakhir dengan santai kepada panggilan relatif.
Kegagalan peruntukan memori PA (XC8-2881) Apabila menggunakan pengoptimum abstraksi prosedur, pemaut mungkin melaporkan ralat peruntukan memori apabila saiz kod hampir dengan jumlah memori program yang tersedia pada peranti, walaupun program itu sepatutnya dapat memuatkan ruang yang tersedia.
Tidak begitu pintar Smart-I0 (XC8-2872) Ciri smart-io pengkompil akan menjana kod yang sah tetapi sub-optimum untuk fungsi snprint f jika ciri const-data-in-progmem telah dilumpuhkan atau jika peranti mempunyai semua denyarnya dipetakan ke dalam memori data.
Malah kurang pintar Smart-I0 (XC8-2869) Ciri smart-io pengkompil akan menjana kod yang sah tetapi suboptimum apabila pilihan -flto dan -fno-builtin kedua-duanya digunakan.
Peletakan data baca sahaja suboptimum (XC8-2849) Pemaut pada masa ini tidak mengetahui bahagian memori APPCODE dan APPDATA, mahupun bahagian [Tidak-Baca-Semasa-Tulis dalam peta memori. Akibatnya, terdapat kemungkinan kecil bahawa pemaut mungkin memperuntukkan data baca sahaja dalam kawasan memori yang tidak sesuai. Peluang data tersalah letak meningkat jika ciri const-data-in-progmem didayakan, terutamanya jika ciri const-data-in-config-mapped-progmem turut didayakan. Ciri-ciri ini boleh dilumpuhkan jika diperlukan.
Objek file pesanan pemprosesan (XC8-2863) Urutan di mana objek files akan diproses oleh pemaut mungkin berbeza berdasarkan penggunaan pengoptimuman abstraksi prosedur (pilihan -mpa). Ini hanya akan menjejaskan kod yang mentakrifkan fungsi lemah merentas berbilang modul.
Ralat pemaut dengan mutlak (XC8-2777) Apabila objek telah dibuat mutlak pada alamat pada permulaan RAM dan objek yang tidak dimulakan juga telah ditakrifkan, ralat pemaut mungkin dicetuskan.
ID bangun tidur pendek (XC8-2775) Untuk peranti ATA5700/2, daftar PHIDO/1 hanya ditakrifkan sebagai lebar 16 bit, bukannya lebar 32 bit.
Ranap pemaut apabila memanggil simbol (XC8-2758) Pemaut mungkin ranap jika pilihan pemacu -mrelax digunakan apabila kod sumber memanggil simbol yang telah ditakrifkan menggunakan pilihan pemaut -cc., –de f sym.
Inisialisasi yang salah (XC8-2679) Di sana ialah percanggahan antara tempat nilai awal untuk beberapa objek bersaiz bait global/statik diletakkan dalam memori data dan tempat pembolehubah akan diakses semasa masa jalan.
Panggilan fungsi tidak langsung yang buruk (XC8-2628) Dalam sesetengah keadaan, panggilan fungsi yang dibuat melalui penuding fungsi yang disimpan sebagai sebahagian daripada struktur mungkin gagal.
strtof mengembalikan sifar untuk terapung heksadesimal (XC8-2626) Perpustakaan berfungsi strtof et al dan scanf ( ) et al, akan sentiasa menukar nombor titik terapung heksadesimal yang tidak menentukan eksponen kepada sifar. Untuk example:
srtof (“Oxl”, &endptr);
akan mengembalikan nilai 0, bukan I.
Pemesejan penasihat tindanan tidak tepat (XC8-2542, XC8-2541) Dalam sesetengah keadaan, amaran penasihat tindanan mengenai rekursi atau tindanan tak tentu yang digunakan (mungkin melalui penggunaan alloca()) tidak dikeluarkan.
Kegagalan dengan kod gangguan pendua (XC8-2421) Jika lebih daripada satu fungsi gangguan mempunyai badan yang sama, pengkompil mungkin mempunyai output untuk satu fungsi gangguan memanggil yang lain. Ini akan menyebabkan semua daftar panggilan terkumpul disimpan tanpa perlu, dan gangguan akan didayakan walaupun sebelum epilog pengendali gangguan semasa dijalankan, yang boleh menyebabkan kegagalan kod.
Output buruk dengan laluan DFP tidak sah (XC8-2376) Jika pengkompil dipanggil dengan laluan DFP yang tidak sah dan 'spesifikasi' file wujud untuk peranti yang dipilih, pengkompil tidak melaporkan pek keluarga peranti yang hilang dan sebaliknya memilih 'spesifikasi' file, yang kemudiannya mungkin membawa kepada output yang tidak sah. 'Spesifikasi' files mungkin tidak terkini dengan DFP yang diedarkan dan bertujuan untuk digunakan dengan ujian pengkompil dalaman sahaja.
Pertindihan memori tidak dapat dikesan (XC8-1966) Pengkompil tidak mengesan pertindihan memori objek yang dibuat mutlak pada alamat (melalui _at ( )) dan objek lain menggunakan penentu bahagian ( ) dan yang dipautkan ke alamat yang sama.
Kegagalan dengan fungsi perpustakaan dan _memx (XC8-1763) Fungsi apungan libgcc yang dipanggil dengan hujah dalam ruang alamat memx mungkin gagal. Ambil perhatian bahawa rutin perpustakaan dipanggil daripada beberapa operator C, jadi, contohnyaample, kod berikut terjejas:
kembalikan regFloatVar > memxFloatVar;
Pelaksanaan libgcc terhad (AVRTC-731) Untuk produk ATTiny4/5/9/10/20/40, pelaksanaan perpustakaan C / Matematik standard dalam libgcc adalah sangat terhad atau tidak hadir.
Had memori program (AVRTC-732) Imej memori program melebihi 128 kb disokong oleh rantai alat; walau bagaimanapun, terdapat contoh yang diketahui bahawa pemaut dihentikan tanpa kelonggaran dan tanpa mesej ralat yang berguna dan bukannya menjana stub fungsi yang diperlukan apabila pilihan -mre lax digunakan.
Had ruang nama (AVRTC-733) Ruang alamat yang dinamakan disokong oleh rantai alat, tertakluk kepada pengehadan yang dinyatakan dalam bahagian panduan pengguna Kelayakan Jenis Khas.
Zon masa The fungsi perpustakaan menganggap GMT dan tidak menyokong zon waktu tempatan, oleh itu waktu setempat ( ) akan kembali pada masa yang sama seperti waktu gm ( ) , contohnyaample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Dokumen / Sumber
![]() |
Perisian Pembangunan Pengkompil MICROCHIP MPLAB XC8 C [pdf] Manual Pemilik MPLAB XC8 C, Perisian Pembangunan Pengkompil MPLAB XC8 C, Perisian Pembangunan Pengkompil, Perisian Pembangunan, Perisian |