لوگوی میکروچیپMPLAB® XC8 C Compiler نسخه 2.41 یادداشت‌های انتشار برای AVR® MCU
کتابچه راهنمای مالک

نرم افزار توسعه کامپایلر MPLAB XC8 C

این سند حاوی اطلاعات مهمی در رابطه با کامپایلر MPLAB XC8 C هنگام هدف قرار دادن دستگاه های AVR میکروچیپ است.
لطفاً قبل از اجرای این نرم افزار آن را بخوانید. اگر از کامپایلر برای دستگاه های PIC 8 بیتی استفاده می کنید، یادداشت های انتشار کامپایلر MPLAB XC8 C را برای سند PIC ببینید.

تمام شد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. مجوزها و نسخه های مؤلفه
کامپایلر MPLAB XC8 C برای ابزارهای AVR MCU تحت مجوز عمومی عمومی گنو (GPL) نوشته و توزیع شده است، به این معنی که کد منبع آن آزادانه توزیع شده و در دسترس عموم است.
کد منبع ابزارهای تحت GNU GPL را می توان به طور جداگانه از Microchip دانلود کرد webسایت. می‌توانید GNU GPL را در فایلی که در زیر شاخه دایرکتوری install License.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. اوبونتو 18.04؛ و macOS® 10.15.5. باینری ها برای ویندوز با کد امضا شده اند. فایل های باینری برای macOS به صورت کد امضا شده و محضری شده اند. سرور مجوز شبکه MPLAB XC برای انواع سیستم عامل های 64 بیتی از جمله Microsoft Windows 10 و بالاتر در دسترس است. اوبونتو 18.04 و بالاتر؛ یا macOS 10.15 و بالاتر. سرور همچنین ممکن است بر روی سیستم عامل های مختلف دیگر از جمله Windows Server، توزیع های لینوکس، مانند Oracle® Enterprise Linux® و Red Hate Enterprise Linux و همچنین نسخه های قدیمی سیستم عامل های پشتیبانی شده اجرا شود. با این حال، سرور مجوز شبکه MPLAB XC روی این سیستم عامل ها آزمایش نشده است. سرور مجوز شبکه MPLAB XC را می توان بر روی ماشین های مجازی سیستم عامل پشتیبانی شده با استفاده از مجوز ماشین مجازی برای مجوزهای شبکه (SW006021-VM) اجرا کرد. تمام نسخه های 32 بیتی سرور شبکه MPLAB XC از نسخه 3.00 متوقف می شوند.
دستگاه های پشتیبانی شده
این کامپایلر از تمامی دستگاه های AVR MCU 8 بیتی موجود در زمان انتشار پشتیبانی می کند. برای لیستی از تمام دستگاه های پشتیبانی شده (در فهرست کامپایلر) را ببینید. این فایل ها نیز فهرست می شوند
avr_chipinfo.html تنظیمات بیت پیکربندی سند برای هر دستگاه.

1.7. نسخه ها و ارتقاء مجوز
کامپایلر MPLAB XC8 را می توان به عنوان یک محصول دارای مجوز (PRO) یا بدون مجوز (رایگان) فعال کرد. برای مجوز کامپایلر خود باید یک کلید فعال سازی خریداری کنید. مجوز سطح بالاتری از بهینه سازی را در مقایسه با محصول رایگان فراهم می کند. یک کامپایلر بدون مجوز می تواند به طور نامحدود بدون مجوز کار کند. یک کامپایلر ایمنی عملکردی MPLAB XC8 باید با مجوز ایمنی عملکردی خریداری شده از میکروچیپ فعال شود. کامپایلر بدون این مجوز کار نخواهد کرد. پس از فعال سازی، می توانید هر سطح بهینه سازی را انتخاب کنید و از تمام ویژگی های کامپایلر استفاده کنید. این نسخه از MPLAB XC Functional Safety Compiler از مجوز سرور شبکه پشتیبانی می کند.
برای اطلاعات در مورد انواع مجوزها و نصب کامپایلر با مجوز، به سند نصب و صدور مجوز MPLAB XC C 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 فهرست راهنمای نصب پیش فرض توصیه می شود. اگر از لینوکس استفاده می کنید، باید کامپایلر را با استفاده از یک ترمینال و از یک حساب ریشه نصب کنید. با استفاده از یک حساب macOS با امتیازات سرپرست نصب کنید.
فعال سازی اکنون به طور جداگانه برای نصب انجام می شود. برای اطلاعات بیشتر به مدیر مجوز برای کامپایلرهای MPLAB® XC C (DS52059) مراجعه کنید.
اگر انتخاب کنید که کامپایلر را تحت مجوز ارزیابی اجرا کنید، اکنون در طی 14 روز پس از پایان دوره ارزیابی، هشداری در طول تدوین دریافت خواهید کرد. اگر ظرف 14 روز از پایان اشتراک HPA خود باشید، همین اخطار صادر می شود.
سرور مجوز شبکه XC یک نصب کننده جداگانه است و در نصب کننده کامپایلر تک کاربره گنجانده نشده است.
مدیر مجوز XC اکنون از رومینگ مجوزهای شبکه شناور پشتیبانی می کند. این ویژگی با هدف کاربران تلفن همراه، به مجوز شناور اجازه می دهد تا برای مدت کوتاهی از شبکه خارج شود. با استفاده از این ویژگی، می توانید از شبکه جدا شوید و همچنان از کامپایلر MPLAB XC خود استفاده کنید. برای اطلاعات بیشتر در مورد این ویژگی، به پوشه doc نصب XCLM مراجعه کنید.
MPLAB X IDE شامل یک پنجره مجوزها (ابزارها > مجوزها) برای مدیریت بصری رومینگ است.

1.8.1. حل مشکلات نصب
اگر در نصب کامپایلر تحت هر یک از سیستم عامل های ویندوز با مشکل مواجه شدید، پیشنهادات زیر را امتحان کنید.
نصب را به عنوان مدیر اجرا کنید.
مجوزهای برنامه نصب کننده را روی "کنترل کامل" تنظیم کنید. (روی فایل کلیک راست کنید، گزینه Properties، زبانه امنیت، انتخاب کاربر، ویرایش را انتخاب کنید.)
مجوزهای پوشه temp را روی "کنترل کامل" تنظیم کنید.
برای تعیین محل پوشه temp، %temp% را در دستور Run تایپ کنید (کلید لوگوی ویندوز + R).
این یک گفتگوی کاوشگر فایل را باز می کند که آن دایرکتوری را نشان می دهد و به شما امکان می دهد مسیر آن پوشه را تعیین کنید.
1.9. مستندات کامپایلر
راهنماهای کاربر کامپایلر را می توان از صفحه HTML که در مرورگر شما با کلیک روی دکمه آبی رنگ راهنما در داشبورد MPLAB X IDE باز می شود، همانطور که در تصویر نشان داده شده است، باز شود.

اگر برای اهداف AVR 8 بیتی می سازید، راهنمای کاربر کامپایلر MPLAB® XC8 C برای AVR® MCU حاوی اطلاعاتی در مورد آن دسته از گزینه ها و ویژگی های کامپایلر است که برای این معماری قابل اجرا هستند.

