MICROCHIP လိုဂိုAVR® MCU အတွက် MPLAB® XC8 C Compiler ဗားရှင်း 2.41 ထုတ်ဝေမှု မှတ်စုများ
ပိုင်ရှင်လက်စွဲ

MPLAB XC8 C Compiler ဖွံ့ဖြိုးတိုးတက်ရေးဆော့ဖ်ဝဲ

ဤစာရွက်စာတမ်းတွင် MICROCHIP AVR စက်ပစ္စည်းများကို ပစ်မှတ်ထားသည့်အခါ MPLAB XC8 C စုစည်းမှုဆိုင်ရာ အရေးကြီးအချက်အလက်များ ပါရှိသည်။
ဤဆော့ဖ်ဝဲလ်ကို မလုပ်ဆောင်မီ ၎င်းကိုဖတ်ပါ။ အကယ်၍ သင်သည် 8-BIT PIC PIC Devices များအတွက် Compiler ကိုအသုံးပြုနေပါက PIC Document အတွက် MPLAB XC8 C compiler ထုတ်ဝေမှုမှတ်စုများကို ကြည့်ပါ။

ကျော်view

1.1. နိဒါန်း
Microchip MPLAB® XC8 C compiler ၏ ယခုထွက်ရှိမှုတွင် အင်္ဂါရပ်များနှင့် ချွတ်ယွင်းချက်အသစ်များစွာပါရှိသည်။
၁.၂။ တည်ဆောက်မည့်ရက်စွဲ
ဤ compiler ဗားရှင်း၏တရားဝင်တည်ဆောက်သည့်ရက်စွဲသည် 8 ဖေဖော်ဝါရီ 2023 ဖြစ်သည်။
၁.၃။ ယခင်ဗားရှင်း
ယခင် MPLAB XC8 C compiler ဗားရှင်း 2.40 သည် 3 ခုနှစ် ဇူလိုင်လ 2022 ရက်နေ့တွင် တည်ဆောက်ခဲ့သည်။
၁.၄။ Functional Safety Manual
လုပ်ငန်းဆိုင်ရာဘေးကင်းရေးလိုင်စင်ကို သင်ဝယ်ယူသောအခါ MPLAB XC စုစည်းမှုများအတွက် လုပ်ဆောင်ချက်ဆိုင်ရာ ဘေးကင်းရေးလက်စွဲစာအုပ်ကို စာရွက်စာတမ်းအထုပ်တွင် ရနိုင်ပါသည်။
၁.၅။ အစိတ်အပိုင်းလိုင်စင်များနှင့် ဗားရှင်းများ
AVR MCUs ကိရိယာများအတွက် MPLAB XC8 C Compiler ကို GNU အထွေထွေအများပြည်သူလိုင်စင် (GPL) အောက်တွင် ရေးသားပြီး ဖြန့်ဝေထားသောကြောင့် ၎င်း၏အရင်းအမြစ်ကုဒ်ကို လွတ်လပ်စွာဖြန့်ဝေပြီး အများသူငှာရရှိနိုင်သည်ဟု ဆိုလိုသည်။
GNU GPL အောက်ရှိ ကိရိယာများအတွက် အရင်းအမြစ်ကုဒ်ကို Microchip မှ သီးခြားဒေါင်းလုဒ်လုပ်နိုင်ပါသည်။ website. သင်၏ install license.txt avr/doc directory ၏ subdirectory တွင်ရှိသော GNU GPL ကိုဖတ်နိုင်သည်။ GPL ၏ အခြေခံမူများဆိုင်ရာ ယေဘုယျ ဆွေးနွေးချက်ကို ဤနေရာတွင် တွေ့နိုင်ပါသည်။
header ဖိုင်များ၊ linker scripts နှင့် runtime libraries များအတွက် ပံ့ပိုးပေးထားသော code များသည် proprietary code ဖြစ်ပြီး GPL အောက်တွင် အကျုံးမဝင်ပါ။
ဤ compiler သည် GCC ဗားရှင်း 5.4.0၊ binutils ဗားရှင်း 2.26 နှင့် avr-libc ဗားရှင်း 2.0.0 ကို အသုံးပြုထားသည်။
1.6. စနစ်လိုအပ်ချက်များ
MPLAB XC8 C compiler နှင့် ၎င်းအသုံးပြုသော လိုင်စင်ဆော့ဖ်ဝဲလ်သည် အောက်ပါ 64-bit ဗားရှင်းများအပါအဝင် လည်ပတ်မှုစနစ်အမျိုးမျိုးအတွက် ရနိုင်သည်- Microsoft® Windows® 10 ၏ ပရော်ဖက်ရှင်နယ်ထုတ်ဝေမှုများ၊ Ubuntu® 18.04; နှင့် macOS® 10.15.5။ Windows အတွက် Binaries များကို ကုဒ်-လက်မှတ်ထိုးထားသည်။ macOS အတွက် binaries များကို ကုဒ်လက်မှတ်ထိုးပြီး မှတ်တမ်းတင်ထားသည်။ MPLAB XC Network License Server ကို Microsoft Windows 64 နှင့်အထက်အပါအဝင် 10-bit လည်ပတ်မှုစနစ်အမျိုးမျိုးအတွက် ရနိုင်ပါသည်။ Ubuntu 18.04 နှင့် အထက်၊ သို့မဟုတ် macOS 10.15 နှင့်အထက်။ ဆာဗာသည် Windows Server၊ Linux ဖြန့်ဖြူးမှုများ၊ Oracle® Enterprise Linux® နှင့် Red Hate Enterprise Linux ကဲ့သို့သော အခြားသော လည်ပတ်မှုစနစ်များ အပါအဝင် ပံ့ပိုးပေးထားသော လည်ပတ်မှုစနစ်များ၏ ဗားရှင်းအဟောင်းများတွင်လည်း လုပ်ဆောင်နိုင်သည်။ သို့သော် MPLAB XC Network License Server ကို ဤလည်ပတ်မှုစနစ်များတွင် စမ်းသပ်မထားပါ။ MPLAB XC ကွန်ရက်လိုင်စင်ဆာဗာသည် ကွန်ရက်လိုင်စင်များ (SW006021-VM) အတွက် virtual machine လိုင်စင်ကို အသုံးပြု၍ ပံ့ပိုးပေးထားသော OS ၏ Virtual Machines တွင် လုပ်ဆောင်နိုင်သည်။ MPLAB XC Network Server ၏ 32-bit ဗားရှင်းအားလုံးကို ဗားရှင်း 3.00 မှစတင်၍ ရပ်ဆိုင်းထားသည်။
ထောက်ပံ့ပစ္စည်းများ
ဤ compiler သည် ထွက်ရှိချိန်တွင် ရရှိနိုင်သော 8-bit AVR MCU စက်အားလုံးကို ပံ့ပိုးပေးပါသည်။ ပံ့ပိုးပေးထားသော စက်များအားလုံး၏စာရင်းအတွက် (စုစည်းသူ၏လမ်းညွှန်တွင်) ကြည့်ပါ။ ဤဖိုင်များကိုလည်း စာရင်းပြုစုထားပါသည်။
avr_chipinfo.html စက်တစ်ခုစီအတွက် doc configuration bit ဆက်တင်များ။

၁.၇။ ထုတ်ဝေမှုများနှင့် လိုင်စင်အဆင့်မြှင့်တင်မှုများ
MPLAB XC8 compiler ကို လိုင်စင်ရ (PRO) သို့မဟုတ် လိုင်စင်မဲ့ (အခမဲ့) ထုတ်ကုန်အဖြစ် အသက်သွင်းနိုင်ပါသည်။ သင်၏ compiler ကိုလိုင်စင်ရယူရန် activation key တစ်ခုဝယ်ယူရန်လိုအပ်သည်။ လိုင်စင်တစ်ခုသည် အခမဲ့ ထုတ်ကုန်နှင့် နှိုင်းယှဉ်ပါက ပိုမို ကောင်းမွန်အောင် လုပ်ဆောင်နိုင်စေပါသည်။ လိုင်စင်မဲ့ compiler သည် လိုင်စင်မရှိဘဲ ရက်အကန့်အသတ်မရှိ လုပ်ဆောင်နိုင်သည်။ MPLAB XC8 Functional Safety compiler သည် Microchip မှဝယ်ယူထားသော functional safety လိုင်စင်ဖြင့် အသက်သွင်းရပါမည်။ ဤလိုင်စင်မရှိဘဲ compiler သည် အလုပ်လုပ်မည်မဟုတ်ပါ။ စဖွင့်ပြီးသည်နှင့်၊ သင်သည် မည်သည့် optimization အဆင့်ကိုမဆို ရွေးချယ်နိုင်ပြီး compiler အင်္ဂါရပ်အားလုံးကို အသုံးပြုနိုင်သည်။ MPLAB XC Functional Safety Compiler သည် Network Server License ကို ပံ့ပိုးပေးပါသည်။
လိုင်စင်အမျိုးအစားများနှင့် လိုင်စင်ဖြင့် ကွန်ပလီကိုတပ်ဆင်ခြင်းဆိုင်ရာ အချက်အလက်အတွက် MPLAB XC C Compilers (DS50002059) တပ်ဆင်ခြင်းနှင့် လိုင်စင်ပေးခြင်း စာရွက်စာတမ်းကို ကြည့်ပါ။

၂။ Installation နှင့် Activation
ဤ compiler တွင်ပါရှိသော နောက်ဆုံးပေါ်လိုင်စင်မန်နေဂျာအကြောင်း အရေးကြီးအချက်အလက်များအတွက် ရွှေ့ပြောင်းနေထိုင်မှုပြဿနာများနှင့် ကန့်သတ်ချက်များ ကဏ္ဍများကို ကြည့်ပါ။
MPLAB IDE ကိုအသုံးပြုပါက၊ ဤကိရိယာကိုမထည့်သွင်းမီ နောက်ဆုံးပေါ် MPLAB X IDE ဗားရှင်း 5.0 သို့မဟုတ် နောက်ပိုင်းတွင် ထည့်သွင်းရန်သေချာပါစေ။ compiler ကိုမထည့်သွင်းမီ IDE မှထွက်ပါ။ (Windows)၊ (Linux) သို့မဟုတ် (macOS) .exe .run .app compiler installer အပလီကေးရှင်းကို run ပါ၊ ဥပမာ- စခရင်ပေါ်ရှိ လမ်းညွှန်ချက်များကို လိုက်နာပါ။ XC8-1.00.11403-windows.exe ပုံသေတပ်ဆင်မှုလမ်းညွှန်ကို အကြံပြုထားသည်။ သင်သည် Linux ကိုအသုံးပြုနေပါက၊ သင်သည် terminal နှင့် root အကောင့်ကိုအသုံးပြု၍ compiler ကိုထည့်သွင်းရပါမည်။ စီမံခန့်ခွဲသူအခွင့်အရေးများနှင့်အတူ macOS အကောင့်ကို အသုံးပြု၍ ထည့်သွင်းပါ။
တပ်ဆင်ခြင်းအတွက် အသက်သွင်းခြင်းကို သီးခြားလုပ်ဆောင်နေပြီဖြစ်သည်။ နောက်ထပ်အချက်အလက်များအတွက် MPLAB® XC C Compilers (DS52059) အတွက် စာရွက်စာတမ်းလိုင်စင်မန်နေဂျာကို ကြည့်ပါ။
အကယ်၍ သင်သည် အကဲဖြတ်ခွင့်လိုင်စင်အောက်တွင် စုစည်းမှုကို လုပ်ဆောင်ရန် ရွေးချယ်ပါက၊ သင်သည် သင်၏အကဲဖြတ်မှုကာလ ကုန်ဆုံးပြီး 14 ရက်အတွင်း စုစည်းမှုအတွင်း သတိပေးချက် ရရှိမည်ဖြစ်သည်။ သင်၏ HPA စာရင်းသွင်းမှု ပြီးဆုံးသည့်နေ့မှ 14 ရက်အတွင်း အကယ်၍ သင်သည် အလားတူသတိပေးချက်ကို ထုတ်ပြန်ပါသည်။
XC Network License Server သည် သီးခြားထည့်သွင်းသူဖြစ်ပြီး single-user compiler installer တွင် မပါဝင်ပါ။
XC လိုင်စင်မန်နေဂျာသည် ယခုအခါတွင် ပျံ့နှံ့နေသော ကွန်ရက်လိုင်စင်များကို roaming ပြုလုပ်ခြင်းကို ပံ့ပိုးပေးပါသည်။ မိုဘိုင်းလ်အသုံးပြုသူများအတွက် ရည်ရွယ်ပြီး ဤလုပ်ဆောင်ချက်သည် ကွန်ရက်ကို အချိန်တိုအတွင်း ဖြတ်တောက်ရန် လိုင်စင်တစ်ခုအား ခွင့်ပြုပေးပါသည်။ ဤအင်္ဂါရပ်ကိုအသုံးပြုခြင်းဖြင့် သင်သည် ကွန်ရက်မှချိတ်ဆက်မှုကိုဖြတ်တောက်နိုင်ပြီး သင်၏ MPLAB XC စုစည်းမှုကို ဆက်လက်အသုံးပြုနိုင်မည်ဖြစ်သည်။ ဤအင်္ဂါရပ်အပေါ် ပိုမိုသိရှိနိုင်စေရန် XCLM ထည့်သွင်းမှု၏ doc ဖိုင်တွဲကို ကြည့်ပါ။
MPLAB X IDE တွင် အမြင်အာရုံဖြင့် roaming ကို စီမံခန့်ခွဲရန် လိုင်စင်များ ဝင်းဒိုး (Tools > Licenses) ပါဝင်သည်။

၁.၈.၁။ တပ်ဆင်ခြင်းဆိုင်ရာ ပြဿနာများကို ဖြေရှင်းခြင်း။
Windows operating systems တစ်ခုခုအောက်တွင် compiler ကို install လုပ်ရာတွင် အခက်အခဲများကြုံတွေ့ရပါက အောက်ပါအကြံပြုချက်များကို စမ်းကြည့်ပါ။
အက်ဒမင်အဖြစ် install လုပ်ပါ။
ထည့်သွင်းသူအပလီကေးရှင်း၏ခွင့်ပြုချက်များကို 'အပြည့်အဝထိန်းချုပ်မှု' သို့သတ်မှတ်ပါ။ (ဖိုင်ကို ညာဖက်ကလစ်နှိပ်ပါ၊ Properties၊ Security tab ကိုရွေးပါ၊ အသုံးပြုသူကိုရွေးချယ်ပါ၊ တည်းဖြတ်ပါ။)
Temp folder ၏ ခွင့်ပြုချက်များကို 'Full Control' သို့ သတ်မှတ်ပါ။
temp folder ၏တည်နေရာကိုဆုံးဖြတ်ရန်၊ Run command (Windows logo key + R) တွင် %temp% ဟုရိုက်ထည့်ပါ။
၎င်းသည် ထိုလမ်းညွှန်ကိုပြသသည့် ဖိုင်ရှာဖွေသူ ဒိုင်ယာလော့ခ်ကိုဖွင့်မည်ဖြစ်ပြီး ထိုဖိုင်တွဲ၏လမ်းကြောင်းကို သင်ဆုံးဖြတ်နိုင်မည်ဖြစ်သည်။
၁.၉။ Compiler Documentation
စခရင်ရှော့တွင်ဖော်ပြထားသည့်အတိုင်း MPLAB X IDE ဒက်ရှ်ဘုတ်ရှိ အပြာရောင်အကူအညီခလုတ်ကိုနှိပ်သည့်အခါ compiler ၏အသုံးပြုသူ၏လမ်းညွှန်ချက်များကို သင့်ဘရောက်ဆာတွင်ဖွင့်ထားသည့် HTML စာမျက်နှာမှဖွင့်နိုင်သည်။

အကယ်၍ သင်သည် 8-bit AVR ပစ်မှတ်များအတွက် တည်ဆောက်နေပါက၊ MPLAB® XC8 C Compiler User's Guide for AVR® MCU တွင် အဆိုပါ compiler ရွေးချယ်မှုများနှင့် ဤဗိသုကာနှင့် သက်ဆိုင်သည့် အင်္ဂါရပ်များဆိုင်ရာ အချက်အလက်များ ပါရှိသည်။

