MPLAB® XC8 C Compiler Version 2.41 AVR® MCU үчүн релиз эскертүүлөрү
Колдонуучунун колдонмосу
MPLAB XC8 C компиляторду өнүктүрүү программасы
БУЛ ДОКУМЕНТ МИКРОЧЫП AVR ТҮЗМӨЛӨРҮН БҮГҮНДӨГӨН MPLAB XC8 C ТҮЗҮҮЧҮГҮНӨ ТИЕШЕЛҮҮ МААНИЛҮҮ МААЛЫМАТТЫ БАР.
БУЛ ПРОГРАММАНЫ ИШТЕГЕНДИН АЛДЫНДА ОКУҢУЗ. ЭГЕР СИЗ 8 БИТ PIC ТҮЗМӨЛӨРҮ ҮЧҮН КОМПИЛЬЕРДИ КОЛДОНСОҢУЗ, PIC ДОКУМЕНТ ҮЧҮН MPLAB XC8 C КОМПИЛЬЕРИНИН ЧЫГАРЫЛУУ ЭСКЕРТҮҮЛӨРҮН КАРАҢЫЗ.
Бүттүview
1.1. Киришүү
Microchip MPLAB® XC8 C компиляторунун бул чыгарылышы бир нече жаңы функцияларды жана мүчүлүштүктөрдү оңдоолорду камтыйт.
1.2. Курулуш датасы
Бул компилятордун версиясынын расмий түзүлгөн күнү - 8-жылдын 2023-февралы.
1.3. Мурунку версия
Мурунку MPLAB XC8 C компилятор версиясы 2.40 3-жылдын 2022-июлунда курулган.
1.4. Функционалдык коопсуздук боюнча колдонмо
MPLAB XC компиляторлору үчүн Функционалдык коопсуздук боюнча колдонмо сиз функционалдык коопсуздук лицензиясын сатып алганыңызда документтер пакетинде жеткиликтүү.
1.5. Компоненттик лицензиялар жана версиялар
AVR MCUs куралдары үчүн MPLAB XC8 C компилятору GNU General Public License (GPL) астында жазылган жана таратылган, бул анын баштапкы коду эркин таратылып, жалпыга жеткиликтүү дегенди билдирет.
GNU GPL астындагы куралдардын баштапкы кодун Microchip'тен өзүнчө жүктөп алса болот webсайт. Сиз GNU GPLди орнотуу лицензияңыз.txt avr/doc каталогуңуздун подкаталогунда жайгашкан файлдан окуй аласыз. GPLдин негизин түзгөн принциптердин жалпы талкуусун бул жерден тапса болот.
Башкы файлдар, шилтемелөөчү скрипттер жана иштөө мезгилинин китепканалары үчүн берилген колдоо коду менчик код болуп саналат жана GPL астында камтылбайт.
Бул компилятор GCC 5.4.0 версиясынын, binutils 2.26 версиясынын ишке ашырылышы жана avr-libc 2.0.0 версиясын колдонот.
1.6. Системалык талаптар
MPLAB XC8 C компилятору жана ал пайдаланган лицензиялоочу программалык камсыздоо ар кандай операциялык системалар үчүн жеткиликтүү, анын ичинде төмөнкүлөрдүн 64-бит версиялары: Microsoft® Windows® 10 профессионалдык чыгарылыштары; Ubuntu® 18.04; жана macOS® 10.15.5. Windows үчүн экилик коддор кол коюлган. MacOS үчүн экилик коддуу кол коюлган жана нотариалдык жактан күбөлөндүрүлгөн. MPLAB XC Network License Server ар кандай 64-бит операциялык системалар үчүн жеткиликтүү, анын ичинде Microsoft Windows 10 жана андан жогору; Ubuntu 18.04 жана андан жогору; же macOS 10.15 жана андан жогору. Сервер ошондой эле Windows Server, Linux дистрибуцияларында, мисалы, Oracle® Enterprise Linux® жана Red Hate Enterprise Linux, ошондой эле колдоого алынган операциялык системалардын эски версияларында иштей алат. Бирок, MPLAB XC Network License Server бул операциялык системаларда сыналган эмес. MPLAB XC Network License Server тармак лицензиялары (SW006021-VM) үчүн виртуалдык машина лицензиясын колдонуу менен колдоого алынган OSтин Виртуалдык машиналарында иштетилиши мүмкүн. MPLAB XC Network Server бардык 32-бит версиялары 3.00 версиясынан баштап токтотулат.
Колдоого алынган түзмөктөр
Бул компилятор релиз учурунда бардык жеткиликтүү 8-бит AVR MCU түзмөктөрүн колдойт. Бардык колдоого алынган түзмөктөрдүн тизмесин көрүү үчүн (компилятордун каталогунда) караңыз. Бул файлдардын тизмеси да бар
avr_chipinfo.html док конфигурациясынын ар бир түзмөк үчүн бит орнотуулары.
1.7. Басылмалар жана лицензияны жаңыртуу
MPLAB XC8 компилятору лицензияланган (PRO) же лицензияланбаган (акысыз) продукт катары жандырылышы мүмкүн. Сиз компиляторду лицензиялоо үчүн активдештирүү ачкычын сатып алышыңыз керек. Лицензия Акысыз продуктка салыштырмалуу жогорку деңгээлдеги оптималдаштырууга мүмкүндүк берет. Лицензиясыз компилятор лицензиясыз чексиз иштетилет. MPLAB XC8 Functional Safety компилятору Microchipден сатылып алынган функционалдык коопсуздук лицензиясы менен иштетилиши керек. Бул лицензиясыз компилятор иштебейт. Иштетилгенден кийин, сиз каалаган оптималдаштыруу деңгээлин тандап, компилятордун бардык мүмкүнчүлүктөрүн колдоно аласыз. MPLAB XC Functional Safety Compiler бул релиз Network Server License колдойт.
Лицензия түрлөрү жана компиляторду лицензия менен орнотуу жөнүндө маалымат алуу үчүн MPLAB XC C Compilers (DS50002059) документин орнотуу жана лицензиялоону караңыз.
1.8. Орнотуу жана жандыруу
Ошондой эле бул компиляторго камтылган акыркы лицензия менеджери жөнүндө маанилүү маалымат алуу үчүн Миграция маселелери жана чектөөлөр бөлүмдөрүн караңыз.
MPLAB IDE колдонсоңуз, бул куралды орнотуудан мурун эң акыркы MPLAB X IDE 5.0 же андан кийинки версиясын орнотуңуз. Компиляторду орнотуудан мурун IDEден чыкыңыз. (Windows), (Linux) же (macOS) .exe .run .app компилятор орнотуучу тиркемесин иштетиңиз, мисалы, экрандагы көрсөтмөлөрдү аткарыңыз. XC8-1.00.11403-windows.exe демейки орнотуу каталогу сунушталат. Эгерде сиз Linux колдонуп жатсаңыз, компиляторду терминал аркылуу жана түпкү каттоо эсебинен орнотуу керек. Администратор артыкчылыктары бар macOS каттоо эсеби аркылуу орнотуңуз.
Иштетүү азыр орнотуу үчүн өзүнчө жүргүзүлөт. Көбүрөөк маалымат алуу үчүн MPLAB® XC C Compilers (DS52059) үчүн License Manager документин караңыз.
Эгерде сиз компиляторду баалоо лицензиясынын алкагында иштетүүнү тандасаңыз, баалоо мезгили аяктагандан кийин 14 күндүн ичинде сиз компиляция учурунда эскертүү аласыз. Эгер сиз HPA жазылууңуз аяктагандан кийин 14 күндүн ичинде болсоңуз, ошол эле эскертүү берилет.
XC Network License Server өзүнчө орнотуучу жана бир колдонуучу компиляторду орнотуучуга кирбейт.
XC License Manager азыр калкыма тармак лицензияларынын роумингин колдойт. Мобилдик колдонуучуларга багытталган бул функция калкып жүрүүчү лицензияга тармактан кыска убакытка чыгууга мүмкүндүк берет. Бул функцияны колдонуу менен, сиз тармактан ажыратып, дагы эле MPLAB XC компиляторду колдоно аласыз. Бул функция тууралуу көбүрөөк билүү үчүн XCLM орнотуусунун документ папкасын караңыз.
MPLAB X IDE роумингди визуалдык башкаруу үчүн Лицензиялар терезесин (Куралдар > Лицензиялар) камтыйт.
1.8.1. Орнотуу маселелерин чечүү
Эгерде сиз Windows операциялык системаларынын кайсынысы болбосун компиляторду орнотууда кыйынчылыктарга туш болсоңуз, төмөнкү сунуштарды колдонуп көрүңүз.
Орнотууну администратор катары иштетиңиз.
Орнотуучу колдонмонун уруксаттарын "Толук башкарууга" коюңуз. (Файлды оң баскыч менен чыкылдатыңыз, "Касиеттер", "Коопсуздук" өтмөгү, колдонуучуну тандаңыз, түзөтүңүз.)
Убактылуу папкага уруксаттарды "Толук башкарууга" коюңуз.
Убактылуу папканын жайгашкан жерин аныктоо үчүн Run буйругуна %temp% териңиз (Windows логотип баскычы + R).
Бул ошол каталогду көрсөткөн файл изилдөөчүнүн диалогун ачат жана ал папканын жолун аныктоого мүмкүндүк берет.
1.9. Compiler Documentation
Скриншотто көрсөтүлгөндөй, MPLAB X IDE панелиндеги көк жардам баскычын басканда, компилятордун колдонуучу колдонмолорун браузериңизде ачылуучу HTML барагынан ачууга болот.
Эгер сиз 8 биттик AVR максаттары үчүн куруп жатсаңыз, AVR® MCU үчүн MPLAB® XC8 C Compiler Колдонуучунун колдонмосунда ушул архитектурага тиешелүү компилятордун параметрлери жана функциялары жөнүндө маалымат камтылган.
1.10.Кардарларды колдоо
Микрочип бул компилятордун версиясына байланыштуу мүчүлүштүктөрдүн отчетторун, сунуштарын же комментарийлерин кабыл алат. Колдоо системасы аркылуу мүчүлүштүктөр тууралуу кабарларды же функция сурамдарын багыттаңыз.
Документация жаңыртуулары
MPLAB XC8 документациясынын онлайн жана заманбап версиялары үчүн Microchipтин онлайн техникалык документациясына кириңиз. webсайт. Бул чыгарылыштагы жаңы же жаңыртылган AVR документтери:
- AVR® MCU үчүн MPLAB® XC8 C Compiler Колдонуучунун колдонмосу (G ревизиясы)
- AVR® GNU Toolchain to MPLAB® XC8 Миграциялык колдонмо (ревизия А)
- Hexmate Колдонуучунун колдонмосу (В ревизиясы)
AVR® GNU Toolchain to MPLAB® XC8 Migration Guide булак кодуна өзгөртүүлөрдү жана сиз C негизиндеги долбоорду AVR 8-бит GNU Toolchain'ден Microchip MPLAB XC8 C Compiler'ге көчүрүүнү чечкенде талап кылынышы мүмкүн болгон куруу параметрлерин сүрөттөйт. Microchip Unified Standard Library Reference Guide микрочиптин бирдиктүү стандарттык китепканасы тарабынан аныкталган функциялардын жүрүм-турумун жана интерфейсин, ошондой эле китепкана түрлөрүн жана макросторду максаттуу пайдаланууну сүрөттөйт. Бул маалыматтын айрымдары мурда AVR® MCU үчүн MPLAB® XC8 C Compiler Колдонуучунун колдонмосунда камтылган. Түзмөккө тиешелүү китепкана маалыматы дагы эле бул компилятордук колдонмодо камтылган.
Эгер сиз 8 биттик түзмөктөр жана MPLAB XC8 C компилятору менен жаңыдан иштеп жатсаңыз, MPLAB® XC8 Колдонуучунун орнотулган инженерлер үчүн колдонмосу – AVR® MCUs (DS50003108) MPLAB X IDEде долбоорлорду түзүү жана сиздин компьютериңиз үчүн код жазуу боюнча маалыматка ээ. биринчи MPLAB XC8 C долбоору. Бул колдонмо азыр компилятор менен бөлүштүрүлөт.
Hexmate Колдонуучунун колдонмосу Hexmate өз алдынча тиркеме катары иштеткендер үчүн арналган.
Эмне жаңылык
Төмөндө компилятор азыр колдогон жаңы AVR максаттуу өзгөчөлүктөрү бар. Почтачалардагы версия номери кийинки функцияларды колдоо үчүн компилятордун биринчи версиясын көрсөтөт.
3.1. Версия 2.41
Bootrow колдоосу (XC8-3053) Компилятор HEX файлында 0x860000 ат.bootrow дареги менен каалаган бөлүмдөрдүн мазмунун жайгаштырат. Бул бөлүмдөр жүктөгүч үчүн гана жеткиликтүү болгон ачкычтарды жана башка коопсуз маалыматты сактоо үчүн иштелип чыккан BOOTROW эс тутуму үчүн колдонулат.
Артыкча кайтарууну жоюу (XC8-3048) Эми компилятор ыңгайлаштырылган шилтеме скрипттери колдонулганда, артка секирүү менен ret функцияларындагы ашыкча нускамаларды жок кылат. Бул мурда аткарылганга окшош оптималдаштыруу, бирок ал азыр бардык жетим бөлүмдөрдө аткарылат, жада калса ыңгайлаштырылган шилтеме скрипти колдонулуп, эң жакшы бөлүштүрүү схемасы ойнотулбаса да. Убакыттын түрүн өзгөртүү (XC8-2982, 2932) C99 стандарттык китепкана түрү time_t түрүнөн түргө өзгөртүлдү, ал кээ бир убакытка байланыштуу узун узун функцияларда код өлчөмүн жакшыртууну берет, мисалы. кол коюлбаган узун mktime()
Жаңы ноп (XC8-2946, 2945) Макроко кошулду. Бул макро жок NOP() киргизет чыгарууга nop операция инструкциясы.
XCLMге жаңыртуу (XC8-2944) Компилятор менен колдонулган лицензия менеджери жаңыртылган жана азыр компилятордун лицензиясынын чоо-жайын текшерүүдө көбүрөөк жооп берет.
Trampлинияланган чалуулар (XC8-2760) Эми компилятор узун формадагы чакыруу инструкцияларын кыскараак салыштырмалуу чалуулар менен алмаштырууну аткара алат, эгерде инструкциялардын салыштырмалуу формалары адатта алардын көздөгөн диапазонунун чегинен тышкары болсо. Мындай кырдаалда компилятор rcall инструкциясын чакыруу үчүн инструкциялар менен алмаштырууга аракет кылат, ал 'trampталап кылынган дарекке oline' аткарылышы, мисалыample: jmp
rcall tramp_foo ;фу деп аталды
…
rcall tramp_foo
…
tramp_foo:
jmp foo
Бул оптималдаштыруу, окшош программа агымын оптималдаштыруу менен бирге, -mrelax опциясы менен башкарылат.
3.2. Версия 2.40
Жаңы түзмөктү колдоо азыр төмөнкү AVR бөлүктөрү үчүн жеткиликтүү: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32EA64, AVR28, AVR64, AVR32, AVR64, AVR48EAXNUMX.
Жакшыртылган процедуралык абстракция Процедуралык абстракцияны (ПБ) оптималдаштыруу инструменти жакшыртылды, ошондуктан функцияны чакыруу инструкциясын (/ ) камтыган кодду баяндоо үчүн. Бул стек аргументтерди өткөрүү үчүн же функциядан кайтаруу маанисин алуу үчүн колдонулбаса гана rcчалуу болот. Стек өзгөрмөлүү аргументтердин тизмеси бар функцияны чакырганда же бул максат үчүн дайындалган регистрлерден көбүрөөк аргумент алган функцияны чакырганда колдонулат. Бул функцияны опцияны колдонуу менен өчүрүүгө болот, же процедуралык абстракциялоону объективдүү файл же функция үчүн толугу менен өчүрүп коюуга болот - жана тиешелүүлүгүнө жараша, же атрибутту (спецификаторду) функциялар менен тандалып колдонуу менен.
mno-pa-control-чалуулар -mno-pa-on-file -mno-pa-on-function nopa Код камтуу макросу Эгерде жарактуу опция __nopa __CODECOV -mcodecov көрсөтүлсө, компилятор эми макрону аныктайт.
Эстутум резервдөө опциясы Айдоочу эми AVR максаттарын курууда xc8-cc -mreserve=space@start:end опциясын кабыл алат. Бул параметр берилген эстутум диапазонун маалымат же программа эс тутум мейкиндигинде сактайт, бул шилтемени бул аймактагы кодду же объекттерди толтуруусуна жол бербейт. Акылдуураак акылдуу IO Smart IO функцияларына бир нече жакшыртуулар киргизилди, анын ичинде printf негизги кодуна жалпы оңдоолор киргизилди, %n конверсия спецификациясын көз карандысыз вариант катары кароо, талап боюнча vararg поп режимдерин байланыштыруу, иштетүү үчүн мүмкүн болсо кыскараак маалымат түрлөрүн колдонуу IO функциясынын аргументтери жана талаанын кеңдигинде жана тактыкта иштөөдө жалпы кодду факторинг. Бул олуттуу кодду жана маалыматтарды үнөмдөөгө, ошондой эле IOнун аткаруу ылдамдыгын жогорулатууга алып келиши мүмкүн.
3.3. Версия 2.39 (Функционалдык коопсуздук релизи)
Network Server License MPLAB XC8 Functional Safety Compiler бул релиз Network Server License колдойт.
3.4. Версия 2.36
Жок.
3.5. Версия 2.35
Жаңы түзмөктү колдоо төмөнкү AVR бөлүктөрү үчүн жеткиликтүү: ATTINY3224, ATTINY3226, ATTINY3227, AVR64DD14, AVR64DD20, AVR64DD28 жана AVR64DD32.
Жакшыртылган контекстти алмаштыруу Жаңы -mcall-isr-prologues опциясы үзгүлтүккө учуратуу функцияларын киргизүүдө регистрлерди кантип сактаарын жана үзгүлтүккө учуратуу тартиби аяктаганда ал регистрлер кантип калыбына келтирилерин өзгөртөт. Бул -mcall-prologues опциясына окшош иштейт, бирок үзгүлтүккө учуратуу функцияларына (ISRs) гана таасир этет.
Андан да жакшыртылган контекстти алмаштыруу Жаңы -mgas-isr-prologues опциясы майда үзгүлтүккө учуратуу кызмат көрсөтүүлөрү үчүн түзүлгөн контексттик которуштуруу кодун көзөмөлдөйт. Иштетилгенде, бул функция ассемблер реестрди колдонуу үчүн ISRди сканерлейт жана керек болсо, бул колдонулган регистрлерди гана сактайт.
Конфигурациялануучу флэш-карталоо AVR DA жана AVR DB үй-бүлөсүндөгү кээ бир түзмөктөрдө SFR (мисалы, FLMAP) бар, ал программа эстутумунун кайсы 32к бөлүгү маалымат эстутумуна түшүрүлөөрүн аныктайт. Жаңы - mconst-data-in-config-mapped-progmem опциясы шилтеме берүүчү бардык const-квалификациялуу маалыматтарды бир 32k бөлүмгө жайгаштыруу үчүн колдонулушу мүмкүн жана бул маалыматтар маалымат эстутумуна түшүрүлгөндүгүн камсыз кылуу үчүн тиешелүү SFR реестрин автоматтык түрдө инициализациялоосу үчүн колдонулушу мүмкүн. мейкиндик, анда ал натыйжалуураак жеткиликтүү болот.
Микрочиптин бирдиктүү стандарттык китепканалары Бардык MPLAB XC компиляторлору Микрочиптин бирдиктүү стандарттык китепканасын бөлүшүшөт, ал эми MPLAB XC8 бул релизинде жеткиликтүү. AVO MCU үчүн MPLA# XC8 C Compiler Колдонуучунун колдонмосу мындан ары бул стандарттык функциялар үчүн документтерди камтыйт. Бул маалыматты эми Microchip Unified Standard Library Reference Guideнен тапса болот. Мурда avr-libc тарабынан аныкталган кээ бир функциялар мындан ары жеткиликтүү эмес экенин эске алыңыз. (Lila функциясын караңыз.)
Smart I0 Жаңы бирдиктүү китепканалардын бир бөлүгү катары printf жана scanf үй-бүлөлөрүндөгү I0 функциялары азыр бул функциялардын программада кандайча колдонулушунун негизинде ар бир түзүүдө жекече түзүлөт. Бул программа тарабынан колдонулган ресурстарды олуттуу кыскарта алат.
Smart ICI жардам опциясы Акылдуу I0 функцияларына чалууларды талдоодо (мисалы, print f () же scanf ()), компилятор формат сабынан дайыма аныктай албайт же аргументтерден чалууга талап кылынган конверсия спецификаторлорун чыгара албайт. Мурда, компилятор ар дайым эч кандай божомолдорду жасачу эмес жана программанын акыркы сүрөтү менен толук иштеген 10 функциянын байланышын камсыздайт. Жаңы – msmart-io-format=fmt опциясы кошулду, андыктан компилятор анын ордуна акылдуу I0 функциялары тарабынан колдонулган конверсия спецификаторлорунун колдонуучусу тарабынан маалымдалып, өтө узун 10 процедуранын байланыштырылышына жол бербейт. (Көбүрөөк маалымат үчүн smart-io-формат опциясын караңыз.)
Ыңгайлаштырылган бөлүмдөрдү жайгаштыруу Мурда -W1, –section-start опциясы шилтеме берүүчү скрипт ошол эле аталыштагы чыгаруу бөлүмүн аныктаганда гана көрсөтүлгөн бөлүмдү суралган дарекке жайгаштырчу. Андай болбогондо, бөлүм шилтеме берүүчү тандаган дарекке жайгаштырылып, параметр негизинен этибарга алынбай калган. Эми параметр шилтеме берүүчү скрипт бөлүмдү аныктабаса дагы, бардык ыңгайлаштырылган бөлүмдөр үчүн урматталат. Бирок, стандарттык бөлүмдөр үчүн, мисалы, . текст, . bss же . маалыматтар болсо, эң туура бөлүштүргүч дагы эле алардын жайгаштырылышын толук көзөмөлдөйт жана параметр эч кандай таасир этпейт. Колдонуучунун колдонмосунда сүрөттөлгөндөй -ton, -Tsection=addr опциясын колдонуңуз.
3.6. Версия 2.32
Стек жетектөөчүсү PRO компилятордун лицензиясы менен жеткиликтүү, компилятордун стек багыттоо өзгөчөлүгү программа тарабынан колдонулган ар кандай стектин максималдуу тереңдигин баалоо үчүн колдонулушу мүмкүн. Ал программанын чалуу графигин түзөт жана талдайт, ар бир функциянын стектин колдонулушун аныктайт жана программа тарабынан колдонулган стектердин тереңдигин аныктоого боло турган отчетту түзөт. Бул өзгөчөлүк -mchp-stack-usage буйрук сабы опциясы аркылуу иштетилген. Стекти колдонуунун корутундусу аткарылгандан кийин басылып чыгат. Картада деталдуу стек отчету бар file, бул кадимки жол менен суралышы мүмкүн.
Жаңы түзмөктү колдоо төмөнкү AVR бөлүктөрү үчүн жеткиликтүү: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB, AVR28DB64 жана AVR32. Төмөнкү AVR бөлүктөрү үчүн артка кайтарылган түзмөк колдоосу мындан ары жеткиликтүү эмес: AVR32DA48, AVR16DA28 жана AVR16DA32.
3.7. Версия 2.31
Жок.
3.8. Версия 2.30
Маалыматтарды инициализациялоону болтурбоо үчүн жаңы опция Жаңы -mno-data-init драйвери опциясы маалыматтарды инициализациялоону жана BSS бөлүмдөрүн тазалоону алдын алат. Бул do copy маалыматтарынын чыгышын басуу менен иштейт жана монтажда ачык BSS белгилерин жасайт files, бул өз кезегинде байланыштыруучу тарабынан ошол тартиптердин киргизилишине жол бербейт.
Өркүндөтүлгөн оптималдаштыруу Оптималдаштыруунун бир катар жакшыртуулары жасалды, анын ичинде ашыкча кайтаруу нускамаларын алып салуу, эгер бит болсо өткөрүп жиберүү инструкциясынан кийинки кээ бир секирүүлөрдү алып салуу жана жакшыртылган процедуралык абстракция жана бул процессти кайталоо мүмкүнчүлүгү. Кошумча опциялар азыр бул оптималдаштыруулардын айрымдарын көзөмөлдөө үчүн жеткиликтүү, атап айтканда -f бөлүм-анкерлери, бул бир символго салыштырмалуу статикалык объекттерге кирүүгө мүмкүндүк берет; -mpa-iterations=n, бул процедуралык абстракция итерацияларынын санын демейки 2ден өзгөртүүгө мүмкүндүк берет; жана, -mpa-callcost-shortcall, ал дагы агрессивдүү процедуралык абстракцияны аткарат, шилтеме берүүчү узак чалууларды эс алат деген үмүттө. Бул акыркы параметр, эгерде негизги божомолдор аткарылбаса, коддун өлчөмүн көбөйтүүгө болот.
Жаңы түзмөктү колдоо төмөнкү AVR бөлүктөрү үчүн жеткиликтүү: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DA28, AVR128DA32, AVR128 AVR48, AVR128, AVR64, AVR5272, AVR5790 5790DB5791. Төмөнкү AVR бөлүктөрү үчүн артка тартылган түзмөктү колдоо кызматы мындан ары жеткиликсиз: ATA5795, ATA6285, ATA6286N, ATA6612, ATA6613, ATA6614, ATA6616, ATA6617C, ATA664251C, ATAXNUMXQ, ATAXNUMXQ, ATAXNUMX.
3.9. Версия 2.29 (Функционалдык коопсуздук релизи)
Header file компилятордун орнотулган жабдыктары үчүн Компилятор MISRA сыяктуу тил спецификацияларына шайкеш келишин камсыздоо үчүн, баш fileтарабынан автоматтык түрдө кошулат , жаңыртылган. Бул темада builtin_avr_nop ( ) жана builtin avr delay_cycles () сыяктуу бардык орнотулган функциялардын прототиптери камтылган. Кээ бир орнотулган жабдыктар MISRAга туура келбеши мүмкүн; компилятордун буйрук сабына defineXCSTRICT_MISRA кошуу менен аларды өткөрүп жиберсе болот. Орнотулган түзүлүштөр жана алардын декларациялары такталган тууралык түрлөрүн колдонуу үчүн жаңыртылган.
3.10. Версия 2.20
Жаңы түзмөктү колдоо төмөнкү AVR бөлүктөрү үчүн жеткиликтүү: ATTINY1624, ATTINY1626 жана ATTINY1627.
Жакшыраак эң туура бөлүштүрүү Компилятордогу эң жакшы туура бөлүштүргүч (BFA) жакшыртылган, ошондуктан бөлүмдөр жакшыраак оптималдаштырууга мүмкүндүк берүүчү тартипте бөлүштүрүлгөн. BFA азыр аталган дарек мейкиндиктерин колдойт жана маалыматтарды инициализациялоону жакшыраак иштетет.
Жакшыртылган процедуралык абстракция Процедуралык абстракцияны оптималдаштыруу азыр көбүрөөк код ырааттуулугунда аткарылды. Бул оптималдаштыруу коддун көлөмүн көбөйтүшү мүмкүн болгон мурунку жагдайлар оптималдаштыруу кодун шилтемечинин таштанды чогултуу процессинен кабардар кылуу менен чечилген.
AVR Assembler жок AVR Assembler мындан ары бул бөлүштүрүүгө кошулбайт.
3.11. Версия 2.19 (Функционалдык коопсуздук релизи)
Жок.
3.12. Версия 2.10
Кодду камтуу Бул чыгарылыш долбоордун баштапкы коду канчалык деңгээлде аткарылганын талдоону жеңилдеткен кодду камтуу өзгөчөлүгүн камтыйт. Аны иштетүү үчүн -mcodecov=ram параметрин колдонуңуз. Аппараттык жабдыңызда программа аткарылгандан кийин, коддун камтуу маалыматы аппаратта чогултулат жана бул MPLAB X IDE тарабынан код камтуу плагини аркылуу өткөрүлүп берилиши жана көрсөтүлүшү мүмкүн. Бул плагин жөнүндө маалымат алуу үчүн IDE документтерин караңыз. #pragma nocodecov кийинки функцияларды камтуу талдоосунан чыгарып салуу үчүн колдонулушу мүмкүн. Идеалында прагма башында кошулушу керек file муну толугу менен жокко чыгаруу үчүн file камтуу талдоосунан. Же болбосо, _attribute_ ( (nocodecov) ) камтуу талдоосунан белгилүү бир функцияны алып салуу үчүн колдонулушу мүмкүн.
Түзмөктүн сүрөттөмөсү files Жаңы аппарат file avr_chipinfo деп аталат. html компилятордун бөлүштүрүлүшүнүн docs каталогунда жайгашкан. Бул file компилятор тарабынан колдоого алынган бардык түзмөктөрдүн тизмеси. Түзмөктүн атын чыкылдатыңыз жана ал ошол түзмөк үчүн бардык уруксат берилген конфигурациянын бит жөндөөлөрүн/маанисин көрсөтүүчү баракты ачат, мисалы,amples. Процедуралык абстракция
Процедуралык абстракцияны оптималдаштыруу, ал блоктун чыгарылып алынган көчүрмөсүнө чакыруулар менен монтаждык коддун жалпы блокторун алмаштыруучу компиляторго кошулду. Булар өзүнчө тиркеме аркылуу аткарылат, аны компилятор 2, 3 же s деңгээлдеги оптималдаштырууларды тандоодо автоматтык түрдө чакырат. Бул оптималдаштыруу коддун өлчөмүн азайтат, бирок алар аткаруу ылдамдыгын жана коддун мүчүлүштүктөрүн оңдоону азайтышы мүмкүн. Процедуралык абстракцияны -mno-pa опциясын колдонуу менен оптималдаштыруунун жогорку деңгээлдеринде өчүрсө болот же -mpa аркылуу төмөнкү оптималдаштыруу деңгээлдеринде (лицензияңызга жараша) иштетилиши мүмкүн. Ал объект үчүн өчүрүлүшү мүмкүн file колдонуу -mno-pa-on-file=fileаты, же -mno-pa-on-function=функциясы аркылуу функция үчүн өчүрүлгөн. Булак кодуңуздун ичинде процедуралык абстракцияны функциянын аныктамасы менен атрибутун ( (nopa) ) колдонуу менен же атрибутка ( ( (nopa, noinline) ) чейин кеңейип, функцияны киргизүүнүн ишке ашуусуна жол бербеген nopa колдонуу менен иштен чыгарса болот. жана ички коддун абстракциясы бар.
Прагмада кулпулоо битинин колдоосу #pragma конфигурациясын эми AVR кулпу биттерин, ошондой эле башка конфигурация биттерин көрсөтүү үчүн колдонсо болот. avr_chipinfo текшериңиз. html file (жогоруда айтылган) бул прагма менен колдонуу үчүн жөндөө/баа жуптары үчүн. Жаңы түзмөктү колдоо төмөнкү бөлүктөр үчүн жеткиликтүү: AVR28DAl28, AVR64DAl28, AVR32DA 128 жана AVR48DA 128.
3.13. Версия 2.05
Бул компилятордун жана лицензия менеджеринин macOS версиясы эми 64 биттик колдонмо болуп саналат. Бул компилятордун MacOSтун акыркы версияларында эскертүүсүз орнотулуп, иштешин камсыздайт.
Программанын эсиндеги Const объекттери. Эми компилятор RAMда жайгаштыруунун ордуна const-квалификациялуу объекттерди программанын Flash эс тутумуна жайгаштыра алат. Компилятор cons t-квалификациялуу глобалдык маалыматтар программанын флеш эсинде сакталышы жана бул маалыматтарга тиешелүү программалык эстутум инструкциялары аркылуу түз жана кыйыр түрдө кирүүгө болот деп өзгөртүлгөн. Бул жаңы функция демейки боюнча иштетилген, бирок -mno-const-data-in-progmem опциясын колдонуу менен өчүрүүгө болот. avrxmega3 жана avrtiny архитектуралары үчүн бул функция талап кылынбайт жана ар дайым өчүрүлөт, анткени программанын эс тутуму бул түзмөктөр үчүн маалымат даректер мейкиндигине түшүрүлгөн.
Бул компилятордун акысыз стандарттуу Лицензияланбаган (акысыз) версиялары эми 2-деңгээлге чейин оптималдаштырууга мүмкүндүк берет. Бул стандарттык лицензияны колдонуу менен мурда мүмкүн болгон нерсеге окшош болбосо да, чыгарууга мүмкүндүк берет.
Кош келиңиз AVRASM2 2 биттик түзүлүштөр үчүн AVRASM8 ассемблери азыр XC8 компиляторду орнотуучуга киргизилген. Бул ассемблер XC8 компилятору тарабынан колдонулбайт, бирок кол менен жазылган монтаж булагына негизделген долбоорлор үчүн жеткиликтүү.
Жаңы түзмөктү колдоо төмөнкү бөлүктөр үчүн жеткиликтүү: ATMEGA1608, ATMEGA1609, ATMEGA808 жана ATMEGA809.
3.14. Версия 2.00
Жогорку деңгээлдеги драйвер xc8-cc деп аталган жаңы драйвер азыр мурунку avr-gcc драйверинин жана xc8 драйверинин үстүндө отурат жана ал максаттуу түзүлүштү тандоонун негизинде тиешелүү компиляторду чакыра алат. Бул драйвер GCC стилиндеги варианттарды кабыл алат, алар аткарылып жаткан компиляторго которулат же ага өткөрүлүп берилет. Бул драйвер каалаган AVR же PIC буталары менен окшош семантикалуу варианттардын окшош топтомун колдонууга мүмкүндүк берет жана ошондуктан компиляторду чакыруунун сунушталган жолу болуп саналат. Зарыл болсо, эски avr-gcc драйверин мурунку компилятор версияларында кабыл алган эски стилдеги опцияларды колдонуу менен түз чакырса болот.
Common C Interface Бул компилятор эми MPLAB Common C Interface менен шайкеш келиши мүмкүн, бул баштапкы кодду бардык MPLAB XC компиляторлору аркылуу оңой көчүрүүгө мүмкүндүк берет. -mext=cci параметри көптөгөн тил кеңейтүүлөрү үчүн альтернативдүү синтаксисти иштетип, бул функцияны сурайт.
Жаңы китепканачы айдоочусу Жаңы китепканачы айдоочу мурунку PIC китепканачысынын жана AVR avr-ar китепканасынын жогору жагында жайгашкан. Бул драйвер GCC-архивдөөчү стилиндеги варианттарды кабыл алат, алар аткарылып жаткан китепканачыга которулат же ага өткөрүлүп берилет. Жаңы драйвер кандайдыр бир PIC же AVR китепканасын түзүү же манипуляциялоо үчүн окшош семантикага ээ болгон окшош варианттардын топтомун колдонууга мүмкүндүк берет file Ошентип, китепканачыны чакыруунун сунушталган жолу. Эгерде эски долбоорлор үчүн талап кылынса, мурунку китепканачыны түз эле мурунку компилятордун версияларында кабыл алган эски стилдеги варианттарды колдонуу менен чакырса болот.
Миграция маселелери
Төмөнкү функциялар азыр компилятор тарабынан башкача иштетилет. Кодду ушул компилятордун версиясына көчүрсө, бул өзгөртүүлөр баштапкы кодуңузга өзгөртүүлөрдү талап кылышы мүмкүн. Почтачалардагы версиянын номери кийинки өзгөртүүлөрдү колдоо үчүн компилятордун биринчи версиясын көрсөтөт.
4.1. Версия 2.41
Так эмес fma функциялары алынып салынды (XC8-2913) C99 стандарттык китепканасы fma 0 -үй-бүлө функциялары ( ) бир тегеректөө үчүн чексиз тактык менен көбөйтүү-кошууну эсептеген эмес, тескерисинче, ар бир операцияда тегеректөө каталарын топтогон. Бул функциялар берилген китепканадан алынып салынды.
4.2. Версия 2.40
Жок.
4.3. Версия 2.39 (Функционалдык коопсуздук релизи)
Жок.
4.4. Версия 2.36 Жок.
4.5. Версия 2.35
Сапка негиздер менен иштөө (XC8-2420) Башка XC компиляторлору менен ырааттуулукту камсыздоо үчүн, strtol () ж.б. сыяктуу XC8 string-to функциялары, эгерде көрсөтүлгөн база 36дан чоң болсо, мындан ары киргизүү сапты түрлөөгө аракет кылбайт. жана анын ордуна errno EINVAL деп коет. С стандарты бул базалык мааниден ашканда функциялардын жүрүм-турумун аныктабайт.
Ылдамдыкты туура эмес оптималдаштыруу 3-деңгээлдеги оптималдаштырууну тандоодо процедуралык абстракцияны оптималдаштыруу иштетилип жаткан (-03). Бул оптималдаштыруу коддун ылдамдыгынын эсебинен коддун өлчөмүн азайтат, андыктан аткарылбашы керек болчу. Бул оптималдаштыруу деңгээлин колдонгон долбоорлор бул чыгарылыш менен курулганда коддун өлчөмү жана аткаруу ылдамдыгы боюнча айырмачылыктарды көрүшү мүмкүн.
Китепкананын иштеши Көптөгөн стандарттык C китепкана функцияларынын коду азыр Microchipтин Бирдиктүү Стандарттык китепканасынан алынган, ал кээ бир жагдайларда мурунку avr-libc китепканасы бергенге салыштырмалуу башкача жүрүм-турумун көрсөтүшү мүмкүн. Мисалы үчүнample, форматталганды күйгүзүү үчүн 1printf flt китепканасына (-1printf_flt опциясы) шилтеме кылуунун кереги жок I0 float форматынын спецификаторлорун колдоо. акылдуу I0 Микрочиптин бирдиктүү стандарттык китепканасынын өзгөчөлүктөрү бул параметрди ашыкча кылат. Кошумчалай кетсек, флеште const саптарында иштеген сап жана эстутум функциялары (мисалы, strcpy_P ( ) ж.б.) үчүн _P суффикстүү процедураларды колдонуунун кереги жок. Стандарттык C процедуралары (мисалы, strcpy ) программанын эс тутумундагы const-дата-дата-функциясы иштетилгенде, мындай маалыматтар менен туура иштейт.
4.6. Версия 2.32
Жок.
4.7. Версия 2.31
Жок.
4.8. Версия 2.30
Жок.
4.1. Версия 2.29 (Функционалдык коопсуздук релизи)
Жок.
4.2. Версия 2.20
DFP калыбы өзгөртүлдү Эми компилятор DFP (Түзмөктүн үй-бүлөлүк топтомдору) колдонгон башка макетти болжолдойт. Бул эски DFP бул чыгарылыш менен иштебей калышы мүмкүн жана эски компиляторлор эң акыркы DFPдерди колдоно албай калат дегенди билдирет.
4.3. Версия 2.19 (Функционалдык коопсуздук релизи)
Жок.
4.4. Версия 2.10
Жок
4.5. Версия 2.05
Программанын эс тутумундагы Const объекттери Демейки боюнча, const-квалификациялуу объекттер программанын эсине жайгаштырыларын жана аларга кирерин эске алыңыз (түс сүрөттөлгөндөй). Бул сиздин долбоордун көлөмүнө жана аткаруу ылдамдыгына таасир этет, бирок RAM колдонууну азайтышы керек. Бул функция, эгерде керек болсо, -mnoconst-data-in-progmem опциясын колдонуу менен өчүрүлүшү мүмкүн.
4.6. Версия 2.00
Конфигурация сактагычтары Эми прибор конфигурациясынын сактагычтарын конфигурациялоо прагмасы аркылуу программалаштырууга болот, андан кийин сактагычтын абалын көрсөтүү үчүн маани жуптары орнотулат, мис.
#pragma конфигурация WDTON = SET
#pragma config BODLEVEL = BODLEVEL_4V3
Абсолюттук объекттер жана функциялар Объекттерди жана функцияларды эми CCI (дарек) спецификатору аркылуу эс тутумдун белгилүү дарегине жайгаштырса болот, мисалы,ampле:
#киргизүү
int foobar_at(0x800100);
char __at(0x250) getID(int ofset) {…}
Бул аныктагычка аргумент болушу керек биринчи байт же инструкция жайгаштырыла турган даректи билдирген константа. RAM даректери 0x800000 офсеттин жардамы менен көрсөтүлөт. Бул функцияны колдонуу үчүн CCIди иштетиңиз.
Жаңы үзүлүү функциясынын синтаксиси Компилятор эми CCI _interrupt (num) спецификаторун кабыл алып, C функциялары үзгүлтүктөрдү иштеткичтер экенин көрсөтөт. Спецификатору үзгүлтүккө учураган номерди алат, мисалыampле:
#киргизүү
void __ үзгүлтүккө учуратуу (SPI_STC_vect_num) spi_Isr (жараксыз) { … }
Fixed Issues
Төмөнкүлөр түзүүчүгө киргизилген оңдоолор. Булар түзүлгөн коддогу мүчүлүштүктөрдү оңдоп же компилятордун иштөөсүн колдонуучунун көрсөтмөсүндө каралган же көрсөтүлгөнгө өзгөртүшү мүмкүн. Почтачалардагы версиянын номери кийинки маселелер боюнча оңдоолорду камтыган компилятордун биринчи версиясын көрсөтөт. Аталышындагы кашаадагы энбелги(лер) бул маселенин байкоо базасындагы идентификациясы. Колдоо кызматына кайрылуу керек болсо, булар пайдалуу болушу мүмкүн.
Түзмөккө тиешелүү кээ бир маселелер түзмөк менен байланышкан Device Family Pack (DFP) менен оңдолгонуна көңүл буруңуз. DFPге киргизилген өзгөртүүлөр жана эң акыркы топтомдорду жүктөп алуу үчүн MPLAB топтомунун менеджерин караңыз.
5.1. Версия 2.41
Ventura (XC8-3088) Dongles боюнча Dongle маселелер компиляторду лицензиялоо үчүн колдонулган маалыматтар macOS Ventura хостторунда туура окулбай калышы мүмкүн, натыйжада лицензиялоо иштебей калышы мүмкүн. XCLM лицензия менеджерине өзгөртүүлөр бул маселени чечет.
Эстутумду туура эмес бөлүштүрүү (XC8-2925) Стандарттык китепкана эс тутумун башкаруу функцияларын (malloc () ж.б.) колдонуу менен эс тутумдун SIZE_MAX байттарын (же ага жакын маанини) бөлүштүрүү аракети туура эмес ишке ашты. Жөнөкөй динамикалык эстутумду бөлүштүрүүнү ишке ашырууну колдонууда суралган блокко кошумча байт керек экендигин эске алган эмес. Эми NULL көрсөткүчү кайтарылып берилет жана мындай кырдаалдарда ката ENOMEMге коюлат.
Так эмес fma функциялары өчүрүлдү (XC8-2913) C99 стандарттык китепкана fma ( ) -үй-бүлө функциялары ( ) бир тегеректөө үчүн чексиз тактык менен көбөйтүү-кошууну эсептеген эмес, тескерисинче, ар бир операцияда тегеректөө каталарын топтогон. Бул функциялар берилген китепканадан алынып салынды.
Сапты конвертациялоо туура эмес (XC8-2921, XC8-2652) strtod Cr аркылуу конвертациялоо үчүн "предметтик ырааттуулук" экспоненциалдык форматта калкыма чекиттүү санды камтыса жана e/E символунан кийин күтүүсүз белги болгондо, endptr берилген жерде ага дарек дайындалган: ал e/E символунан кийинки символду көрсөтсө, ал эми e/E символунун өзүн көрсөтүшү керек болчу, анткени ал өзгөртүлбөй калган. Мисалы үчүнample, strtod (“100exx”, &ep) 100.00 кайтарып, epти саптын “exx” бөлүгүн көрсөтүүгө коюу керек, ал эми функция туура маанини кайтарып жаткан, бирок epти саптын “xx” бөлүгүн көрсөтүү үчүн койгон. .
5.2. Версия 2.40
Өтө эркин (XCS-2876) -mrelax опциясын колдонууда, компилятор кээ бир бөлүмдөрдү чогуу бөлгөн жок, натыйжада коддун өлчөмү азыраак оптималдуу болду. Бул жаңы 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 функциясы азыр толугу менен өчүрүлгөн.
DFP NVMCTRL (XC8-2848) туура кирүү үчүн өзгөрөт AVR64EA түзмөктөрү тарабынан колдонулган ишке киргизүү коду NVMCTRL реестри Конфигурацияны өзгөртүүдөн коргоо (CCP) астында экенин жана I0 SFRди const-data-in-configmapped-progmem колдонгон бетке коё албаганын эске алган эмес. компилятор өзгөчөлүгү. AVR-Ex_DFP 2.2.55 версиясында жасалган өзгөртүүлөр ишке киргизүү кодун бул реестрге туура жазууга мүмкүндүк берет.
Качылышы керек болгон DFP өзгөрүүлөр жарк-карталоо (XC8-2847) AVR128DA28/32/48/64 Силикон катасында (D580000882) билдирилген флэш-карта түзмөгүнүн өзгөчөлүгүнө байланыштуу көйгөйдү чечүү жолу ишке ашырылды. const-data-in-config-mapped-progmem компилятор өзгөчөлүгү демейки боюнча жабыр тарткан түзмөктөр үчүн колдонулбайт жана бул өзгөртүү AVR-Dx_DFP 2.2.160 версиясында пайда болот.
sinhf же coshf менен куруу катасы (XC8-2834) sinhf () же coshf () китепкана функцияларын колдонуу аракети аныкталбаган шилтемени сүрөттөгөн шилтеме катасына алып келди. Шилтемеленген жетишпеген функция эми компилятордун бөлүштүрүлүшүнө кошулду.
Nopa менен каталарды түзүү (XC,8-2833) asm ( ) аркылуу ассемблер аты көрсөтүлгөн функция менен nopa атрибутун колдонуу ассемблерден ката кабарларын пайда кылды. Бул айкалыштыруу мүмкүн эмес.
Көрсөткүч аргументтери менен вариадик функциянын катасы (XC8-2755, XC8-2731) Аргументтердин өзгөрүлмө саны бар функциялар 24 биттик (memx түрү) көрсөткүчтөр const-data-in-progmem функциясы иштетилгенде өзгөрмө аргументтердин тизмесинде өткөрүлүшүн күтөт. Маалымат эстутумунун көрсөткүчү болгон аргументтер 16 биттик объекттер катары берилип, акыры окулганда коддун бузулушуна алып келген. Constdata-in-progmem өзгөчөлүгү иштетилгенде, бардык 16-бит көрсөткүчтөрдүн аргументтери эми 24-бит көрсөткүчтөрүнө айландырылат.
strtoxxx китепкана функциялары иштебей жатат (XC8-2620) const-data-in-progmem функциясы иштетилгенде, strtoxxx китепкана функцияларындагы endptr параметри программанын эсинде жок булак сап аргументтери үчүн туура жаңыртылган эмес.
Жараксыз трансляциялар үчүн эскертүүлөр (XC8-2612) Эгерде const-in-progmem өзгөчөлүгү иштетилсе жана саптын литералынын дареги так маалымат дарек мейкиндигине чыгарылса (const квалификаторун таштап), компилятор ката чыгарат.ample, (uint 8_t *) "Салам дүйнө!". Эгер const маалымат көрсөткүчү дайындардын дарек мейкиндигине ачык түрдө чыгарылганда дарек жараксыз болушу мүмкүн болсо, эскертүү көйгөй болуп саналат.
Башталбаган const объекттерин жайгаштыруу (XC8-2408) Башталбаган const жана const туруксуз объекттери программалык эстутумда алардын программалык эс тутумунун баарын же бир бөлүгүн берилиштердин дарек мейкиндигине салыштырган түзмөктөрдө жайгаштырылбай калган. Бул түзүлүштөр үчүн мындай объекттер эми программалык эстутумга жайгаштырылып, алардын иштеши башка түзүлүштөр менен шайкеш келет.
5.3. Версия 2.39 (Функционалдык коопсуздук релизи)
Жок.
5.4. Версия 2.36
Кечигип жатканда ката (XC8-2774) Демейки Эркин режимди оптималдаштыруудагы майда өзгөрүүлөр операнд туюнтмаларынын кечиктирилген орнотулган функцияларга тынымсыз бүктөлүшүнө жол бербей, натыйжада алар туруктуу эместер катары каралып, катаны козгоду: avr in delay_cycles компиляция убактысынын бүтүн сан константасын күтөт.
5.5. Версия 2.35
_at (XC8-2653) менен катар бөлүштүрүү Бир эле аталыштагы бөлүмдө бир нече объектилердин орундарын жанаша бөлүштүрүү жана _at ( ) колдонуу менен туура иштеген жок. Мисалы үчүнampле:
const char arr1[] __attribute__((бөлүм(".mysec"))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((бөлүм(".mysec"))) = {0xEF, 0xFE};
arr2ден кийин дароо arr1 жайгаштырылышы керек болчу.
Бөлүмдүн баштоо даректерин көрсөтүү (XC8-2650) The -W1, –секция-старт опциясы көрсөтүлгөн старт дарегине бөлүмдөрдү жайгаштырбай койду. Бул маселе каалаган ыңгайлаштырылган бөлүмдөр үчүн чечилди; бирок ал кандайдыр бир стандарттык бөлүмдөр үчүн иштебейт, мисалы . текст же . bss, ал -W1, -T опциясын колдонуу менен коюлушу керек.
Эс алуу учурунда байланыштыргыч бузулат (XC8-2647) -mrelax оптималдаштыруу иштетилгенде жана жеткиликтүү эстутумга туура келбеген код же маалымат бөлүмдөрү болгондо, шилтеме берүүчү кыйрады. Эми, мындай шартта, анын ордуна ката билдирүүлөрү чыгарылат.
Эч кандай артка кайтуу (XC8-2646) The –nofallback опциясы туура эмес ишке ашырылган жана документтештирилген эмес. Эми бул компилятор лицензиясыз болсо, компилятор кайра төмөн оптималдаштыруу жөндөөсүнө түшпөсүн жана анын ордуна ката чыгарышын камсыз кылуу үчүн тандалышы мүмкүн.
Ылдамдыкты туура эмес оптималдаштыруу (X03-2637) 3-деңгээлдеги оптималдаштырууну тандоодо процедуралык абстракцияны оптималдаштыруу иштетилип жаткан (-03). Бул оптималдаштыруу коддун ылдамдыгынын эсебинен коддун өлчөмүн азайтат, андыктан аткарылбашы керек болчу.
Жаман EEPROM мүмкүндүк алуу (XC8-2629) The -mconst-data-in-progmem опциясы иштетилгенде eeprom_read_block тартиби Xmega түзмөктөрүндө туура иштеген жок (бул демейки абал), натыйжада EEPROM эс тутуму туура окулбай калды.
Эстутум туура эмес бөлүштүрүлгөн (XC8-2593, XC8-2651) -Ttext же -Tdata шилтемеси опциясы (мисалыample -vl драйвер опциясы аркылуу өттү) көрсөтүлсө, тиешелүү текст/маалымат аймагы жаңыртылды; бирок, акыркы дарек тиешелүү түрдө туураланган эмес, бул аймак максаттуу түзмөктүн эс тутумунун диапазонунан ашып кетиши мүмкүн.
Ашыкча атрибуцияланган функция менен бузулуу (XC8-2580) Эгерде функция үзгүлтүккө, сигналга же nmi атрибуттарынын бирден көбүн колдонуу менен жарыя кылынса, компилятор кыйрады, мисалы, атрибут ( ( сигнал , үзгүлтүк ) ).
Жараксыз ATtiny үзгүлтүккө учуратуу коду (XC8-2465) ATtiny түзмөктөрүн курууда жана оптималдаштыруулар өчүрүлгөндө (-00), үзгүлтүккө учуратуу функциялары диапазондон тышкары ассемблер билдирүүлөрүн иштетиши мүмкүн.
Опциялар өткөрүлбөй жатат (XC8-2452) Бир нече, үтүр менен ажыратылган байланыштыргыч опциялары менен опцияны колдонгондо, шилтеме кылуучу опциялардын баары шилтеме берүүчүгө өткөрүлүп берилген эмес.
Программа эстутумун кыйыр окуу катасы (X03-2450) Кээ бир учурларда компилятор көрсөткүчтөн программанын эстутумуна эки байт маанини окуп жатканда ички ката (таанылбай турган insn) чыгарды.
5.6. Версия 2.32
Экинчи кирүү китепкана иштебей калды (XC8-2381) xc8-ar Windows версиясын чакыруу. Учурдагы китепкана архивине экинчи жолу кирүү үчүн .exe китепканасынын архивчиси ката кабарынын атын өзгөртүүгө мүмкүн болбогондуктан ишке ашпай калган болушу мүмкүн.
5.7. Версия 2.31
Түшүндүрүлбөгөн компилятор каталар (XC8-2367) Системанын убактылуу каталогу чекит камтыган жолго коюлган Windows платформаларында иштегенде '.' белгиси болсо, компилятор аткара албай калган болушу мүмкүн.
5.8. Версия 2.30
Глобалдык энбелгилер контурлангандан кийин туура эмес жайгаштырылды (XC8-2299) Процедуралык абстракция менен ажыратылган монтаж ырааттуулугуна глобалдык энбелгилерди жайгаштырган кол менен жазылган монтаж коду туура жайгаштырылбаган болушу мүмкүн.
Жагымдуу кыйроо (XC8-2287) -mrelax опциясын колдонуу, куйруктан секирүү релаксациясын оптималдаштыруу бөлүмдүн аягында болбогон ret нускамасын алып салууга аракет кылганда, байланыштыргычтын бузулушуна алып келиши мүмкүн.
Энбелгилерди маанилер катары оптималдаштырууда бузулуу (XC8-2282) "Энбелгилер баалуулуктар катары" GNU C тилинин кеңейтүүсүн колдонгон код процедуралык абстракцияны оптималдаштыруунун бузулушуна алып келиши мүмкүн, ал эми Outlined VMA диапазонунда оңдоо катасы бар.
Анчалык туруктуу эмес (XC8-2271) st rstr ( ) жана башка функциялардын прототиптери -mconst-data-inprogmem өзгөчөлүгү өчүрүлгөндө кайтарылган сап көрсөткүчтөрүндө стандарттуу эмес const квалификациясын мындан ары көрсөтпөңүз. avrxmega3 жана avrtiny түзмөктөрүндө бул функция биротоло иштетилерин эске алыңыз.
Жоголгон инициализаторлор (XC8-2269) Качан ашык котормо бирдигиндеги бир өзгөрмө бөлүмгө жайгаштырылды (_бөлүм же _атрибуту_ ( (бөлүм) ) колдонуу менен), жана биринчи мындай өзгөрмө нөлгө инициализацияланган же инициализаторго ээ эмес, ошол эле котормо бирдигиндеги башка өзгөрмөлөр үчүн инициализаторлор жайгаштырылган ошол эле бөлүмдө жоголгон.
5.1. Версия 2.29 (Функционалдык коопсуздук релизи)
Жок.
5.2. Версия 2.20
Узун буйруктардагы ката (XC8-1983) AVR максаттуу колдонууда, компилятор а менен токтоп калышы мүмкүн file табылган жок ката, эгерде буйрук сабы өтө чоң болсо жана тырмакчалар, тескери сызыктар ж.б.
Дайындалбаган родата бөлүмү (XC8-1920) AVR шилтемеси avrxmega3 жана avrtiny архитектураларын курууда ыңгайлаштырылган родата бөлүмдөрү үчүн эстутумду дайындай алган жок, бул эстутумдун кайталанма каталарын жаратышы мүмкүн
5.3. Версия 2.19 (Функционалдык коопсуздук релизи)
Жок.
5.4. Версия 2.10
Көчүрүү каталары (XC8-1891) Эң ылайыктуу бөлүштүргүч шилтемелер релаксациялангандан кийин бөлүмдөрдүн ортосунда эс тутумдун "тешиктерин" калтырган. Эстутумду бөлүүдөн тышкары, бул компьютерге салыштырмалуу секирүү же чалуулардын диапазондон чыгып кетүүсүнө байланыштуу шилтемелердин ордун алмаштырууда каталардын болушу ыктымалдыгын жогорулатты.
Релаксация жолу менен өзгөртүлбөгөн инструкциялар (XC8-1889) Секирүү же чакыруу инструкциялары үчүн шилтемелердин релаксациясы болгон жок, алардын максаттары жайбаракат болгондо жетүүгө болот.
Жок функционалдуулук (XC8E-388) Бир нече аныктамалар clock_div_t жана clock_prescale set () сыяктуу ATmega324PB, ATmega328PB, ATtiny441 жана ATtiny841 сыяктуу түзмөктөр үчүн аныкталган эмес.
Макрос жок _XC8_MODE_, _XC8_VERS ION, _XC жана _XC8 препроцессордук макролору компилятор тарабынан автоматтык түрдө аныкталган эмес. Булар азыр жеткиликтүү.
5.5. Версия 2.05
Ички компилятор катасы (XC8-1822) Windows астында курууда кодду оптималдаштырууда ички компилятор катасы пайда болушу мүмкүн.
RAM ашыкчасы аныкталган жок (XC8-1800, XC8-1796) Жеткиликтүү RAMдан ашкан программалар компилятор тарабынан кээ бир кырдаалдарда аныкталган жок, натыйжада аткаруу коду иштебей калды.
Өткөрүлгөн флеш эстутум (XC8-1792) avrxmega3 жана avrtiny түзмөктөрү үчүн флеш эстутумдун бөлүктөрү MPLAB X тарабынан программаланбай калган болушу мүмкүн. IDE.
Негизги аткарылбай калуу (XC8-1788) Программада глобалдык өзгөрмөлөр аныкталбаган кээ бир учурларда, иштөө убактысынын баштоо коду чыккан жок жана негизги ( ) функцияга эч качан жеткен жок.
Туура эмес эс маалыматы (XC8-1787) avrxmega3 жана avrtiny түзмөктөрү үчүн avr өлчөмүндөгү программа окуу үчүн гана берилүүчү маалыматтар программанын эстутумунун ордуна оперативдүү эстутумду керектеп жатканын билдирген.
Туура эмес программа эстутум окуу (XC8-1783) Маалымат дарек мейкиндигине жайгаштырылган жана PROGMEM макро/атрибутунун жардамы менен объекттерди аныктаган программалык эстутуму бар түзмөктөр үчүн түзүлгөн долбоорлор бул объекттерди туура эмес даректен окуган болушу мүмкүн.
Атрибуттары бар ички ката (XC8-1773) Көрсөткүч объекттерин менен аныктасаңыз, ички ката кетти
_at () же атрибуту () белгилери көрсөткүчтүн аты менен шилтемеленген түрдүн ортосунда, мисалы,ample, char *
_at (0x800150) cp; Эгер мындай код жолукса, азыр эскертүү берилет.
Негизги аткарылбай калуу (XC8-1780, XC8-1767, XC8-1754) EEPROM өзгөрмөлөрүн колдонуу же конфигурациялоо прагмасын колдонуу менен сактагычтарды аныктоо негизги ( ) га жеткенге чейин иштөө убактысынын баштоо кодунда туура эмес маалыматтарды инициализациялоого жана/же программанын аткарылышына бөгөт коюшу мүмкүн.
Кичинекей түзмөктөрдө сактагыч катасы (XC8-1778, XC8-1742) attiny4/5/9/10/20/40 түзмөктөрүнүн аталышында сактагычтын узундугу туура эмес болгон fileсактагычтарды аныктаган кодду түзүүгө аракет кылганда байланыштыргыч каталарга алып келет.
Сегменттөө ката (XC8-1777) Үзгүлтүктүү сегментация катасы оңдолду.
Ассемблер катасы (XC8-1761) avr-as ассемблери компилятор Ubuntu 18 астында иштетилгенде бузулушу мүмкүн.
Объекттер тазаланган жок (XC8-1752) Башталбаган статикалык сактагычтын узактыгы объекттери иштөө убактысынын баштоо коду менен тазаланбаган болушу мүмкүн.
Карама-каршы келген түзмөктүн спецификациясы этибарга алынган жок (XC8-1749) Түзмөктүн спецификациясынын бир нече варианттары колдонулганда жана башка түзмөктөрдү көрсөткөндө, компилятор ката жараткан жок.
Үймөк менен эс тутумдун бузулушу (XC8-1748) The _heap_start символу туура эмес коюлган, натыйжада үймөк кадимки өзгөрмөлөр бузулушу мүмкүн.
Шилтемени алмаштыруу катасы (XC8-1739) Код rjmp же rcчалууну камтыган максаттуу 4к байт аралыкта болгондо, шилтемени алмаштыруу катасы чыгышы мүмкүн.
5.6. Версия 2.00
Жок.
Белгилүү маселелер
Төмөндө компилятордун иштөөсүндөгү чектөөлөр бар. Бул жалпы коддоо чектөөлөрү, же колдонуучунун колдонмосунда камтылган маалыматтан четтөөлөр болушу мүмкүн. Аталышындагы кашаадагы энбелги(лер) бул маселенин көзөмөлдөө базасындагы идентификациясы. Колдоо кызматына кайрылуу керек болсо, бул пайдалуу болушу мүмкүн. Энбелгиси жок нерселер моди операцияны сүрөттөгөн жана биротоло күчүндө кала турган чектөөлөр болуп саналат.
6.1. MPLAB X IDE Интеграция
MPLAB IDE интеграция Эгерде Compiler MPLAB IDEден колдонула турган болсо, анда Compiler орнотуудан мурун MPLAB IDE орнотуу керек.
6.2. Code Generation
Segfault with section-anchors опциясы (XC8-3045) Өзгөрмө аргументтердин тизмеси менен функцияларды аныктаган жана -fsection-anchors опциясын колдонгон программа ички компилятордун катасын козгогон болушу мүмкүн: Сегменттөө катасы.
Мүчүлүштүктөрдү оңдоо маалыматы шайкештирилбей калды (XC8-2948) Шилтемелердин релаксациясын оптималдаштыруу инструкцияларды кыскартканда (мисалыampинструкцияларга чакыруу), бөлүмдө бирден ашык кичирейтүү операциясы болгондо, дарек картасына булак сызыгы шайкештирилбей калышы мүмкүн.
Төмөндөгү эксampле, фуга эки чалуу бар, алар салыштырмалуу чалууларга жумшалат.
PA эстутумун бөлүштүрүү катасы (XC8-2881) Процедуралык абстракцияны оптималдаштыруучуларды колдонууда, программа жеткиликтүү мейкиндикке туура келиши керек болсо да, коддун өлчөмү аппараттагы жеткиликтүү программалык эстутумдун көлөмүнө жакын болгондо шилтеме берүүчү эстутум бөлүштүрүү каталары жөнүндө кабарлашы мүмкүн.
Анчалык акылдуу эмес Smart-I0 (XC8-2872) Эгерде компилятордун smart-io функциясы snprint f функциясы үчүн жарактуу, бирок суб-оптималдуу кодду жаратат, эгерде const-data-in-progmem функциясы өчүрүлгөн болсо же аспапта анын бардык флештери маалымат эстутумуна түшүрүлгөн болсо.
Андан да азыраак акылдуу Smart-I0 (XC8-2869) Компилятордун smart-io функциясы -flto жана -fno-builtin параметрлери тең колдонулганда жарактуу, бирок оптималдуу эмес кодду жаратат.
Оптималдуу маалыматты окуу үчүн гана жайгаштыруу (XC8-2849) Шилтеме берүүчү учурда APPCODE жана APPDATA эстутум бөлүмдөрүн, ошондой эле эстутум картасындагы [No-Read-While-Write бөлүмдөрүн билбейт. Натыйжада, шилтеме берүүчү эстутумдун жараксыз чөйрөсүндө окуу үчүн гана берилиштерди бөлүштүрүшү мүмкүн. Эгерде программадагы const-data-data-in-progmem функциясы иштетилсе, айрыкча, const-data-in-config-mapped-progmem өзгөчөлүгү да иштетилген болсо, туура эмес жайгаштырылган маалыматтардын ыктымалдыгы жогорулайт. Керек болсо, бул функциялар өчүрүлүшү мүмкүн.
Объект file иштетүү тартиби (XC8-2863) Объекттердин тартиби files шилтеме берүүчү тарабынан иштетилет, процедуралык абстракцияны оптималдаштыруунун (-mpa опциясы) колдонулушуна жараша айырмаланышы мүмкүн. Бул бир нече модулдар боюнча начар функцияларды аныктаган кодго гана таасирин тийгизет.
Абсолюттук байланыштыргыч катасы (XC8-2777) Объект RAMдын башталышында даректе абсолюттук абалга келтирилгенде жана инициализацияланбаган объекттер да аныкталганда, байланыштыргыч катасы пайда болушу мүмкүн.
Кыска ойготуу ID'лери (XC8-2775) ATA5700/2 түзмөктөрү үчүн PHIDO/1 регистрлери 16 бит эмес, туурасы 32 бит катары гана аныкталат.
Символ чалуу учурунда байланыштыргычтын бузулушу (XC8-2758) Булак коду -cc., –de f sym шилтемеси опциясы аркылуу аныкталган символду чакырганда -mrelax драйвери опциясы колдонулса, шилтеме берүүчү бузулушу мүмкүн.
Туура эмес инициализация (XC8-2679) бар кээ бир глобалдык/статикалык байт өлчөмүндөгү объектилердин баштапкы маанилери маалымат эстутумунда жайгаштырылган жер менен өзгөрмөлөргө иштөө убагында кире турган жердин ортосундагы айырмачылык.
Начар кыйыр функция чалуулары (XC8-2628) Кээ бир учурларда, структуранын бир бөлүгү катары сакталган функция көрсөткүчү аркылуу жасалган функция чалуулары ишке ашпай калышы мүмкүн.
strtof он алтылык калкыма нөлдү кайтарат (XC8-2626) strtof et al жана scanf ( ) ж.б. китепкана функциялары ар дайым көрсөткүчтү нөлгө көрсөтпөгөн он алтылык калкыма чекиттүү санды которот. Мисалы үчүнampле:
strtof (“Oxl”, & endptr);
I эмес, 0 маанисин кайтарат.
Стек кеңешчисинин так эмес билдирүүсү (XC8-2542, XC8-2541) Кээ бир учурларда, колдонулган рекурсия же аныкталбаган стек (мүмкүн alloca() колдонуу аркылуу) жөнүндө стек кеңешчиси эскертүүсү чыгарылбайт.
Кайталанма үзгүлтүккө учуроо коду (XC8-2421) Бирден ашык үзгүлтүксүз функция бирдей денеге ээ болгон учурда, компилятор бир үзгүлтүккө учуратуу функциясын экинчисин чакырышы мүмкүн. Бул бардык чалуулар менен жабылган регистрлердин кереги жок сакталып калышына алып келет жана үзгүлтүктөр учурдагы үзгүлтүккө учураткычтын эпилогу иштей электе эле иштетилет, бул коддун бузулушуна алып келиши мүмкүн.
Жараксыз DFP жолу менен начар чыгаруу (XC8-2376) Эгерде компилятор жараксыз DFP жолу жана "спец" менен чакырылса file тандалган түзмөк үчүн бар болсо, компилятор жетишпеген түзмөктүн үй-бүлөлүк топтомун билдирбейт жана анын ордуна "спец" тандайт file, анда жараксыз чыгарууга алып келиши мүмкүн. "спец" files бөлүштүрүлгөн DFPлер менен жаңыланбашы мүмкүн жана ички компилятордун сыналышы менен гана колдонууга арналган.
Эстутумдун дал келиши аныкталган жок (XC8-1966) Компилятор даректе абсолюттук жасалган объекттердин ( _at ( ) аркылуу) жана бөлүмдүн ( ) спецификаторун колдонгон жана ошол эле дарекке байланышкан башка объекттердин эс тутумунун кайталанышын аныктабай жатат.
Китепкана функциялары жана _memx (XC8-1763) иштебей калды Memx дарек мейкиндигинде аргументи бар libgcc float деп аталган функциялар иштебей калышы мүмкүн. Көңүл буруңуз, китепкананын процедуралары кээ бир C операторлорунан чакырылат, мисалы, мисалыample, төмөнкү код таасир этет:
return regFloatVar > memxFloatVar;
Чектелген libgcc ишке ашыруу (AVRTC-731) ATTiny4/5/9/10/20/40 өнүмдөрү үчүн libgccдеги стандарттык C / Math китепканасын ишке ашыруу өтө чектелген же жок.
Программа эстутум чектөөлөрү (AVRTC-732) 128 кбдан ашкан программалык эс тутумдагы сүрөттөр инструменттердин тизмеги тарабынан колдоого алынат; бирок, -mre lax опциясы колдонулганда, талап кылынган функция түтүктөрүн түзүүнүн ордуна, релаксациясыз жана пайдалуу ката кабарысыз шилтемени токтотуунун белгилүү учурлары бар.
Аты мейкиндигин чектөө (AVRTC-733) Аты аталган дарек мейкиндиктери инструменттердин тизмеги тарабынан колдоого алынат, колдонуучунун колдонмосунун Атайын Тип Квалификациялары бөлүмүндө айтылган чектөөлөргө ылайык.
Убакыт алкактары The китепкана функциялары GMTти болжолдойт жана жергиликтүү убакыт алкактарын колдобойт, ошондуктан жергиликтүү убакыт ( ) gmtime ( ) менен бирдей убакытты кайтарат, мисалыample.
file:///Applications/microchip/xc8/v2.41/docs/Readme_XC8_for_AVR.htm
Документтер / Ресурстар
![]() |
MICROCHIP MPLAB XC8 C компиляторду өнүктүрүү программасы [pdf] Колдонуучунун колдонмосу MPLAB XC8 C, MPLAB XC8 C компиляторду өнүктүрүү программасы, компиляторду өнүктүрүү программасы, иштеп чыгуу программасы, программалык камсыздоо |