نرم افزار توسعه کامپایلر MICROCHIP MPLAB XC8 C -

1.10. پشتیبانی مشتری
Microchip از گزارش اشکال، پیشنهادات یا نظرات در مورد این نسخه کامپایلر استقبال می کند. لطفاً هرگونه گزارش اشکال یا درخواست ویژگی را از طریق سیستم پشتیبانی هدایت کنید.

به روز رسانی اسناد

برای نسخه های آنلاین و به روز مستندات MPLAB XC8، لطفاً به مستندات فنی آنلاین میکروچیپ مراجعه کنید. webسایت. اسناد AVR جدید یا به روز شده در این نسخه:

  • راهنمای کاربر کامپایلر MPLAB® XC8 C برای AVR® MCU (نسخه G)
  • راهنمای مهاجرت AVR® GNU Toolchain به MPLAB® XC8 (نسخه A)
  • راهنمای کاربر Hexmate (نسخه B)

راهنمای مهاجرت AVR® GNU Toolchain به MPLAB® XC8 تغییراتی را در کد منبع و گزینه‌های ساخت که ممکن است در صورت تصمیم به انتقال یک پروژه مبتنی بر C از زنجیره ابزار AVR 8 بیتی به کامپایلر ریزتراشه MPLAB XC8 C مورد نیاز باشد، توضیح می‌دهد. راهنمای مرجع کتابخانه استاندارد یکپارچه ریزتراشه، رفتار و رابط با توابع تعریف شده توسط کتابخانه استاندارد یکپارچه ریزتراشه، و همچنین استفاده مورد نظر از انواع کتابخانه ها و ماکروها را شرح می دهد. برخی از این اطلاعات قبلاً در راهنمای کاربر کامپایلر MPLAB® XC8 C برای AVR® MCU موجود بود. اطلاعات کتابخانه خاص دستگاه هنوز در این راهنمای کامپایلر موجود است.
اگر به تازگی با دستگاه های 8 بیتی و کامپایلر MPLAB XC8 C شروع کرده اید، راهنمای کاربر MPLAB® XC8 برای مهندسین جاسازی شده – AVR® MCU (DS50003108) اطلاعاتی در مورد راه اندازی پروژه ها در MPLAB X IDE و نوشتن کد برای شما دارد. اولین پروژه MPLAB XC8 C. این راهنما اکنون با کامپایلر توزیع شده است.
راهنمای کاربر Hexmate برای کسانی است که Hexmate را به عنوان یک برنامه مستقل اجرا می کنند.

چه جدید است

موارد زیر ویژگی های جدید AVR-target است که کامپایلر اکنون از آن پشتیبانی می کند. شماره نسخه در عناوین فرعی نشان دهنده اولین نسخه کامپایلر برای پشتیبانی از ویژگی های زیر است.
3.1. نسخه 2.41
پشتیبانی از Bootrow (XC8-3053) کامپایلر محتوای هر بخش را با پیشوند at.bootrow آدرس 0x860000 در فایل HEX قرار می دهد. این بخش ها برای حافظه BOOTROW استفاده می شود که برای ذخیره سازی کلیدها و سایر اطلاعات امن طراحی شده است که فقط باید برای یک بوت لودر قابل دسترسی باشد.

حذف بازگشت اضافی (XC8-3048) کامپایلر اکنون دستورالعمل های اضافی را در توابع ret با یک پرش دنباله زمانی که از اسکریپت های پیوند دهنده سفارشی استفاده می شود حذف می کند. این بهینه‌سازی مشابهی است که قبلا انجام شده بود، اما اکنون در تمام بخش‌های یتیم انجام می‌شود، حتی اگر یک اسکریپت پیوند دهنده سفارشی استفاده شود و بهترین طرح تخصیص تناسب در بازی نباشد. تغییر نوع زمان (XC8-2982, 2932) نوع کتابخانه استاندارد C99 از time_t به نوع تغییر کرده است که باعث بهبود اندازه کد در برخی از توابع طولانی مرتبط با زمان می شود، مانند. mktime طولانی بدون امضا ()
nop جدید (XC8-2946, 2945) ماکرو به اضافه شده است. این ماکرو یک ()no-NOP درج می کند. دستورالعمل عملیات nop در خروجی.
به روز رسانی به XCLM (XC8-2944) مدیر مجوز استفاده شده با کامپایلر به روز شده است و اکنون هنگام بررسی جزئیات مجوز کامپایلر پاسخگوتر است.
Trampتماس‌های olined (XC8-2760) کامپایلر اکنون می‌تواند دستورالعمل‌های تماس طولانی‌مدت را با تماس‌های نسبی کوتاه‌تر جایگزین کند، زمانی که فرم‌های نسبی دستورالعمل‌ها معمولاً خارج از محدوده مقصد خود هستند. در این شرایط، کامپایلر سعی می کند دستورالعملی را با دستورات فراخوانی rcall جایگزین کند که 'tr' خواهد بودampاجرای oline به آدرس مورد نیاز، برای مثالample: jmp
rcall tramp_فو ؛فو صدا شد

rcall tramp_فو

tramp_foo:
jmp foo

این بهینه سازی همراه با بهینه سازی های مشابه جریان برنامه توسط گزینه -mrelax کنترل می شود.

3.2. نسخه 2.40
پشتیبانی از دستگاه جدید اکنون برای قطعات AVR زیر در دسترس است: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64DD28, AVR64DD32, AVR64DD48, AVRXNUMXDDXNUMX, AVRXNUMXDDXNUMX و AVRXNUMXEAXNUMX.
انتزاع رویه‌ای بهبود یافته ابزار بهینه‌سازی انتزاع رویه‌ای (PA) بهبود یافته است به طوری که کد حاوی دستورالعمل فراخوانی تابع (/) قابل استفاده است. این فقط در صورتی که پشته برای ارسال آرگومان ها به تابع یا دریافت مقدار برگشتی از تابع استفاده نشود، فراخوانی مجدد انجام می شود. پشته هنگام فراخوانی یک تابع با لیست آرگومان متغیر یا هنگام فراخوانی تابعی که آرگومان های بیشتری نسبت به ثبات های تعیین شده برای این منظور می گیرد، استفاده می شود. این ویژگی را می توان با استفاده از گزینه غیرفعال کرد، یا انتزاع رویه ای را می توان به طور کامل برای یک فایل یا تابع با استفاده از- و به ترتیب یا با استفاده از ویژگی (مشخص) انتخابی با توابع غیرفعال کرد.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa ماکرو پوشش کد کامپایلر اکنون ماکرو را تعریف می کند اگر گزینه معتبر __nopa __CODECOV -mcodecov مشخص شده باشد.
گزینه رزرو حافظه راننده اکنون هنگام ساخت اهداف AVR گزینه xc8-cc -mreserve=space@start:end را می پذیرد. این گزینه محدوده حافظه مشخص شده را در فضای حافظه داده یا برنامه ذخیره می کند و از پر کردن کد یا اشیاء در این ناحیه توسط پیوند دهنده جلوگیری می کند. IO هوشمند هوشمندتر چندین پیشرفت در عملکردهای Smart IO انجام شده است، از جمله تغییرات کلی در کد اصلی printf، تلقی کردن %n مشخص کننده تبدیل به عنوان یک نوع مستقل، پیوند دادن در روال های pop vararg در صورت تقاضا، استفاده از انواع داده های کوتاه تر در صورت امکان برای مدیریت. آرگومان های تابع IO، و فاکتورسازی کدهای رایج در پهنای فیلد و مدیریت دقیق. این می تواند منجر به صرفه جویی قابل توجهی در کد و داده و همچنین افزایش سرعت اجرای IO شود.