MICROCHIP MPLAB XC8 C Compiler Development Software -

1.10.Customer ပံ့ပိုးမှု
Microchip သည် ဤ compiler ဗားရှင်းနှင့်ပတ်သက်သည့် bug အစီရင်ခံစာများ၊ အကြံပြုချက်များ သို့မဟုတ် မှတ်ချက်များကို ကြိုဆိုပါသည်။ ကျေးဇူးပြု၍ ပံ့ပိုးမှုစနစ်မှတစ်ဆင့် ချို့ယွင်းချက်အစီရင်ခံစာများ သို့မဟုတ် လုပ်ဆောင်ချက်တောင်းဆိုမှုများကို ညွှန်ကြားပါ။

စာရွက်စာတမ်း အပ်ဒိတ်များ

MPLAB XC8 စာရွက်စာတမ်းများ၏ အွန်လိုင်းနှင့် နောက်ဆုံးပေါ်ဗားရှင်းများအတွက်၊ ကျေးဇူးပြု၍ Microchip ၏ အွန်လိုင်းနည်းပညာဆိုင်ရာ စာရွက်စာတမ်းများကို ဝင်ရောက်ကြည့်ရှုပါ။ website. ဤထုတ်ဝေမှုတွင် အသစ် သို့မဟုတ် မွမ်းမံထားသော AVR စာရွက်စာတမ်းများ-

  • AVR® MCU (ပြင်ဆင်ချက် G) အတွက် MPLAB® XC8 C Compiler အသုံးပြုသူလမ်းညွှန်
  • AVR® GNU Toolchain သို့ MPLAB® XC8 ရွှေ့ပြောင်းခြင်းလမ်းညွှန် (ပြင်ဆင်ချက် A)
  • Hexmate အသုံးပြုသူ၏လမ်းညွှန် (ပြင်ဆင်ချက် B)

AVR® GNU Toolchain မှ MPLAB® XC8 ရွှေ့ပြောင်းခြင်းလမ်းညွှန်တွင် C-based ပရောဂျက်ကို AVR 8-bit GNU Toolchain မှ Microchip MPLAB XC8 C Compiler သို့ ပြောင်းရွှေ့ရန် ဆုံးဖြတ်ပါက လိုအပ်နိုင်သည့် အရင်းအမြစ်ကုဒ်နှင့် တည်ဆောက်မှုဆိုင်ရာ ရွေးချယ်မှုများကို ဖော်ပြထားပါသည်။ Microchip ပေါင်းစည်းထားသော Standard Library ရည်ညွှန်းလမ်းညွှန်သည် Microchip Unified Standard Library မှ သတ်မှတ်ထားသော လုပ်ဆောင်ချက်များနှင့် အင်တာဖေ့စ်အမူအကျင့်များအပြင် စာကြည့်တိုက်အမျိုးအစားများနှင့် မက်ခရိုများကို ရည်ရွယ်အသုံးပြုခြင်းတို့ကို ဖော်ပြပါသည်။ ဤအချက်အလက်အချို့ကို AVR® MCU အတွက် MPLAB® XC8 C Compiler အသုံးပြုသူ၏လမ်းညွှန်တွင် ယခင်က ပါရှိသည်။ စက်ပစ္စည်းအလိုက် စာကြည့်တိုက်အချက်အလက်ကို ဤ compiler လမ်းညွှန်တွင် ပါရှိပါသည်။
အကယ်၍ သင်သည် 8-bit စက်များနှင့် MPLAB XC8 C Compiler ဖြင့် စတင်နေပါက၊ Embedded Engineers အတွက် MPLAB® XC8 User's Guide - AVR® MCUs (DS50003108) တွင် MPLAB X IDE တွင် ပရောဂျက်များထည့်သွင်းခြင်းနှင့် သင့်အတွက် ကုဒ်ရေးခြင်းဆိုင်ရာ အချက်အလက် ရှိပါသည်။ ပထမဆုံး MPLAB XC8 C ပရောဂျက်။ ဤလမ်းညွှန်ချက်ကို ယခု compiler ဖြင့် ဖြန့်ဝေထားပါသည်။
Hexmate အသုံးပြုသူ၏လမ်းညွှန်သည် Hexmate ကို သီးခြားအက်ပလီကေးရှင်းတစ်ခုအဖြစ် အသုံးပြုသူများအတွက် ရည်ရွယ်ပါသည်။

ဘာထူးသလဲ

အောက်ပါတို့သည် ယခု compiler ကို ပံ့ပိုးပေးသည့် AVR-ပစ်မှတ် အင်္ဂါရပ်များ ဖြစ်သည်။ ခေါင်းစဉ်ခွဲများရှိ ဗားရှင်းနံပါတ်သည် လိုက်နာရမည့်အင်္ဂါရပ်များကို ပံ့ပိုးရန် ပထမဆုံး compiler ဗားရှင်းကို ညွှန်ပြသည်။
၃.၁။ ဗားရှင်း 3.1
Bootrow ပံ့ပိုးမှု (XC8-3053) ကွန်ပြူတာသည် HEX ဖိုင်တွင် at.bootrow လိပ်စာ 0x860000 ၏ အကြိုစာဖြင့် မည်သည့်ကဏ္ဍများ၏ အကြောင်းအရာကို ထားရှိမည်ဖြစ်သည်။ ဤအပိုင်းများကို bootloader မှသာလျှင်ဝင်ရောက်အသုံးပြုနိုင်မည့်သော့များနှင့်အခြားလုံခြုံသောအချက်အလက်များသိုလှောင်ရန်အတွက်ဒီဇိုင်းပြုလုပ်ထားသည့် BOOTROW memory အတွက်အသုံးပြုပါသည်။

စိတ်ကြိုက်လင့်ခ်စခရစ်များကို အသုံးပြုသောအခါတွင် ထပ်နေသောပြန်အမ်းငွေကို ဖယ်ရှားခြင်း (XC8-3048) စုစည်းမှုသည် ယခုအခါ စိတ်ကြိုက်လင့်ခ်စခရစ်များကို အသုံးပြုသောအခါ ret လုပ်ဆောင်ချက်များတွင် မလိုအပ်သောညွှန်ကြားချက်များကို အမြီးအခုန်ဖြင့် ဖယ်ရှားပါမည်။ ၎င်းသည် ယခင်က လုပ်ဆောင်ခဲ့သည့် ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းဖြစ်ပြီး၊ စိတ်ကြိုက်ချိတ်ဆက်သူ script ကိုအသုံးပြုပြီး အကောင်းဆုံး သင့်လျော်သောခွဲဝေမှုအစီအစဉ်ကို ဖွင့်ထားခြင်းမရှိသော်လည်း ယခုအခါ ၎င်းကို မိဘမဲ့ကဏ္ဍများအားလုံးတွင် လုပ်ဆောင်နေပြီဖြစ်သည်။ အချိန်အမျိုးအစား ပြောင်းလဲခြင်း (XC8-2982၊ 2932) C99 စံပြစာကြည့်တိုက် အမျိုးအစားကို time_t မှ အမျိုးအစားတစ်ခုသို့ ပြောင်းလဲခဲ့ပြီး၊ ဖြစ်သည့် အချိန်နှင့်ဆက်စပ်သော ရှည်လျားသောလုပ်ဆောင်ချက်အချို့တွင် ကုဒ်အရွယ်အစားကို မြှင့်တင်ပေးပါသည်။ လက်မှတ်မထိုးထားသော long mktime()
New nop (XC8-2946၊ 2945) မက်ခရိုကို ထည့်သွင်းပြီးပါပြီ။ ဤ macro သည် no- NOP() ကိုထည့်သည် nop operation instruction သည် output ထဲသို့ဝင်သည်။
XCLM (XC8-2944) သို့ အပ်ဒိတ်လုပ်ခြင်း) compiler နှင့် အသုံးပြုထားသော လိုင်စင်မန်နေဂျာကို အပ်ဒိတ်လုပ်ပြီး ယခု compiler ၏ လိုင်စင်အသေးစိတ်များကို စစ်ဆေးသောအခါတွင် ပိုမိုတုံ့ပြန်မှုရှိလာပါသည်။
Trampolined ခေါ်ဆိုမှုများ (XC8-2760) ကွန်ပြူတာသည် ယခုအခါ ညွှန်ကြားချက်များ၏ ဆွေမျိုးပုံစံများသည် ပုံမှန်အားဖြင့် ၎င်းတို့၏ ဦးတည်ရာနှင့် ဝေးကွာနေချိန်တွင် တိုတောင်းသော ဆွေမျိုးခေါ်ဆိုမှုများဖြင့် အစားထိုးခေါ်ဆိုမှုပုံစံများကို အစားထိုးလုပ်ဆောင်နိုင်ပါပြီ။ ဤအခြေအနေတွင်၊ compiler သည် rcall ကိုခေါ်ရန် ညွှန်ကြားချက်များဖြင့် အစားထိုးရန် ကြိုးပမ်းမည်ဖြစ်သည်။ampဥပမာ၊ လိုအပ်သောလိပ်စာသို့ oline' ကွပ်မျက်ခြင်း။ample: jmp
rcall tramp_foo ;foo လို့ခေါ်တယ်။

rcall tramp_foo

tramp_foo:
jmp foo

အလားတူ ပရိုဂရမ်စီးဆင်းမှု ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းနှင့်အတူ ဤကောင်းမွန်အောင်ပြုလုပ်ခြင်းကို -mrelax ရွေးချယ်မှုဖြင့် ထိန်းချုပ်ထားသည်။

၃.၁။ ဗားရှင်း 3.2
စက်ပံ့ပိုးမှုအသစ်သည် အောက်ပါ AVR အစိတ်အပိုင်းများအတွက် ယခုရရှိနိုင်ပါပြီ- AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EAVR28, AVR64EAVR32, and AVR64.
ပိုမိုကောင်းမွန်သော လုပ်ထုံးလုပ်နည်း abstraction လုပ်ငန်းစဉ်ဆိုင်ရာ abstraction (PA) optimization tool ကို မြှင့်တင်ထားပြီး function call instruction (/) ပါရှိသော ကုဒ်ကို အသုံးချနိုင်စေရန်။ လုပ်ဆောင်ချက်မှ တန်ပြန်တန်ဖိုးကို မရယူရန် stack မှ arguments ကို pass သို့မဟုတ် return value ကို ရယူရန် အသုံးမပြုပါက၊ ၎င်းသည် ခေါ်ဆိုမှု rcall ကိုသာ ပြုလုပ်မည်ဖြစ်ပါသည်။ မပြောင်းလဲနိုင်သော အငြင်းအခုံစာရင်းတစ်ခုပါရှိသော လုပ်ဆောင်ချက်တစ်ခုကို ခေါ်ဆိုသည့်အခါ သို့မဟုတ် ဤရည်ရွယ်ချက်အတွက် သတ်မှတ်ထားသော မှတ်ပုံတင်များထက် ပိုမိုများပြားသော အကြောင်းပြချက်များယူသည့် လုပ်ဆောင်ချက်ကို ခေါ်ဆိုသည့်အခါ stack ကို အသုံးပြုသည်။ ဤအင်္ဂါရပ်ကို ရွေးချယ်ခွင့်ကို အသုံးပြု၍ ပိတ်နိုင်သည်၊ သို့မဟုတ် လုပ်ထုံးလုပ်နည်း abstraction သည် အရာဝတ္ထုတစ်ခု၏ ဖိုင် သို့မဟုတ် လုပ်ဆောင်ချက်တစ်ခုအတွက် လုံးလုံးလျားလျား ပိတ်ထားနိုင်သည်၊ သို့မဟုတ်၊ အသီးသီးသော အရည်အချင်း (သတ်မှတ်သူ) ကို အသုံးပြု၍ လုပ်ဆောင်ချက်များကို အသုံးပြုခြင်းဖြင့်၊
mno-pa-outline-ခေါ်ဆိုမှုများ-mno-pa-on-file -mno-pa-on-function nopa ကုဒ်အကျုံးဝင်မခရို ဤ compiler သည် မှန်ကန်သောရွေးချယ်မှုမှာ __nopa __CODECOV -mcodecov ဟုသတ်မှတ်ပါက ယခု macro ကို သတ်မှတ်ပေးပါသည်။
မန်မိုရီ ကြိုတင်မှာယူမှု ရွေးချယ်မှု ယာဉ်မောင်းသည် AVR ပစ်မှတ်များကို တည်ဆောက်သည့်အခါ ယခု xc8-cc -mreserve=space@start:end option ကို လက်ခံပါမည်။ ဤရွေးချယ်မှုသည် ဒေတာ သို့မဟုတ် ပရိုဂရမ်မှတ်ဉာဏ်နေရာရှိ သတ်မှတ်ထားသော မှတ်ဉာဏ်အကွာအဝေးကို သိမ်းဆည်းထားပြီး လင့်ခ်ကို ဤဧရိယာရှိ ကုဒ် သို့မဟုတ် အရာဝတ္တုများ ဖြည့်သွင်းခြင်းကို တားဆီးထားသည်။ ပိုမိုစမတ်ကျသော IO စမတ် IO လုပ်ဆောင်ချက်များတွင် ယေဘုယျအားဖြင့် လှည့်ကွက်များအပါအဝင် %n ပြောင်းလဲခြင်းသတ်မှတ်ပေးသူကို သီးခြားမူကွဲအဖြစ် သဘောထားကာ၊ ဝယ်လိုအားရှိ vararg ပေါ့ပ်လုပ်ရိုးလုပ်စဉ်များတွင် ချိတ်ဆက်ခြင်း၊ တိုတောင်းသောဒေတာအမျိုးအစားများကို အသုံးပြု၍ ကိုင်တွယ်ရန် ဖြစ်နိုင်သည် IO လုပ်ဆောင်ချက် အငြင်းအခုံများနှင့် နယ်ပယ်အကျယ်နှင့် တိကျစွာ ကိုင်တွယ်မှုတွင် ဘုံကုဒ်များကို ကိန်းဂဏာန်းထည့်သွင်းခြင်း။ ၎င်းသည် သိသာထင်ရှားသောကုဒ်နှင့် ဒေတာကို ချွေတာနိုင်သည့်အပြင် IO ၏ လုပ်ဆောင်မှုအမြန်နှုန်းကို တိုးစေသည်။

၃.၃။ ဗားရှင်း 3.3 (Functional Safety Release)
Network Server License MPLAB XC8 Functional Safety Compiler ၏ ဤထုတ်ဝေမှုသည် Network Server License ကို ပံ့ပိုးပေးပါသည်။
၃.၁။ ဗားရှင်း 3.4
တစ်ခုမှ

