לוגו MICROCHIPMPLAB® XC8 C מהדר גרסה 2.41 הערות גרסה עבור AVR® MCU
מדריך לבעלים

תוכנת פיתוח מהדר MPLAB XC8 C

מסמך זה מכיל מידע חשוב הקשור לקומפיילר MPLAB XC8 C בעת מיקוד למכשירי MICROCHIP AVR.
אנא קרא אותו לפני הפעלת תוכנה זו. ראה את הערות הפרסום של MPLAB XC8 C למסמך PIC אם אתה משתמש ב-Compiler עבור התקני PIC של 8 סיביות.

מֵעַל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 MCUs נכתבים ומופצים תחת הרישיון הציבורי הכללי של GNU (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; Ubuntu® 18.04; ו-macOS® 10.15.5. קבצים בינאריים עבור Windows נחתמו בקוד. קבצים בינאריים עבור macOS עברו חתימת קוד ואישור נוטריוני. שרת הרשיון הרשת MPLAB XC זמין עבור מגוון מערכות הפעלה של 64 סיביות, כולל Microsoft Windows 10 ומעלה; אובונטו 18.04 ומעלה; או macOS 10.15 ומעלה. השרת עשוי לפעול גם על מערכות הפעלה שונות אחרות, כולל Windows Server, הפצות לינוקס, כגון Oracle® Enterprise Linux® ו-Red Hate Enterprise Linux וכן גרסאות ישנות יותר של מערכות הפעלה נתמכות. עם זאת, MPLAB XC Network License Server אינו נבדק במערכות הפעלה אלו. ניתן להפעיל את שרת הרשיון הרשת MPLAB XC במכונות וירטואליות של מערכת ההפעלה הנתמכת באמצעות רישיון מכונה וירטואלית עבור רישיונות רשת (SW006021-VM). כל גרסאות 32 הסיביות של שרת הרשת MPLAB XC מופסקות החל מגרסה 3.00.
מכשירים נתמכים
מהדר זה תומך בכל התקני 8-bit AVR MCU הזמינים בזמן השחרור. ראה (בספריית המהדר) לרשימה של כל המכשירים הנתמכים. גם קבצים אלה רשומים
avr_chipinfo.html הגדרות סיביות תצורת doc עבור כל מכשיר.

1.7. מהדורות ושדרוגי רישיונות
ניתן להפעיל את המהדר MPLAB XC8 כמוצר מורשה (PRO) או ללא רישיון (חינם). עליך לרכוש מפתח הפעלה כדי להעניק רישיון למהדר שלך. רישיון מאפשר רמת אופטימיזציה גבוהה יותר בהשוואה למוצר Free. מהדר ללא רישיון יכול להיות מופעל ללא רישיון. יש להפעיל מהדר MPLAB XC8 Functional Safety עם רישיון בטיחות תפקודית שנרכש מ-Microchip. המהדר לא יפעל ללא רישיון זה. לאחר ההפעלה, תוכל לבחור כל רמת אופטימיזציה ולהשתמש בכל תכונות המהדר. מהדורה זו של MPLAB XC Functional Safety Compiler תומכת ברישיון שרת הרשת.
עיין במסמך התקנה ורישוי MPLAB XC C מהדרים (DS50002059) למידע על סוגי רישיונות והתקנת המהדר עם רישיון.

1.8. התקנה והפעלה
עיין גם בסעיפים בנושאי הגירה ומגבלות למידע חשוב על מנהל הרישיונות העדכני ביותר שנכלל במהדר זה.
אם אתה משתמש ב-MPLAB IDE, הקפד להתקין את הגרסה העדכנית ביותר של MPLAB X IDE גרסה 5.0 ואילך לפני התקנת כלי זה. צא מה-IDE לפני התקנת המהדר. הפעל את (Windows), (Linux) או (macOS) .exe .run .app מתקין מהדר, למשל ופעל לפי ההוראות על המסך. XC8-1.00.11403-windows.exe מומלצת ספריית ההתקנה המוגדרת כברירת מחדל. אם אתה משתמש בלינוקס, עליך להתקין את המהדר באמצעות מסוף ומחשבון שורש. התקן באמצעות חשבון macOS עם הרשאות מנהל.
ההפעלה מתבצעת כעת בנפרד להתקנה. עיין במסמך License Manager עבור MPLAB® XC C מהדרים (DS52059) למידע נוסף.
אם תבחר להפעיל את המהדר תחת רישיון ההערכה, כעת תקבל אזהרה במהלך הקומפילציה כאשר אתה בתוך 14 ימים מתום תקופת ההערכה שלך. אותה אזהרה מונפקת אם אתה נמצא בתוך 14 ימים מתום מנוי ה-HPA שלך.
XC Network License Server הוא מתקין נפרד ואינו כלול במתקין המהדר למשתמש יחיד.
XC License Manager תומך כעת בנדידה של רישיונות רשת צפים. תכונה זו מיועדת למשתמשים ניידים מאפשרת לרישיון צף לצאת מהרשת לפרק זמן קצר. באמצעות תכונה זו, אתה יכול להתנתק מהרשת ועדיין להשתמש במהדר MPLAB XC שלך. עיין בתיקיית המסמכים של התקנת XCLM למידע נוסף על תכונה זו.
MPLAB X IDE כולל חלון רישיונות (כלים > רישיונות) לניהול ויזואלי של נדידה.

1.8.1. פתרון בעיות התקנה
אם אתה נתקל בקשיים בהתקנת המהדר באחת ממערכות ההפעלה של Windows, נסה את ההצעות הבאות.
הפעל את ההתקנה כמנהל מערכת.
הגדר את ההרשאות של יישום ההתקנה ל'שליטה מלאה'. (לחץ לחיצה ימנית על הקובץ, בחר מאפיינים, כרטיסיית אבטחה, בחר משתמש, ערוך.)
הגדר את ההרשאות של התיקיה הזמנית ל'שליטה מלאה'.
כדי לקבוע את מיקום התיקיה הזמנית, הקלד %temp% בפקודת ההפעלה (מקש הלוגו של Windows + R).
פעולה זו תפתח תיבת דו-שיח של סייר קבצים המציגה את הספרייה ותאפשר לך לקבוע את הנתיב של אותה תיקייה.
1.9. תיעוד מהדר
את המדריכים למשתמש של המהדר ניתן לפתוח מדף ה-HTML שנפתח בדפדפן שלכם בלחיצה על כפתור העזרה הכחול בלוח המחוונים של MPLAB X IDE, כפי שמצוין בצילום המסך.

אם אתה בונה עבור יעדי AVR של 8 סיביות, המדריך למשתמש של MPLAB® XC8 C מהדר עבור AVR® MCU מכיל מידע על אפשרויות המהדר ותכונות אלה הרלוונטיים לארכיטקטורה זו.

תוכנת פיתוח מהדר MICROCHIP MPLAB XC8 C -

1.10. תמיכת לקוחות
Microchip מקבל בברכה דיווחי באגים, הצעות או הערות לגבי גרסת מהדר זו. נא להפנות דיווחי באגים או בקשות לתכונה דרך מערכת התמיכה.

עדכוני תיעוד

לגירסאות מקוונות ועדכניות של תיעוד MPLAB XC8, בקר בתיעוד הטכני המקוון של Microchip webאֲתַר. תיעוד חדש או מעודכן של AVR במהדורה זו:

  • מדריך למשתמש של MPLAB® XC8 C מהדר עבור AVR® MCU (גרסה G)
  • AVR® GNU Toolchain ל-MPLAB® XC8 מדריך הגירה (גרסה א')
  • מדריך למשתמש של Hexmate (גרסה ב')

מדריך ההעברה של AVR® GNU Toolchain ל-MPLAB® XC8 מתאר את השינויים בקוד המקור ובאפשרויות הבנייה שעשויות להידרש אם תחליט להעביר פרויקט מבוסס C מ-AVR 8-bit GNU Toolchain ל-Microchip MPLAB XC8 C מהדר. מדריך העזר של Microchip Unified Standard Library מתאר את ההתנהגות והממשק לפונקציות המוגדרות על ידי Microchip Unified Standard Library, כמו גם את השימוש המיועד בסוגי הספרייה ופקודות המאקרו. חלק מהמידע הזה היה כלול בעבר במדריך למשתמש של MPLAB® XC8 C מהדר עבור AVR® MCU. מידע ספרייה ספציפי למכשיר עדיין כלול במדריך המהדר הזה.
אם אתה רק מתחיל עם התקני 8 סיביות והקומפיילר MPLAB XC8 C, המדריך למשתמש MPLAB® XC8 למהנדסים משובצים – AVR® MCUs (DS50003108) מכיל מידע על הגדרת פרויקטים ב-MPLAB X IDE וכתיבת קוד עבורך פרויקט MPLAB XC8 C הראשון. מדריך זה מופץ כעת עם המהדר.
המדריך למשתמש של Hexmate מיועד למי שמפעיל את Hexmate כאפליקציה עצמאית.

מה חדש

להלן תכונות חדשות של AVR-target שהמהדר תומך כעת. מספר הגרסה בכותרות המשנה מציין את גרסת המהדר הראשונה שתומכת בתכונות הבאות.
3.1. גרסה 2.41
תמיכה באתחול (XC8-3053) המהדר ימקם את התוכן של חלקים עם קידומת בכתובת.bootrow 0x860000 בקובץ HEX. חלקים אלה משמשים עבור זיכרון BOOTROW, אשר מיועד לאחסון מפתחות ומידע מאובטח אחר שאמור להיות נגיש רק למטען אתחול.

חיסול החזר מיותר (XC8-3048) המהדר יבטל כעת הוראות מיותרות בפונקציות ret עם קפיצת זנב כאשר נעשה שימוש בסקריפטים מקשר מותאמים אישית. זוהי אופטימיזציה דומה לזו שבוצעה בעבר, אך כעת היא מבוצעת בכל החלקים היתומים, גם אם נעשה שימוש בסקריפט קישור מותאם אישית וסכימת ההקצאה המתאימה ביותר אינה פועלת. שינוי סוג זמן (XC8-2982, 2932) סוג הספרייה הסטנדרטית C99, שונה מ-time_t ל-type, מה שנותן שיפורים בגודל קוד בחלק מהפונקציות ארוכות ארוכות הקשורות לזמן, כגון. unsigned long mktime()
Nop חדש (XC8-2946, 2945) המאקרו נוסף ל. מאקרו זה מוסיף () no- NOP הוראות הפעלה של nop לתוך הפלט.
עדכון ל-XCLM (XC8-2944) מנהל הרישיון המשמש עם המהדר עודכן וכעת הוא מגיב יותר בעת בדיקת פרטי הרישיון של המהדר.
Trampשיחות olined (XC8-2760) המהדר יכול כעת לבצע החלפה של הוראות שיחות ארוכות בקריאות יחסיות קצרות יותר כאשר הצורות היחסיות של ההוראות בדרך כלל נמצאות מחוץ לטווח היעד שלהן. במצב זה, המהדר ינסה להחליף בהוראות לקריאת rcall פקודה שתהיה 'trampביצוע oline לכתובת הנדרשת, למשלample: jmp
rcall tramp_foo ;היה קורא פו
...
rcall tramp_פו
...
tramp_פו:
jmp foo

אופטימיזציה זו, יחד עם אופטימיזציות דומות של זרימת תוכניות, נשלטת על ידי האפשרות -mrelax.

3.2. גרסה 2.40
תמיכה במכשירים חדשים זמינה כעת עבור חלקי הרסיבר הבאים: AT90PWM3, AVR16DD14, AVR16DD20, AVR16DD28, AVR16DD32, AVR32DD14, AVR32DD20, AVR32DD28, AVR32DD32, AVR64EA28, AVR64EA32, AVR64EA48 ו-AVRXNUMXEAXNUMX.
הפשטה פרוצדורלית משופרת כלי האופטימיזציה של הפשטה פרוצדורלית (PA) שופרה כך שניתן להשתמש בקוד המכיל הוראת קריאת פונקציה (/ ). זה יתקיים רק ב-call אם הערימה לא משמשת להעברת ארגומנטים או לקבל ערך החזרה מהפונקציה. המחסנית משמשת בעת קריאה לפונקציה עם רשימת ארגומנטים משתנים או בעת קריאה לפונקציה שלוקחת יותר ארגומנטים מאשר יש אוגרים המיועדים למטרה זו. ניתן להשבית תכונה זו באמצעות האפשרות, או ניתן להשבית לחלוטין הפשטה פרוצדורלית עבור קובץ אובייקט או פונקציה על ידי שימוש ב-ו, בהתאמה, או על ידי שימוש סלקטיבי בתכונה (מפרט) עם פונקציות.
mno-pa-outline-calls -mno-pa-on-file -mno-pa-on-function nopa מאקרו כיסוי קוד המהדר מגדיר כעת את המאקרו אם צוינה אפשרות חוקית __nopa __CODECOV -mcodecov.
אפשרות שמירת זיכרון הנהג יקבל כעת את האפשרות xc8-cc -mreserve=space@start:end בעת בנייה עבור יעדי AVR. אפשרות זו שומרת את טווח הזיכרון שצוין בשטח זיכרון הנתונים או התוכנית, ומונעת מהמקשר לאכלס קוד או אובייקטים באזור זה. חכם חכם יותר בוצעו מספר שיפורים בפונקציות ה-Smart IO, כולל שינויים כלליים בקוד הליבה printf, התייחסות למפרט ההמרה %n כגרסה עצמאית, קישור בשגרות פופ של vararg לפי דרישה, שימוש בסוגי נתונים קצרים יותר במידת האפשר לטיפול ארגומנטים של פונקציית IO, והפקת קוד משותף בטיפול ברוחב שדה ובדיוק. זה יכול לגרום לחיסכון משמעותי בקוד ובנתונים, כמו גם להגביר את מהירות הביצוע של IO.

3.3. גרסה 2.39 (מהדורת בטיחות פונקציונלית)
רישיון שרת רשת מהדורה זו של מהדר הבטיחות הפונקציונלית MPLAB XC8 תומכת ברישיון שרת הרשת.
3.4. גרסה 2.36
אַף לֹא אֶחָד.

3.5. גרסה 2.35
תמיכה במכשירים חדשים זמינה עבור חלקי הרסיבר הבאים: 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 כדי שהמקשר יציב את כל הנתונים המוסמכים ל-const בקטע אחד של 32k ולאתחל אוטומטית את אוגר ה-SFR הרלוונטי כדי להבטיח שהנתונים הללו ממופים בזיכרון הנתונים החלל, שבו נגישות אליו בצורה יעילה יותר.
ספריות סטנדרטיות מאוחדות של Microchip כל המהדרים של MPLAB XC ישתפו ספריית Microchip Unified Standard, הזמינה כעת עם מהדורה זו של MPLAB XC8. המדריך למשתמש של MPLA# XC8 C מהדר עבור AVO MCU אינו כולל עוד את התיעוד עבור הפונקציות הסטנדרטיות הללו. כעת ניתן למצוא מידע זה ב- Microchip Unified Standard Library Reference Guide. שים לב שחלק מהפונקציונליות שהוגדרה בעבר על ידי avr-libc אינה זמינה עוד. (ראה פונקציונליות של לילה.)
Smart I0 כחלק מהספריות המאוחדות החדשות, פונקציות I0 במשפחות printf ו-scanf נוצרות כעת בהתאמה אישית על כל build, בהתבסס על אופן השימוש בפונקציות אלו בתוכנית. זה יכול להפחית באופן משמעותי את המשאבים שבהם משתמשת תוכנית.
אפשרות סיוע חכמה 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, שניתן לבקש בדרך הרגילה.
תמיכה במכשירים חדשים זמינה עבור חלקי הרסיבר הבאים: ATTINY427, ATTINY424, ATTINY426, ATTINY827, ATTINY824, ATTINY826, AVR32DB32, AVR64DB48, AVR64DB64, AVR64DB28, AVR32DB28, AVR64DB32, AVR32. תמיכה במכשירים נסוגים לא זמינה עוד עבור חלקי הרסיבר הבאים: AVR48DA16, AVR28DA16 ו-, AVR32DA16.
3.7. גרסה 2.31
אַף לֹא אֶחָד.
3.8. גרסה 2.30
אפשרות חדשה למניעת אתחול נתונים אפשרות חדשה של מנהל התקן -mno-data-init מונעת אתחול הנתונים וניקוי קטעי bss. זה עובד על ידי דיכוי הפלט של נתוני ה-do copy ולעשות סמלי bss ברורים בהרכבה files, אשר בתורו ימנע הכללת אותן שגרות על ידי המקשר.
אופטימיזציות משופרות בוצעו מספר שיפורים באופטימיזציה, כולל הסרת הוראות החזרה מיותרות, הסרה של כמה קפיצות בעקבות הוראה לדלג-אם-bit-is, והפשטה פרוצדורלית משופרת והיכולת לחזור על תהליך זה. אפשרויות נוספות זמינות כעת לשלוט בחלק מהאופטימיזציות הללו, במיוחד -f section-anchors, המאפשרת גישה של אובייקטים סטטיים להתבצע ביחס לסמל אחד; -mpa-iterations=n, המאפשר לשנות את מספר איטרציות ההפשטה הפרוצדורליות מברירת המחדל של 2; וכן, -mpa-callcost-shortcall, שמבצעת הפשטה פרוצדורלית אגרסיבית יותר, בתקווה שהמקשר יוכל להרגיע שיחות ארוכות. אפשרות אחרונה זו יכולה להגדיל את גודל הקוד אם ההנחות הבסיסיות לא מתממשות.
תמיכה במכשירים חדשים זמינה עבור חלקי הרסיבר הבאים: AVR16DA28, AVR16DA32, AVR16DA48, AVR32DA28, AVR32DA32, AVR32DA48, AVR64DA28, AVR64DA32, AVR64DA48, AVR64DA64, AVR128, AVR28, AVR128, AVR32, AVR128, VR48DB128. תמיכה במכשירים נסוגים אינה זמינה עוד עבור חלקי הרסיבר הבאים: ATA64, ATA5272, ATA5790N, ATA5790, ATA5791, ATA5795, ATA6285, ATA6286C, ATA6612C, ATA6613Q, ATA6614C, ATA6616C, ATA6617C, ATA664251C, ATAXNUMXC, ATAXNUMXC, ATAXNUMXC.
3.9. גרסה 2.29 (מהדורת בטיחות פונקציונלית)
כּוֹתֶרֶת file עבור מהדר מוכלל כדי להבטיח שהמהדר יכול להתאים למפרטי שפה כגון MISRA, ה כּוֹתֶרֶת file, שנכלל אוטומטית על ידי , עודכן. כותרת זו מכילה את אבות הטיפוס של כל הפונקציות המובנות, כגון buildin_avr_nop ( ) ו-built avr delay_cycles () . ייתכן שחלק מהרכיבים המובנים אינם תואמים ל-MISRA; ניתן להשמיט אותם על ידי הוספת ה-defineXCSTRICT_MISRA לשורת הפקודה של המהדר. המובנים וההצהרות שלהם עודכנו לשימוש בסוגי רוחב קבוע.
3.10. גרסה 2.20
תמיכה במכשירים חדשים זמינה עבור חלקי הרסיבר הבאים: ATTINY1624, ATTINY1626 ו-ATTINY1627.
הקצאת התאמה טובה יותר הקצאת ההתאמה הטובה ביותר (BFA) במהדר שופרה כך שקטעים מוקצים בסדר המאפשר אופטימיזציה טובה יותר. ה-BFA תומך כעת במרחבי כתובות בעלי שם ומטפל טוב יותר באתחול נתונים.
הפשטה פרוצדורלית משופרת אופטימיזציות ההפשטה הפרוצדורלית מבוצעות כעת על רצפי קוד נוספים. מצבים קודמים שבהם אופטימיזציה זו עשויה להגדיל את גודל הקוד טופלו על ידי הפיכת קוד האופטימיזציה למודע לתהליך איסוף האשפה של המקשר.
היעדר מרכיב הרסיבר מרכיב הרסיבר אינו כלול עוד בהפצה זו.
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 ממוקם בספריית המסמכים של הפצת המהדר. זֶה file מפרט את כל ההתקנים הנתמכים על ידי המהדר. לחץ על שם מכשיר, והוא יפתח דף המציג את כל הגדרות/הכאבי הערך המותרים של סיביות התצורה עבור אותו מכשיר, עם דוגמהamples. הפשטה פרוצדורלית
אופטימיזציות של הפשטה פרוצדורלית, המחליפות בלוקים נפוצים של קוד אסמבלי בקריאות לעותק שחולץ של הבלוק הזה, נוספו למהדר. אלה מבוצעות על ידי אפליקציה נפרדת, המופעלת אוטומטית על ידי המהדר בעת בחירת אופטימיזציות ברמה 2, 3 או s. אופטימיזציות אלה מקטינות את גודל הקוד, אך הן עשויות להפחית את מהירות הביצוע ואת יכולת ניפוי הקוד. ניתן להשבית הפשטה פרוצדורלית ברמות אופטימיזציה גבוהות יותר באמצעות האפשרות -mno-pa, או שניתן להפעיל אותה ברמות אופטימיזציה נמוכות יותר (בכפוף לרישיון שלך) באמצעות -mpa. זה יכול להיות מושבת עבור אובייקט file באמצעות -mno-pa-on-file=filename, או מושבת עבור פונקציה באמצעות -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 בזיכרון ה-Flash של התוכנית, במקום למצוא אותם ב-RAM. המהדר שונה כך שהנתונים הגלובאליים המוסמכים לחסרונות מאוחסנים בזיכרון הבזק של התוכנית וניתן לגשת לנתונים אלה ישירות ובעקיפין באמצעות הוראות זיכרון התוכנית המתאימות. תכונה חדשה זו מופעלת כברירת מחדל, אך ניתן להשבית אותה באמצעות האפשרות -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 Common מהדר זה יכול כעת להתאים לממשק MPLAB Common C, מה שמאפשר להעביר קוד מקור בקלות רבה יותר על פני כל המהדרים של 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 לשעבר. למשלample, אין עוד צורך לקשר בספריית 1printf flt (אפשרות -1printf_flt) כדי להפעיל פורמט I0 תמיכה במפרטי פורמט צף. החכם I0 התכונות של Microchip Unified Standard Library הופכות אפשרות זו למיותרת. בנוסף, השימוש בשגרות סיומת _P עבור פונקציות מחרוזת וזיכרון (למשל strcpy_P ( ) וכו'..) הפועלות על מחרוזות קבועות ב-flash כבר אינן נחוץ. שגרות ה-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 שונתה המהדר מניח כעת פריסה שונה בשימוש על ידי DFPs (Device Family Packs). המשמעות היא ש-DFP ישן יותר לא יעבוד עם המהדורה הזו, ומהדרים ישנים יותר לא יוכלו להשתמש ב-DFPs העדכניים ביותר.
4.3. גרסה 2.19 (מהדורת בטיחות פונקציונלית)
אַף לֹא אֶחָד.
4.4. גרסה 2.10
אַף לֹא אֶחָד
4.5. גרסה 2.05
אובייקטי Const בזיכרון התוכנית שים לב שבברירת המחדל, האובייקטים המותאמים ל-const יוצבו ויגשו אליהם בזיכרון התוכנית (כפי שמתואר הגוון). זה ישפיע על הגודל ומהירות הביצוע של הפרויקט שלך, אבל אמור להפחית את השימוש ב-RAM. ניתן להשבית תכונה זו, במידת הצורך, באמצעות האפשרות -mnoconst-data-in-progmem.
4.6. גרסה 2.00
נתיכים של תצורה ניתן לתכנת את נתיכים של תצורת ההתקן באמצעות פרגמת תצורה ולאחר מכן צמדי הגדרה-ערך כדי לציין את מצב הנתיך, למשל
#pragma config WDTON = SET
#pragma config 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) { … }

בעיות קבועות

להלן תיקונים שבוצעו במהדר. אלה עשויים לתקן באגים בקוד שנוצר או לשנות את פעולת המהדר לזו שנועדה או צוינה במדריך למשתמש. מספר הגרסה בכותרות המשנה מציין את גרסת המהדר הראשונה המכילה תיקונים עבור הבעיות הבאות. התוויות בסוגריים בכותרת הן זיהוי הנושא במסד הנתונים למעקב. אלה עשויים להיות שימושיים אם אתה צריך ליצור קשר עם התמיכה.
שים לב שחלק מהבעיות הספציפיות למכשיר מתוקנות ב-Device Family Pack (DFP) המשויכת למכשיר. עיין במנהל החבילות של MPLAB למידע על שינויים שבוצעו ב-DFP ולהורדת החבילות העדכניות ביותר.

5.1. גרסה 2.41
בעיות דונגל על ​​דונגלים של Ventura (XC8-3088). המשמש לרישיון המהדר אולי לא נקרא כראוי במארחי macOS Ventura, וכתוצאה מכך כשלים ברישוי. שינויים במנהל הרישיונות של XCLM פותרים בעיה זו.
אינדיקציה שגויה של הקצאת זיכרון (XC8-2925) ניסיון להקצות SIZE_MAX בתים (או ערך קרוב לזה) של זיכרון באמצעות פונקציות ניהול הזיכרון הסטנדרטיות של הספרייה (malloc () וחב') הצליח באופן שגוי. זה לא לקח בחשבון שנדרש בתים נוספים בנוסף לחסימה המבוקשת בעת שימוש ביישום הקצאת זיכרון דינמי פשוט. כעת יוחזר מצביע NULL ולא יוגדר בטעות ל-ENOMEM במצבים כאלה.
פונקציות fma לא מדויקות הוסרו (XC8-2913) ספריית התקן C99 fma ( ) -family functions ( ) לא חישב כפל-הוספה בדיוק אינסופי לעיגול בודד, אלא צבר שגיאות עיגול בכל פעולה. פונקציות אלה הוסרו מהספרייה שסופקה.
טיפול גרוע בהמרת מחרוזת (XC8-2921, XC8-2652) כאשר 'רצף נושא' להמרה על ידי strtod Cr הכיל את מה שנראה כמספר נקודה צפה בפורמט אקספוננציאלי והיה תו בלתי צפוי אחרי התו e/E, אז היכן שסופק endptr, הוקצתה לו כתובת ש אם זה היה מצביע על התו שאחרי ה-e/E, ואילו זה היה צריך להצביע על התו e/E עצמו, מכיוון שהוא לא הומר. למשלample, strtod ("100exx", &ep) צריך להחזיר 100.00 ולהגדיר את ep כך שיצביע על החלק "exx" של המחרוזת, בעוד שהפונקציה החזירה את הערך הנכון אך הגדרת 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- התכונה mapd-progmem הושבתה אוטומטית, מה שלא היה לגמרי נכון. התכונה const-data-in-config-mapped-progmem מושבתת לחלוטין במצב זה.
שינויים ב-DFP לגישה נכונה ל-NVMCTRL (XC8-2848) קוד האתחול בזמן הריצה בשימוש מכשירי AVR64EA לא לקח בחשבון שאוגר ה-NVMCTRL נמצא תחת Configuration Change Protection (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 לא תיושם כברירת מחדל עבור מכשירים מושפעים, ושינוי זה יופיע בגרסה 2.2.160 של AVR-Dx_DFP.
בניית שגיאה עם sinhf או coshf (XC8-2834) ניסיונות להשתמש בפונקציות ספריית sinhf () או coshf () הובילו לשגיאת קישור, המתארת ​​הפניה לא מוגדרת. הפונקציה החסרה שהוזכרה אליה נכללה כעת בהפצת המהדר.
בניית שגיאות עם nopa (XC,8-2833) שימוש בתכונה nopa עם פונקציה ששם האסמבלר שלה צוין באמצעות asm ( ) הפעילו הודעות שגיאה מהאסמבלר. שילוב זה אינו אפשרי.
כשל בפונקציה Variadic עם ארגומנטים מצביע (XC8-2755, XC8-2731) פונקציות עם מספר משתנה של ארגומנטים מצפות שמצביעי 24 סיביות (סוג memx) יעברו ברשימת הארגומנטים המשתנים כאשר התכונה const-data-in-progmem מופעלת. טיעונים שהיו מצביעים לזיכרון נתונים הועברו כאובייקטים של 16 סיביות, מה שגרם לכשל בקוד כאשר הם נקראו בסופו של דבר. כאשר התכונה constdata-in-progmem מופעלת, כל הארגומנטים של המצביעים של 16 סיביות מומרים כעת למצביעים של 24 סיביות.
פונקציות ספריית strtoxxx נכשלות (XC8-2620) כאשר התכונה const-data-in-progmem הופעלה, הפרמטר endptr בפונקציות הספרייה strtoxxx לא עודכן כראוי עבור ארגומנטים של מחרוזת מקור שאינם בזיכרון התוכנית.
התראות על יציאות לא חוקיות (XC8-2612) המהדר יוציא כעת שגיאה אם ​​התכונה const-in-progmem מופעלת והכתובת של ליטרלי מחרוזת נוצקת במפורש למרחב כתובות הנתונים (הורדת ה-const qualifier), למשלample, (uint 8_t *) "שלום עולם!". יש בעיה עם אזהרה אם הכתובת עשויה להיות לא חוקית כאשר מצביע נתונים const מוטל במפורש למרחב כתובות הנתונים.
מיקום אובייקטי קונסט לא מאותחלים (XC8-2408) אובייקטים נדיפים const ו-const לא מאתחלים לא הוצבו בזיכרון התוכנית במכשירים שממפים את כל זיכרון התוכנית שלהם או חלק ממנו לתוך מרחב כתובות הנתונים. עבור מכשירים אלה, אובייקטים כאלה ממוקמים כעת בזיכרון התוכנה, מה שהופך את פעולתם לעקבית עם מכשירים אחרים.

5.3. גרסה 2.39 (מהדורת בטיחות פונקציונלית)
אַף לֹא אֶחָד.
5.4. גרסה 2.36
שגיאה בעת עיכוב (XC8-2774) שינויים קלים באופטימיזציות ברירת המחדל של מצב חופשי מנעו קיפול מתמיד של ביטויי אופרנד לפונקציות המובנות ב-delay, וכתוצאה מכך התייחסו אליהם כלא-קבועים וגררו את השגיאה: avr delay_cycles מובנה מצפה לקבוע של מספר שלם של זמן קומפילציה.
5.5. גרסה 2.35
הקצאה רציפה באמצעות _at (XC8-2653) הקצאה רציפה של מספר אובייקטים במקטע עם אותו שם ושימוש ב-_at ( ) לא פעלה כהלכה. למשלampעל:
const char arr1[] __attribute__((section(“.mysec”))) __at (0x500) = {0xAB, 0xCD};
const char arr2[] __attribute__((section(“.mysec”))) = {0xEF, 0xFE};
היה צריך למקם את arr2 מיד אחרי arr1.
ציון כתובות התחלה של מקטע (XC8-2650) The -W1, -אפשרות התחלה של קטע נכשלה בשקט בהצבת קטעים בכתובת ההתחלה המיועדת. בעיה זו תוקנה עבור כל חלקים בעלי שם מותאם אישית; עם זאת, זה לא יעבוד עבור חלקים סטנדרטיים, כגון . טקסט או . bss, אותו יש למקם באמצעות אפשרות -W1, -T.
הקישור קורס בעת רגיעה (XC8-2647) כאשר האופטימיזציה -mrelax הופעלה והיו קטעי קוד או נתונים שלא התאימו לזיכרון הזמין, המקשר קרס. כעת, בנסיבות כאלה, הודעות שגיאה מונפקות במקום.

אין נפילה לאחור (XC8-2646) ה אפשרות –nofallback לא יושמה כהלכה, ולא תועדה. כעת ניתן לבחור באפשרות זו כדי להבטיח שהמהדר לא יחזור להגדרת אופטימיזציה נמוכה יותר אם המהדר אינו מורשה, ובמקום זאת יוציא שגיאה.

אופטימיזציית מהירות בלתי הולמת (X03-2637) אופטימיזציות של הפשטה פרוצדורליות הופעלו בעת בחירת אופטימיזציות ברמה 3 (-03). אופטימיזציות אלו מקטינות את גודל הקוד על חשבון מהירות הקוד, ולכן לא היו אמורות להתבצע.
EEPROM גרוע גִישָׁה (XC8-2629) ה שגרת eeprom_read_block לא פעלה כהלכה במכשירי Xmega כאשר האפשרות -mconst-data-in-progmem הופעלה (שהוא מצב ברירת המחדל), וכתוצאה מכך זיכרון EEPROM לא נקרא כהלכה.
הקצאת זיכרון לא חוקית (XC8-2593, XC8-2651) כאשר אפשרות -Ttext או -Tdata קישור (לדוגמהampהקובץ שעבר באמצעות אפשרות -vl מנהל התקן) מצוין, מקור הטקסט/הנתונים התואם עודכן; עם זאת, כתובת הקצה לא הותאמה בהתאם, מה שיכול היה להוביל לכך שהאזור חורג מטווח הזיכרון של מכשיר היעד.
התרסקות עם פונקציה מיוחסת יתר (XC8-2580) המהדר קרס אם פונקציה הוכרזה באמצעות יותר מאחת מתכונות הפסיק, האות או nmi, למשל, תכונה ((אות, פסיק)).
קוד פסיקה ATtiny לא חוקי (XC8-2465) בעת בנייה עבור התקני ATtiny והאופטימיזציות הושבתו (-00), ייתכן שפונקציות פסיקה הפעילו הודעות אסמבלר אופרנד מחוץ לטווח.
אפשרויות לא עוברות (XC8-2452) בעת שימוש באפשרות עם מספר אפשרויות קישור מופרדות בפסיקים, לא כל אפשרויות הקישור הועברו למקשר.
שגיאה בקריאה עקיפה של זיכרון תוכנית (X03-2450) במקרים מסוימים, המהדר יצר שגיאה פנימית (אינם ניתנים לזיהוי) בעת קריאת ערך שני בתים ממצביע לזיכרון התוכנה
5.6. גרסה 2.32
גישה שנייה של כשל בספרייה (XC8-2381) הפעלת גרסת Windows של xc8-ar. ייתכן שהארכיון של ספריית exe בפעם השנייה כדי לגשת לארכיון ספרייה קיים נכשל עם הודעת שגיאה שלא ניתן לשנות שם.
5.7. גרסה 2.31
מהדר לא מוסבר כשלים (XC8-2367) כאשר פועל על פלטפורמות Windows שהספרייה הזמנית של המערכת הוגדרה לנתיב הכולל נקודה '.' אופי, ייתכן שהמהדר נכשל בביצוע.
5.8. גרסה 2.30
תוויות גלובליות לא במקומן לאחר מתאר (XC8-2299) ייתכן שקוד הרכבה בכתב יד הממקם תוויות גלובליות בתוך רצפי הרכבה אשר נלקחים לגורמים על-ידי הפשטה פרוצדורלית לא היה ממוקם מחדש כראוי.
התרסקות מרגיעה (XC8-2287) שימוש באפשרות -mrelax עשוי היה לגרום ל-linker לקרוס כאשר אופטימיזציות להרפיית tail jump ניסו להסיר הוראת ret שלא היו בסוף קטע.
קריסה בעת אופטימיזציה של תוויות כערכים (XC8-2282) קוד המשתמש בסיומת שפת GNU C "תוויות כערכים" עלול לגרום לאופטימיזציות ההפשטה הפרוצדורליות לקרוס, עם שגיאת תיקון של טווח VMA מתאר.
Not so const (XC8-2271) אבות הטיפוס עבור st rstr ( ) ופונקציות אחרות מ אין עוד לציין את ה-const qualifier הלא סטנדרטי במצביעי מחרוזת המוחזרים כאשר התכונה -mconst-data-inprogmem מושבתת. שים לב שעם מכשירי avrxmega3 ו-avrtiny, תכונה זו מופעלת לצמיתות.
מאתחלים אבדו (XC8-2269) כאשר יותר מ משתנה אחד ביחידת תרגום הוצב בקטע (באמצעות _section או _attribute_ ( (section) )), והמשתנה הראשון כזה אותחל או לא היה לו אתחול, מאתחלים למשתנים אחרים באותה יחידת תרגום שהוצבו באותו קטע אבדו.
5.1. גרסה 2.29 (מהדורת בטיחות פונקציונלית)
אַף לֹא אֶחָד.
5.2. גרסה 2.20
שגיאה עם פקודות ארוכות (XC8-1983) בעת שימוש ביעד AVR, ייתכן שהמהדר נעצר עם א file שגיאה לא נמצאה, אם שורת הפקודה הייתה גדולה במיוחד והכילה תווים מיוחדים כגון מרכאות, קווים אחוריים וכו'.
קטע רודטה שלא הוקצה (XC8-1920) מקשר ה-AVR נכשל בהקצאת זיכרון עבור קטעי rodata מותאמים אישית בעת בנייה עבור ארכיטקטורות 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 דיווחה כי נתונים לקריאה בלבד צורכים זיכרון RAM במקום זיכרון תוכנית.
קריאת זיכרון תוכנית שגויה (XC8-1783) פרויקטים שהידור עבור התקנים עם זיכרון תוכנית ממופה לתוך מרחב כתובות הנתונים והמגדירים אובייקטים באמצעות המאקרו/תכונה PROGMEM עשויים לקרוא אובייקטים אלה מהכתובת הלא נכונה.
שגיאה פנימית עם תכונות (XC8-1773) אירעה שגיאה פנימית אם הגדרת אובייקטי מצביע עם ה
אסימוני _at () או attribute() בין שם המצביע לסוג החסר, למשלample, char *
_at (0x800150) cp; כעת ניתנת אזהרה אם נתקלים בקוד כזה.
כשל בביצוע הראשי (XC8-1780, XC8-1767, XC8-1754) שימוש במשתני EEPROM או הגדרת נתיכים באמצעות פרגמת התצורה עלול לגרום לאתחול נתונים שגוי ו/או לנעול את הפעלת התוכנית בקוד האתחול של זמן הריצה, לפני שהגיע ל-main ( ) .
שגיאת נתיך עם מכשירים זעירים (XC8-1778, XC8-1742) למכשירי attiny4/5/9/10/20/40 היה אורך נתיך שגוי שצוין בכותרת שלהם files שמובילות לשגיאות קישור בעת ניסיון לבנות קוד שהגדיר נתיכים.
הִתפַּלְגוּת תקלה (XC8-1777) תקלת פילוח לסירוגין תוקנה.
התרסקות אסמבלר (XC8-1761) ייתכן שה-avr-as assembler קרס כאשר המהדר הופעל תחת אובונטו 18.
אובייקטים לא נוקו (XC8-1752) ייתכן שאובייקטי משך אחסון סטטיים לא מאותחלים לא נוקו על ידי קוד האתחול של זמן הריצה.
התעלמו ממפרט מכשיר סותר (XC8-1749) המהדר לא יצר שגיאה כאשר נעשה שימוש במספר אפשרויות של מפרט התקנים והצביע על התקנים שונים.
השחתת זיכרון על ידי ערימה (XC8-1748) The סמל _heap_start הוגדר באופן שגוי, וכתוצאה מכך האפשרות שהמשתנים הרגילים ייפגמו על ידי הערימה.
שגיאת העברת קישור (XC8-1739) ייתכן שנפלטה שגיאת העברת קישורים כאשר הקוד הכיל rjmp או rcall עם יעד במרחק של 4k בתים בדיוק.
5.6. גרסה 2.00
אַף לֹא אֶחָד.

בעיות ידועות

להלן מגבלות בפעולת המהדר. אלו עשויות להיות הגבלות קידוד כלליות, או חריגות מהמידע הכלול במדריך למשתמש. התוויות בסוגריים בכותרת הן זיהוי הנושא במסד הנתונים למעקב. זה עשוי להיות מועיל אם אתה צריך ליצור קשר עם התמיכה. אותם פריטים שאין להם תוויות הם מגבלות המתארות את אופן הפעולה ואשר צפויות להישאר בתוקף לצמיתות.
6.1. MPLAB X IDE הִשׁתַלְבוּת
MPLAB IDE אינטגרציה אם יש להשתמש ב-Compiler מ-MPLAB IDE, עליך להתקין את MPLAB IDE לפני התקנת ה-Compiler.
6.2. יצירת קוד
Segfault with section-anchors option (XC8-3045) תוכנית שהגדירה פונקציות עם רשימות ארגומנטים משתנים ואשר משתמשות באפשרות -fsection-anchors עשויה להפעיל שגיאת מהדר פנימית: תקלת פילוח.
איתור באגים לא מסונכרן (XC8-2948) כאשר אופטימיזציות של הרפיית קישור מכווצות הוראות (למשלample call to rcall הוראות), ייתכן שמיפויי קו מקור לכתובת לא יישארו מסונכרנים כאשר מתרחשת יותר מפעולת כיווץ אחת בקטע.
בדוגמה למטהampלי, יש שתי שיחות ל-foo שמסתיימות רגועות לשיחות יחסית.
כשל בהקצאת זיכרון 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-in-progmem מופעלת, במיוחד אם תכונת const-data-in-config-mapped-progmem מופעלת גם כן. ניתן להשבית תכונות אלה במידת הצורך.
לְהִתְנַגֵד file עיבוד הזמנה (XC8-2863) הסדר שבו חפצים files יעובדו על ידי המקשר עשוי להיות שונה בהתבסס על השימוש באופטימיזציות של הפשטה פרוצדורליות (אפשרות-mpa). זה ישפיע רק על קוד שמגדיר פונקציות חלשות על פני מספר מודולים.
שגיאת קישור עם אבסולוט (XC8-2777) כאשר אובייקט נעשה אבסולוטי בכתובת בתחילת זיכרון ה-RAM והוגדרו גם אובייקטים לא מאותחלים, עלולה להיגרם שגיאת קישור.
מזהי השכמה קצרים (XC8-2775) עבור התקני ATA5700/2, הרגיסטרים של PHIDO/1 מוגדרים רק כרוחב של 16 סיביות, במקום ברוחב של 32 סיביות.
קריסת קישור בעת קריאה לסמל (XC8-2758) המקשר עלול לקרוס אם נעשה שימוש באפשרות -mrelax driver כאשר קוד המקור קורא לסמל שהוגדר באמצעות האפשרות -cc., –de f sym linker.
אתחול שגוי (XC8-2679) שם הוא אי התאמה בין המקום שבו הערכים ההתחלתיים של כמה אובייקטים גלובליים/סטטיים בגודל בתים ממוקמים בזיכרון הנתונים לבין המקום שבו יינתנו למשתנים בזמן ריצה.
קריאות לא ישירות לפונקציה (XC8-2628) במקרים מסוימים, קריאות פונקציה שנעשות באמצעות מצביע פונקציה המאוחסנים כחלק ממבנה עלולות להיכשל.
strtof מחזירה אפס עבור צפים הקסדצימליים (XC8-2626) פונקציות הספרייה strtof et al ו-scanf ( ) et al, תמיד ימירו מספר נקודה צפה הקסדצימלית שאינה מציינת מעריך לאפס. למשלampעל:
strtof ("Oxl", &endptr);
יחזיר את הערך 0, לא I.
הודעות יועץ מחסניות לא מדויקות (XC8-2542, XC8-2541) במקרים מסוימים, אזהרת יועץ המחסנית לגבי רקורסיה או מחסנית בלתי מוגדרת בשימוש (אולי באמצעות שימוש ב-alloca()) אינה נפלטת.
כשל עם קוד פסיקה כפול (XC8-2421) כאשר ליותר מפונקציית פסיקה אחת יש את אותו גוף, המהדר עשוי לקבל את הפלט של פונקציית פסיקה אחת לקרוא לאחרת. זה יגרום לכך שכל הרגיסטרים שנשמרו על ידי שיחות יישמרו שלא לצורך, וההפסקות יתאפשרו עוד לפני הפעלת האפילוג של מטפל ההפרעות הנוכחי, מה שעלול להוביל לכשל בקוד.
פלט שגוי עם נתיב DFP לא חוקי (XC8-2376) אם המהדר מופעל עם נתיב DFP לא חוקי ו'מפרט' file קיים עבור המכשיר הנבחר, המהדר אינו מדווח על חבילת משפחת המכשירים החסרה ובמקום זאת בוחר את ה'מפרט' file, שעלול להוביל לפלט לא חוקי. ה'מפרט' fileייתכן ש-s לא מעודכנים עם ה-DFPs המבוזרים והם נועדו לשימוש עם בדיקות מהדר פנימיות בלבד.
חפיפת זיכרון לא זוהתה (XC8-1966) המהדר אינו מזהה את חפיפת הזיכרון של אובייקטים שנעשו אבסולוטיים בכתובת (באמצעות _at ( )) ואובייקטים אחרים המשתמשים במפרט ה-Section ( ) ומקושרים לאותה כתובת.
כשל בפונקציות הספרייה ו-_memx (XC8-1763) פונקציות צפות שנקראות libgcc עם ארגומנט במרחב הכתובות memx עלולות להיכשל. שים לב ששגרות הספרייה נקראות מכמה אופרטורים C, כך למשלample, הקוד הבא מושפע:
החזר regFloatVar > memxFloatVar;
יישום מוגבל של libgcc (AVRTC-731) עבור מוצרי ATTiny4/5/9/10/20/40, היישום הסטנדרטי של ספריית C / Math ב-libgcc מוגבל מאוד או אינו קיים.
מגבלות זיכרון תוכניות (AVRTC-732) תמונות זיכרון תוכניות מעבר ל-128 kb נתמכות על ידי שרשרת הכלים; עם זאת, ישנם מקרים ידועים של הפסקת קישור ללא הרפיה וללא הודעת שגיאה מועילה במקום יצירת בדלי הפונקציות הנדרשים כאשר נעשה שימוש באפשרות -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 תוכנת פיתוח מהדר, תוכנת פיתוח מהדר, תוכנת פיתוח, תוכנה

הפניות

השאר תגובה

כתובת האימייל שלך לא תפורסם. שדות חובה מסומנים *