3.3. نسخه 2.39 (انتشار ایمنی عملکردی)
مجوز سرور شبکه این نسخه از کامپایلر ایمنی عملکردی MPLAB XC8 از مجوز سرور شبکه پشتیبانی می کند.
3.4. نسخه 2.36
هیچ کدام.

3.5. نسخه 2.35
پشتیبانی از دستگاه جدید برای قطعات AVR زیر در دسترس است: ATTINY3224، ATTINY3226، ATTINY3227، AVR64DD14، AVR64DD20، AVR64DD28، و AVR64DD32.
سوئیچینگ متن بهبود یافته گزینه جدید -mcall-isr-prologues نحوه ذخیره رجیسترها توسط توابع وقفه در هنگام ورود و نحوه بازیابی آن ثبات ها پس از پایان روال وقفه را تغییر می دهد. به روشی مشابه گزینه -mcall-prologues کار می کند، اما فقط بر توابع وقفه (ISR) تأثیر می گذارد.
حتی بهبود یافته‌تر تغییر متن گزینه جدید -mgas-isr-prologues کد سوئیچ زمینه تولید شده برای روتین‌های سرویس وقفه‌های کوچک را کنترل می‌کند. هنگامی که این ویژگی فعال باشد، اسمبلر ISR را برای استفاده از رجیستر اسکن می کند و فقط در صورت نیاز این ثبات های استفاده شده را ذخیره می کند.
نقشه برداری فلش قابل تنظیم برخی از دستگاه های خانواده AVR DA و AVR DB دارای یک SFR (به عنوان مثال FLMAP) هستند که مشخص می کند کدام بخش 32k از حافظه برنامه در حافظه داده نگاشت می شود. گزینه جدید – mconst-data-in-config-mapped-progmem می تواند مورد استفاده قرار گیرد تا پیوند دهنده تمام داده های دارای شرایط را در یک بخش 32k قرار دهد و به طور خودکار ثبت SFR مربوطه را مقداردهی اولیه کند تا اطمینان حاصل شود که این داده ها در حافظه داده نگاشت می شوند. فضا، جایی که به طور موثرتری به آن دسترسی پیدا خواهد کرد.
کتابخانه‌های استاندارد یکپارچه ریزتراشه همه کامپایلرهای MPLAB XC یک کتابخانه استاندارد یکپارچه میکروچیپ را به اشتراک خواهند گذاشت، که اکنون با این نسخه MPLAB XC8 در دسترس است. راهنمای کاربر کامپایلر MPLA# XC8 C برای AVO MCU دیگر شامل مستندات این توابع استاندارد نمی شود. اکنون این اطلاعات را می توان در راهنمای مرجع کتابخانه استاندارد یکپارچه میکروچیپ یافت. توجه داشته باشید که برخی از عملکردهایی که قبلاً توسط avr-libc تعریف شده بود، دیگر در دسترس نیستند. (به عملکرد لیلا مراجعه کنید.)
Smart I0 به عنوان بخشی از کتابخانه‌های یکپارچه جدید، توابع I0 در خانواده‌های printf و scanf اکنون بر اساس نحوه استفاده از این توابع در برنامه، در هر ساختنی به‌صورت سفارشی تولید می‌شوند. این می تواند به طور قابل ملاحظه ای منابع مورد استفاده یک برنامه را کاهش دهد.
گزینه کمک ICI هوشمند هنگام تجزیه و تحلیل فراخوانی به توابع هوشمند I0 (مانند print f () یا scanf ())، کامپایلر همیشه نمی تواند از رشته قالب تعیین کند یا از آرگومان ها مشخص کننده های تبدیل مورد نیاز تماس را استنتاج کند. قبلاً، کامپایلر همیشه هیچ فرضی نمی‌کرد و اطمینان می‌داد که 10 تابع کاملاً کاربردی به تصویر نهایی برنامه پیوند داده شده‌اند. یک گزینه جدید – msmart-io-format=fmt اضافه شده است تا کامپایلر بتواند در عوض توسط کاربر از مشخص کننده های تبدیل استفاده شده توسط توابع هوشمند I0 که استفاده از آنها مبهم است مطلع شود و از پیوند بیش از حد طولانی 10 روال جلوگیری کند. (برای جزئیات بیشتر به گزینه smart-io-format مراجعه کنید.)
قرار دادن بخش‌های سفارشی قبلاً، گزینه -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، AVR32DB28، AVR64DB32، AVR32DBDBD48، AVR16DB28، AVR16DB32، AVR16DBDD48 و AVRXNUMXDBXNUMX. پشتیبانی دستگاه جمع‌شده دیگر برای قطعات AVR زیر در دسترس نیست: AVRXNUMXDAXNUMX، AVRXNUMXDAXNUMX و AVRXNUMXDAXNUMX.
3.7. نسخه 2.31
هیچ کدام.
3.8. نسخه 2.30
گزینه جدید برای جلوگیری از مقدار دهی اولیه داده ها یک گزینه جدید درایور -mno-data-init از مقدار دهی اولیه داده ها و پاک کردن بخش های bss جلوگیری می کند. با سرکوب خروجی داده‌های do copy و پاک کردن نمادهای bss در اسمبلی کار می‌کند. files، که به نوبه خود از گنجاندن آن روال ها توسط پیوند دهنده جلوگیری می کند.
بهینه‌سازی‌های پیشرفته تعدادی از بهبودهای بهینه‌سازی انجام شده‌اند، از جمله حذف دستورالعمل‌های بازگشت اضافی، حذف برخی پرش‌ها به دنبال دستورالعمل skip-if-bit-is، و انتزاع رویه‌ای بهبود یافته و توانایی تکرار این فرآیند. اکنون گزینه‌های اضافی برای کنترل برخی از این بهینه‌سازی‌ها در دسترس هستند، به‌ویژه -f section-anchors، که اجازه می‌دهد دسترسی به اشیاء ثابت نسبت به یک نماد انجام شود. -mpa-iterations=n، که اجازه می دهد تعداد تکرارهای انتزاعی رویه ای از پیش فرض 2 تغییر کند. و -mpa-callcost-shortcall، که انتزاع رویه‌ای تهاجمی‌تری را انجام می‌دهد، به این امید که پیوند دهنده بتواند تماس‌های طولانی را کاهش دهد. اگر مفروضات اساسی محقق نشود، این گزینه آخر می تواند اندازه کد را افزایش دهد.
پشتیبانی دستگاه جدید برای قطعات AVR زیر در دسترس است: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128DA28AVRAD B128، AVR32DB128، و AVR48DB128. پشتیبانی از دستگاه جمع‌شده دیگر برای قطعات AVR زیر در دسترس نیست: ATA64، ATA5272، ATA5790N، ATA5790، ATA5791، ATA5795، ATA6285، ATA6286C، ATA6612C، ATA6613Q، ATA6614Q، ATA6616، ATA6617
3.9. نسخه 2.29 (انتشار ایمنی عملکردی)
سربرگ file برای کامپایلر داخلی برای اطمینان از اینکه کامپایلر می تواند با مشخصات زبانی مانند MISRA مطابقت داشته باشد، سرتیتر file، که به طور خودکار توسط ، به روز رسانی شده است. این هدر حاوی نمونه های اولیه برای همه توابع داخلی است، مانندbuildin_avr_nop ( ) و avr delay_cycles داخلی () . برخی از توکارها ممکن است با MISRA سازگار نباشند. اینها را می توان با افزودن defineXCSTRICT_MISRA به خط فرمان کامپایلر حذف کرد. داخلی ها و اعلان های آنها برای استفاده از انواع با عرض ثابت به روز شده اند.
3.10. نسخه 2.20
پشتیبانی از دستگاه جدید برای قطعات AVR زیر در دسترس است: ATTINY1624، ATTINY1626، و ATTINY1627.
بهترین تخصیص تناسب بهتر بهترین تخصیص تناسب (BFA) در کامپایلر بهبود یافته است به طوری که بخش ها به ترتیبی تخصیص داده می شوند که امکان بهینه سازی بهتر را فراهم می کند. BFA در حال حاضر از فضاهای آدرس نامگذاری شده پشتیبانی می کند و بهتر از مقداردهی اولیه داده ها استفاده می کند.
انتزاع رویه‌ای بهبود یافته بهینه‌سازی‌های انتزاع رویه‌ای اکنون روی دنباله‌های کد بیشتری انجام می‌شوند. موقعیت‌های قبلی که این بهینه‌سازی ممکن است اندازه کد را افزایش داده باشد، با آگاه کردن کد بهینه‌سازی از فرآیند جمع‌آوری زباله پیوند دهنده برطرف شده است.
عدم وجود مونتاژ کننده AVR اسمبلر AVR دیگر در این توزیع گنجانده نشده است.
3.11. نسخه 2.19 (انتشار ایمنی عملکردی)
هیچ کدام.
3.12. نسخه 2.10
پوشش کد این نسخه شامل یک ویژگی پوشش کد است که تجزیه و تحلیل میزان اجرای کد منبع پروژه را تسهیل می کند. برای فعال کردن آن از گزینه -mcodecov=ram استفاده کنید. پس از اجرای برنامه بر روی سخت افزار شما، اطلاعات پوشش کد در دستگاه جمع آوری می شود و می تواند از طریق یک افزونه پوشش کد به MPLAB X IDE منتقل شده و نمایش داده شود. برای دریافت اطلاعات در مورد این افزونه می توانید به مستندات IDE مراجعه کنید. می‌توان از #pragma nocodecov برای حذف عملکردهای بعدی از تحلیل‌های پوشش استفاده کرد. در حالت ایده آل، پراگما باید در ابتدای آن اضافه شود file تا کل آن حذف شود file از تجزیه و تحلیل پوشش همچنین، می‌توان از _خصیصه_ ((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=function غیرفعال شود. در کد منبع شما، انتزاع رویه‌ای را می‌توان برای یک تابع با استفاده از ویژگی ((nopa)) با تعریف تابع، یا با استفاده از nopa، که به صفت ((nopa، noinline)) گسترش می‌دهد و بنابراین از انجام درون‌خط تابع جلوگیری می‌کند، غیرفعال کرد. و انتزاعی از کد درون خطی وجود دارد.
پشتیبانی از بیت قفل در پراگما اکنون می توان از پیکربندی #pragma برای تعیین بیت های قفل AVR و همچنین سایر بیت های پیکربندی استفاده کرد. avr_chipinfo را بررسی کنید. html file (در بالا ذکر شد) برای جفت های تنظیم/مقدار برای استفاده با این پراگما. پشتیبانی از دستگاه جدید برای قطعات زیر در دسترس است: AVR28DAl28، AVR64DAl28، AVR32DA 128، و AVR48DA 128.
3.13. نسخه 2.05
بیت های بیشتر برای پول شما نسخه macOS این کامپایلر و مدیر مجوز اکنون یک برنامه 64 بیتی است. این اطمینان حاصل می کند که کامپایلر بدون اخطار در نسخه های اخیر macOS نصب و اجرا می شود.
اشیاء Const در حافظه برنامه کامپایلر اکنون می تواند اشیاء با شرایط const را در حافظه فلش برنامه قرار دهد، نه اینکه آنها را در RAM قرار دهد. کامپایلر به گونه‌ای اصلاح شده است که داده‌های سراسری با شرایط نامناسب t در حافظه فلش برنامه ذخیره می‌شوند و می‌توان به طور مستقیم و غیرمستقیم با استفاده از دستورالعمل‌های مربوط به حافظه برنامه به این داده‌ها دسترسی داشت. این ویژگی جدید به طور پیش‌فرض فعال است، اما می‌توان آن را با استفاده از گزینه -mno-const-data-in-progmem غیرفعال کرد. برای معماری avrxmega3 و avrtiny، این ویژگی مورد نیاز نیست و همیشه غیرفعال است، زیرا حافظه برنامه در فضای آدرس داده این دستگاه ها نگاشت می شود.
استاندارد برای رایگان نسخه‌های بدون مجوز (رایگان) این کامپایلر اکنون بهینه‌سازی‌هایی را تا سطح 2 و از جمله آن امکان‌پذیر می‌سازد. این اجازه می‌دهد خروجی مشابه، اگرچه نه یکسان، با آنچه قبلاً با استفاده از مجوز استاندارد امکان‌پذیر بود.
خوش آمدید AVRASM2 اسمبلر AVRASM2 برای دستگاه های 8 بیتی اکنون در نصب کننده کامپایلر XC8 گنجانده شده است. این اسمبلر توسط کامپایلر XC8 استفاده نمی شود، اما برای پروژه های مبتنی بر منبع اسمبلی دست نویس در دسترس است.
پشتیبانی از دستگاه جدید برای بخش‌های زیر در دسترس است: ATMEGA1608، ATMEGA1609، ATMEGA808، و ATMEGA809.