၃.၁။ ဗားရှင်း 3.5
စက်ပစ္စည်းအသစ်ပံ့ပိုးမှု ပံ့ပိုးမှုသည် အောက်ပါ AVR အစိတ်အပိုင်းများအတွက် ရနိုင်သည်- ATTINY3224၊ ATTINY3226၊ ATTINY3227၊ AVR64DD14၊ AVR64DD20၊ AVR64DD28 နှင့် AVR64DD32။
ပိုမိုကောင်းမွန်သော အကြောင်းအရာပြောင်းခြင်း -mcall-isr-prologues ရွေးချယ်မှုအသစ်သည် ဝင်ရောက်မှုတွင် မှတ်ပုံတင်ချက်များကို အနှောင့်အယှက်ဖြစ်စေသည့် လုပ်ဆောင်ချက်များကို မည်ကဲ့သို့ သိမ်းဆည်းထားပုံနှင့် အနှောင့်အယှက်ဖြစ်ရိုးဖြစ်စဉ်ကို ရပ်တန့်သွားသောအခါတွင် အဆိုပါ မှတ်ပုံတင်မှုများကို ပြန်လည်ရယူပုံတို့ကို ပြောင်းလဲပေးသည်။ ၎င်းသည် -mcall-prologues ရွေးချယ်မှုတွင် အလားတူနည်းလမ်းဖြင့် အလုပ်လုပ်သော်လည်း ကြားဖြတ်လုပ်ဆောင်ချက်များ (ISRs) များကိုသာ အကျိုးသက်ရောက်သည်။
ပိုမိုတိုးတက်ကောင်းမွန်သော အကြောင်းအရာပြောင်းခြင်း -mgas-isr-prologues ရွေးချယ်မှုအသစ်သည် အနှောက်အယှက်ဖြစ်စေသော ဝန်ဆောင်မှုလုပ်ရိုးလုပ်စဉ်များအတွက် ထုတ်ပေးသည့် ဆက်စပ်ခလုတ်ကုဒ်ကို ထိန်းချုပ်ပါသည်။ ဖွင့်ထားသောအခါ၊ ဤအင်္ဂါရပ်သည် မှတ်ပုံတင်အသုံးပြုမှုအတွက် ISR ကို စကင်န်ဖတ်ပြီး လိုအပ်ပါက ဤအသုံးပြုထားသော မှတ်ပုံတင်မှုများကိုသာ သိမ်းဆည်းမည်ဖြစ်သည်။
ပြင်ဆင်သတ်မှတ်နိုင်သော flash mapping တွင် AVR DA နှင့် AVR DB မိသားစုရှိ စက်အချို့တွင် မည်သည့် 32k အပိုင်းကို ဒေတာမှတ်ဉာဏ်တွင် မြေပုံပြုလုပ်မည်ကို သတ်မှတ်ပေးသည့် SFR (ဥပမာ FLMAP) ရှိသည်။ - mconst-data-in-config-mapped-progmem ရွေးချယ်မှုအသစ်သည် 32k အပိုင်းတစ်ခုတွင် const-qualified data အားလုံးကို နေရာချရန်နှင့် ဤဒေတာကို ဒေတာမှတ်ဉာဏ်တွင် မြေပုံဆွဲထားကြောင်း သေချာစေရန်အတွက် သက်ဆိုင်ရာ SFR မှတ်ပုံတင်ခြင်းကို အလိုအလျောက်စတင်အသုံးပြုနိုင်သည် အာကာသကို ပိုမိုထိရောက်စွာ ဝင်ရောက်နိုင်မည်ဖြစ်သည်။
Microchip Unified Standard Libraries များ MPLAB XC compilers အားလုံးသည် MPLAB XC8 ထုတ်ဝေမှုနှင့်အတူ ယခုရရှိနိုင်သည့် Microchip Unified Standard Library တစ်ခုကို မျှဝေမည်ဖြစ်ပါသည်။ AVO MCU အတွက် MPLA# XC8 C Compiler အသုံးပြုသူလမ်းညွှန်တွင် ဤစံလုပ်ဆောင်ချက်များအတွက် စာရွက်စာတမ်းမပါဝင်တော့ပါ။ ဤအချက်အလက်ကို Microchip စုစည်းထားသော Standard Library ရည်ညွှန်းလမ်းညွှန်တွင် ယခုတွေ့ရှိနိုင်ပါသည်။ avr-libc မှ ယခင်က သတ်မှတ်ထားသော လုပ်ဆောင်ချက်အချို့ကို မရနိုင်တော့ကြောင်း သတိပြုပါ။ (Lila လုပ်ဆောင်ချက်ကို ကြည့်ပါ။)
Smart I0 ပေါင်းစည်းထားသည့် စာကြည့်တိုက်အသစ်များ၏ တစ်စိတ်တစ်ပိုင်းအနေဖြင့်၊ printf နှင့် scanf မိသားစုများရှိ I0 လုပ်ဆောင်ချက်များကို ယခုအခါ ပရိုဂရမ်တွင် ဤလုပ်ဆောင်ချက်များကိုအသုံးပြုပုံအပေါ်အခြေခံ၍ တည်ဆောက်မှုတစ်ခုစီတွင် စိတ်ကြိုက်ဖန်တီးပေးထားပါသည်။ ၎င်းသည် ပရိုဂရမ်တစ်ခုမှ အသုံးပြုသည့် အရင်းအမြစ်များကို သိသိသာသာ လျှော့ချနိုင်သည်။
Smart ICI အကူအညီ ရွေးချယ်စရာ Smart I0 လုပ်ဆောင်ချက်များ (ပရင့် f() သို့မဟုတ် scanf() ကဲ့သို့သော) ခေါ်ဆိုမှုများကို ပိုင်းခြားစိတ်ဖြာသည့်အခါ၊ ကွန်ပြူတာသည် ဖော်မတ်စာတစ်ကြောင်းမှ အမြဲတမ်းမဆုံးဖြတ်နိုင် သို့မဟုတ် ခေါ်ဆိုမှုမှ လိုအပ်သော ပြောင်းလဲခြင်းဆိုင်ရာ သတ်မှတ်ပေးသည့် အငြင်းအခုံများမှ ကောက်ချက်မချနိုင်ပါ။ ယခင်က၊ compiler သည် အမြဲတမ်း ယူဆချက်မပြဘဲ အပြည့်အဝ လုပ်ဆောင်နိုင်သော function 10 ခုကို နောက်ဆုံး program image နှင့် ချိတ်ဆက်ထားကြောင်း သေချာစေပါသည်။ - msmart-io-format=fmt ရွေးချယ်ခွင့်အသစ်ကို ထည့်သွင်းလိုက်သောကြောင့် ကွန်ပြူလာအား စမတ် I0 လုပ်ဆောင်ချက်များမှ အသုံးပြုသည့် ပြောင်းလဲခြင်းအသေးစိတ်အချက်အလက်များကို အသုံးပြုသူမှ အသိပေးနိုင်စေရန်၊ အသုံးပြုမှုမှာ ရှင်းရှင်းလင်းလင်းဖြစ်ပြီး အလွန်ရှည်လျားလွန်းသည့် လုပ်ရိုးလုပ်စဉ် 10 ခုကို ချိတ်ဆက်ခြင်းမှ ကာကွယ်ပေးပါသည်။ (အသေးစိတ်အချက်အလက်များအတွက် smart-io-format Option ကို ကြည့်ပါ။)
စိတ်ကြိုက်ကဏ္ဍများကို နေရာချထားခြင်း ယခင်က၊ -W1၊ –section-start option သည် linker script မှ အမည်တူ အထွက်အပိုင်းတစ်ခုကို သတ်မှတ်သောအခါတွင် သတ်မှတ်ထားသော အပိုင်းကို တောင်းဆိုထားသော လိပ်စာတွင်သာ ထားရှိပေးပါသည်။ ထိုသို့မဟုတ်သောအခါ၊ ကဏ္ဍအား ချိတ်ဆက်သူမှ ရွေးချယ်ထားသော လိပ်စာတစ်ခု၌ ထားရှိခဲ့ပြီး ရွေးချယ်မှုကို အခြေခံအားဖြင့် လျစ်လျူရှုခဲ့သည်။ linker script သည် ကဏ္ဍကို မသတ်မှတ်ထားသော်လည်း ယခု ရွေးချယ်မှုအား စိတ်ကြိုက်ကဏ္ဍများအားလုံးအတွက် ဂုဏ်ပြုမည်ဖြစ်သည်။ သို့သော် စံအပိုင်းများအတွက်၊ ထိုကဲ့သို့သော . စာသား၊ bss သို့မဟုတ် . ဒေတာ၊ အကောင်းဆုံး ကိုက်ညီမှုရှိသော ခွဲဝေပေးသူသည် ၎င်းတို့၏ နေရာချထားမှုအပေါ် အပြည့်အဝ ထိန်းချုပ်နိုင်ဆဲဖြစ်ပြီး ရွေးချယ်မှုမှာ အကျိုးသက်ရောက်မှု ရှိမည်မဟုတ်ပါ။ အသုံးပြုသူ၏လမ်းညွှန်တွင်ဖော်ပြထားသည့်အတိုင်း -ton, -Tsection=addr option ကိုသုံးပါ။
၃.၁။ ဗားရှင်း 3.6
Stack Guidance ကို PRO compiler လိုင်စင်ဖြင့် ရရှိနိုင်ပြီး၊ ပရိုဂရမ်တစ်ခုမှ အသုံးပြုသည့် မည်သည့် stack ၏ အများဆုံးအနက်ကို ခန့်မှန်းရန် စုစည်းမှု၏ stack လမ်းညွှန်အင်္ဂါရပ်ကို အသုံးပြုနိုင်သည်။ ၎င်းသည် ပရိုဂရမ်တစ်ခု၏ ခေါ်ဆိုမှုဂရပ်ကို တည်ဆောက်ပြီး ပိုင်းခြားစိတ်ဖြာကာ၊ လုပ်ဆောင်ချက်တစ်ခုစီ၏ အစုအပုံအသုံးပြုမှုကို ဆုံးဖြတ်ကာ ပရိုဂရမ်အသုံးပြုသည့် အစုအပုံများ၏ အတိမ်အနက်ကို ကောက်ချက်ချနိုင်သည့် အစီရင်ခံစာကို ထုတ်ပေးပါသည်။ ဤအင်္ဂါရပ်ကို -mchp-stack-usage command-line ရွေးချယ်မှုမှတစ်ဆင့် ဖွင့်ထားသည်။ လုပ်ဆောင်ပြီးနောက် stack အသုံးပြုမှု၏ အကျဉ်းချုပ်ကို ပုံနှိပ်သည်။ အသေးစိတ်အစုအစည်းအစီရင်ခံစာကို မြေပုံတွင် ရနိုင်ပါသည်။ fileပုံမှန်နည်းလမ်းဖြင့် တောင်းဆိုနိုင်ပါသည်။
စက်ပစ္စည်းအသစ်ပံ့ပိုးမှု ပံ့ပိုးမှုသည် အောက်ပါ AVR အစိတ်အပိုင်းများအတွက် ရနိုင်ပါသည်- ATTINY427၊ ATTINY424၊ ATTINY426၊ ATTINY827၊ ATTINY824၊ ATTINY826၊ AVR32DB32၊ AVR64DB48၊ AVR64DB64၊ AVR64DB28၊ AVR32DBVR28 ပြန်ရုတ်သိမ်းထားသော စက်ပံ့ပိုးမှု ပံ့ပိုးမှုသည် အောက်ပါ AVR အစိတ်အပိုင်းများအတွက် မရနိုင်တော့ပါ- AVR64DA32၊ AVR32DA48 နှင့် AVR16DA28။
၃.၁။ ဗားရှင်း 3.7
တစ်ခုမှ
၃.၁။ ဗားရှင်း 3.8
ဒေတာအစပျိုးခြင်းကို တားဆီးရန် ရွေးချယ်မှုအသစ် -mno-data-init driver ရွေးချယ်မှုအသစ်သည် ဒေတာ၏ ကနဦးအစပြုခြင်းနှင့် bss ကဏ္ဍများကို ရှင်းလင်းခြင်းတို့ကို တားဆီးပေးသည်။ ၎င်းသည် do copy data ၏ output ကို ဖိနှိပ်ပြီး ကွန်ပြူတာတွင် bss သင်္ကေတများကို ရှင်းလင်းလုပ်ဆောင်ခြင်းဖြင့် လုပ်ဆောင်သည်။ files၊ ၎င်းသည် linker မှ ထိုလုပ်ရိုးလုပ်စဉ်များ ပါဝင်မှုကို တားဆီးပေးသည်။
ပိုမိုကောင်းမွန်အောင် ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်း မလိုအပ်သော ပြန်ပေးလမ်းညွှန်ချက်များကို ဖယ်ရှားခြင်း၊ skip-if-bit-is ညွှန်ကြားချက်နောက်တွင် ခုန်ခြင်းအချို့ကို ဖယ်ရှားခြင်းနှင့် လုပ်ထုံးလုပ်နည်းပိုင်းကို မြှင့်တင်ခြင်းနှင့် ဤလုပ်ငန်းစဉ်ကို ထပ်လောင်းလုပ်ဆောင်နိုင်မှုတို့ အပါအဝင် ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်း တိုးတက်မှုများစွာကို ပြုလုပ်ထားပါသည်။ သင်္ကေတတစ်ခုနှင့် ဆက်စပ်၍ တည်ငြိမ်အရာဝတ္တုများကို ဝင်ရောက်ကြည့်ရှုခွင့်ပေးသည့် အထူးသဖြင့် ဤကောင်းမွန်အောင်လုပ်ဆောင်မှုအချို့ကို ထိန်းချုပ်ရန် နောက်ထပ်ရွေးချယ်စရာများ ရနိုင်ပါပြီ။ -mpa-iterations=n၊ လုပ်ထုံးလုပ်နည်းဆိုင်ရာ abstraction ထပ်ကာထပ်ကာ အရေအတွက်ကို ပုံသေ 2 မှ ပြောင်းနိုင်စေသော၊ ချိတ်ဆက်သူသည် ရှည်လျားသောခေါ်ဆိုမှုများကို ဖြေလျှော့နိုင်မည်ဟုမျှော်လင့်ချက်ဖြင့် ပိုမိုပြင်းထန်သောလုပ်ထုံးလုပ်နည်း abstraction ကိုလုပ်ဆောင်သည့် -mpa-callcost-shortcall၊ အရင်းခံယူဆချက်များကို သဘောမပေါက်ပါက ဤနောက်ဆုံးရွေးချယ်မှုသည် ကုဒ်အရွယ်အစားကို တိုးမြှင့်နိုင်သည်။
စက်ပစ္စည်းအသစ်ပံ့ပိုးမှု ပံ့ပိုးမှုသည် အောက်ပါ AVR အစိတ်အပိုင်းများအတွက် ရနိုင်သည်- AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DAVR64, AVR128DB28, AVR128DAVR VR32DB128 ပြန်ရုတ်သိမ်းထားသော စက်ပစ္စည်း၏ ပံ့ပိုးကူညီမှု ပံ့ပိုးမှုသည် အောက်ပါ AVR အစိတ်အပိုင်းများအတွက် မရနိုင်တော့ပါ- ATA48၊ ATA128၊ ATA64N၊ ATA5272၊ ATA5790၊ ATA5790၊ ATA5791၊ ATA5795C၊ ATA6285C၊ ATA6286Q၊ 6612AC6613ATA6614C.
၃.၃။ ဗားရှင်း 3.9 (Functional Safety Release)
ခေါင်းစီး file compiler built-in အတွက် compiler သည် MISRA ကဲ့သို့သော ဘာသာစကား သတ်မှတ်ချက်များနှင့်အညီ ဆောင်ရွက်နိုင်စေရန်၊ ခေါင်းစီး fileအလိုအလျောက်ပါဝင်သည့်၊ , အပ်ဒိတ်လုပ်ထားသည်။ ဤခေါင်းစီးတွင် builtin_avr_nop ( ) နှင့် builtin avr delay_cycles () ကဲ့သို့သော in-built functions အားလုံးအတွက် ရှေ့ပြေးပုံစံများ ပါရှိသည်။ အချို့သော built-in များသည် MISRA နှင့် ကိုက်ညီမှု မရှိနိုင်ပါ။ defineXCSTRICT_MISRA ကို compiler command line သို့ ထည့်ခြင်းဖြင့် ၎င်းတို့ကို ချန်လှပ်နိုင်ပါသည်။ ပုံသေ-အကျယ်အမျိုးအစားများကိုအသုံးပြုရန်အတွက် built-in နှင့် ၎င်းတို့၏ကြေငြာချက်များကို မွမ်းမံထားပါသည်။
၃.၁။ ဗားရှင်း 3.10
စက်ပစ္စည်းပံ့ပိုးမှုအသစ်သည် အောက်ပါ AVR အစိတ်အပိုင်းများအတွက် ရနိုင်သည်- ATTINY1624၊ ATTINY1626 နှင့် ATTINY1627။
ပိုမိုကောင်းမွန်သော အကောင်းဆုံး ကိုက်ညီမှု ခွဲဝေသတ်မှတ်ခြင်း compiler တွင် အကောင်းဆုံး ကိုက်ညီမှု ခွဲဝေပေးသူ (BFA) ကို ပိုမိုကောင်းမွန်အောင် ပြုလုပ်ထားပြီး အပိုင်းများကို ပိုမိုကောင်းမွန်သော ပိုမိုကောင်းမွန်အောင် ပြုလုပ်နိုင်စေရန် အမှာစာဖြင့် ခွဲဝေပေးပါသည်။ ယခုအခါ BFA သည် အမည်ပေးထားသော လိပ်စာနေရာများကို ပံ့ပိုးပေးပြီး ဒေတာအစပျိုးခြင်းကို ပိုမိုကောင်းမွန်စွာ ကိုင်တွယ်နိုင်ပါပြီ။
ပိုမိုကောင်းမွန်သော လုပ်ထုံးလုပ်နည်း abstraction လုပ်ငန်းစဉ်ဆိုင်ရာ abstraction ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းများကို ကုဒ် sequences များတွင် ယခုလုပ်ဆောင်နေပါသည်။ ချိတ်ဆက်သူ၏ အမှိုက်စုဆောင်းခြင်းလုပ်ငန်းစဉ်ကို ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းကုဒ်ကို သိရှိစေခြင်းဖြင့် ဤပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းမှ ကုဒ်အရွယ်အစား တိုးလာနိုင်သည့် ယခင်အခြေအနေများကို ကိုင်တွယ်ဖြေရှင်းခဲ့သည်။
AVR Assembler မရှိခြင်း AVR Assembler သည် ဤဖြန့်ဖြူးမှုတွင် မပါဝင်တော့ပါ။
၃.၃။ ဗားရှင်း 3.11 (Functional Safety Release)
တစ်ခုမှ
၃.၁။ ဗားရှင်း 3.12
ကုဒ်အကျုံးဝင်မှု ဤထုတ်ဝေမှုတွင် ပရောဂျက်တစ်ခု၏ အရင်းအမြစ်ကုဒ်ကို လုပ်ဆောင်သည့်အတိုင်းအတာအထိ ခွဲခြမ်းစိတ်ဖြာမှုကို လွယ်ကူချောမွေ့စေသည့် ကုဒ်လွှမ်းခြုံမှုအင်္ဂါရပ်တစ်ခု ပါဝင်သည်။ ၎င်းကိုဖွင့်ရန် option -mcodecov=ram ကိုသုံးပါ။ သင်၏ ဟာ့ဒ်ဝဲတွင် ပရိုဂရမ်ကို အကောင်အထည်ဖော်ပြီးနောက်၊ ကုဒ်လွှမ်းခြုံမှု အချက်အလက်ကို စက်အတွင်း စုစည်းထားမည်ဖြစ်ပြီး ၎င်းကို ကုဒ်အကျုံးဝင်သည့် ပလပ်အင်တစ်ခုမှတစ်ဆင့် MPLAB X IDE သို့ လွှဲပြောင်းပြီး ပြသနိုင်သည်။ ဤပလပ်အင်ဆိုင်ရာ အချက်အလက်များအတွက် IDE စာရွက်စာတမ်းကို ကြည့်ပါ။ လွှမ်းခြုံမှုဆိုင်ရာ ခွဲခြမ်းစိတ်ဖြာမှုမှ နောက်ဆက်တွဲ လုပ်ဆောင်ချက်များကို ဖယ်ထုတ်ရန် #pragma nocodecov ကို အသုံးပြုနိုင်သည်။ အကောင်းဆုံးကတော့ pragma ရဲ့အစမှာ ထည့်သင့်တယ်။ file တစ်ခုလုံးကိုဖယ်ထုတ်ရန် file လွှမ်းခြုံသုံးသပ်မှုမှ။ တနည်းအားဖြင့် _attribute_ ((nocodecov) ) ကို coverage ခွဲခြမ်းစိတ်ဖြာမှုမှ သီးခြားလုပ်ဆောင်ချက်တစ်ခုကို ဖယ်ထုတ်ရန် အသုံးပြုနိုင်သည်။
စက်ပစ္စည်းဖော်ပြချက် files စက်ပစ္စည်းအသစ် file avr_chipinfo ဟုခေါ်သည်။ html သည် compiler distribution ၏ docs directory တွင် တည်ရှိသည်။ ဒီ file compiler မှပံ့ပိုးပေးထားသော စက်ပစ္စည်းအားလုံးကို စာရင်းပြုစုသည်။ စက်ပစ္စည်းအမည်ကို ကလစ်နှိပ်ပါ၊ ၎င်းသည် ကိရိယာအတွက် ခွင့်ပြုနိုင်သော ဖွဲ့စည်းမှုပုံစံ ဘစ်ဆက်တင်/တန်ဖိုး နာကျင်မှုအားလုံးကို ပြသသည့် စာမျက်နှာကို ဖွင့်လိမ့်မည်၊ ဥပမာ၊amples လုပ်ထုံးလုပ်နည်း abstraction
ထိုဘလောက်၏ ထုတ်ယူထားသောမိတ္တူသို့ ခေါ်ဆိုမှုများဖြင့် ဘုံအစုအဝေးများ၏ ကုဒ်များကို အစားထိုးသည့် ကျင့်ထုံးဆိုင်ရာ ဆန်းကြယ်သော ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်မှုများကို ကွန်ပလီယာတွင် ထည့်သွင်းထားသည်။ အဆင့် 2၊ 3 သို့မဟုတ် s ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းကို ရွေးချယ်သည့်အခါ ၎င်းတို့ကို compiler မှ အလိုအလျောက် ခေါ်ဆိုသည့် သီးခြားအပလီကေးရှင်းတစ်ခုမှ လုပ်ဆောင်သည်။ အဆိုပါ ပိုမိုကောင်းမွန်အောင်ပြုလုပ်မှုများသည် ကုဒ်အရွယ်အစားကို လျှော့ချပေးသော်လည်း ၎င်းတို့သည် လုပ်ဆောင်မှုအမြန်နှုန်းနှင့် ကုဒ်အမှားရှာနိုင်စွမ်းကို လျှော့ချနိုင်သည်။ -mno-pa ရွေးချယ်မှုအား အသုံးပြု၍ ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်မှုအဆင့်များတွင် လုပ်ထုံးလုပ်နည်းဆိုင်ရာ abstraction ကို ပိတ်နိုင်သည် သို့မဟုတ် -mpa ကို အသုံးပြု၍ ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်မှုအဆင့်များ (သင့်လိုင်စင်နှင့် သက်ဆိုင်သော) အောက်ပိုင်းများတွင် ဖွင့်နိုင်သည်။ အရာဝတ္ထုတစ်ခုအတွက် ၎င်းကို ပိတ်ထားနိုင်သည်။ file -mno-pa-on- သုံးပြီး၊file=fileအမည်၊ သို့မဟုတ် -mno-pa-on-function=function ကို အသုံးပြု၍ လုပ်ဆောင်ချက်တစ်ခုအတွက် ပိတ်ထားသည်။ သင့်အရင်းအမြစ်ကုဒ်အတွင်းတွင်၊ attribute ((nopa) ) ကို function ၏အဓိပ္ပါယ်ဖွင့်ဆိုချက်ဖြင့် အသုံးပြုခြင်းဖြင့်၊ သို့မဟုတ် attribute ((nopa၊ noinline) ) သို့ချဲ့ထွင်သည့် nopa ကိုအသုံးပြုခြင်းဖြင့် function တစ်ခုအတွက် procedural abstraction ကို disable လုပ်ထားနိုင်ပြီး၊ ထို့ကြောင့် function inlining မဖြစ်စေရန် တားဆီးပေးနိုင်ပါသည်။ inlined code ၏ abstraction ရှိပါသည်။
pragma ရှိ လော့ခ်ဘစ်ပံ့ပိုးမှု #pragma config ကို AVR သော့ခတ်ဘစ်များနှင့် အခြားဖွဲ့စည်းမှုဘစ်များကို သတ်မှတ်ရန် ယခုအသုံးပြုနိုင်ပါပြီ။ avr_chipinfo ကိုစစ်ဆေးပါ။ html file ဤပရမ်မာဖြင့် အသုံးပြုရန် ဆက်တင်/တန်ဖိုးအတွဲများအတွက် (အထက်တွင်ဖော်ပြထားသည်)။ စက်ပစ္စည်းအသစ်ပံ့ပိုးမှု ပံ့ပိုးမှုသည် အောက်ပါအစိတ်အပိုင်းများအတွက် ရနိုင်သည်- AVR28DAl28၊ AVR64DAl28၊ AVR32DA 128 နှင့် AVR48DA 128။
၃.၁။ ဗားရှင်း 3.13
သင့်အတွက် နောက်ထပ် bits များ ဤ compiler နှင့် လိုင်စင်မန်နေဂျာ၏ macOS ဗားရှင်းသည် ယခုအခါ 64-bit application တစ်ခုဖြစ်သည်။ ၎င်းသည် compiler သည် macOS ၏ လတ်တလောဗားရှင်းများတွင် သတိပေးချက်မပါဘဲ ထည့်သွင်းပြီး အလုပ်လုပ်မည်ဖြစ်ကြောင်း သေချာစေမည်ဖြစ်သည်။
ပရိုဂရမ်မမ်မိုရီတွင် const အရာဝတ္ထုများကို စုစည်းမှု compiler သည် ယခု RAM တွင်ရှိသော အရာများကို ထားရှိခြင်းထက် ပရိုဂရမ် Flash memory တွင် const-အရည်အချင်းပြည့်မီသော အရာများကို ထားရှိနိုင်ပြီဖြစ်သည်။ cons t-qualified global data ကို ပရိုဂရမ် flash memory တွင် သိမ်းဆည်းထားနိုင်စေရန်နှင့် ဤဒေတာကို သင့်လျော်သော program-memory ညွှန်ကြားချက်များကို အသုံးပြု၍ တိုက်ရိုက်နှင့် သွယ်ဝိုက်သောနည်းဖြင့် ဝင်ရောက်ကြည့်ရှုနိုင်စေရန် compiler ကို ပြုပြင်ထားပါသည်။ ဤအင်္ဂါရပ်အသစ်ကို မူရင်းအတိုင်း ဖွင့်ထားသော်လည်း -mno-const-data-in-progmem ရွေးချယ်မှုကို အသုံးပြု၍ ပိတ်နိုင်သည်။ avrxmega3 နှင့် avrtiny ဗိသုကာများအတွက်၊ ဤအင်္ဂါရပ်ကို မလိုအပ်ဘဲ အမြဲတမ်းပိတ်ထားသည်၊၊ ပရိုဂရမ်မှတ်ဉာဏ်ကို ဤစက်ပစ္စည်းများအတွက် ဒေတာလိပ်စာနေရာကို မြေပုံဆွဲထားသောကြောင့်၊
ဤ compiler ၏ အခမဲ့ လိုင်စင်မဲ့ (အခမဲ့) ဗားရှင်းများအတွက် Standard သည် ယခုအခါ အဆင့် 2 အထိ ပိုမိုကောင်းမွန်အောင် လုပ်ဆောင်မှုများကို ခွင့်ပြုပေးပါသည်။ ၎င်းသည် တူညီခြင်းမရှိသော်လည်း Standard လိုင်စင်ကို အသုံးပြု၍ ယခင်ဖြစ်နိုင်ချေကို ထုတ်ပေးနိုင်မည်ဖြစ်ပါသည်။
AVRASM2 မှကြိုဆိုပါတယ် 2-bit စက်ပစ္စည်းများအတွက် AVRASM8 တပ်ဆင်သူသည် XC8 compiler installer တွင် ယခုထည့်သွင်းထားပါသည်။ ဤ assembler ကို XC8 compiler မှ အသုံးမပြုသော်လည်း လက်ဖြင့်ရေးထားသော စည်းဝေးပွဲအရင်းအမြစ်အပေါ် အခြေခံ၍ ပရောဂျက်များအတွက် ရနိုင်ပါသည်။
စက်ပစ္စည်းအသစ်ပံ့ပိုးမှု ပံ့ပိုးမှုသည် အောက်ပါအစိတ်အပိုင်းများအတွက် ရနိုင်သည်- ATMEGA1608၊ ATMEGA1609၊ ATMEGA808 နှင့် ATMEGA809။

