Perangkat Lunak Kompiler MICROCHIP MPLAB XC8 C
DOKUMEN INI BERISI INFORMASI PENTING TERKAIT COMPILER MPLAB XC8 C SAAT MENARGETKAN PERANGKAT MICROCHIP AVR.
HARAP BACA SEBELUM MENJALANKAN PERANGKAT LUNAK INI. LIHAT CATATAN RELEASE COMPILER MPLAB XC8 C UNTUK DOKUMEN PIC JIKA ANDA MENGGUNAKAN COMPILER UNTUK PERANGKAT PIC 8-BIT.
Lebihview
Perkenalan
Rilis kompiler Microchip MPLAB® XC8 C ini berisi beberapa fitur baru, perbaikan bug, dan dukungan perangkat baru.
Tanggal Pembuatan
Tanggal pembuatan resmi versi kompiler ini adalah 3 Juli 2022.
Versi sebelumnya
Versi kompiler MPLAB XC8 C sebelumnya adalah 2.39, kompiler keamanan fungsional, yang dibuat pada 27 Januari 2022. Kompiler standar sebelumnya adalah versi 2.36, yang dibuat pada 27 Januari 2022.
Manual Keselamatan Fungsional
Manual Keamanan Fungsional untuk kompiler MPLAB XC tersedia dalam paket dokumentasi saat Anda membeli lisensi keamanan fungsional.
Lisensi dan Versi Komponen
MPLAB® XC8 C Compiler untuk alat AVR MCUs ditulis dan didistribusikan di bawah GNU General Public License (GPL) yang berarti kode sumbernya didistribusikan secara bebas dan tersedia untuk umum. Kode sumber untuk alat di bawah GNU GPL dapat diunduh secara terpisah dari Microchip weblokasi. Anda dapat membaca GNU GPL di file bernama terletak di subdirektori direktori instalasi Anda. Diskusi umum tentang prinsip-prinsip yang mendasari GPL dapat ditemukan di sini. Kode dukungan disediakan untuk header files, skrip linker, dan pustaka runtime adalah kode kepemilikan dan tidak tercakup dalam GPL.
Compiler ini merupakan implementasi dari GCC versi 5.4.0, binutils versi 2.26, dan menggunakan avr-libc versi 2.0.0.
Persyaratan Sistem
Kompiler MPLAB XC8 C dan perangkat lunak lisensi yang digunakannya tersedia untuk berbagai sistem operasi, termasuk versi 64-bit berikut ini: Microsoft Windows 10 edisi profesional; Ubuntu 18.04; dan macOS 10.15.5. Biner untuk Windows telah ditandatangani kode. Biner untuk mac OStelah ditandatangani kode dan disahkan oleh notaris.
Jika Anda menjalankan server lisensi jaringan, hanya komputer dengan sistem operasi yang didukung oleh kompiler yang dapat digunakan untuk menghosting server lisensi. Pada xclm versi 2.0, server lisensi jaringan dapat diinstal pada platform Microsoft Windows Server, namun server lisensi tidak perlu dijalankan pada versi server sistem operasi.
Perangkat yang Didukung
Kompiler ini mendukung semua perangkat AVR MCU 8-bit yang dikenal pada saat rilis. Lihat (di direktori dokumen kompiler) untuk daftar semua perangkat yang didukung. Ini files juga mencantumkan pengaturan bit konfigurasi untuk setiap perangkat.
Edisi dan Peningkatan Lisensi
Kompiler MPLAB XC8 dapat diaktifkan sebagai produk berlisensi (PRO) atau tidak berlisensi (Gratis). Anda perlu membeli kunci aktivasi untuk melisensikan kompiler Anda. Lisensi memungkinkan tingkat pengoptimalan yang lebih tinggi dibandingkan dengan produk Gratis. Kompiler yang tidak berlisensi dapat dioperasikan tanpa batas waktu tanpa lisensi.
Kompiler Keamanan Fungsional MPLAB XC8 harus diaktifkan dengan lisensi keamanan fungsional yang dibeli dari Microchip. Kompiler tidak akan beroperasi tanpa lisensi ini. Setelah diaktifkan, Anda dapat memilih tingkat pengoptimalan mana pun dan menggunakan semua fitur kompiler. Rilis Kompiler Keamanan Fungsional MPLAB XC ini mendukung Lisensi Server Jaringan.
Lihat dokumen Installing and Licensing MPLAB XC C Compilers (DS50002059) untuk informasi tentang tipe lisensi dan instalasi compiler dengan lisensi.
Instalasi dan Aktivasi
Lihat juga bagian Masalah dan Batasan Migrasi untuk informasi penting tentang pengelola lisensi terbaru yang disertakan dengan kompiler ini.
Jika menggunakan MPLAB IDE, pastikan untuk menginstal MPLAB X IDE terbaru versi 5.0 atau lebih baru sebelum menginstal alat ini. Keluar dari IDE sebelum menginstal kompiler. Jalankan aplikasi installer compiler .exe (Windows), .run (Linux) atau app (macOS), misal XC8-1.00.11403-windows.exe dan ikuti petunjuk di layar.
Direktori instalasi default direkomendasikan. Jika Anda menggunakan Linux, Anda harus menginstal kompiler menggunakan terminal dan dari akun root. Instal menggunakan akun macOS dengan hak administrator.
Aktivasi sekarang dilakukan secara terpisah untuk instalasi. Lihat dokumen License Manager for MPLAB® XC C Compilers (DS52059) untuk informasi lebih lanjut.
Jika Anda memilih untuk menjalankan kompiler di bawah lisensi evaluasi, Anda sekarang akan mendapatkan peringatan selama kompilasi ketika Anda berada dalam waktu 14 hari setelah akhir periode evaluasi Anda. Peringatan yang sama dikeluarkan jika Anda berada dalam waktu 14 hari setelah berakhirnya langganan HPA Anda.
Server Lisensi Jaringan XC adalah penginstal terpisah dan tidak termasuk dalam penginstal kompiler pengguna tunggal.
Manajer Lisensi XC sekarang mendukung roaming lisensi jaringan terapung. Ditujukan untuk pengguna seluler, fitur ini memungkinkan lisensi mengambang keluar dari jaringan untuk jangka waktu singkat. Dengan menggunakan fitur ini, Anda dapat memutuskan sambungan dari jaringan dan tetap menggunakan kompiler MPLAB XC Anda. Lihat folder doc instalasi XCLM untuk informasi lebih lanjut tentang fitur ini. MPLAB X IDE menyertakan jendela Lisensi (Alat > Lisensi) untuk mengelola roaming secara visual.
Mengatasi Masalah Instalasi
Jika Anda mengalami kesulitan dalam menginstal kompiler pada sistem operasi Windows mana pun, cobalah saran berikut.
- Jalankan penginstalan sebagai administrator.
- Atur izin aplikasi penginstal ke 'Kontrol penuh'. (Klik kanan file, pilih Properti, tab Keamanan, pilih pengguna, edit.)
- Tetapkan izin folder temp ke “Kontrol Penuh!
Untuk menentukan lokasi folder temp, ketik %temp% pada perintah Run (tombol logo Windows + R). Ini akan membuka a file dialog explorer menunjukkan direktori itu dan memungkinkan Anda menentukan jalur folder itu.
Dokumentasi Penyusun
Panduan pengguna kompiler dapat dibuka dari halaman HTML yang terbuka di browser Anda saat mengklik tombol bantuan berwarna biru di dasbor MPLAB X IDE, seperti yang ditunjukkan pada tangkapan layar.
Jika Anda membangun target AVR 8-bit, Panduan Pengguna Kompiler MPLAB® XC8 C untuk AVR® MCU berisi informasi tentang opsi dan fitur kompiler yang berlaku untuk arsitektur ini.
Dukungan Pelanggan
Microchip menerima laporan bug, saran atau komentar mengenai versi kompiler ini. Silakan arahkan setiap laporan bug atau permintaan fitur melalui Sistem Pendukung.
Pembaruan Dokumentasi
Untuk versi dokumentasi MPLAB XC8 yang online dan terkini, silakan kunjungi Dokumentasi Teknis Online Microchip weblokasi.
Dokumentasi AVR baru atau yang diperbarui dalam rilis ini:
- Pemberitahuan hak cipta MUSL
- Instalasi dan Lisensi Compiler MPLAB XC C (revisi M)
- Panduan Pengguna MPLAB XC8 untuk Insinyur Tertanam – AVR MCU (revisi A)
- Panduan Pengguna MPLAB XC8 C Compiler untuk AVR MCU (revisi F)
- Panduan Referensi Perpustakaan Standar Terpadu Microchip (revisi B)
Panduan Referensi Perpustakaan Standar Terpadu Microchip menjelaskan perilaku dan antarmuka ke fungsi yang ditentukan oleh Perpustakaan Standar Terpadu Microchip, serta tujuan penggunaan jenis perpustakaan dan makro. Beberapa informasi ini sebelumnya terdapat dalam Panduan Pengguna Kompiler MPLAB® XC8 C untuk AVR® MCU. Informasi perpustakaan khusus perangkat masih terdapat dalam panduan kompiler ini.
Jika Anda baru memulai dengan perangkat 8-bit dan Kompiler MPLAB XC8 C, Panduan Pengguna MPLAB® XC8 untuk Insinyur Tertanam – AVR® MCU (DS50003108) memiliki informasi tentang menyiapkan proyek di IDE MPLAB X dan menulis kode untuk proyek MPLAB XC8 C pertama Anda. Panduan ini sekarang didistribusikan bersama kompiler.
Panduan Pengguna Hamate telah disertakan dalam direktori docs dalam rilis ini. Panduan ini ditujukan bagi mereka yang menjalankan Hamate sebagai aplikasi yang berdiri sendiri.
Apa yang Baru
Berikut ini adalah fitur target AVR baru yang kini didukung oleh compiler. Nomor versi di subjudul menunjukkan versi kompiler pertama yang mendukung fitur berikutnya.
Versi 2.40
Dukungan perangkat baru Dukungan kini tersedia untuk komponen AVR berikut: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32, dan AVR64EA48.
Abstraksi prosedural yang ditingkatkan Alat optimasi abstraksi prosedural (PA) telah ditingkatkan sehingga kode yang berisi instruksi pemanggilan fungsi (call recall)) dapat diuraikan. Ini hanya akan terjadi jika tumpukan tidak digunakan untuk meneruskan argumen atau memperoleh nilai kembalian dari fungsi. Tumpukan digunakan saat memanggil fungsi dengan daftar argumen variabel atau saat memanggil fungsi yang membutuhkan lebih banyak argumen daripada register yang ditunjuk untuk tujuan ini. Fitur ini dapat dinonaktifkan menggunakan opsi panggilan biksu-pa-garis besar, atau abstraksi prosedural dapat dinonaktifkan sepenuhnya untuk suatu objek file atau berfungsi dengan menggunakan -monk-pa-on-file dan -mo.-pa-on-function masing-masing, atau dengan menggunakan atribut nipa ( penentu nipa) secara selektif dengan fungsi
Makro cakupan kode Kompiler sekarang mendefinisikan makro __CODECOV jika opsi mcodecov yang valid ditentukan.
Opsi reservasi memori Driver xc8-cc sekarang akan menerima opsi -mreserve=space@start: end saat membuat target AVR. Opsi ini mencadangkan rentang memori tertentu dalam ruang memori data atau program, mencegah linker mengisi kode atau objek di area ini.
IO cerdas yang lebih cerdas Beberapa perbaikan telah dilakukan pada fungsi Smart IO, termasuk perubahan umum pada kode inti printf, memperlakukan penentu konversi %n sebagai varian independen, menghubungkan rutinitas vararg pop sesuai permintaan, menggunakan tipe data yang lebih pendek jika memungkinkan untuk menangani argumen fungsi IO , dan memperhitungkan kode umum dalam lebar bidang dan penanganan presisi. Hal ini dapat menghasilkan penghematan kode dan data yang signifikan, serta meningkatkan kecepatan eksekusi IO.
Versi 2.39 (Rilis Keamanan Fungsional)
Lisensi Server Jaringan Rilis Kompiler Keamanan Fungsional MPLAB XC8 ini mendukung Lisensi Server Jaringan.
Versi 2.36
Tidak ada.
Versi 2.35
Dukungan perangkat baru Dukungan tersedia untuk komponen AVR berikut: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28, dan AVR64DD32.
Peralihan konteks yang ditingkatkan Opsi -mcall-isr-prologs yang baru mengubah bagaimana fungsi interupsi menyimpan register saat masuk dan bagaimana register tersebut dikembalikan ketika rutinitas interupsi berakhir. Ini bekerja dengan cara yang mirip dengan opsi -mcall-prologs, tetapi hanya memengaruhi fungsi interupsi (ISR).
Peralihan konteks yang lebih baik lagi Opsi -mgas-isr-prologues yang baru mengontrol kode konteks yang dihasilkan untuk rutinitas layanan interupsi kecil. Ketika diaktifkan, fitur ini akan membuat assembler memindai ISR untuk penggunaan register dan hanya menyimpan register yang digunakan jika diperlukan.
Pemetaan flash yang dapat dikonfigurasi Beberapa perangkat dalam keluarga AVR DA dan AVR DB memiliki SFR (misalnya FLMAP) yang menentukan bagian 32k memori program mana yang akan dipetakan ke dalam memori data. Opsi baru – mconst-data-in-config-mapped-proem dapat digunakan agar linker menempatkan semua data kontra yang memenuhi syarat dalam satu bagian 32k dan secara otomatis menginisialisasi register SFR yang relevan untuk memastikan bahwa data ini dipetakan ke dalam ruang memori data , di mana hal itu akan diakses dengan lebih efektif.
Perpustakaan Standar Terpadu Microchip Semua kompiler MPLAB XC akan berbagi Microchip Unified Standard Library, yang kini tersedia dengan rilis MPLAB XC8 ini. Panduan Pengguna Kompiler MPLAB® XC8 C/atau AVR® MCU tidak lagi menyertakan dokumentasi untuk fungsi standar ini. Informasi ini sekarang dapat ditemukan di Panduan Referensi Perpustakaan Standar Terpadu Microchip. Perhatikan bahwa beberapa fungsi yang sebelumnya ditentukan oleh avr-libc tidak lagi tersedia. (Lihat Pustakawan):'. Kegunaan…)
IO yang cerdas Sebagai bagian dari perpustakaan terpadu yang baru, fungsi IO dalam kelompok pencetakan dan pemindaian kini dibuat secara khusus pada setiap build, berdasarkan pada bagaimana fungsi-fungsi ini digunakan dalam program. Hal ini secara signifikan dapat mengurangi sumber daya yang digunakan oleh suatu program.
Opsi bantuan IO cerdas Saat menganalisis panggilan ke fungsi IO pintar (seperti printf () atau scanf () ), kompiler tidak selalu dapat menentukan dari string format atau menyimpulkan dari argumen penentu konversi yang diperlukan oleh panggilan tersebut. Sebelumnya, kompiler akan selalu tidak membuat asumsi dan memastikan bahwa fungsi IO yang berfungsi penuh dihubungkan ke gambar program akhir. Opsi baru – msmart-io-format=fmt telah ditambahkan sehingga kompiler dapat diberi tahu oleh pengguna tentang penentu konversi yang digunakan oleh fungsi IO pintar yang penggunaannya ambigu, sehingga mencegah rutinitas IO yang terlalu panjang untuk dihubungkan. (Lihat Opsi smart-io-format untuk lebih jelasnya.)
Menempatkan bagian khusus Sebelumnya, opsi -Wl, –section-start hanya menempatkan bagian yang ditentukan pada alamat yang diminta ketika skrip linker menentukan bagian keluaran dengan nama yang sama. Jika hal ini tidak terjadi, bagian tersebut ditempatkan pada alamat yang dipilih oleh penghubung dan opsi tersebut pada dasarnya diabaikan. Sekarang opsi ini akan diterapkan untuk semua bagian khusus, meskipun skrip tautan tidak menentukan bagian tersebut. Namun perlu diperhatikan bahwa untuk bagian standar, seperti . teks, . bss atau . data, pengalokasi yang paling sesuai akan tetap memiliki kontrol penuh atas penempatannya, dan opsi tersebut tidak akan berpengaruh. Gunakan opsi -Wl, -Tsection=add, seperti dijelaskan dalam panduan pengguna.
Versi 2.32
Panduan Tumpukan Tersedia dengan lisensi kompiler PRO, fitur panduan tumpukan kompiler dapat digunakan untuk memperkirakan kedalaman maksimum tumpukan apa pun yang digunakan oleh suatu program. Ini membangun dan menganalisis grafik panggilan suatu program, menentukan penggunaan tumpukan setiap fungsi, dan menghasilkan laporan, yang darinya dapat disimpulkan kedalaman tumpukan yang digunakan oleh program. Fitur ini diaktifkan melalui opsi baris perintah -mchp-stack-usage. Ringkasan penggunaan tumpukan dicetak setelah eksekusi. Laporan tumpukan terperinci tersedia di peta file, yang dapat diminta dengan cara biasa.
Dukungan perangkat baru Dukungan tersedia untuk komponen AVR berikut: ATTINY 427, ATTINY 424, ATTINY 426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, dan AVR32DB48.
Dukungan perangkat yang dicabut Dukungan tidak lagi tersedia untuk komponen AVR berikut: AVR16DA28, AVR16DA32 dan, AVR16DA48.
Versi 2.31
Tidak ada.
Versi 2.30
Opsi baru untuk mencegah inisialisasi data Opsi driver -mno-data-ini t baru mencegah inisialisasi data dan pembersihan bagian bss. Ia bekerja dengan menekan output simbol do_ copy_ data dan do o_ clear_ bss di Majelis files, yang pada gilirannya akan mencegah dimasukkannya rutinitas tersebut oleh linker.
Optimalisasi yang ditingkatkan Sejumlah peningkatan optimasi telah dilakukan, termasuk penghapusan instruksi pengembalian yang berlebihan, penghapusan beberapa lompatan mengikuti instruksi skip-if-bit-is, dan peningkatan abstraksi prosedural dan kemampuan untuk mengulang proses ini.
Opsi tambahan kini tersedia untuk mengontrol beberapa pengoptimalan ini, khususnya -f bagian jangkar, yang memungkinkan akses objek statis dilakukan relatif terhadap satu simbol; -mpai derations=n, yang memungkinkan jumlah iterasi abstraksi prosedural diubah dari default 2; dan, -mpa-call cost- shortcall, yang melakukan abstraksi prosedural lebih agresif, dengan harapan linker dapat mengurangi panggilan panjang. Opsi terakhir ini dapat meningkatkan ukuran kode jika asumsi yang mendasarinya tidak terwujud.
Dukungan perangkat baru Dukungan tersedia untuk komponen AVR berikut: AVR16DA28, AVR16DA32,
AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DB28, AVR128DB32, AVR128DB48, dan AVR128DB64.
Dukungan perangkat ditarik Dukungan tidak lagi tersedia untuk komponen AVR berikut: ATA5272, ATA5790, ATA5790N,ATA5791,ATA5795,ATA6285,ATA6286,ATA6612C,ATA6613C,ATA6614Q, ATA6616C, ATA6617C, dan ATA664251.
Versi 2.29 (Rilis Keamanan Fungsional)
Judul file untuk kompiler bawaan Untuk memastikan bahwa kompiler dapat menyesuaikan dengan spesifikasi bahasa seperti MISRA, the tajuk file, yang secara otomatis disertakan oleh , telah diperbarui. Header ini berisi prototipe untuk semua fungsi bawaan, seperti _buil tin _avrnop () dan _buil tin_ avr delay_ cycles () . Beberapa perangkat bawaan mungkin tidak sesuai dengan MISRA; ini dapat dihilangkan dengan menambahkan definisikan _Xe_ STRICT_ MISRA ke baris perintah kompiler. Bawaan dan deklarasinya telah diperbarui untuk menggunakan tipe lebar tetap.
Versi 2.20
Dukungan perangkat baru Dukungan tersedia untuk komponen AVR berikut: ATTINY1624, ATTINY1626, dan ATTINY1627.
Alokasi paling sesuai yang lebih baik Pengalokasi paling cocok (BFA) dalam kompiler telah ditingkatkan sehingga bagian dialokasikan dalam urutan yang memungkinkan pengoptimalan yang lebih baik. BFA sekarang mendukung ruang alamat bernama dan menangani inisialisasi data dengan lebih baik.
Abstraksi prosedural yang ditingkatkan Optimasi abstraksi prosedural sekarang dilakukan pada lebih banyak urutan kode. Situasi sebelumnya di mana pengoptimalan ini mungkin meningkatkan ukuran kode telah diatasi dengan membuat kode pengoptimalan mengetahui proses pengumpulan sampah linker.
Tidak adanya Assembler AVR Assembler AVR tidak lagi disertakan dengan distribusi ini.
Versi 2.19 (Rilis Keamanan Fungsional)
Tidak ada.
Versi 2.10
Cakupan Kode Rilis ini mencakup fitur cakupan kode yang memfasilitasi analisis sejauh mana kode sumber proyek telah dieksekusi. Gunakan opsi -mcodecov=ram untuk mengaktifkannya. Setelah program dijalankan pada perangkat keras Anda, informasi cakupan kode akan dikumpulkan di perangkat, dan ini dapat ditransfer ke dan ditampilkan oleh MPLAB X IDE melalui plugin cakupan kode. Lihat dokumentasi IDE untuk mendapatkan informasi tentang plugin ini. #pragma mcodecov dapat digunakan untuk mengecualikan fungsi selanjutnya dari analisis cakupan. Idealnya pragma harus ditambahkan di awal file untuk mengecualikan seluruh itu file dari analisis cakupan. Alternatifnya, atribut ( (mcodecov) ) dapat digunakan untuk mengecualikan fungsi tertentu dari analisis cakupan.
Deskripsi perangkat files Perangkat baru file disebut avr chipinfo. html terletak di direktori docs dari distribusi kompiler. Ini file mencantumkan semua perangkat yang didukung oleh kompiler. Klik pada nama perangkat, dan itu akan membuka halaman yang menampilkan semua pasangan nilai/pengaturan bit konfigurasi yang diperbolehkan untuk perangkat itu, dengan exampsedikit.
Abstraksi prosedural Optimalisasi abstraksi prosedural, yang menggantikan blok umum kode perakitan dengan panggilan ke salinan blok tersebut yang diekstrak, telah ditambahkan ke kompiler. Ini dilakukan oleh aplikasi terpisah, yang secara otomatis dipanggil oleh kompiler ketika memilih optimasi level 2, 3, atau. Pengoptimalan ini mengurangi ukuran kode, namun dapat mengurangi kecepatan eksekusi dan kemampuan debug kode.
Abstraksi prosedural dapat dinonaktifkan pada tingkat pengoptimalan yang lebih tinggi menggunakan opsi -mno-pa, atau dapat diaktifkan pada tingkat pengoptimalan yang lebih rendah (tergantung pada lisensi Anda) dengan menggunakan -mpa. Itu dapat dinonaktifkan untuk suatu objek file menggunakan -mno-pa-on-file=filenama, atau dinonaktifkan untuk suatu fungsi dengan menggunakan -mno-pa pada fungsi= fungsi.
Di dalam kode sumber Anda, abstraksi prosedural dapat dinonaktifkan untuk suatu fungsi dengan menggunakan _attribute_ ( (nopa)) dengan definisi fungsi, atau dengan menggunakan _nopa, yang diperluas ke atribut ( (nopa, noinline)) dan dengan demikian mencegah terjadinya penyebarisan fungsi dan ada abstraksi kode sebaris.
Kunci dukungan bit di pragma Konfigurasi #pragma sekarang dapat digunakan untuk menentukan bit kunci AVR serta bit konfigurasi lainnya. Periksa info chip avr. html file (disebutkan di atas) untuk pasangan pengaturan/nilai untuk digunakan dengan pragma ini.
Dukungan perangkat baru Dukungan tersedia untuk bagian berikut: AVR28DA128, AVR64DA128,AVR32DA128, dan AVR48DA128.
Versi 2.05
Lebih banyak bit untuk uang Anda Versi macOS dari kompiler dan pengelola lisensi ini sekarang menjadi aplikasi 64-bit. Ini akan memastikan bahwa kompiler akan menginstal dan menjalankan tanpa peringatan pada versi terbaru macOS.
Objek const di memori program Kompiler sekarang dapat menempatkan objek yang memenuhi syarat const di memori Flash program, daripada menempatkannya di RAM. Kompiler telah dimodifikasi sehingga data global yang memenuhi syarat const disimpan dalam memori flash program dan data ini dapat diakses secara langsung dan tidak langsung menggunakan instruksi memori program yang sesuai. Fitur baru ini diaktifkan secara default tetapi dapat dinonaktifkan menggunakan opsi -mno-const-data-in-progmem. Untuk arsitektur avrxmega3 dan avrtiny, fitur ini tidak diperlukan dan selalu dinonaktifkan, karena memori program dipetakan ke dalam ruang alamat data untuk perangkat ini.
Standar gratis Versi tidak berlisensi (Gratis) dari kompiler ini sekarang memungkinkan pengoptimalan hingga dan termasuk level 2. Ini akan memungkinkan keluaran yang serupa, meskipun tidak identik, dengan apa yang sebelumnya dimungkinkan menggunakan lisensi Standar.
Selamat datang di AVRASM2 Assembler AVRASM2 untuk perangkat 8-bit kini disertakan dalam penginstal kompiler XC8. Assembler ini tidak digunakan oleh kompiler XC8, tetapi tersedia untuk proyek berdasarkan sumber perakitan tulisan tangan.
Dukungan perangkat baru Dukungan tersedia untuk bagian berikut: ATMEGA1608, ATMEGA1609, ATMEGA808, dan ATMEGA809.
Versi 2.00
Pengemudi tingkat atas Driver baru, bernama xc8-cc, kini berada di atas driver avr-gcc sebelumnya dan driver xc8, dan driver tersebut dapat memanggil compiler yang sesuai berdasarkan pilihan perangkat target. Driver ini menerima opsi gaya GCC, yang diterjemahkan atau diteruskan ke kompiler yang sedang dijalankan. Driver ini memungkinkan serangkaian opsi serupa dengan semantik serupa untuk digunakan dengan target AVR atau PIC apa pun dan karenanya merupakan cara yang disarankan untuk memanggil kompiler. Jika diperlukan, driver avr-gcc lama dapat dipanggil langsung menggunakan opsi gaya lama yang diterima di versi kompiler sebelumnya.
Antarmuka C Umum Kompiler ini sekarang dapat menyesuaikan dengan MPLAB Common C Interface, memungkinkan kode sumber lebih mudah dipindahkan ke semua kompiler MPLAB XC. Opsi -mext=cci meminta fitur ini, mengaktifkan sintaks alternatif untuk banyak ekstensi bahasa.
Sopir pustakawan baru Driver pustakawan baru diposisikan di atas pustakawan PIC sebelumnya dan pustakawan AVR avr-ar. Driver ini menerima opsi gaya pengarsip GCC, yang diterjemahkan atau diteruskan ke pustakawan yang sedang dieksekusi. Driver baru ini memungkinkan serangkaian opsi serupa dengan semantik serupa untuk digunakan untuk membuat atau memanipulasi perpustakaan PIC atau AVR apa pun file dan dengan demikian merupakan cara yang disarankan untuk memanggil pustakawan. Jika diperlukan untuk proyek lama, pustakawan sebelumnya dapat dipanggil secara langsung menggunakan opsi gaya lama yang diterima di versi kompiler sebelumnya.
Masalah Migrasi
Berikut ini adalah fitur-fitur yang kini ditangani secara berbeda oleh kompiler. Perubahan ini mungkin memerlukan modifikasi pada kode sumber Anda jika mem-porting kode ke versi kompiler ini. Nomor versi di subpos menunjukkan versi kompiler pertama yang mendukung perubahan berikutnya.
Versi 2.40
Tidak ada.
Versi 2.39 (Rilis Keamanan Fungsional)
Tidak ada.
Versi 2.36
Tidak ada.
Versi 2.35
Penanganan string-to base (XCS-2420) Untuk memastikan konsistensi dengan kompiler XC lainnya, fungsi string-to XC8, seperti strtol () dll., tidak akan lagi mencoba mengonversi string input jika basis yang ditentukan lebih besar dari 36 dan sebagai gantinya akan menyetel errno ke EINVAL. Standar C tidak menentukan perilaku fungsi ketika nilai dasar ini terlampaui.
Pengoptimalan kecepatan yang tidak tepat Pengoptimalan abstraksi prosedural diaktifkan saat memilih pengoptimalan level 3 (-03). Pengoptimalan ini mengurangi ukuran kode dengan mengorbankan kecepatan kode, jadi seharusnya tidak dilakukan. Proyek yang menggunakan tingkat pengoptimalan ini mungkin melihat perbedaan dalam ukuran kode dan kecepatan eksekusi saat dibuat dengan rilis ini.
fungsionalitas perpustakaan Kode untuk banyak fungsi perpustakaan C standar sekarang berasal dari Perpustakaan Standar Terpadu Microchip, yang mungkin menunjukkan perilaku berbeda dalam beberapa keadaan dibandingkan dengan yang disediakan oleh perpustakaan avr-libc sebelumnya. Misalnyaample, tidak perlu lagi menautkan di perpustakaan lprintf_flt (opsi -print _flt) untuk mengaktifkan dukungan IO yang diformat untuk penentu format float. Fitur IO cerdas dari Microchip Unified Standard Library menjadikan opsi ini mubazir. Selain itu, penggunaan rutinitas akhiran _p untuk fungsi string dan memori (misalnya strcpy_P () dll .. ) yang beroperasi pada string const di flash tidak lagi diperlukan. Rutinitas C standar (misalnya strcpy ()) akan bekerja dengan benar dengan data tersebut ketika fitur const-data-in-program-memory diaktifkan.
Versi 2.32
Tidak ada.
Versi 2.31
Tidak ada.
Versi 2.30
Tidak ada.
Versi 2.29 (Rilis Keamanan Fungsional)
Tidak ada.
Versi 2.20
Tata letak DFP diubah Kompiler sekarang mengasumsikan tata letak berbeda yang digunakan oleh DFP (Paket Keluarga Perangkat). Artinya, DFP lama mungkin tidak berfungsi dengan rilis ini, dan kompiler lama tidak akan dapat menggunakan DFP terbaru.
Versi 2.19 (Rilis Keamanan Fungsional)
Tidak ada.
Versi 2.10
Tidak ada
Versi 2.05
Const objek dalam memori program Perhatikan bahwa secara default, objek yang memenuhi syarat const akan ditempatkan dan diakses di memori program (seperti dijelaskan di sini). Hal ini akan mempengaruhi ukuran dan kecepatan eksekusi proyek Anda, namun akan mengurangi penggunaan RAM. Fitur ini dapat dinonaktifkan, jika diperlukan, menggunakan opsi -mnoconst-da ta-in-progmem.
Versi 2.00
Sekering konfigurasi Sekering konfigurasi perangkat sekarang dapat diprogram menggunakan pragma konfigurasi diikuti dengan pasangan nilai pengaturan untuk menentukan status sekering, misalnya
#pragma config WDT0N = SET
#konfigurasi pragma B0DLEVEL = B0DLEVEL_4V3
Objek dan fungsi absolut Objek dan fungsi sekarang dapat ditempatkan pada alamat tertentu di memori menggunakan penentu CCI _at (alamat), misalnyaample: #sertakan int foobar di(Ox800100); char at(Ox250) get ID(int offset) { … } Argumen penentu ini harus berupa konstanta yang mewakili alamat di mana byte atau instruksi pertama akan ditempatkan. Alamat RAM ditunjukkan dengan menggunakan offset 0x800000. Aktifkan CCI untuk menggunakan fitur ini.
Sintaks fungsi interupsi baru Kompiler sekarang menerima penentu interupsi (num) CCI untuk menunjukkan bahwa fungsi C adalah penangan interupsi. Penentu mengambil nomor interupsi, misalnyaample: #sertakan batal interupsi(SPI STC_ vect _num) spi Isr(batal) { … }
Masalah yang Telah Diperbaiki
Berikut ini adalah koreksi yang telah dilakukan pada compiler. Ini mungkin memperbaiki bug dalam kode yang dihasilkan atau mengubah pengoperasian kompiler sesuai yang dimaksudkan atau ditentukan oleh panduan pengguna. Nomor versi di subjudul menunjukkan versi kompiler pertama yang berisi perbaikan untuk masalah berikutnya. Label dalam tanda kurung pada judul adalah identifikasi masalah tersebut dalam database pelacakan. Ini mungkin berguna jika Anda perlu menghubungi dukungan.
Perhatikan bahwa beberapa masalah khusus perangkat telah diperbaiki di Paket Keluarga Perangkat (DFP) yang terkait dengan perangkat tersebut. Lihat Manajer Paket MPLAB untuk informasi tentang perubahan yang dilakukan pada DFP dan untuk mengunduh paket terbaru.
Versi 2.40
Terlalu santai (XCS-2876) Saat menggunakan opsi -mrelax, kompiler tidak mengalokasikan beberapa bagian secara bersamaan, sehingga menghasilkan ukuran kode yang kurang optimal. Hal ini mungkin terjadi dengan kode yang menggunakan perpustakaan MUSL baru atau dengan simbol yang lemah.
Fitur pemetaan tidak dinonaktifkan seperti yang dinyatakan dalam peringatan (XCS-2875) Fitur cost-data-in-config mappedprogmem bergantung pada fitur cost-data-in-proem yang diaktifkan. Jika fitur cost-data-ipconfig-mapped-proem diaktifkan secara eksplisit menggunakan opsi dan fitur cost-data-inprogmem dinonaktifkan, langkah tautan gagal, meskipun ada pesan peringatan yang menyatakan bahwa kontra data-in-config-mapped- fitur proem telah dinonaktifkan secara otomatis, dan hal ini tidak sepenuhnya benar. Fitur const-data-in-config-mapped-proem sekarang dinonaktifkan sepenuhnya dalam situasi ini.
Perubahan DFP untuk mengakses NVMCTRL dengan benar (XCS-2848) Kode startup runtime yang digunakan oleh perangkat AVR64EA tidak memperhitungkan bahwa register NVMCTRL berada di bawah Configuration Change Protection (CCP) dan tidak dapat mengatur IO SFR ke halaman yang digunakan oleh kompiler const-data-in configmapped-proem fitur. Perubahan yang dilakukan pada AVR-Ex_DFP versi 2.2.55 akan memungkinkan kode startup runtime menulis dengan benar ke register ini.
Perubahan DFP untuk menghindari pemetaan flash (XCS-2847) Solusi untuk masalah dengan fitur perangkat pemetaan flash yang dilaporkan dalam AVR128DA28/32/48/64 Silicon Errata (DS80000882) telah diterapkan. Fitur kompiler const-data-in-config-mapped-proem tidak akan diterapkan secara default untuk perangkat yang terpengaruh, dan perubahan ini akan muncul di AVR-Ex_DFP versi 2.2.160.
Kesalahan pembuatan dengan sinhf atau coshf (XCS-2834) Upaya untuk menggunakan fungsi perpustakaan sinhf () atau coshf () menghasilkan kesalahan tautan, yang menjelaskan referensi yang tidak ditentukan. Fungsi yang hilang yang direferensikan kini telah disertakan dalam distribusi kompiler.
Bangun kesalahan dengan nopa (XCS-2833) Menggunakan atribut nopa dengan fungsi yang nama assemblernya ditentukan menggunakan as () memicu pesan kesalahan dari assembler. Kombinasi ini tidak mungkin dilakukan.
Kegagalan fungsi variadik dengan argumen penunjuk (XCS-2755, XCS-2731) Fungsi dengan sejumlah argumen variabel mengharapkan pointer 24-bit (tipe _memo) diteruskan dalam daftar argumen variabel ketika fitur data biaya dalam proyek diaktifkan. Argumen yang merupakan penunjuk ke memori data diteruskan sebagai objek 16-bit, menyebabkan kegagalan kode saat akhirnya dibaca. Ketika fitur kontra data-dalam-proem diaktifkan, semua argumen penunjuk 16-bit kini dikonversi menjadi penunjuk 24-bit. fungsi perpustakaan strtoxxx gagal (XCS-2620) Ketika fitur const-data-in-proem diaktifkan, parameter enter dalam fungsi perpustakaan strtoxxx tidak diperbarui dengan benar untuk argumen string sumber yang tidak ada dalam memori program.
Peringatan untuk cast yang tidak valid (XCS-2612) Kompiler sekarang akan mengeluarkan kesalahan jika fitur cost-in-proem diaktifkan dan alamat literal string secara eksplisit dilemparkan ke ruang alamat data (menghilangkan kualifikasi const), misalnyaample, (uint8 t *) “Halo Dunia!”. Peringatan muncul jika alamat mungkin tidak valid ketika penunjuk data const secara eksplisit dilemparkan ke ruang alamat data.
Penempatan objek const yang tidak diinisialisasi (XCS-2408) Objek const dan const volatile yang tidak diinisialisasi tidak ditempatkan dalam memori program pada perangkat yang memetakan seluruh atau sebagian memori programnya ke dalam ruang alamat data. Untuk perangkat ini, objek tersebut sekarang ditempatkan di memori program, sehingga pengoperasiannya konsisten dengan perangkat lain.
Versi 2.39 (Rilis Keamanan Fungsional)
Tidak ada.
Versi 2.36
Kesalahan saat menunda (XCS-2774) Perubahan kecil pada default Pengoptimalan mode bebas mencegah pelipatan konstan ekspresi operan ke fungsi bawaan penundaan, mengakibatkan fungsi tersebut diperlakukan sebagai nonkontak dan memicu kesalahan: _buil tin avr delay_ cycles mengharapkan ac compile konstanta bilangan bulat waktu.
Versi 2.35
Alokasi bersebelahan menggunakan _at (XCS-2653) Alokasi yang berdekatan dari beberapa tempat objek di bagian dengan nama yang sama dan menggunakan at () tidak berfungsi dengan benar. Misalnyaample: constchararrl [ ] di tri butte ((bagian pada(“.misses”))) di (Ox50 0 ) = {Oxo , Ox CD} ; biaya char arr2[ ] pada tri butte ((bagian(“.my s eke”))) = {Lembu, Lembu FE }; seharusnya menempatkan arr2 segera setelah aril.
Menentukan alamat awal bagian (XCS-2650) Opsi -Wal, –section-start secara diam-diam gagal menempatkan bagian pada alamat awal yang dinominasikan. Masalah ini telah diperbaiki untuk setiap bagian yang diberi nama khusus; namun, ini tidak akan berfungsi untuk bagian standar apa pun, seperti . teks atau . bss, yang harus ditempatkan menggunakan opsi -Wl, -T.
Linker mogok saat bersantai (XCS-2647) Ketika optimasi -relax diaktifkan dan ada bagian kode atau data yang tidak sesuai dengan memori yang tersedia, linker mogok. Sekarang, dalam keadaan seperti itu, pesan kesalahan malah dikeluarkan.
Akses EEPROM buruk (XCS-2629) Rutinitas blok leproma _read_ tidak bekerja dengan benar pada perangkat Mega ketika opsi -monist-data-in-proem diaktifkan (yang merupakan keadaan default), mengakibatkan memori EEPROM tidak terbaca dengan benar.
Alokasi memori tidak valid (XCS-2593, XCS-2651) Ketika opsi -Teks atau -Tata linker (misalnyaample melewati menggunakan opsi driver -Wl) ditentukan, teks/data wilayah asal yang sesuai telah diperbarui; namun, alamat akhir tidak disesuaikan, sehingga dapat menyebabkan wilayah tersebut melampaui rentang memori perangkat target.
Kode interupsi ATtiny tidak valid (XCS-2465) Saat membangun untuk perangkat Tatin dan pengoptimalan dinonaktifkan (-00), fungsi interupsi mungkin telah memicu pesan assembler di luar jangkauan operan.
Opsi tidak dilewati (XCS-2452) Saat menggunakan opsi -Wl dengan beberapa opsi linker yang dipisahkan koma, tidak semua opsi linker diteruskan ke linker.
Kesalahan membaca memori program secara tidak langsung (XCS-2450) Dalam beberapa kasus, kompiler menghasilkan kesalahan internal (tidak dapat dikenali) ketika membaca nilai dua byte dari pointer ke memori program
Versi 2.32
Akses kedua perpustakaan gagal (XCS-2381) Memanggil versi Windows dari xc8-ar. pengarsip perpustakaan exe untuk kedua kalinya mengakses arsip perpustakaan yang ada mungkin gagal dengan pesan kesalahan tidak dapat mengganti nama.
Versi 2.31
Kegagalan kompiler yang tidak dapat dijelaskan (XCS-2367) Saat dijalankan pada platform Windows yang direktori sementara sistemnya disetel ke jalur yang menyertakan titik'.' karakter, kompiler mungkin gagal mengeksekusi.
Versi 2.30
Label global salah tempat setelah diuraikan (XCS-2299) Kode perakitan tulisan tangan yang menempatkan label global dalam urutan perakitan yang diperhitungkan oleh abstraksi prosedural mungkin tidak diposisikan ulang dengan benar.
Kecelakaan yang menenangkan (XCS-2287) Menggunakan opsi -merlad mungkin menyebabkan linker mogok ketika pengoptimalan relaksasi lompat ekor mencoba menghapus instruksi ret yang tidak ada di akhir bagian.
Crash saat mengoptimalkan label sebagai nilai (XCS-2282) Kode yang menggunakan ekstensi bahasa GNU C “Label sebagai nilai” mungkin menyebabkan optimasi abstraksi prosedural terhenti, dengan kesalahan perbaikan rentang VMA yang Diuraikan.
Tidak begitu konstan (XCS-2271) Prototipe untuk memulai () dan fungsi lainnya dari tidak lagi menentukan kualifikasi biaya non-standar pada penunjuk string yang dikembalikan ketika fitur -monist-data inprogmem dinonaktifkan. Perhatikan bahwa dengan perangkat avrxmega3 dan avertin, fitur ini diaktifkan secara permanen.
Inisialisasi hilang (XCS-2269) Ketika lebih dari satu variabel dalam unit terjemahan ditempatkan di suatu bagian (menggunakan bagian atau atribut ((bagian))), dan variabel pertama tersebut diinisialisasi nol atau tidak memiliki penginisialisasi, penginisialisasi untuk variabel lain dalam unit terjemahan yang sama yang ditempatkan di bagian yang sama hilang.
Versi 2.29 (Rilis Keamanan Fungsional)
Tidak ada.
Versi 2.20
Kesalahan dengan perintah panjang (XCS-1983) Saat menggunakan target AVR, kompiler mungkin berhenti dengan a file kesalahan tidak ditemukan, jika baris perintah sangat besar dan berisi karakter khusus seperti tanda kutip, garis miring terbalik, dll.
Bagian rodata yang belum ditetapkan (XCS-1920) Tautan AVR gagal menetapkan memori untuk bagian rodata khusus saat membangun arsitektur avrxmega3 dan avrtiny, yang berpotensi menghasilkan kesalahan memori yang tumpang tindih
Versi 2.19 (Rilis Keamanan Fungsional)
Tidak ada.
Versi 2.10
Kegagalan relokasi (XCS-1891) Pengalokasi yang paling cocok adalah meninggalkan 'lubang' memori di antara bagian setelah relaksasi linker. Selain fragmentasi memori, hal ini meningkatkan kemungkinan terjadinya kegagalan relokasi linker yang berkaitan dengan lompatan relatif pc atau panggilan yang berada di luar jangkauan.
Instruksi tidak diubah oleh relaksasi (XCS-1889) Relaksasi linker tidak terjadi untuk instruksi lompat atau panggilan yang targetnya dapat dijangkau jika santai.
Hilang fungsionalitas (XCSE-388) Beberapa definisi dari , seperti clock_ div_ t dan clock_prescale_set (), tidak ditentukan untuk perangkat, termasuk ATmega324PB, ATmega328PB, ATtiny441, dan ATtiny841.
Makro tidak ada Makro praprosesor_ xcs _MODE_, _xcs VERSION, _xc, dan xcs tidak ditentukan secara otomatis oleh kompiler. Ini sekarang tersedia.
Versi 2.05
Kesalahan kompiler internal (XCS-1822) Saat membangun di bawah Windows, kesalahan kompiler internal mungkin terjadi saat mengoptimalkan kode.
Kelebihan RAM tidak terdeteksi (XCS-1800, XCS-1796) Program yang melebihi RAM yang tersedia tidak terdeteksi oleh kompiler dalam beberapa situasi, sehingga mengakibatkan kegagalan kode runtime.
Memori flash dihilangkan (XCS-1792) Untuk perangkat avrxmega3 dan avrtiny, sebagian memori flash mungkin tidak diprogram oleh MPLAB X IDE.
Kegagalan menjalankan main (XCS-1788) Dalam beberapa situasi di mana program tidak memiliki variabel global yang ditentukan, kode startup runtime tidak keluar dan fungsi main () tidak pernah tercapai.
Informasi memori salah (XCS-1787) Untuk perangkat avrxmega3 dan avrtiny, program berukuran avr melaporkan bahwa data read-only menggunakan RAM, bukan memori program.
Pembacaan memori program salah (XCS-1783) Proyek yang dikompilasi untuk perangkat dengan memori program yang dipetakan ke dalam ruang alamat data dan yang mendefinisikan objek menggunakan makro/atribut PROGMEM mungkin telah membaca objek ini dari alamat yang salah.
Kesalahan internal dengan atribut (XCS-1773) Terjadi kesalahan internal jika Anda mendefinisikan objek penunjuk dengan
_at () atau atribut() token di antara nama penunjuk dan tipe dereferensi, misalnyaample, karakter *
_di ( 0x80015 0) cp; Peringatan sekarang dikeluarkan jika kode tersebut ditemukan.
Kegagalan menjalankan main (XCS-1780, XCS-1767, XCS-1754) Menggunakan variabel EEPROM atau menentukan sekering menggunakan pragma konfigurasi mungkin menyebabkan inisialisasi data yang salah dan/atau eksekusi program terkunci dalam kode startup runtime, sebelum mencapai main () .
Kesalahan sekering dengan perangkat kecil (XCS-1778, XCS-1742) Perangkat attiny4/5/9/10/20/40 memiliki panjang sekering yang salah yang ditentukan di headernya files yang menyebabkan kesalahan tautan saat mencoba membuat kode yang menentukan sekering.
Kesalahan segmentasi (XCS-1777) Kesalahan segmentasi intermiten telah diperbaiki.
Kecelakaan perakit (XCS-1761) Assembler avr-as mungkin mogok ketika kompiler dijalankan di Ubuntu 18.
Objek tidak dibersihkan (XCS-1752) Objek durasi penyimpanan statis yang tidak diinisialisasi mungkin belum dihapus oleh kode startup runtime.
Spesifikasi perangkat yang bertentangan diabaikan (XCS-1749) Kompiler tidak menghasilkan kesalahan ketika beberapa opsi spesifikasi perangkat digunakan dan menunjukkan perangkat yang berbeda.
Kerusakan memori karena heap (XCS-1748) Simbol heap_ start salah disetel, mengakibatkan kemungkinan variabel biasa rusak oleh heap.
Kesalahan relokasi linker (XCS-1739) Kesalahan relokasi linker mungkin terjadi ketika kode berisi rjmp atau rcall dengan target yang berjarak tepat 4k byte.
Versi 2.00
Tidak ada.
Masalah yang Diketahui
Berikut ini adalah batasan dalam pengoperasian compiler. Ini mungkin batasan pengkodean umum, atau
penyimpangan dari informasi yang terkandung dalam panduan pengguna. Label dalam tanda kurung pada judul adalah identifikasi masalah tersebut dalam database pelacakan. Ini mungkin bermanfaat jika Anda perlu menghubungi dukungan. Item yang tidak memiliki label merupakan batasan yang menggambarkan mode operandi dan kemungkinan besar akan tetap berlaku secara permanen.
Integrasi IDE MPLAB X
Integrasi IDE MPLAB Jika Compiler akan digunakan dari MPLAB IDE, maka Anda harus menginstal MPLAB IDE sebelum menginstal Compiler.
Pembuatan Kode
Kegagalan alokasi memori PA (XCS-2881) Saat menggunakan pengoptimal abstraksi prosedural, linker mungkin melaporkan kesalahan alokasi memori ketika ukuran kode mendekati jumlah memori program yang tersedia pada perangkat, meskipun program tersebut harus dapat memenuhi ruang yang tersedia.
Tidak begitu pintar Smart-IO (XCS-2872) Fitur smart-io kompiler akan menghasilkan kode yang valid namun suboptimal untuk fungsi sprint jika fitur coast-data-in-proem telah dinonaktifkan atau jika semua flash perangkat dipetakan ke dalam memori data.
Bahkan Smart-IO yang kurang pintar (XCS-2869) Fitur smart-io kompiler akan menghasilkan kode yang valid namun suboptimal ketika opsi -floe dan -fno-buil tin digunakan.
Penempatan data hanya baca yang kurang optimal (XCS-2849) Linker saat ini tidak mengetahui bagian memori APPCODE dan APPDATA, maupun divisi [No-]Read-While-Write di peta memori. Akibatnya, ada kemungkinan kecil bahwa linker mengalokasikan data hanya-baca di area memori yang tidak sesuai. Kemungkinan kesalahan penempatan data meningkat jika fitur coast-data-in-pragma diaktifkan, terutama jika fitur coast-data-in-config-mapped-proem juga diaktifkan. Fitur-fitur ini dapat dinonaktifkan jika diperlukan.
Obyek file pemrosesan pesanan (XCS-2863) Urutan objek files yang akan diproses oleh linker mungkin berbeda berdasarkan penggunaan optimasi abstraksi prosedural (opsi -mpa). Ini hanya akan mempengaruhi kode yang mendefinisikan fungsi-fungsi lemah di beberapa modul.
Kesalahan linker dengan absolut (XCS-2777) Ketika suatu objek telah dibuat absolut pada alamat di awal RAM dan objek yang tidak diinisialisasi juga telah ditentukan, kesalahan linker mungkin terpicu.
ID bangun pendek (XCS-2775) Untuk perangkat ATA5700/2, register PHID0/1 hanya didefinisikan sebagai lebar 16 bit, bukan lebar 32 bit.
Linker mogok saat memanggil simbol (XCS-2758) Linker mungkin macet jika opsi driver -merlad digunakan ketika kode sumber memanggil simbol yang telah ditentukan menggunakan opsi -Wl, –defsym linker.
Inisialisasi salah (XCS-2679) Ada perbedaan antara tempat nilai awal untuk beberapa objek berukuran byte global/statis ditempatkan di memori data dan tempat variabel akan diakses saat runtime.
dimulai secara tidak benar menjadi kosong (XCS-2652) Dalam kasus di mana string subjek untuk konversi dengan dinyatakan () berisi apa yang tampak seperti angka floating-point dalam format eksponensial dan ada karakter yang tidak diharapkan setelah karakter e, maka alamat kosong, jika disediakan, akan menunjuk ke karakter setelahnya e dan bukan e itu sendiri. Misalnyaample: menyatakan("hooey", kosong); akan menghasilkan kosong menunjuk ke karakter x.
Panggilan fungsi tidak langsung yang buruk (XCS-2628) Dalam beberapa kasus, pemanggilan fungsi yang dilakukan melalui penunjuk fungsi yang disimpan sebagai bagian dari struktur mungkin gagal.
strtof mengembalikan nol untuk float heksadesimal (XCS-2626) Fungsi perpustakaan strtof() dkk dan scanf() dkk, akan selalu mengonversi bilangan titik-mengambang heksadesimal yang tidak menentukan eksponen menjadi
nol. Misalnyaample: stator("Burung Hantu", &kosong); akan mengembalikan nilai 0, bukan 1.
Pesan penasihat tumpukan tidak akurat (XCS-2542, XCS-2541) Dalam beberapa kasus, peringatan penasihat tumpukan tentang rekursi atau tumpukan tak tentu yang digunakan (mungkin melalui penggunaan alloca()) tidak dipancarkan.
Kegagalan dengan kode interupsi duplikat (XCS-2421) Di mana lebih dari satu fungsi interupsi memiliki tubuh yang sama, kompiler mungkin memiliki output untuk satu fungsi interupsi memanggil yang lain. Ini akan mengakibatkan semua register call-clobbered disimpan secara tidak perlu, dan interupsi akan diaktifkan bahkan sebelum epilog dari penangan interupsi saat ini berjalan, yang dapat menyebabkan kegagalan kode.
Objek const tidak ada dalam memori program (XCS-2408) Untuk proyek avrxmega3 dan avertins, objek const yang tidak diidealkan ditempatkan ke dalam memori data, meskipun peringatan menunjukkan bahwa objek tersebut telah ditempatkan di memori program. Hal ini tidak akan mempengaruhi perangkat yang tidak memiliki memori program yang dipetakan ke dalam ruang memori data, juga tidak akan mempengaruhi objek apa pun yang diinisialisasi.
Keluaran buruk dengan jalur DFP tidak valid (XCS-2376) Jika kompiler dipanggil dengan jalur DFP yang tidak valid dan 'spec' file ada untuk perangkat yang dipilih, kompiler tidak melaporkan paket keluarga perangkat yang hilang dan malah memilih 'spec' file, yang kemudian dapat menyebabkan keluaran yang tidak valid. 'Spesifikasi' files mungkin tidak diperbarui dengan DFP terdistribusi dan dimaksudkan hanya untuk digunakan dengan pengujian kompiler internal.
Memori tumpang tindih tidak terdeteksi (XCS-1966) Kompiler tidak mendeteksi tumpang tindih memori objek yang dibuat absolut pada suatu alamat (melalui at ()) dan objek lain menggunakan penentu bagian () dan yang ditautkan ke alamat yang sama.
Kegagalan dengan fungsi perpustakaan dan _meme (XCS-1763) Fungsi limbic float yang disebut dengan argumen di ruang alamat _memo mungkin gagal. Perhatikan bahwa rutinitas perpustakaan dipanggil dari beberapa operator C, misalnyaample, kode berikut terpengaruh: return regFloatVar > memxFloatVar;
Implementasi limbik terbatas (AVRTC-731) Untuk produk ATTiny4/5/9/10/20/40, implementasi standar perpustakaan C/Matematika di limbik sangat terbatas atau tidak ada.
Batasan memori program (AVRTC-732) Gambar memori program melebihi 128 kb didukung oleh rantai alat; namun, ada beberapa contoh pembatalan linker tanpa relaksasi dan tanpa pesan kesalahan yang berguna daripada menghasilkan stub fungsi yang diperlukan saat opsi -relax digunakan.
Batasan ruang nama (AVRTC-733) Ruang alamat bernama didukung oleh rantai alat, tunduk pada batasan yang disebutkan di bagian panduan pengguna Kualifikasi Jenis Khusus.
Zona waktu Itu fungsi perpustakaan mengasumsikan GMT dan tidak mendukung zona waktu lokal, sehingga waktu lokal () akan mengembalikan waktu yang sama dengan gummite (), misalnyaampsaya.
DUKUNGAN PELANGGAN
file:///Aplikasi/microehip/xc8/v 2 .40/docs/Baca saya_X C 8_ untuk VR. htm
Dokumen / Sumber Daya
![]() |
Perangkat Lunak Kompiler MICROCHIP MPLAB XC8 C [Bahasa Indonesia:] Panduan Pemilik MPLAB XC8 C, Perangkat Lunak Kompiler MPLAB XC8 C, Perangkat Lunak Kompiler, Perangkat Lunak |