3.14. نسخه 2.00
درایور سطح بالا یک درایور جدید به نام xc8-cc اکنون بالای درایور avr-gcc قبلی و درایور xc8 قرار دارد و می‌تواند کامپایلر مناسب را بر اساس انتخاب دستگاه مورد نظر فراخوانی کند. این درایور گزینه‌های به سبک GCC را می‌پذیرد که یا برای کامپایلر در حال اجرا ترجمه می‌شوند یا از طریق آن ارسال می‌شوند. این درایور اجازه می دهد تا مجموعه ای از گزینه های مشابه با معنایی مشابه با هر هدف AVR یا PIC استفاده شود و بنابراین روش توصیه شده برای فراخوانی کامپایلر است. در صورت نیاز، درایور avr-gcc قدیمی را می‌توان مستقیماً با استفاده از گزینه‌های قدیمی که در نسخه‌های کامپایلر قبلی پذیرفته بود فراخوانی کرد.
رابط C مشترک این کامپایلر اکنون می تواند با رابط کاربری C MPLAB منطبق باشد و به کد منبع اجازه می دهد تا به راحتی در تمام کامپایلرهای 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، توابع رشته به XC8، مانند strtol () و غیره، اگر پایه مشخص شده بزرگتر از 36 باشد، دیگر تلاشی برای تبدیل رشته ورودی نمی کند. و در عوض errno را روی EINVAL تنظیم می کند. استاندارد C رفتار توابع را زمانی که از این مقدار پایه فراتر رفته است، مشخص نمی کند.
بهینه سازی سرعت نامناسب هنگام انتخاب بهینه‌سازی سطح 3 (03-) بهینه‌سازی‌های انتزاع رویه‌ای فعال می‌شدند. این بهینه‌سازی‌ها اندازه کد را به قیمت کاهش سرعت کد کاهش می‌دهند، بنابراین نباید انجام می‌شد. پروژه‌هایی که از این سطح بهینه‌سازی استفاده می‌کنند ممکن است در هنگام ساخت با این نسخه، تفاوت‌هایی را در اندازه کد و سرعت اجرا ببینند.
عملکرد کتابخانه کد بسیاری از توابع استاندارد کتابخانه C اکنون از کتابخانه استاندارد یکپارچه Microchip آمده است، که ممکن است در برخی شرایط رفتار متفاوتی را در مقایسه با آنچه که توسط کتابخانه avr-libc قبلی ارائه شده از خود نشان دهد. برای مثالampبرای روشن کردن قالب بندی، دیگر نیازی به پیوند در کتابخانه 1printf flt (گزینه -1printf_flt) نیست. I0 پشتیبانی از مشخص کننده های فرمت شناور باهوش I0 ویژگی های Microchip Unified Standard Library این گزینه را اضافی می کند. علاوه بر این، استفاده از روتین های پسوند _P برای توابع رشته و حافظه (به عنوان مثال strcpy_P ( ) و غیره) که روی رشته های const در فلش کار می کنند دیگر ضروری نیست. روالهای استاندارد C (به عنوان مثال strcpy ) زمانی که ویژگی const-data-in-program-memory فعال باشد، با چنین داده هایی به درستی کار خواهند کرد.

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 BODLEVEL = BODLEVEL_4V3
اشیاء و توابع مطلق اکنون می توان اشیاء و توابع را با استفاده از مشخص کننده CCI (آدرس) در آدرس خاصی در حافظه قرار داد.ampدر:
#عبارتند از
int foobar_at(0x800100);
char __at(0x250) getID(int offset) {… }
آرگومان این مشخص کننده باید باشد ثابتی که نشان دهنده آدرسی است که اولین بایت یا دستورالعمل در آن قرار می گیرد. آدرس های RAM با استفاده از افست 0x800000 نشان داده می شوند. CCI را برای استفاده از این ویژگی فعال کنید.
نحو تابع وقفه جدید کامپایلر اکنون مشخص کننده CCI _interrupt (num) را می پذیرد تا نشان دهد که توابع C کنترل کننده وقفه هستند. مشخص کننده یک عدد وقفه می گیرد، برای مثالampدر:
#عبارتند از
void __interrupt(SPI_STC_vect_num) spi_Isr(void) {… }