၃.၁။ ဗားရှင်း 3.14
ထိပ်တန်းအဆင့် Driver xc8-cc ဟုခေါ်သော ဒရိုင်ဘာအသစ်သည် ယခုယခင် avr-gcc ဒရိုက်ဘာနှင့် xc8 ဒရိုက်ဘာအထက်တွင်ရှိပြီး ပစ်မှတ်ကိရိယာ၏ရွေးချယ်မှုအပေါ်အခြေခံ၍ သင့်လျော်သော compiler ကိုခေါ်ဆိုနိုင်သည်။ ဤဒရိုင်ဘာသည် လုပ်ဆောင်နေသည့် စုစည်းမှုသို့ ဘာသာပြန် သို့မဟုတ် ဘာသာပြန်ထားသည့် သို့မဟုတ် လုပ်ဆောင်နေသည့် GCC စတိုင်ရွေးချယ်မှုများကို လက်ခံသည်။ ဤဒရိုင်ဘာသည် AVR သို့မဟုတ် PIC ပစ်မှတ်တစ်ခုနှင့် ဆင်တူသော ဝေါဟာရအသုံးအနှုန်းများပါရှိသော အလားတူရွေးချယ်မှုအစုအဝေးကို ခွင့်ပြုထားပြီး ထို့ကြောင့် compiler ကို ခေါ်ဆိုရန်အတွက် အကြံပြုထားသည့်နည်းလမ်းဖြစ်သည်။ လိုအပ်ပါက၊ အစောပိုင်း compiler ဗားရှင်းများတွင် လက်ခံထားသော ပုံစံဟောင်းရွေးချယ်မှုများကို အသုံးပြုကာ အဟောင်း avr-gcc ဒရိုက်ဘာကို တိုက်ရိုက်ခေါ်ဆိုနိုင်သည်။
Common C Interface ဤ compiler သည် ယခုအခါ MPLAB Common C Interface နှင့် ကိုက်ညီပြီး အရင်းအမြစ်ကုဒ်ကို MPLAB XC compilers များအားလုံးတွင် ပိုမိုလွယ်ကူစွာ ပေးပို့နိုင်စေပါသည်။ -mext=cci ရွေးချယ်မှုသည် ဤအင်္ဂါရပ်ကို တောင်းဆိုသည်၊ ဘာသာစကား တိုးချဲ့မှုများစွာအတွက် သမရိုးကျ အလှည့်အပြောင်းကို ဖွင့်ပေးသည်။
စာကြည့်တိုက်မှူးအသစ် ယာဉ်မောင်းအသစ် စာကြည့်တိုက်မှူးအသစ်သည် ယခင် PIC စာကြည့်တိုက်မှူးနှင့် AVR avr-ar စာကြည့်တိုက်မှူးတို့၏ အထက်တွင် နေရာယူထားသည်။ ဤဒရိုင်ဘာသည် GCC-archiver-စတိုင်ရွေးချယ်စရာများကို လက်ခံသည် ဒရိုင်ဘာအသစ်သည် PIC သို့မဟုတ် AVR စာကြည့်တိုက်ကို ဖန်တီးရန် သို့မဟုတ် ကြိုးကိုင်ရန် အသုံးပြုရန် တူညီသော အဓိပ္ပါယ်ဖွင့်ဆိုချက်ပါသည့် အလားတူရွေးချယ်ခွင့်များကို ခွင့်ပြုသည် file ထို့ကြောင့် စာကြည့်တိုက်မှူးကို ဖိတ်ခေါ်ရန် အကြံပြုထားသော နည်းလမ်းဖြစ်သည်။ အမွေအနှစ်ပရောဂျက်များအတွက် လိုအပ်ပါက၊ အစောပိုင်း compiler ဗားရှင်းများတွင် လက်ခံထားသော ပုံစံဟောင်းရွေးချယ်မှုများကို အသုံးပြုကာ ယခင်စာကြည့်တိုက်မှူးကို တိုက်ရိုက်ခေါ်ဆိုနိုင်ပါသည်။

ရွှေ့ပြောင်းနေထိုင်ခြင်းကိစ္စများ

အောက်ပါတို့သည် ယခု compiler မှ ကွဲပြားစွာ ကိုင်တွယ်လုပ်ဆောင်သော အင်္ဂါရပ်များဖြစ်သည်။ ကုဒ်ကို ဤ compiler ဗားရှင်းသို့ ပို့ပါက ဤပြောင်းလဲမှုများသည် သင့်အရင်းအမြစ်ကုဒ်ကို ပြုပြင်ပြောင်းလဲရန် လိုအပ်နိုင်သည်။ ခေါင်းစဉ်ခွဲများရှိ ဗားရှင်းနံပါတ်သည် နောက်ဆက်တွဲပြောင်းလဲမှုများကို ပံ့ပိုးရန် ပထမဆုံး compiler ဗားရှင်းကို ညွှန်ပြသည်။

၃.၁။ ဗားရှင်း 4.1
မမှန်ကန်သော fma လုပ်ဆောင်ချက်များကို ဖယ်ရှားလိုက်သည် (XC8-2913) C99 စံပြစာကြည့်တိုက် fma 0 -family functions ( ) အထပ်ထပ်-ပေါင်းထည့်ခြင်းကို တစ်ခုတည်းသော အဝိုင်းတစ်ခုသို့ အဆုံးမရှိတိကျစွာ ထည့်တွက်ခြင်းမပြုဘဲ လည်ပတ်မှုတစ်ခုစီတွင် စုစည်းမှုအမှားများကို စုဆောင်းခဲ့သည်။ ဤလုပ်ဆောင်ချက်များကို ပံ့ပိုးပေးထားသည့် ဒစ်ဂျစ်တိုက်မှ ဖယ်ရှားလိုက်ပါပြီ။
၃.၁။ ဗားရှင်း 4.2
တစ်ခုမှ
၃.၃။ ဗားရှင်း 4.3 (Functional Safety Release)
တစ်ခုမှ
၄.၄။ ဗားရှင်း 4.4 မရှိပါ။
၃.၁။ ဗားရှင်း 4.5
string-to bases များကို ကိုင်တွယ်ခြင်း (XC8-2420) အခြား XC compilers များနှင့် လိုက်လျောညီထွေရှိစေရန်၊ Strtol () စသည်တို့ကဲ့သို့ XC8 string-to functions သည် 36 ထက် ပိုကြီးပါက input string တစ်ခုကို ပြောင်းရန် ကြိုးပမ်းတော့မည် မဟုတ်ပါ။ ၎င်းအစား errno ကို EINVAL ဟု သတ်မှတ်ပါမည်။ ဤအခြေခံတန်ဖိုးကို ကျော်လွန်သွားသောအခါတွင် C စံနှုန်းသည် လုပ်ဆောင်ချက်များ၏ အပြုအမူကို မသတ်မှတ်ထားပေ။
မသင့်လျော်သော အမြန်နှုန်းကို ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်း။ အဆင့် 3 ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်း (-03) ကိုရွေးချယ်သည့်အခါ လုပ်ထုံးလုပ်နည်းဆိုင်ရာ စိတ်ကူးစိတ်သန်း ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းကို ဖွင့်ထားသည်။ အဆိုပါ ပိုမိုကောင်းမွန်အောင်ပြုလုပ်မှုများသည် ကုဒ်အမြန်နှုန်းကို အသုံးပြု၍ ကုဒ်အရွယ်အစားကို လျှော့ချပေးသောကြောင့် လုပ်ဆောင်ခြင်းမပြုသင့်ပါ။ ဤအဆင့်မြှင့်တင်မှုအဆင့်ကို အသုံးပြုထားသော ပရောဂျက်များသည် ဤထုတ်ဝေမှုဖြင့် တည်ဆောက်သောအခါတွင် ကုဒ်အရွယ်အစားနှင့် လုပ်ဆောင်မှုအမြန်နှုန်းတို့တွင် ကွဲပြားမှုများကို မြင်တွေ့နိုင်သည်။
စာကြည့်တိုက်လုပ်ဆောင်နိုင်စွမ်း စံ C စာကြည့်တိုက် လုပ်ဆောင်ချက်များစွာအတွက် ကုဒ်သည် ယခုအခါ ယခင် avr-libc စာကြည့်တိုက်မှ ပံ့ပိုးပေးထားသည့် အခြေအနေများနှင့် နှိုင်းယှဉ်ပါက အချို့သော အခြေအနေများတွင် ကွဲပြားခြားနားသော အမူအကျင့်များကို ပြသနိုင်သည့် Microchip ၏ Unified Standard Library မှ လာပါသည်။ ဟောင်းအတွက်ampဖော်မတ်လုပ်ထားသည့်ကိုဖွင့်ရန် 1printf flt စာကြည့်တိုက် (-1printf_flt ရွေးချယ်မှု) တွင် လင့်ခ်ချိတ်ရန် မလိုအပ်တော့ပါ။ I0 float-format specifiers များအတွက် ပံ့ပိုးမှု။ စမတ်ကျသည်။ I0 Microchip Unified Standard Library ၏ အင်္ဂါရပ်များသည် ဤရွေးချယ်မှုကို မလိုအပ်တော့ပါ။ ထို့အပြင်၊ flash ရှိ const strings များပေါ်တွင်လည်ပတ်နေသော string နှင့် memory functions (ဥပမာ strcpy_P ( ) etc.) အတွက် _P ၏ နောက်ဆက်တွဲလုပ်ရိုးလုပ်စဉ်များကို အသုံးပြုရန်မလိုအပ်တော့ပါ။ const-data-in-program-memory အင်္ဂါရပ်ကို ဖွင့်ထားသောအခါ စံ C လုပ်ရိုးလုပ်စဉ်များ (ဥပမာ strcpy ) သည် ထိုဒေတာနှင့် မှန်ကန်စွာ အလုပ်လုပ်ပါမည်။

၃.၁။ ဗားရှင်း 4.6
တစ်ခုမှ
၃.၁။ ဗားရှင်း 4.7
တစ်ခုမှ
၃.၁။ ဗားရှင်း 4.8
တစ်ခုမှ
၃.၃။ ဗားရှင်း 4.1 (Functional Safety Release)
တစ်ခုမှ
၃.၁။ ဗားရှင်း 4.2
DFP အပြင်အဆင်ကို ပြောင်းထားသည်။ ယခု compiler သည် DFPs (Device Family Packs) မှ အသုံးပြုသည့် မတူညီသော အပြင်အဆင်ကို ယူဆပါသည်။ ၎င်းသည် အဟောင်းဖြစ်သော DFP သည် ဤထုတ်ဝေမှုတွင် အလုပ်မလုပ်တော့ဘဲ၊ ကွန်ပြူတာအဟောင်းများသည် နောက်ဆုံးထွက် DFP များကို အသုံးမပြုနိုင်တော့ဟု ဆိုလိုပါသည်။
၃.၃။ ဗားရှင်း 4.3 (Functional Safety Release)
တစ်ခုမှ
၃.၁။ ဗားရှင်း 4.4
တစ်ခုမှ
၃.၁။ ဗားရှင်း 4.5
ပရိုဂရမ်မမ်မိုရီရှိ const အရာဝတ္ထုများကို ပုံသေအားဖြင့်၊ const-qualfiied အရာဝတ္ထုများကို ပရိုဂရမ်မှတ်ဉာဏ်တွင် နေရာချပြီး ဝင်ရောက်အသုံးပြုနိုင်မည်ကို သတိပြုပါ။ ၎င်းသည် သင့်ပရောဂျက်၏ အရွယ်အစားနှင့် လုပ်ဆောင်မှုအမြန်နှုန်းအပေါ် သက်ရောက်မှုရှိသော်လည်း RAM အသုံးပြုမှုကို လျှော့ချသင့်သည်။ လိုအပ်ပါက -mnoconst-data-in-progmem ရွေးချယ်မှုကို အသုံးပြု၍ ဤအင်္ဂါရပ်ကို ပိတ်နိုင်သည်။
၃.၁။ ဗားရှင်း 4.6
Configuration fuses စက်ပစ္စည်း configuration fuses များသည် fuse state ကိုသတ်မှတ်ရန် setting-value pairs များနောက်တွင် config pragma ကိုအသုံးပြု၍ ပရိုဂရမ်ပြုလုပ်နိုင်ပါပြီ၊ ဥပမာ၊
#pragma config WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
ပကတိအရာဝတ္ထုများနှင့် လုပ်ဆောင်ချက်များ CCI (address) specifier ကို အသုံးပြု၍ အရာဝတ္ထုများနှင့် လုပ်ဆောင်ချက်များကို ယခု Memory အတွင်းရှိ သတ်မှတ်ထားသော လိပ်စာတွင် ထားရှိနိုင်ပါပြီ၊ample-
#ပါဝင်ပါတယ်။
int foobar_at(0x800100);
char __at(0x250) getID(int offset) { … }
ဤသတ်မှတ်ချက်အတွက် ငြင်းခုံမှုဖြစ်ရမည်။ ပထမ byte သို့မဟုတ် ညွှန်ကြားချက်ကို ထားရှိမည့် လိပ်စာကို ကိုယ်စားပြုသည့် ကိန်းသေတစ်ခု။ 0x800000 အော့ဖ်ဆက်ကို အသုံးပြု၍ RAM လိပ်စာများကို ညွှန်ပြသည်။ ဤအင်္ဂါရပ်ကိုအသုံးပြုရန် CCI ကိုဖွင့်ပါ။
ကြားဖြတ်လုပ်ဆောင်ချက် အထားအသိုအသစ် C လုပ်ဆောင်ချက်များသည် interrupt handlers ဖြစ်ကြောင်းညွှန်ပြရန် CCI _interrupt (num) specifier ကို ယခု compiler မှ လက်ခံပါသည်။ ဥပမာအားဖြင့် သတ်မှတ်ပေးသူသည် ကြားဖြတ်နံပါတ်တစ်ခုကို ယူသည်။ample-
#ပါဝင်ပါတယ်။
void __interrupt(SPI_STC_vect_num) spi_Isr(void) { … }

ပုံသေကိစ္စများ

အောက်ပါတို့သည် compiler အတွက် ပြင်ဆင်မှုများ ပြုလုပ်ထားပါသည်။ ၎င်းတို့သည် ထုတ်လုပ်ထားသော ကုဒ်တွင် အမှားအယွင်းများကို ပြင်ဆင်နိုင်သည် သို့မဟုတ် အသုံးပြုသူ၏လမ်းညွှန်မှ ရည်ရွယ်ထားသည့် သို့မဟုတ် သတ်မှတ်ထားသည့် စုစည်းမှုစနစ်၏ လုပ်ဆောင်ချက်ကို ပြောင်းလဲနိုင်သည်။ ခေါင်းစဉ်ခွဲများရှိ ဗားရှင်းနံပါတ်သည် နောက်ဆက်တွဲပြဿနာများအတွက် ပြုပြင်မှုများပါရှိသော ပထမဆုံး compiler ဗားရှင်းကို ညွှန်ပြသည်။ ခေါင်းစဉ်ရှိ ကွင်းပိတ်တပ်ထားသော အညွှန်း(များ)သည် ခြေရာခံ ဒေတာဘေ့စ်ရှိ ပြဿနာ၏ အထောက်အထားဖြစ်သည်။ ပံ့ပိုးကူညီမှုထံ ဆက်သွယ်ရန် လိုအပ်ပါက ၎င်းတို့သည် အသုံးဝင်နိုင်ပါသည်။
စက်နှင့်ဆက်စပ်နေသော Device Family Pack (DFP) တွင် အချို့သော စက်ပစ္စည်းဆိုင်ရာ ပြဿနာများကို ပြုပြင်ထားကြောင်း သတိပြုပါ။ DFPs များတွင် ပြုလုပ်ထားသော အပြောင်းအလဲများနှင့် နောက်ဆုံးထွက်ပက်ကေ့ခ်ျများကို ဒေါင်းလုဒ်လုပ်ရန် အချက်အလက်များအတွက် MPLAB Pack Manager ကို ကြည့်ပါ။

၃.၁။ ဗားရှင်း 5.1
Dongle သည် Ventura (XC8-3088) Dongles တွင် ပြဿနာများရှိသည်။ compiler ကို လိုင်စင်ရယူရန် အသုံးပြုခြင်းသည် macOS Ventura hosts များတွင် မှန်ကန်စွာ မဖတ်ရှုနိုင်သောကြောင့် လိုင်စင်ချခြင်း ပျက်ကွက်ခြင်းဖြစ်နိုင်သည်။ XCLM လိုင်စင်မန်နေဂျာမှ အပြောင်းအလဲများသည် ဤပြဿနာကို မှန်ကန်စေသည်။
မမ်မိုရီခွဲဝေမှု၏ မှားယွင်းသော ညွှန်ပြချက် (XC8-2925) စံစာကြည့်တိုက် မမ်မိုရီစီမံခန့်ခွဲမှုလုပ်ဆောင်ချက်များ (malloc () et al) ကို အသုံးပြု၍ မမ်မိုရီ၏ SIZE_MAX ဘိုက်များ (သို့မဟုတ် ၎င်းနှင့် နီးစပ်သော တန်ဖိုး) ခွဲဝေရန် ကြိုးပမ်းခြင်း မအောင်မြင်ပါ။ ရိုးရှင်းသောပြောင်းလဲနေသောမှတ်ဉာဏ်ခွဲဝေသုံးစွဲမှုအကောင်အထည်ဖော်မှုကိုအသုံးပြုသည့်အခါ တောင်းဆိုထားသောပိတ်ဆို့ခြင်းအပြင် အပိုဘိုက်များလိုအပ်ကြောင်း ထည့်သွင်းစဉ်းစားခြင်းမရှိပါ။ NULL ညွှန်ပြချက်ကို ယခု ပြန်ပေးမည်ဖြစ်ပြီး ထိုသို့သောအခြေအနေများတွင် ENOMEM သို့ မှားယွင်းသတ်မှတ်ထားသည်။
မမှန်ကန်သော fma လုပ်ဆောင်ချက်များကို ဖယ်ရှားခဲ့သည် (XC8-2913) C99 စံပြစာကြည့်တိုက် fma( ) -family functions ( ) အထပ်ထပ်-ပေါင်းထည့်ခြင်းကို တစ်ခုတည်းသော အဝိုင်းတစ်ခုသို့ အဆုံးမရှိတိကျစွာ ထည့်တွက်ခြင်းမပြုဘဲ လည်ပတ်မှုတစ်ခုစီတွင် စုစည်းမှုအမှားများကို စုဆောင်းခဲ့သည်။ ဤလုပ်ဆောင်ချက်များကို ပံ့ပိုးပေးထားသည့် ဒစ်ဂျစ်တိုက်မှ ဖယ်ရှားလိုက်ပါပြီ။
စာကြောင်းပြောင်းခြင်း၏ ကိုင်တွယ်မှု မကောင်းပါ (XC8-2921၊ XC8-2652) strtod Cr ဖြင့် ပြောင်းလဲခြင်းအတွက် 'ဘာသာရပ် စည်းရိုး' တွင် အထွတ်အထိပ်ကိန်းဂဏန်းဖြစ်ပုံရသည့် ကိန်းဂဏန်းများ ပါရှိပြီး e/E စာလုံးနောက်တွင် မမျှော်လင့်ထားသော အက္ခရာတစ်ခု ရှိနေသောအခါ၊ ထို့နောက် endptr ပေးထားသည့် လိပ်စာတစ်ခုကို သတ်မှတ်ပေးခဲ့သည်။ e/E ၏နောက်တွင် ဇာတ်ကောင်ကို ညွှန်ပြရမည်ဖြစ်ပြီး၊ ၎င်းသည် e/E ဇာတ်ကောင်ကို မပြောင်းရသေးသောကြောင့် ၎င်းကို ညွှန်ပြသင့်သည်။ ဟောင်းအတွက်ample, strtod (“100exx”၊ &ep) သည် 100.00 ကိုပြန်ပေးသင့်ပြီး ep သည် စာကြောင်း၏ “exx” အပိုင်းသို့ ညွှန်ပြရန် သတ်မှတ်ပေးသင့်ပြီး လုပ်ဆောင်ချက်သည် မှန်ကန်သောတန်ဖိုးကို ပြန်ပေးသော်လည်း string ၏ “xx” အပိုင်းကို ညွှန်ရန် ep ကို သတ်မှတ်ခြင်း .