رفع مشکلات

موارد زیر اصلاحاتی است که در کامپایلر انجام شده است. اینها ممکن است اشکالات کد تولید شده را برطرف کنند یا عملکرد کامپایلر را به آنچه که توسط راهنمای کاربر در نظر گرفته شده یا مشخص شده است، تغییر دهند. شماره نسخه در عناوین فرعی اولین نسخه کامپایلر را نشان می دهد که شامل رفع مشکلات بعدی است. برچسب(های) پرانتزی در عنوان، شناسایی آن مشکل در پایگاه داده ردیابی است. در صورت نیاز به تماس با پشتیبانی، اینها ممکن است مفید باشند.
توجه داشته باشید که برخی از مشکلات خاص دستگاه در بسته خانواده دستگاه (DFP) مرتبط با دستگاه تصحیح شده است. برای اطلاعات در مورد تغییرات ایجاد شده در DFP و دانلود آخرین بسته ها به مدیر بسته MPLAB مراجعه کنید.

5.1. نسخه 2.41
مشکلات دانگل در دانگل های Ventura (XC8-3088). ممکن است کامپایلر در هاست‌های macOS Ventura به‌درستی خوانده نشده باشد که برای مجوز استفاده می‌شود، که منجر به خطا در صدور مجوز می‌شود. تغییرات در مدیر مجوز XCLM این مشکل را اصلاح می کند.
نشانگر نادرست تخصیص حافظه (XC8-2925) تلاش برای تخصیص SIZE_MAX بایت (یا مقداری نزدیک به این) از حافظه با استفاده از توابع استاندارد مدیریت حافظه کتابخانه (malloc () و همکاران) به اشتباه انجام شد. هنگام استفاده از اجرای تخصیص حافظه پویا ساده، علاوه بر بلوک درخواستی، به بایت‌های اضافی نیز نیاز بود. اکنون یک اشاره گر NULL برگردانده می شود و در چنین شرایطی erno روی 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" رشته تنظیم کند، در حالی که تابع مقدار صحیح را برمی گرداند اما 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 شکل ویژگی 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 Silicon Errata (D580000882) اجرا شده است. ویژگی کامپایلر const-data-in-config-mapped-progmem به طور پیش فرض برای دستگاه های آسیب دیده اعمال نخواهد شد و این تغییر در AVR-Dx_DFP نسخه 2.2.160 ظاهر می شود.
خطای ساخت با sinhf یا coshf (XC8-2834) تلاش برای استفاده از توابع کتابخانه sinhf () یا coshf () منجر به یک خطای پیوند شد که یک مرجع تعریف نشده را توصیف می کرد. تابع گمشده ارجاع شده اکنون در توزیع کامپایلر گنجانده شده است.
خطاهای ساخت با nopa (XC,8-2833) استفاده از ویژگی nopa با تابعی که نام اسمبلر آن با استفاده از asm ( ) مشخص شده است باعث ایجاد پیام های خطا از اسمبلر می شود. این ترکیب امکان پذیر نیست.
خرابی تابع متغیر با آرگومان های اشاره گر (XC8-2755، XC8-2731) توابع با تعداد متغیر آرگومان انتظار دارند هنگامی که ویژگی const-data-in-progmem فعال است، نشانگرهای 24 بیتی (نوع memx) در لیست آرگومان متغیر ارسال شوند. آرگومان هایی که اشاره گر به حافظه داده بودند به عنوان اشیاء 16 بیتی ارسال می شدند و باعث شکست کد در هنگام خواندن نهایی می شدند. وقتی ویژگی constdata-in-progmem فعال است، همه آرگومان های اشاره گر 16 بیتی اکنون به نشانگرهای 24 بیتی تبدیل می شوند.
عملکردهای کتابخانه strtoxxx خراب می شوند (XC8-2620) هنگامی که ویژگی const-data-in-progmem فعال بود، پارامتر endptr در توابع کتابخانه strtoxxx برای آرگومان های رشته منبع که در حافظه برنامه نیستند به درستی به روز نمی شد.
هشدار برای بازیگران نامعتبر (XC8-2612) اگر ویژگی const-in-progmem فعال باشد و آدرس یک رشته لفظی صریحاً به فضای آدرس داده فرستاده شود، کامپایلر اکنون یک خطا صادر خواهد کرد.ample، (uint 8_t *) "سلام جهان!". در صورتی که آدرس نامعتبر باشد زمانی که یک نشانگر داده const به طور صریح به فضای آدرس داده فرستاده می شود، یک هشدار وجود دارد.
قرار دادن اشیاء const بدون مقدار اولیه (XC8-2408) اشیاء فرار اولیه const و const در دستگاه‌هایی که تمام یا بخشی از حافظه برنامه خود را در فضای آدرس داده نقشه‌برداری می‌کنند، در حافظه برنامه قرار نمی‌گیرند. برای این دستگاه ها، چنین اشیایی در حال حاضر در حافظه برنامه قرار می گیرند و عملکرد آنها با سایر دستگاه ها سازگار است.

5.3. نسخه 2.39 (انتشار ایمنی عملکردی)
هیچ کدام.
5.4. نسخه 2.36
خطا هنگام تاخیر (XC8-2774) تغییرات جزئی در بهینه‌سازی‌های حالت آزاد پیش‌فرض از تا شدن مداوم عبارات عملوند به توابع داخلی تاخیر جلوگیری می‌کند، در نتیجه آنها را به‌عنوان غیرثابت در نظر می‌گیرند و باعث ایجاد خطا می‌شوند: avr delay_cycles داخلی انتظار یک عدد صحیح زمان کامپایل را دارد.
5.5. نسخه 2.35
تخصیص پیوسته با استفاده از _at (XC8-2653) تخصیص پیوسته مکان های چند شی در یک بخش با همان نام و استفاده از _at ( ) به درستی کار نمی کند. برای مثالampدر:
const char arr1[] __خصیصه__((بخش(.mysec))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __خصیصه__((بخش(.mysec))) = {0xEF، 0xFE};
باید arr2 را بلافاصله بعد از arr1 قرار می داد.
مشخص کردن آدرس های شروع بخش (XC8-2650) -W1، -section-start گزینه بی‌صدا در قرار دادن بخش‌ها در آدرس شروع معرفی‌شده شکست خورد. این مشکل برای هر بخش با نام سفارشی برطرف شده است. با این حال، برای هیچ بخش استانداردی مانند . متن یا . bss که باید با استفاده از گزینه -W1, -T قرار داده شود.
لینکر هنگام استراحت خراب می شود (XC8-2647) وقتی بهینه سازی -mrelax فعال شد و بخش های کد یا داده ای وجود داشت که در حافظه موجود نمی گنجید، پیوند دهنده از کار افتاد. اکنون در چنین شرایطی به جای آن پیغام های خطا صادر می شود.

بدون سقوط (XC8-2646) -گزینه nofallback به درستی اجرا نشده و مستند نشده است. اکنون می‌توان این مورد را انتخاب کرد تا اطمینان حاصل شود که کامپایلر در صورت عدم مجوز کامپایلر به تنظیمات بهینه‌سازی پایین‌تر برنمی‌گردد و در عوض یک خطا صادر می‌کند.

بهینه سازی سرعت نامناسب (X03-2637) هنگام انتخاب بهینه‌سازی سطح 3 (03-) بهینه‌سازی‌های انتزاع رویه‌ای فعال می‌شدند. این بهینه‌سازی‌ها اندازه کد را به قیمت کاهش سرعت کد کاهش می‌دهند، بنابراین نباید انجام می‌شد.
EEPROM بد دسترسی داشته باشید (XC8-2629) وقتی گزینه -mconst-data-in-progmem فعال بود (که حالت پیش‌فرض است)، روال eeprom_read_block در دستگاه‌های Xmega به درستی کار نمی‌کرد و در نتیجه حافظه EEPROM به درستی خوانده نمی‌شد.
تخصیص حافظه نامعتبر (XC8-2593، XC8-2651) هنگامی که گزینه -Ttext یا -Tdata linker (برای مثالampبا استفاده از گزینه راننده -vl) مشخص می شود، متن/منبع منطقه داده مربوطه به روز شد. با این حال، آدرس پایانی مطابق با آن تنظیم نشده بود، که می‌توانست منجر به فراتر رفتن منطقه از محدوده حافظه دستگاه مورد نظر شود.
خرابی با عملکرد بیش از حد نسبت داده شده (XC8-2580) اگر تابعی با استفاده از بیش از یکی از ویژگی های وقفه، سیگنال یا nmi، به عنوان مثال، ویژگی ( ( سیگنال، وقفه ) ) اعلان شود، کامپایلر خراب می شود.
کد وقفه ATtiny نامعتبر (XC8-2465) هنگام ساخت دستگاه‌های ATtiny و بهینه‌سازی‌ها غیرفعال شدند (00-)، توابع وقفه ممکن است پیام‌های اسمبلر عملوند خارج از محدوده را راه‌اندازی کرده باشند.
گزینه هایی که از طریق آنها ارسال نمی شود (XC8-2452) هنگام استفاده از گزینه با چندین گزینه پیوند دهنده جدا شده با کاما، همه گزینه های پیوند دهنده به پیوند دهنده منتقل نمی شدند.
خطا در خواندن غیر مستقیم حافظه برنامه (X03-2450) در برخی موارد، کامپایلر هنگام خواندن یک مقدار دو بایت از یک اشاره گر به حافظه برنامه، یک خطای داخلی (insn غیرقابل تشخیص) ایجاد کرد.
5.6. نسخه 2.32
دسترسی دوم از کتابخانه خراب می شود (XC8-2381) فراخوانی نسخه ویندوز xc8-ar. بایگانی کتابخانه exe. برای بار دوم برای دسترسی به بایگانی کتابخانه موجود ممکن است با پیام خطای عدم امکان تغییر نام شکست خورده باشد.
5.7. نسخه 2.31
کامپایلر غیر قابل توضیح خرابی (XC8-2367) هنگام اجرا بر روی پلتفرم‌های ویندوزی که دایرکتوری موقت سیستم روی مسیری تنظیم شده است که شامل یک نقطه است. کاراکتر، ممکن است کامپایلر در اجرای آن شکست خورده باشد.
5.8. نسخه 2.30
برچسب‌های جهانی پس از خط‌کشی (XC8-2299) اشتباه قرار گرفته‌اند کد اسمبلی دست‌نویس که برچسب‌های سراسری را در توالی‌های اسمبلی قرار می‌دهد که توسط انتزاع رویه‌ای فاکتور می‌شوند، ممکن است به درستی تغییر مکان داده نشده باشند.
تصادف آرامش بخش (XC8-2287) استفاده از گزینه -mrelax ممکن است باعث از کار افتادن پیونددهنده شود زمانی که بهینه‌سازی‌های tail jump relaxation تلاش می‌کردند دستورالعمل‌های ret را حذف کنند که در انتهای یک بخش نبودند.
خرابی هنگام بهینه سازی برچسب ها به عنوان مقادیر (XC8-2282) کدی که از پسوند زبان گنو C "برچسب‌ها به‌عنوان مقادیر" استفاده می‌کند، ممکن است باعث از کار افتادن بهینه‌سازی‌های انتزاعی رویه‌ای شده باشد، با یک خطای اصلاح محدوده گستره VMA Outlined.
نه چندان مقرون به صرفه (XC8-2271) نمونه های اولیه برای st rstr ( ) و توابع دیگر از هنگامی که ویژگی -mconst-data-inprogmem غیرفعال است، دیگر واجد شرایط const غیر استاندارد را در نشانگرهای رشته برگشتی مشخص نکنید. توجه داشته باشید که در دستگاه های avrxmega3 و avrtiny این قابلیت به صورت دائمی فعال است.
از دست رفته اولیه (XC8-2269) زمانی که بیش از یک متغیر در یک واحد ترجمه در یک بخش قرار داده شد (با استفاده از _section یا _خصیصه_ ( (بخش) ))، و اولین متغیر از این قبیل صفر مقدار دهی اولیه شده بود یا فاقد یک مقدار اولیه بود، مقداردهی اولیه برای متغیرهای دیگر در همان واحد ترجمه قرار داده شد. در همان بخش گم شدند.
5.1. نسخه 2.29 (انتشار ایمنی عملکردی)
هیچ کدام.
5.2. نسخه 2.20
خطا در دستورات طولانی (XC8-1983) هنگام استفاده از یک هدف AVR، کامپایلر ممکن است با a متوقف شده باشد file خطا یافت نشد، اگر خط فرمان بسیار بزرگ بود و دارای کاراکترهای خاصی مانند نقل قول، بک اسلش و غیره بود.
بخش rodata اختصاص نیافته (XC8-1920) پیوند دهنده AVR در هنگام ساختن معماری‌های avrxmega3 و avrtiny نتوانست حافظه را برای بخش‌های rodata سفارشی تخصیص دهد، و احتمالاً خطاهای همپوشانی حافظه ایجاد می‌کند.
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) هنگام ساخت تحت ویندوز، ممکن است یک خطای کامپایلر داخلی هنگام بهینه سازی کد ایجاد شده باشد.
سرریز RAM شناسایی نشد (XC8-1800، XC8-1796) برنامه هایی که از RAM موجود بیشتر بودند در برخی شرایط توسط کامپایلر شناسایی نشدند که منجر به خرابی کد زمان اجرا شد.
حافظه فلش حذف شده (XC8-1792) برای دستگاه های avrxmega3 و avrtiny، ممکن است قسمت هایی از فلش مموری توسط MPLAB X برنامه ریزی نشده باشد. IDE.
عدم اجرای اصلی (XC8-1788) در برخی شرایط که برنامه هیچ متغیر جهانی تعریف نشده بود، کد راه‌اندازی زمان اجرا خارج نمی‌شد و تابع اصلی ( ) هرگز به آن دسترسی پیدا نمی‌کرد.
اطلاعات حافظه نادرست (XC8-1787) برای دستگاه های avrxmega3 و avrtiny، برنامه avr-size گزارش می داد که داده های فقط خواندنی به جای حافظه برنامه، RAM مصرف می کنند.
حافظه برنامه خوانده شده نادرست (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 زمانی که کامپایلر تحت اوبونتو 18 اجرا می شد از کار افتاده باشد.
اشیاء پاک نشده (XC8-1752) ممکن است اشیاء مدت زمان ذخیره‌سازی استاتیک اولیه توسط کد راه‌اندازی زمان اجرا پاک نشده باشند.
مشخصات دستگاه متناقض نادیده گرفته شد (XC8-1749) کامپایلر هنگام استفاده از چندین گزینه مشخصات دستگاه و نشان دادن دستگاه های مختلف، خطایی ایجاد نمی کرد.
تخریب حافظه توسط پشته (XC8-1748) نماد _heap_start به درستی تنظیم نشده بود و در نتیجه احتمال خراب شدن متغیرهای معمولی توسط پشته وجود داشت.
خطای جابجایی لینکر (XC8-1739) ممکن است زمانی که کد حاوی rjmp یا rcall با هدف دقیقاً 4k بایت فاصله دارد، یک خطای جابجایی پیوند دهنده منتشر شده باشد.
5.6. نسخه 2.00
هیچ کدام.

مسائل شناخته شده

در زیر محدودیت هایی در عملکرد کامپایلر وجود دارد. اینها ممکن است محدودیت های کدگذاری عمومی یا انحراف از اطلاعات مندرج در دفترچه راهنمای کاربر باشد. برچسب(های) پرانتزی در عنوان، شناسایی آن مشکل در پایگاه داده ردیابی است. در صورت نیاز به تماس با پشتیبانی، این ممکن است مفید باشد. مواردی که دارای برچسب نیستند، محدودیت هایی هستند که مدی operandi را توصیف می کنند و احتمالاً به طور دائمی قابل اجرا خواهند بود.
6.1. MPLAB X IDE یکپارچه سازی
MPLAB IDE ادغام اگر قرار است کامپایلر از MPLAB IDE استفاده شود، قبل از نصب کامپایلر باید MPLAB IDE را نصب کنید.
6.2. تولید کد
Segfault with section-anchors (XC8-3045) برنامه ای که توابعی را با لیست های آرگومان متغیر تعریف می کند و از گزینه -fsection-anchors استفاده می کند، ممکن است یک خطای کامپایلر داخلی ایجاد کرده باشد: Segmentation fault.
اطلاعات اشکال زدایی ناهمگام (XC8-2948) هنگامی که بهینه سازی آرامش پیوند دهنده دستورالعمل ها را کوچک می کند (به عنوان مثالampبرای فراخوانی دستورالعمل‌های فراخوانی)، نگاشت‌های خط مبدأ به آدرس ممکن است زمانی که بیش از یک عملیات کوچک کردن در یک بخش انجام می‌شود، هماهنگ باقی نمانند.
در زیر سابقampدو تماس با فوو وجود دارد که در نهایت به تماس‌های نسبی آرام می‌شوند.
عدم تخصیص حافظه PA (XC8-2881) هنگام استفاده از بهینه سازهای انتزاعی رویه ای، پیوند دهنده ممکن است خطاهای تخصیص حافظه را گزارش کند، زمانی که اندازه کد نزدیک به مقدار حافظه برنامه موجود در دستگاه است، حتی اگر برنامه بتواند با فضای موجود مطابقت داشته باشد.
Smart-I0 نه چندان هوشمند (XC8-2872) اگر ویژگی const-da-in-progmem غیرفعال شده باشد یا اگر دستگاه تمام فلش خود را در حافظه داده نگاشت کرده باشد، ویژگی smart-io کامپایلر، کد معتبر اما کمتر از حد بهینه را برای تابع snprint f ایجاد می کند.
Smart-I0 حتی کمتر هوشمند (XC8-2869) ویژگی smart-io کامپایلر زمانی که از گزینه های -flto و -fno-builtin هر دو استفاده شود، کد معتبر اما کمتر از حد مطلوب تولید می کند.
قرار دادن داده‌های فقط خواندنی غیربهینه (XC8-2849) پیوند دهنده در حال حاضر از بخش های حافظه APPCODE و APPDATA و همچنین از تقسیمات [No-Read-While-Write در نقشه حافظه آگاه نیست. در نتیجه، احتمال کمی وجود دارد که پیوند دهنده داده های فقط خواندنی را در یک ناحیه نامناسب از حافظه تخصیص دهد. اگر ویژگی const-data-in-progmem فعال باشد، احتمال داده های نابجا افزایش می یابد، به خصوص اگر ویژگی const-data-in-config-mapped-progmem نیز فعال باشد. در صورت نیاز می توان این ویژگی ها را غیرفعال کرد.
شیء file پردازش سفارش (XC8-2863) ترتیب اشیاء fileممکن است بر اساس استفاده از بهینه‌سازی‌های انتزاعی رویه‌ای (گزینه -mpa) توسط پیوند دهنده پردازش شود. این فقط بر روی کدی تأثیر می گذارد که توابع ضعیف را در چندین ماژول تعریف می کند.
خطای پیوند دهنده با مطلق (XC8-2777) هنگامی که یک شی در یک آدرس در ابتدای RAM مطلق می شود و اشیاء اولیه نیز تعریف می شوند، ممکن است یک خطای پیوند دهنده ایجاد شود.
شناسه‌های بیداری کوتاه (XC8-2775) برای دستگاه‌های ATA5700/2، رجیسترهای PHIDO/1 فقط به‌عنوان عرض 16 بیت تعریف می‌شوند تا عرض 32 بیت.
خرابی لینکر هنگام فراخوانی نماد (XC8-2758) اگر زمانی که کد منبع نمادی را که با استفاده از گزینه -cc., -de f sym linker تعریف شده است، صدا می‌زند، از گزینه راننده -mrelax استفاده شود، ممکن است از کار بیفتد.
مقداردهی اولیه نادرست (XC8-2679) وجود دارد یک اختلاف بین جایی که مقادیر اولیه برای برخی از اشیاء بایت جهانی/استاتیک در حافظه داده قرار می‌گیرند و جایی که متغیرها در زمان اجرا قابل دسترسی خواهند بود.
فراخوانی عملکرد غیرمستقیم بد (XC8-2628) در برخی موارد، فراخوانی های تابعی که از طریق نشانگر تابع ذخیره شده به عنوان بخشی از ساختار انجام می شود ممکن است با شکست مواجه شوند.
strtof صفر را برای شناورهای هگزا دسیمال برمی گرداند (XC8-2626) توابع کتابخانه strtof et al و scanf ( ) و همکاران، همیشه یک عدد ممیز شناور هگزادسیمال را که توانی را مشخص نمی کند به صفر تبدیل می کند. برای مثالampدر:
strtof ("Oxl"، &endptr) ;
مقدار 0 را برمی گرداند نه I.
پیام‌های نادرست پشته مشاور (XC8-2542، XC8-2541) در برخی موارد، هشدار مشاور پشته در مورد بازگشت یا پشته نامشخص استفاده شده (احتمالاً از طریق استفاده از alloca()) منتشر نمی شود.
مشکل با کد وقفه تکراری (XC8-2421) در جایی که بیش از یک تابع وقفه دارای بدنه یکسانی باشد، کامپایلر ممکن است خروجی یک تابع وقفه دیگر را داشته باشد. این باعث می‌شود که همه رجیسترهای clobbered به‌طور غیرضروری ذخیره شوند و وقفه‌ها حتی قبل از اجرای اپیلوگ کنترل‌کننده وقفه فعلی فعال می‌شوند که می‌تواند منجر به شکست کد شود.
خروجی بد با مسیر DFP نامعتبر (XC8-2376) اگر کامپایلر با یک مسیر DFP نامعتبر و یک 'spec' فراخوانی شود file برای دستگاه انتخابی وجود دارد، کامپایلر بسته خانواده دستگاه گمشده را گزارش نمی‌کند و در عوض «مشخصات» را انتخاب می‌کند. file، که ممکن است منجر به خروجی نامعتبر شود. 'مشخصات' fileممکن است s با DFP های توزیع شده به روز نباشند و فقط برای آزمایش کامپایلر داخلی در نظر گرفته شده باشند.
همپوشانی حافظه شناسایی نشد (XC8-1966) کامپایلر همپوشانی حافظه اشیایی که در یک آدرس (از طریق _at ( )) مطلق شده اند و سایر اشیاء با استفاده از مشخص کننده بخش ( ) و که به همان آدرس پیوند شده اند را تشخیص نمی دهد.
خرابی توابع کتابخانه و _memx (XC8-1763) توابع شناور libgcc با آرگومان در فضای آدرس memx ممکن است شکست بخورند. توجه داشته باشید که روال های کتابخانه از برخی عملگرهای C فراخوانی می شوند، بنابراین، برای مثالample، کد زیر تحت تأثیر قرار می گیرد:
بازگشت regFloatVar > memxFloatVar;
اجرای محدود libgcc (AVRTC-731) برای محصولات ATTiny4/5/9/10/20/40، اجرای استاندارد کتابخانه C / Math در libgcc بسیار محدود است یا وجود ندارد.
محدودیت های حافظه برنامه (AVRTC-732) تصاویر حافظه برنامه بیش از 128 کیلوبایت توسط زنجیره ابزار پشتیبانی می شوند. با این حال، نمونه‌های شناخته شده‌ای از سقط لینکر بدون آرامش و بدون پیام خطای مفید به جای تولید تابع موردنیاز در هنگام استفاده از گزینه -mre lax وجود دارد.
محدودیت فضای نام (AVRTC-733) فضاهای آدرس نامگذاری شده توسط زنجیره ابزار، مشروط به محدودیت های ذکر شده در بخش راهنمای کاربر، واجد شرایط نوع ویژه، پشتیبانی می شوند.
مناطق زمانی توابع کتابخانه GMT را فرض می کنند و از مناطق زمانی محلی پشتیبانی نمی کنند، بنابراین localtime ( ) همان زمان gmtime ( ) را برمی گرداند.ampله

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

اسناد / منابع

نرم افزار توسعه کامپایلر MICROCHIP MPLAB XC8 C [pdf] دفترچه راهنما
MPLAB XC8 C، MPLAB XC8 C نرم افزار توسعه کامپایلر، نرم افزار توسعه کامپایلر، نرم افزار توسعه، نرم افزار

مراجع

نظر بدهید

آدرس ایمیل شما منتشر نخواهد شد. فیلدهای الزامی مشخص شده اند *