၃.၁။ ဗားရှင်း 5.2
စိတ်လျှော့လွန်းသည် (XCS-2876) -mrelax option ကိုအသုံးပြုသောအခါ၊ compiler သည် အချို့သောအပိုင်းများကို အတူတကွ ခွဲဝေပေးခြင်းမရှိသောကြောင့် အကောင်းဆုံးကုဒ်အရွယ်အစားများ နည်းပါးသွားပါသည်။ MUSL စာကြည့်တိုက်အသစ် သို့မဟုတ် အားနည်းသော သင်္ကေတများဖြင့် အသုံးပြုသော ကုဒ်ဖြင့် ၎င်းသည် ဖြစ်ပေါ်နိုင်သည်။
သတိပေးချက်တွင်ဖော်ပြထားသည့်အတိုင်း မြေပုံဆွဲခြင်းအင်္ဂါရပ်ကို မပိတ်ထားပါ (XC8-2875) const-data-in-config-mappedprogmem အင်္ဂါရပ်သည် ဖွင့်ထားသည့် const-data-in-progmem အင်္ဂါရပ်အပေါ် အားကိုးသည်။ const-data-inconfig-mapped-progmem အင်္ဂါရပ်ကို ရွေးချယ်စရာကို အသုံးပြု၍ အတိအလင်းဖွင့်ထားလျှင် const-data-inprogmem အင်္ဂါရပ်ကို ပိတ်ထားပါက၊ const-data-in-con fig- ဟုသတိပေးစာတစ်စောင်ဖော်ပြသော်လည်း လင့်ခ်အဆင့် မအောင်မြင်ပါ။ mapped-progmem အင်္ဂါရပ်ကို အလိုအလျောက်ပိတ်ထားခဲ့ပြီး၊ ၎င်းမှာ လုံးဝမမှန်ပါ။ const-data-in-config-mapped-progmem အင်္ဂါရပ်ကို ယခုအခြေအနေတွင် အပြည့်အဝ ပိတ်ထားသည်။
NVMCTRL (XC8-2848) ကို မှန်မှန်ကန်ကန်သုံးရန် DFP ပြောင်းလဲမှုများ AVR64EA စက်ပစ္စည်းများအသုံးပြုသည့် runtime startup code သည် NVMCTRL မှတ်ပုံတင်ခြင်းကို Configuration Change Protection (CCP) အောက်တွင်ရှိနေကြောင်း ထည့်သွင်းစဉ်းစားခြင်းမရှိသည့်အပြင် I0 SFR ကို const-data-in-configmapped-progmem မှအသုံးပြုသည့်စာမျက်နှာသို့ I2.2.55 SFR သတ်မှတ်၍မရပါ။ compiler လုပ်ဆောင်ချက်။ AVR-Ex_DFP ဗားရှင်း XNUMX တွင် ပြုလုပ်ထားသော အပြောင်းအလဲများသည် runtime startup ကုဒ်ကို ဤမှတ်ပုံတင်တွင် မှန်ကန်စွာရေးနိုင်စေမည်ဖြစ်သည်။
ရှောင်ရှားရန် DFP အပြောင်းအလဲများ flash mapping (XC8-2847) AVR128DA28/32/48/64 Silicon Errata (D580000882) တွင် အစီရင်ခံထားသော flash-mapping device အင်္ဂါရပ်နှင့် ပြဿနာအတွက် အလုပ်ဝိုင်းကို အကောင်အထည်ဖော်လိုက်ပါပြီ။ const-data-in-config-mapped-progmem စုစည်းမှုအင်္ဂါရပ်ကို ထိခိုက်သည့်စက်ပစ္စည်းများအတွက် မူရင်းအတိုင်းအသုံးပြုမည်မဟုတ်ပါ၊ ဤပြောင်းလဲမှုသည် AVR-Dx_DFP ဗားရှင်း 2.2.160 တွင် ပေါ်လာမည်ဖြစ်သည်။
sinhf သို့မဟုတ် coshf (XC8-2834) ဖြင့် အမှားတည်ဆောက်ခြင်း sinhf() သို့မဟုတ် coshf() စာကြည့်တိုက်လုပ်ဆောင်ချက်များကို အသုံးပြုရန် ကြိုးစားခြင်းသည် သတ်မှတ်မထားသော ကိုးကားချက်ကို ဖော်ပြသည့် လင့်ခ်အမှားအယွင်းတစ်ခု ဖြစ်ပေါ်ခဲ့သည်။ ရည်ညွှန်းထားသော ပျောက်ဆုံးနေသော လုပ်ဆောင်ချက်ကို ယခုအခါ စုစည်းမှုဖြန့်ဝေမှုတွင် ထည့်သွင်းလိုက်ပါပြီ။
nopa (XC၊8-2833) ဖြင့် အမှားအယွင်းများကို တည်ဆောက်ပါ asm ( ) ကို အသုံးပြု၍ ၎င်း၏ assembler အမည်ဖြင့် သတ်မှတ်ထားသော လုပ်ဆောင်ချက်တစ်ခုဖြင့် nopa attribute ကိုအသုံးပြုခြင်းဖြင့် assembler မှ error message များကို အစပျိုးပေးပါသည်။ ဤပေါင်းစပ်မှု မဖြစ်နိုင်ပါ။
ညွှန်ပြချက်များနှင့် ကွဲပြားသော လုပ်ဆောင်မှု ပျက်ကွက် (XC8-2755၊ XC8-2731) const-data-in-progmem အင်္ဂါရပ်ကိုဖွင့်ထားသောအခါတွင် ပြောင်းလဲနိုင်သော အငြင်းအခုံများစာရင်းတွင် ကွဲပြားနိုင်သော ကိန်းဂဏန်းများရှိသော လုပ်ဆောင်ချက်များသည် 24-bit ( memx အမျိုးအစား) ညွှန်ပြချက်များကို ပေးဆောင်ရန် မျှော်လင့်ပါသည်။ ဒေတာမှတ်ဉာဏ်သို့ ညွှန်ပြသည့် အငြင်းအခုံများကို 16-ဘစ်အရာဝတ္ထုများအဖြစ် ဖြတ်သန်းနေပြီး နောက်ဆုံးတွင် ၎င်းတို့ကိုဖတ်သည့်အခါ ကုဒ်ပျက်ကွက်မှုကို ဖြစ်စေသည်။ constdata-in-progmem အင်္ဂါရပ်ကိုဖွင့်ထားသောအခါ၊ 16-ဘစ်ညွှန်ပြချက်အငြင်းအခုံအားလုံးကို 24-ဘစ်ညွှန်ပြချက်များအဖြစ်သို့ ပြောင်းလဲသွားပါပြီ။
strtoxxx စာကြည့်တိုက်လုပ်ဆောင်ချက်များ ပျက်ကွက်ခြင်း (XC8-2620) const-data-in-progmem အင်္ဂါရပ်ကို ဖွင့်ထားသောအခါ၊ strtoxxx စာကြည့်တိုက်လုပ်ဆောင်ချက်များရှိ endptr ဘောင်ကို ပရိုဂရမ်မှတ်ဉာဏ်တွင်မရှိသော ရင်းမြစ်စာကြောင်းဆိုင်ရာ အကြောင်းပြချက်များအတွက် မှန်ကန်စွာ မွမ်းမံမွမ်းမံထားသည်။
မမှန်ကန်သောကာစ်များအတွက် သတိပေးချက်များ (XC8-2612) const-in-progmem အင်္ဂါရပ်ကိုဖွင့်ထားပြီး string literal ၏လိပ်စာကို data address space (ဥပမာ const qualifier ကို dropping) သို့ အတိအလင်း ကာစ်လုပ်ပါက compiler သည် အမှားအယွင်းတစ်ခုထုတ်ပေးမည်ဖြစ်ပါသည်။ample၊ (uint 8_t *) "Hello World!" const data pointer ကို data address space သို့ ပြတ်သားစွာ ကာစ်လုပ်သောအခါ လိပ်စာသည် မမှန်ကန်ပါက သတိပေးချက်သည် ပြဿနာဖြစ်သည်။
မစဥ်းစားရသေးသော အရာဝတ္ထုများ နေရာချထားခြင်း (XC8-2408) Unitialized const နှင့် const volatile objects များသည် ၎င်းတို့၏ program memory ၏ တစ်စိတ်တစ်ပိုင်း သို့မဟုတ် အစိတ်အပိုင်းအားလုံးကို data address space သို့ မြေပုံညွှန်းပေးသော စက်ပစ္စည်းများတွင် ပရိုဂရမ်မှတ်ဉာဏ်တွင် ထည့်သွင်းထားခြင်းမရှိပါ။ ဤစက်ပစ္စည်းများအတွက်၊ ဤအရာဝတ္ထုများကို ပရိုဂရမ်မှတ်ဉာဏ်တွင် ထားရှိထားပြီး ၎င်းတို့၏လုပ်ဆောင်ချက်ကို အခြားစက်ပစ္စည်းများနှင့် ကိုက်ညီစေသည်။

၃.၃။ ဗားရှင်း 5.3 (Functional Safety Release)
တစ်ခုမှ
၃.၁။ ဗားရှင်း 5.4
နှောင့်နှေးနေချိန်တွင် အမှားအယွင်း (XC8-2774) ပုံသေ အခမဲ့မုဒ် ပိုမိုကောင်းမွန်အောင်ပြုလုပ်မှုများတွင် အသေးစားပြောင်းလဲမှုများသည် operand စကားရပ်များကို နှောင့်နှေးသည့် built-in လုပ်ဆောင်ချက်များသို့ စဉ်ဆက်မပြတ်ခေါက်ခြင်းကို တားဆီးခဲ့ပြီး ၎င်းတို့ကို ကိန်းသေမဟုတ်သည့်အဖြစ် သဘောထားကာ အမှားအယွင်းဖြစ်စေသည်- builtin avr delay_cycles သည် compile time integer ကို ကိန်းသေအဖြစ် မျှော်လင့်ထားသည်။
၃.၁။ ဗားရှင်း 5.5
_at (XC8-2653) ကို အသုံးပြု၍ ဆက်တိုက်ခွဲဝေပေးခြင်း အမည်တူနှင့် _at( ) ကို အသုံးပြု၍ ကဏ္ဍတစ်ခုရှိ အရာဝတ္ထုများစွာကို ဆက်တိုက်ခွဲဝေပေးခြင်းသည် မှန်ကန်စွာ အလုပ်မလုပ်ပါ။ ဟောင်းအတွက်ample-
const char arr1[] __attribute__((အပိုင်း(“.mysec”))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((အပိုင်း(“.mysec”))) = {0xEF, 0xFE};
Arr2 ပြီးတာနဲ့ ချက်ချင်း Arr1 ကို ထားသင့်ပါတယ်။
သတ်မှတ်ခြင်းအပိုင်းအစလိပ်စာများ (XC8-2650) The -W1၊ –section-start option သည် အမည်စာရင်းတင်ထားသော စတင်သည့်လိပ်စာတွင် အပိုင်းများကို တိတ်တဆိတ်ထားရန် ပျက်ကွက်နေပါသည်။ ဤပြဿနာကို စိတ်ကြိုက်အမည်ပေးထားသည့် ကဏ္ဍများအတွက် ပြင်ဆင်ပြီးပါပြီ။ သို့သော်လည်း၊ . ကဲ့သို့သော မည်သည့်စံအပိုင်းများအတွက်မှ အလုပ်မဖြစ်ပါ။ စာသား သို့မဟုတ် . bss သည် -W1၊ -T ရွေးချယ်မှုကို အသုံးပြု၍ ထားရှိရပါမည်။
(XC8-2647) -mrelax ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းကို ဖွင့်ထားသည့်အခါတွင် ကုဒ် သို့မဟုတ် ဒေတာအပိုင်းများနှင့် ကိုက်ညီမှုမရှိသော ကုဒ် သို့မဟုတ် ဒေတာအပိုင်းများ ရှိသောအခါ၊ လင့်ခ်သည် ပျက်သွားသည်။ ယခု ဤကဲ့သို့သော အခြေအနေမျိုးတွင် အမှားအယွင်း မက်ဆေ့ချ်များကို ထုတ်ပေးပါသည်။

No-falling-back (XC8-2646) The -nofallback ရွေးချယ်မှုကို မှန်ကန်စွာ အကောင်အထည်မဖော်ခဲ့ဘဲ မှတ်တမ်းတင်ထားခြင်းမရှိပါ။ compiler သည် လိုင်စင်မဲ့ဖြစ်နေပါက compiler သည် နိမ့်သော optimization ဆက်တင်သို့ ပြန်ကျသွားမည်မဟုတ်ကြောင်း သေချာစေရန် ယခု ၎င်းကို ရွေးချယ်နိုင်ပြီး error ထုတ်ပေးမည်ဖြစ်သည်။

မသင့်လျော်သော အမြန်နှုန်း ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်း (X03-2637) အဆင့် 3 ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်း (-03) ကိုရွေးချယ်သည့်အခါ လုပ်ထုံးလုပ်နည်းဆိုင်ရာ စိတ်ကူးစိတ်သန်း ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းကို ဖွင့်ထားသည်။ အဆိုပါ ပိုမိုကောင်းမွန်အောင်ပြုလုပ်မှုများသည် ကုဒ်အမြန်နှုန်းကို အသုံးပြု၍ ကုဒ်အရွယ်အစားကို လျှော့ချပေးသောကြောင့် လုပ်ဆောင်ခြင်းမပြုသင့်ပါ။
EEPROM မကောင်းပါ။ ဝင်ရောက်ခွင့် (XC8-2629) The -mconst-data-in-progmem ရွေးချယ်မှုကို ဖွင့်ထားသောအခါ (ပုံသေအခြေအနေဖြစ်သည့်) EEPROM မမ်မိုရီကို မှန်ကန်စွာဖတ်မရသောအခါ eeprom_read_block လုပ်ရိုးလုပ်စဉ်သည် Xmega စက်များတွင် မှန်ကန်စွာအလုပ်မလုပ်ပါ။
မမှန်ကန်သော မမ်မိုရီခွဲဝေမှု (XC8-2593, XC8-2651) ကို ဘယ်တော့လဲ။ -Ttext သို့မဟုတ် -Tdata linker option (ဥပမာample -vl driver option ကို အသုံးပြု၍ ဖြတ်သန်းခဲ့သည်) ကို သတ်မှတ်ထားသည်၊ သက်ဆိုင်ရာ စာသား/ဒေတာ ဒေသမူလကို အပ်ဒိတ်လုပ်ထားပါသည်။ သို့သော်၊ အဆုံးလိပ်စာကို လိုက်လျောညီထွေမဖြစ်အောင် ချိန်ညှိထားခြင်းမရှိသောကြောင့် ပစ်မှတ်ကိရိယာ၏ မှတ်ဉာဏ်အကွာအဝေးထက် ကျော်လွန်သည့်နေရာကို ဖြစ်ပေါ်စေနိုင်သည်။
လွန်ကဲသော လုပ်ဆောင်ချက်ဖြင့် ပျက်စီးခြင်း (XC8-2580) အနှောက်အယှက်၊ signal သို့မဟုတ် nmi attributes များထဲမှ တစ်ခုထက်ပိုသော function ကိုအသုံးပြုကြောင်းကြေငြာပါက compiler သည် ပျက်စီးသွားပါသည်။ ဥပမာ၊ attribute ( ( signal , interrupt ) ) ။
မမှန်ကန်သော ATtiny ကြားဖြတ်ကုဒ် (XC8-2465) ATtiny စက်များအတွက် တည်ဆောက်ခြင်းနှင့် ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းများကို ပိတ်လိုက်သောအခါ (-00)၊ ကြားဖြတ်လုပ်ဆောင်ချက်များသည် အပိုင်းအခြားစုစည်းသူမက်ဆေ့ချ်များမှ လည်ပတ်လုပ်ဆောင်မှုကို အစပျိုးစေနိုင်ပါသည်။
ရွေးချယ်စရာများ (XC8-2452) ရွေးချယ်ခွင့်ကို ကော်မာ-ခြားထားသော လင့်ခ်ပေးသည့် ရွေးစရာများ အများအပြားဖြင့် အသုံးပြုသောအခါ၊ လင့်ခ်ပေးရွေးချယ်စရာများအားလုံးကို လင့်ခ်ကိရိယာသို့ လွှဲပြောင်းပေးမည်မဟုတ်ပါ။
ပရိုဂရမ်မမ်မိုရီကို သွယ်ဝိုက်ဖတ်ခြင်း အမှားအယွင်း (X03-2450) အချို့သောအခြေအနေများတွင်၊ ကွန်ပြူတာသည် pointer တစ်ခုမှ program memory သို့ two byte value ကိုဖတ်သောအခါ အတွင်းပိုင်းအမှား (unrecognizable insn) ကိုထုတ်ပေးသည်။
၃.၁။ ဗားရှင်း 5.6
ဒုတိယဝင်ရောက်ခွင့် စာကြည့်တိုက် မအောင်မြင်ပါ (XC8-2381) xc8-ar ၏ Windows ဗားရှင်းကို ခေါ်ဆိုခြင်း။ .exe စာကြည့်တိုက် archiver သည် လက်ရှိ စာကြည့်တိုက် archive ကို ဝင်ရောက်ရန် ဒုတိယ အကြိမ်တွင် အမှားအယွင်း မက်ဆေ့ချ်ကို အမည်ပြောင်းနိုင်ခြင်း မရှိခဲ့ပါ။
၃.၁။ ဗားရှင်း 5.7
မရှင်းပြရသေးသော compiler ကျရှုံးမှုများ (XC8-2367) စနစ် ယာယီလမ်းညွှန်ပါရှိသော Windows ပလပ်ဖောင်းများတွင် အလုပ်လုပ်သောအခါတွင် အစက် '.' ပါ၀င်သည့် လမ်းကြောင်းသို့ သတ်မှတ်ပေးသည်။ ဇာတ်ကောင်၊ compiler သည် execute ပျက်ကွက်သွားနိုင်သည်။
၃.၁။ ဗားရှင်း 5.8
(XC8-2299) ကို ဖော်ပြပြီးနောက် ကမ္ဘာလုံးဆိုင်ရာ အညွှန်းများ မှားယွင်းနေသည် လုပ်ထုံးလုပ်နည်း abstraction ဖြင့် ပိုင်းခြားထားသော အစုအဝေးအတွင်း ဂလိုဘယ်တံဆိပ်များကို ထားရှိပေးသည့် လက်ဖြင့်ရေးထားသော စည်းဝေးပွဲကုဒ်များကို မှန်ကန်စွာ ပြန်လည်နေရာချထားခြင်း ဖြစ်နိုင်သည်။
လျှော့ပေါ့ပျက်ကျမှု (XC8-2287) -mrelax option ကိုအသုံးပြုခြင်းဖြင့် tail jump relaxation optimizations သည် အပိုင်းတစ်ခု၏အဆုံးတွင်မဟုတ်သော ret instruction ကိုဖယ်ရှားရန် ကြိုးပမ်းသောအခါ linker ကို ပျက်စီးသွားစေနိုင်ပါသည်။
အညွှန်းများကို တန်ဖိုးများ (XC8-2282) အဖြစ် ပိုမိုကောင်းမွန်အောင်ပြုလုပ်သောအခါ ပျက်စီးသွားသည် “Labels as values” GNU C ဘာသာစကား တိုးချဲ့မှုကို အသုံးပြုထားသော ကုဒ်သည် အကြမ်းဖျင်းဖော်ပြထားသော VMA အပိုင်းအခြားကို ပြုပြင်မှုအမှားအယွင်းဖြင့် လုပ်ထုံးလုပ်နည်း abstraction optimizations ပျက်သွားနိုင်သည်။
Const မဟုတ်ပါ။ (XC8-2271) st rstr ( ) နှင့် အခြားလုပ်ဆောင်ချက်များအတွက် ရှေ့ပြေးပုံစံများ -mconst-data-inprogmem အင်္ဂါရပ်ကို ပိတ်လိုက်သောအခါတွင် ပြန်ပေးထားသော string pointers များပေါ်တွင် စံမဟုတ်သော const အရည်အသွေးသတ်မှတ်ချက်ကို မသတ်မှတ်တော့ပါ။ avrxmega3 နှင့် avrtiny စက်များဖြင့် ဤအင်္ဂါရပ်ကို အပြီးအပိုင် ဖွင့်ထားကြောင်း သတိပြုပါ။
Lost initializers (XC8-2269) ကျော်သည့်အခါ ဘာသာပြန်ယူနစ်တစ်ခုရှိ ကိန်းရှင်တစ်ခုအား ကဏ္ဍတစ်ခု (_section သို့မဟုတ် _attribute_ ((ကဏ္ဍ) ))) တွင် ထားရှိထားပြီး၊ ပထမထိုကိန်းရှင်သည် သုညအစပြုခြင်း သို့မဟုတ် ကနဦးထည့်သွင်းခြင်းမရှိပါက၊ နေရာချထားသည့် တူညီသောဘာသာပြန်ယူနစ်ရှိ အခြားကိန်းရှင်များအတွက် ကနဦးအစပြုမှုများ၊ တူညီတဲ့အပိုင်းမှာ ဆုံးရှုံးခဲ့ရပါတယ်။
၃.၃။ ဗားရှင်း 5.1 (Functional Safety Release)
တစ်ခုမှ
၃.၁။ ဗားရှင်း 5.2
ရှည်လျားသောအမိန့်များဖြင့် အမှားအယွင်းရှိသည်။ (XC8-1983) AVR ပစ်မှတ်ကို အသုံးပြုသောအခါ၊ compiler သည် ရပ်တန့်သွားနိုင်သည်။ file အကယ်၍ command line သည် အလွန်ကြီးမားပြီး အထူးစာလုံးများဖြစ်သည့် quotes၊ backslashes စသည်တို့ပါ၀င်ပါက error မတွေ့ပါ။
သတ်မှတ်မထားသော rodata ကဏ္ဍ (XC8-1920) avrxmega3 နှင့် avrtiny ဗိသုကာများကို တည်ဆောက်သောအခါတွင် AVR လင့်ခ်သည် စိတ်ကြိုက် rodata ကဏ္ဍများအတွက် မန်မိုရီကို သတ်မှတ်၍ မရပါ။
၃.၁။ ဗားရှင်း 5.3 (Functional Safety Release)
တစ်ခုမှ
၃.၁။ ဗားရှင်း 5.4
နေရာပြောင်းရွှေ့မှု မအောင်မြင်ပါ။ (XC8-1891) အသင့်တော်ဆုံး ခွဲဝေပေးသူသည် လင့်ခ်ကို ပြေလျော့ပြီးနောက် အပိုင်းများကြားတွင် မှတ်ဉာဏ် 'အပေါက်များ' ချန်ထားသည်။ မမ်မိုရီကို အပိုင်းပိုင်းခွဲခြင်းအပြင်၊ ၎င်းသည် pc-relative jumps သို့မဟုတ် ဖုန်းခေါ်ဆိုမှုများနှင့်ပတ်သက်သော linker များနေရာပြောင်းခြင်းဆိုင်ရာ ချို့ယွင်းချက်များရှိနိုင်ခြေကို တိုးစေသည်။
ဖြေလျှော့ခြင်းဖြင့် မပြောင်းလဲသော ညွှန်ကြားချက်များ (XC8-1889) Linker လျှော့ပေါ့ခြင်းများသည် ခုန်ခြင်း သို့မဟုတ် လျှော့ပေါ့ထားလျှင် ပစ်မှတ်များဆီသို့ ရောက်ရှိနိုင်သည့် ညွှန်ကြားချက်များကို ခုန်ချခြင်း သို့မဟုတ် ဖုန်းခေါ်ဆိုခြင်းအတွက် မဖြစ်ပေါ်ခဲ့ပါ။
ပျောက်နေသည်။ လုပ်ဆောင်နိုင်စွမ်း (XC8E-388) ထံမှ အဓိပ္ပါယ်များစွာရှိသည်။ clock_div_t နှင့် clock_prescale set () ကဲ့သို့သော ATmega324PB၊ ATmega328PB၊ ATtiny441 နှင့် ATtiny841 အပါအဝင် စက်များအတွက် သတ်မှတ်မထားပါ။
မက်ခရိုများ ပျောက်နေသည်။ ကြိုတင်ပရိုဆက်ဆာ မက်ခရို _XC8_MODE_၊ _XC8_VERS ION၊ _XC နှင့် _XC8 တို့ကို စုစည်းမှုမှ အလိုအလျောက် သတ်မှတ်ခြင်း မရှိပါ။ ဒါတွေကို အခုရရှိနိုင်ပါပြီ။
၃.၁။ ဗားရှင်း 5.5
Internal compiler အမှား (XC8-1822) Windows အောက်တွင် တည်ဆောက်သည့်အခါ၊ ကုဒ်ကို ကောင်းမွန်အောင်ပြုလုပ်သည့်အခါ အတွင်းပိုင်း compiler error ဖြစ်ပေါ်လာနိုင်သည်။
RAM ပြည့်လျှံမှုကို ရှာမတွေ့ပါ (XC8-1800၊ XC8-1796) ရရှိနိုင်သော RAM ထက်ကျော်လွန်သော ပရိုဂရမ်များကို အချို့သောအခြေအနေများတွင် compiler မှ ရှာမတွေ့သဖြင့် runtime code ပျက်ကွက်သွားပါသည်။
ချန်လှပ်ထားသည့် flash memory (XC8-1792) avrxmega3 နှင့် avrtiny စက်များအတွက်၊ flash memory ၏ အစိတ်အပိုင်းများကို MPLAB X မှ ပရိုဂရမ်မထားရှိဘဲ ထားခဲ့နိုင်သည် IDE
ပင်မ (XC8-1788) ကို လုပ်ဆောင်ရန် ပျက်ကွက်ခြင်း ပရိုဂရမ်တွင် ကမ္ဘာလုံးဆိုင်ရာ ကိန်းရှင်များ သတ်မှတ်မထားသော အချို့အခြေအနေများတွင်၊ runtime startup code သည် ထွက်မသွားဘဲ main ( ) လုပ်ဆောင်ချက်ကို မည်သည့်အခါမျှ မရောက်ပါ။
မမ်မိုရီအချက်အလက် မမှန်ကန်ပါ (XC8-1787) avrxmega3 နှင့် avrtiny စက်ပစ္စည်းများအတွက်၊ avr-size ပရိုဂရမ်သည် ပရိုဂရမ်မမ်မိုရီအစား ဖတ်သာဒေတာကို RAM သုံးစွဲနေကြောင်း သတင်းပို့နေသည်။
ပရိုဂရမ် မန်မိုရီ မမှန်ကန်ပါ (XC8-1783) ဒေတာလိပ်စာနေရာသို့ မြေပုံဆွဲထားသော ပရိုဂရမ်မမ်မိုရီပါသည့် စက်ပစ္စည်းများအတွက် စုစည်းထားသော ပရောဂျက်များသည် PROGMEM macro/attribute ကို အသုံးပြု၍ အရာဝတ္ထုများကို လိပ်စာမှားဖတ်မိခြင်း ဖြစ်နိုင်သည်။
ရည်ညွှန်းချက်များပါရှိသော အတွင်းပိုင်းအမှား (XC8-1773) ညွှန်ပြသည့်အရာဝတ္ထုများကို သင်သတ်မှတ်ထားလျှင် အတွင်းပိုင်းအမှားအယွင်းဖြစ်သွားသည်။
_at() သို့မဟုတ် attribute() ညွှန်ပြသူအမည်နှင့် ကိုးကားထားသော အမျိုးအစားကြားရှိ တိုကင်များ ဥပမာ၊ample၊ char *
_at (0x800150) cp; ထိုသို့သောကုဒ်များတွေ့ရှိပါက ယခုသတိပေးချက်ထုတ်ပြန်ထားသည်။
ပင်မကို လုပ်ဆောင်ရန် ပျက်ကွက်ခြင်း (XC8-1780၊ XC8-1767၊ XC8-1754) EEPROM variables များကိုအသုံးပြုခြင်း သို့မဟုတ် config pragma ကိုအသုံးပြု၍ fuses များကိုသတ်မှတ်ခြင်းသည် main ( ) သို့မရောက်ရှိမီ ဒေတာအစပျိုးခြင်း နှင့်/သို့မဟုတ် program execution ကို မှားယွင်းစေခြင်းဖြစ်နိုင်သည်။
စက်သေးသေးလေးဖြင့် ဖျစ်အမှား (XC8-1778၊ XC8-1742) attiny4/5/9/ 10/20/40 စက်များတွင် ၎င်းတို့၏ ခေါင်းစီးတွင် သတ်မှတ်ထားသော fuse length မမှန်ပါ files ကိုသတ်မှတ်ထားသော fuses များသတ်မှတ်ထားသောကုဒ်ကိုတည်ဆောက်ရန်ကြိုးစားသောအခါ linker အမှားများကိုဖြစ်ပေါ်စေသည်။
ပိုင်းခြားခြင်း။ ပြတ်တောက်မှု (XC8-1777) ပြတ်တောက်နေသည့် အပိုင်းခွဲပိုင်းပြတ်တောက်မှုကို ပြုပြင်ပြီးဖြစ်သည်။
တပ်ဆင်သူ ပျက်ကျခြင်း (XC8-1761) Ubuntu 18 အောက်တွင် compiler ကို run သောအခါ avr-as assembler ပျက်သွားနိုင်သည်။
မရှင်းလင်းသော အရာများ (XC8-1752) အစပျိုးထားသည့် တည်ငြိမ်သော သိုလှောင်မှုကြာချိန် အရာဝတ္ထုများကို runtime startup ကုဒ်ဖြင့် မရှင်းလင်းနိုင်ပါ။
ကွဲလွဲနေသော စက်ပစ္စည်းသတ်မှတ်ချက်ကို လျစ်လျူရှုထားသည် (XC8-1749) စက်ပစ္စည်း သတ်မှတ်ချက် ရွေးချယ်စရာများစွာကို အသုံးပြုပြီး မတူညီသော စက်ပစ္စည်းများကို ညွှန်ပြသောအခါတွင် စုစည်းမှုသည် အမှားအယွင်းတစ်ခု မဖြစ်ပေါ်ခဲ့ပါ။
Memory Corruption by heap (XC8-1748) The _heap_start သင်္ကေတကို မှားယွင်းစွာ သတ်မှတ်နေသောကြောင့် ရလဒ်အနေဖြင့် သာမန်ကိန်းရှင်များ ပျက်စီးသွားနိုင်ခြေရှိသည်။
လင့်ခ်ကို နေရာပြောင်းရွှေ့မှု အမှားအယွင်း (XC8-1739) ကုဒ်တွင် rjmp သို့မဟုတ် rcall အတိအကျ 4k bytes အကွာအဝေးတွင် ပစ်မှတ်တစ်ခုပါရှိသော လင့်ခ်ကို ရွှေ့ပြောင်းရာတွင် အမှားအယွင်းတစ်ခု ထွက်လာနိုင်သည်။
၃.၁။ ဗားရှင်း 5.6
တစ်ခုမှ

သိပြီးသားကိစ္စများ

အောက်ပါတို့သည် compiler ၏လုပ်ဆောင်မှုတွင် ကန့်သတ်ချက်များဖြစ်သည်။ ၎င်းတို့သည် ယေဘူယျအားဖြင့် ကုဒ်ကန့်သတ်ချက်များ သို့မဟုတ် အသုံးပြုသူ၏လက်စွဲတွင်ပါရှိသော အချက်အလက်များမှ သွေဖည်မှုများ ဖြစ်နိုင်သည်။ ခေါင်းစဉ်ရှိ ကွင်းပိတ်တပ်ထားသော အညွှန်း(များ)သည် ခြေရာခံ ဒေတာဘေ့စ်ရှိ ပြဿနာ၏ သက်သေခံချက်ဖြစ်သည်။ အကူအညီလိုအပ်ပါက ၎င်းသည် အကျိုးရှိနိုင်ပါသည်။ အညွှန်းမပါသော အရာများသည် ကန့်သတ်ချက်များဖြစ်ပြီး modi operandi နှင့် အပြီးအပိုင် ဆက်လက်တည်ရှိနိုင်ဖွယ်ရှိကြောင်း ဖော်ပြသည့် ကန့်သတ်ချက်များဖြစ်သည်။
၆.၁။ MPLAB X IDE ပေါင်းစည်းမှု
MPLAB IDE ပေါင်းစည်းခြင်း Compiler ကို MPLAB IDE မှ အသုံးပြုမည်ဆိုပါက၊ Compiler မထည့်သွင်းမီ MPLAB IDE ကို ထည့်သွင်းရပါမည်။
၆.၂။ ကုဒ်မျိုးဆက်
ကွဲပြားနိုင်သော အငြင်းအခုံစာရင်းများဖြင့် လုပ်ဆောင်ချက်များကို သတ်မှတ်ပေးသည့် အပိုင်း-ကျောက်ဆူးရွေးချယ်မှု (XC8-3045) ပရိုဂရမ်နှင့် -fsection-anchors ရွေးချယ်မှုတို့ကို အသုံးပြုသော ပရိုဂရမ်သည် အတွင်းပိုင်းစုစည်းမှုဆိုင်ရာ အမှားအယွင်းတစ်ခု ဖြစ်လာနိုင်သည်- ခွဲထွက်ခြင်း အမှား။
စင့်ခ်လုပ်ခြင်းမှ အမှားရှာပြင်ခြင်း (XC8-2948) linker relaxation optimizations သည် ညွှန်ကြားချက်များကို ကျုံ့သွားသောအခါ (ဥပမာample call to rcall ညွှန်ကြားချက်များ)) ကဏ္ဍတစ်ခုတွင် တစ်ခုထက်ပိုသော ကျုံ့သွားသည့် လုပ်ဆောင်မှုတစ်ခု ဖြစ်ပေါ်လာသည့်အခါ လိပ်စာမြေပုံဆွဲခြင်းအတွက် အရင်းအမြစ်လိုင်းသည် ထပ်တူကျနေမည်မဟုတ်ပေ။
အောက်ဖော်ပြပါ example၊ ဆွေမျိုးဖုန်းခေါ်ဆိုမှုများအတွက် စိတ်အေးလက်အေးအဆုံးသတ်သည့် foo သို့ ဖုန်းခေါ်ဆိုမှုနှစ်ခုရှိသည်။
PA မှတ်ဉာဏ်ခွဲဝေမှု မအောင်မြင်ခြင်း (XC8-2881) ပရိုဂရမ်သည် ရနိုင်သောနေရာနှင့် အံကိုက်ဖြစ်သင့်သော်လည်း ပရိုဂရမ်ကုဒ်အရွယ်အစားသည် စက်ရှိရရှိနိုင်သည့် ပရိုဂရမ်မှတ်ဉာဏ်ပမာဏနှင့် နီးကပ်နေချိန်တွင် ချိတ်ဆက်သူသည် မှတ်ဉာဏ်ခွဲဝေမှုဆိုင်ရာ အမှားအယွင်းများကို အစီရင်ခံနိုင်ပါသည်။
စမတ်ကျတဲ့ Smart-I0 (XC8-2872)၊ const-data-in-progmem အင်္ဂါရပ်ကို ပိတ်ထားပါက သို့မဟုတ် စက်တွင် ၎င်း၏ flash အားလုံးကို ဒေတာမှတ်ဉာဏ်တွင် ပုံဖော်ထားသည့် snprint f လုပ်ဆောင်ချက်အတွက် မှန်ကန်သော်လည်း ကွန်ပီလာ၏ စမတ်-io အင်္ဂါရပ်က ထုတ်ပေးမည်ဖြစ်သည်။
စမတ်ကျတဲ့ Smart-I0 (XC8-2869)၊ -flto နှင့် -fno-builtin ရွေးချယ်မှုများ နှစ်ခုလုံးကို အသုံးပြုသောအခါတွင် ကွန်ပလီလာ၏ smart-io အင်္ဂါရပ်သည် မှန်ကန်သော်လည်း သင့်လျော်သောကုဒ်ကို ထုတ်ပေးလိမ့်မည်။
အကောင်းဆုံးဖတ်ရန်-သီးသန့် ဒေတာနေရာချထားမှု (XC8-2849) ချိတ်ဆက်ပေးသူသည် လောလောဆယ်တွင် APPCODE နှင့် APPDATA မမ်မိုရီကဏ္ဍများ၊ သို့မဟုတ် မန်မိုရီမြေပုံရှိ [No-Read-While-Write အပိုင်းများကို သတိမပြုမိပါ။ ရလဒ်အနေဖြင့်၊ ချိတ်ဆက်အသုံးပြုသူသည် မသင့်လျော်သော မမ်မိုရီဧရိယာတွင် ဖတ်ရှုရန်-သီးသန့်ဒေတာကို ခွဲဝေပေးနိုင်မည့် အခွင့်အလမ်း အနည်းငယ်ရှိသည်။ const-data-in-progmem အင်္ဂါရပ်ကို ဖွင့်ထားလျှင် အထူးသဖြင့် const-data-in-config-mapped-progmem အင်္ဂါရပ်ကို ဖွင့်ထားလျှင် မှားယွင်းသောဒေတာ ဖြစ်နိုင်ခြေ တိုးလာပါသည်။ လိုအပ်ပါက ဤအင်္ဂါရပ်များကို ပိတ်ထားနိုင်ပါသည်။
အရာဝတ္ထု file ဆောင်ရွက်ဆဲအမိန့် (XC8-2863) အရာဝတ္ထု၌ အစဉ်လိုက် fileလုပ်ထုံးလုပ်နည်း abstraction optimizations (-mpa ရွေးချယ်မှု) ကို အသုံးပြုမှုအပေါ် အခြေခံ၍ ချိတ်ဆက်သူမှ ကွဲပြားနိုင်သည်။ ၎င်းသည် module များစွာရှိ အားနည်းသော လုပ်ဆောင်ချက်များကို သတ်မှတ်ပေးသည့် code ကိုသာ သက်ရောက်မှုရှိမည်ဖြစ်သည်။
အကြွင်းမဲ့ (XC8-2777) ဖြင့် ချိတ်ဆက်သူ အမှား RAM ၏အစတွင် လိပ်စာတစ်ခု၌ အရာဝတ္တုတစ်ခုကို အကြွင်းမဲ့ပြုလုပ်ပြီး နှင့် အစပြုမထားသော အရာဝတ္ထုများကိုလည်း သတ်မှတ်သတ်မှတ်လိုက်သောအခါ၊ ချိတ်ဆက်ကိရိယာအမှားတစ်ခု ဖြစ်ပေါ်နိုင်သည်။
တိုတောင်းသော နိုးထခြင်း ID များ (XC8-2775) ATA5700/2 စက်များအတွက်၊ PHIDO/1 မှတ်ပုံတင်မှုများကို 16 bits ကျယ်သည်ထက် 32 bits wide ဟုသာ သတ်မှတ်သည်။
သင်္ကေတ (XC8-2758) ခေါ်ဆိုသောအခါ လင့်ခ်သည် ပျက်စီးသွားသည် အရင်းအမြစ်ကုဒ်သည် -cc., –de f sym linker ရွေးစရာကို အသုံးပြု၍ သတ်မှတ်ထားသော သင်္ကေတတစ်ခုအား အရင်းအမြစ်ကုဒ်ကို ခေါ်သောအခါ လင့်ခ်ကိရိယာသည် ပျက်သွားနိုင်သည်။
မှားယွင်းသော ကနဦးသတ်မှတ်ခြင်း (XC8-2679) အဲဒီမှာ အချို့သော global/static byte-အရွယ်ရှိ အရာဝတ္ထုများအတွက် ကနဦးတန်ဖိုးများကို ဒေတာမှတ်ဉာဏ်တွင် ထားရှိသည့်နေရာနှင့် runtime တွင် variable များကို ဝင်ရောက်မည့်နေရာကြား ကွာဟချက်ဖြစ်သည်။
မကောင်းသောသွယ်ဝိုက်လုပ်ဆောင်ချက်ခေါ်ဆိုမှုများ (XC8-2628) အချို့သောအခြေအနေများတွင်၊ တည်ဆောက်မှုတစ်ခု၏တစ်စိတ်တစ်ပိုင်းအဖြစ် သိမ်းဆည်းထားသော လုပ်ဆောင်ချက်ညွှန်ပြမှုမှတစ်ဆင့် လုပ်ဆောင်သည့် ခေါ်ဆိုမှုများသည် ပျက်သွားနိုင်သည်။
strtof သည် ဆဋ္ဌမကိန်းဂဏန်းမျှောများအတွက် သုည (XC8-2626) ကို ပြန်ပေးသည် စာကြည့်တိုက်သည် strtof et al နှင့် scanf ( ) et al တို့ကို လုပ်ဆောင်ပေးသည် ၊ ထပ်ကိန်းတစ်ခုအား သုညသို့ မသတ်မှတ်ပေးသော ဆဋ္ဌမဂဏန်းမျှော့နံပါတ်တစ်ခုကို အမြဲတမ်းပြောင်းပေးမည်ဖြစ်သည်။ ဟောင်းအတွက်ample-
strtof (“Oxl”၊ &endptr);
value က 0 ကို ပြန်ပေးမှာ မဟုတ်ဘူး၊
မမှန်ကန်သော stack အကြံပေးစာတိုပေးပို့ခြင်း (XC8-2542၊ XC8-2541) အချို့သောအခြေအနေများတွင်၊ အသုံးပြုထားသော ထပ်တလဲလဲ သို့မဟုတ် မသတ်မှတ်ထားသော stack နှင့် ပတ်သက်သော stack advisor သတိပေးချက် (alloca()) ကိုအသုံးပြုခြင်းအားဖြင့် ဖြစ်နိုင်သည် ကို ထုတ်လွှတ်ခြင်းမရှိပါ။
ထပ်နေသည့် ကြားဖြတ်ကုဒ် (XC8-2421) ဖြင့် ပျက်ကွက်ခြင်း တစ်ခုထက်ပိုသော interrupt function သည် တူညီသောကိုယ်ထည်ရှိပါက compiler သည် interrupt function တစ်ခုအတွက် output ကို အခြားတစ်ခုသို့ ခေါ်နိုင်သည်။ ၎င်းသည် မလိုအပ်ဘဲ ခေါ်ဆိုထားသော မှတ်ပုံတင်များအားလုံးကို သိမ်းဆည်းခြင်းကို ဖြစ်ပေါ်စေမည်ဖြစ်ပြီး၊ လက်ရှိ ကြားဖြတ်ကိုင်တွယ်သူ၏ epilogue မလည်ပတ်မီတွင်ပင် ကြားဖြတ်အနှောက်အယှက်များကို ဖွင့်ထားမည်ဖြစ်ပြီး၊ ၎င်းသည် ကုဒ်ချို့ယွင်းမှုကို ဖြစ်စေနိုင်သည်။
မမှန်ကန်သော DFP လမ်းကြောင်း (XC8-2376) ဖြင့် အထွက်မကောင်းပါ မမှန်ကန်သော DFP လမ်းကြောင်းနှင့် 'သတ်မှတ်ချက်' ဖြင့် compiler ကို ခေါ်ဆိုပါက၊ file ရွေးချယ်ထားသော စက်ပစ္စည်းအတွက် ရှိနေပြီး၊ စုစည်းသူသည် ပျောက်ဆုံးနေသော စက်ပစ္စည်း မိသားစုထုပ်ကို အစီရင်ခံခြင်းမရှိပဲ 'spec' ကို ရွေးချယ်ခြင်းအစား၊ fileထို့နောက် မမှန်ကန်သော အထွက်ကို ဖြစ်ပေါ်စေနိုင်သည်။ 'သတ်မှတ်ချက်'၊ files သည် ဖြန့်ဝေထားသော DFPs များနှင့် အပ်ဒိတ်မဖြစ်နိုင်ဘဲ internal compiler testing တွင်သာ အသုံးပြုရန် ရည်ရွယ်ထားသည်။
မမ်မိုရီ ထပ်နေသည် (XC8-1966) ကွန်ပြူတာသည် လိပ်စာ ( _at ( ) ) နှင့် အပိုင်း ( ) သတ်မှတ်ချက်ကို အသုံးပြု၍ တူညီသောလိပ်စာသို့ ချိတ်ဆက်ထားသည့် လိပ်စာတစ်ခု၌ အကြွင်းမဲ့ပြုလုပ်ထားသော အရာဝတ္ထုများ၏ မှတ်ဉာဏ်ထပ်နေမှုကို မတွေ့ပါ။
စာကြည့်တိုက်လုပ်ဆောင်ချက်များနှင့် _memx (XC8-1763) တွင် ပျက်ကွက်ခြင်း memx လိပ်စာနေရာရှိ အငြင်းအခုံတစ်ခုဖြင့် libgcc float လုပ်ဆောင်ချက်များ ပျက်သွားနိုင်သည်။ ဒစ်ဂျစ်တိုက်လုပ်ရိုးလုပ်စဉ်များကို အချို့ C အော်ပရေတာများမှ ခေါ်ဝေါ်ကြသည်၊ ဥပမာ၊ ဥပမာampအောက်ဖော်ပြပါ ကုဒ်ကို ထိခိုက်သည် ။
regFloatVar > memxFloatVar သို့ ပြန်သွားရန်။
ကန့်သတ် libgcc အကောင်အထည်ဖော်မှု (AVRTC-731) ATTiny4/5/9/10/20/40 ထုတ်ကုန်များအတွက်၊ libgcc တွင် စံ C/Math စာကြည့်တိုက် အကောင်အထည်ဖော်မှုသည် အလွန်အကန့်အသတ် သို့မဟုတ် ရှိနေပါသည်။
ပရိုဂရမ်မှတ်ဉာဏ်ကန့်သတ်ချက်များ (AVRTC-732) 128 kb ထက်ကျော်လွန်သော ပရိုဂရမ်မှတ်ဉာဏ်ပုံများကို toolchain မှပံ့ပိုးပေးပါသည်။ သို့သော်၊ -mre lax option ကိုအသုံးပြုသောအခါ လိုအပ်သည့် function stubs များကိုထုတ်ပေးမည့်အစား၊ linker သည် ပြေလျော့ခြင်းမရှိပဲ ပျက်သွားခြင်းများနှင့် အထောက်အကူဖြစ်စေသော error message မပါဘဲ linker များ ပျက်သွားခြင်းများကို သိရှိထားသော ဥပမာများရှိပါသည်။
နေရာကန့်သတ်ချက်များ (AVRTC-733) အမည် အမည်ပေးထားသည့် လိပ်စာနေရာများကို toolchain မှ ပံ့ပိုးပေးထားပြီး၊ သုံးစွဲသူ၏ လမ်းညွှန်ကဏ္ဍတွင် ဖော်ပြထားသော ကန့်သတ်ချက်များကြောင့် အထူးအမျိုးအစား အရည်အချင်းစစ်များ။
အချိန်ဇုန်များ စာကြည့်တိုက်လုပ်ဆောင်ချက်များသည် GMT ဟုယူဆပြီး ဒေသစံတော်ချိန်ဇုန်များကို မပံ့ပိုးပါ၊ ထို့ကြောင့် ဒေသစံတော်ချိန် ( ) သည် ဥပမာအားဖြင့် gmtime ( ) ကဲ့သို့ အချိန်တူပြန်သွားပါမည်။ampလဲ့

file///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm

စာရွက်စာတမ်းများ / အရင်းအမြစ်များ

MICROCHIP MPLAB XC8 C Compiler ဖွံ့ဖြိုးတိုးတက်ရေးဆော့ဖ်ဝဲ [pdf] ပိုင်ရှင်လက်စွဲ
MPLAB XC8 C၊ MPLAB XC8 C Compiler Development Software၊ Compiler Development Software၊ Development Software၊ Software

ကိုးကား

မှတ်ချက်တစ်ခုချန်ထားပါ။

သင့်အီးမေးလ်လိပ်စာကို ထုတ်ပြန်မည်မဟုတ်ပါ။ လိုအပ်သောအကွက်များကို အမှတ်အသားပြုထားသည်။ *