שונה

אופטימיזציה של קוד במיקרו-בקרים

מְחַבֵּר: Laura McKinney
תאריך הבריאה: 4 אַפּרִיל 2021
תאריך עדכון: 16 מאי 2024
Anonim
מבוא לאופטימיזציה של קוד
וִידֵאוֹ: מבוא לאופטימיזציה של קוד

תוֹכֶן

המחבר השלים את פרויקט ההנדסה האחרון שלו עם מיקרו-בקרי dsPic, וקיבל תובנה רחבה במכשירים אלה.

קוד שפת C של מיקרו-בקר עשוי לדרוש אופטימיזציה ביישומים מתקדמים מסוימים. מיטוב קוד זה מתורגל להפחתת שני דברים מכריעים:

  1. גודל קוד: מיקרו-בקרים יכולים לאחסן נתונים והוראות מוגבלים בגלל הגודל המוגבל של זיכרון RAM שלהם. לכן יש לבצע אופטימיזציה לקוד, כך שניתן יהיה להשתמש בהוראה ובזיכרון הנתונים הזמינים בצורה היעילה ביותר.
  2. זמני ביצוע קוד: מיקרו-בקרים הם מכשירים עוקבים המבצעים הוראה אחת בכל פעם. כל הוראות הרכבה צורכות מספר מסוים של מחזורי שעון כדי לבצע את עצמה. לכן יש למטב את הקוד כדי להבטיח שהוא מבצע את המשימה הנדרשת במספר מחזורי שעון לפחות או הוראות הרכבה. ככל שקוד משתמש פחות במחזורי שעון, הוא פועל מהר יותר. המשמעות היא שאפליקציות יכולות לפעול מהר יותר מכיוון שזמני העיבוד ממוזערים.

מאמר זה מציג טיפים וטריקים העשויים לשמש להפחתת גודל וזמן הביצוע של קוד מיקרו-בקר.


IDE לפיתוח MplabX של Microchip ישמש להדגמת דוגמאות במידת הצורך.

כיצד למדוד ניסוי זמן ביצוע קוד

כדי לקבל מושג כמה זמן באמת לוקח לקוד שלך לבצע בזמן אמת, עליך למדוד אותו בניסוי. ניתן להשתמש במנתח לוגיקה בצורה נוחה למדידת זמן ביצוע הקוד, והמעוניינים יכולים לברר ממני בדוא"ל על התהליך לכך. חוץ מזה:

  • לחלק מהדרים יש את היכולת לספור מחזורי שעון שקוד ייצרך.
  • חלק מהבאגים למשל ה- ICD 3 מהשבב יכולים למדוד ישירות את זמן הביצוע באמצעות שעון עצר.

1. דע את כוח העיבוד ואת גודל הזיכרון של המיקרו-בקר שלך

לא תמיד תדר השעון (Mhz) נותן את התמונה האמיתית של מהירות העיבוד של מיקרו-בקר, מדד מציאותי יותר הוא MIPS (הוראות מגה לשנייה) או מספר ההוראות MCU יכולה לבצע בשנייה.

MCUs נעים בדרך כלל בין 60-70 MIPS בקטגוריית ה- high-end ועד 20 MIPS AVRs. סביר להניח שמיקרו-בקר MIPS גבוה יהיה יקר יותר ממכשיר ברמה נמוכה, כך שכאן יש לך פשרה בין עלות למהירות עיבוד.


למיקרו-בקרים יש זיכרון נפרד לאחסון נתונים וקוד תוכנית. הגודל של שניהם ניתן למצוא מגליון הנתונים. יתכן שתצטרך MCU עם גודל זיכרון גדול יותר אם הקוד שלך גדול באופן משמעותי.

2. בחירת משתנים לאופטימיזציה בגודל הקוד

לבקרי מיקרו יש זיכרון נתונים מוגבל, לרוב נע בין 1 ל -4 קילו-בתים. במקרה זה, כדאי לבחור בסוג המשתנה המתאים ביותר בהתאם לטווח הצפוי של התאריך שנשמר. הטבלה שלהלן מסכמת משתנים אלה:

סיכום המשתנים המשמשים בשפת C.

סוג משתנהגודל בתיםטווח

בול

1

0 או 1 בלבד

לְהַשְׁחִיר

1


-128 עד 127

int

2

-32,768 עד 32,767

int חתום

2

0 עד 65,535

ארוך

4

-2,147,483,648 עד 2,147,483,647

לָצוּף

4

מדויקות עד 6 מקומות עשרוניים

לְהַכפִּיל

8

מדויקות עד 15 מקומות עשרוניים

כפול ארוך

10

מדויקות עד 19 מקומות עשרוניים

דוגמא:

  • אם יש להוסיף שני משתנים X ו- Y והתוצאה צריכה להיות מאוחסנת ב- Z אך הערך של Z צפוי להיות גבוה יותר מ- 65,535 לאחר התוספת אז ניתן להכריז על Z כארוך ו- X ו- Y יכולים להיות מוכרזים כלא חתומים int, גם ערכים של X ו- Y אינם צפויים להיות שליליים. זה יחסוך 04 בתים בזיכרון הנתונים שאחרת היו מנוצלים אם היו מכריזים על כל המשתנים ארוכים.
  • יש לחלק את שני המשתנים X ו- Y, שערכיהם צפויים להיות במספרים שלמים, אך תוצאת החלוקה עשויה להניב עשרונית, ואז ניתן להכריז על X ו- Y כ- int, והתוצאה יכולה להיות מוכרזת כצף או כפול בהתאם את הדיוק הנדרש.

בחירת סוג הנתונים עשויה להיות מכריעה בעת הצהרת מערכים המכילים מספר רב של אלמנטים.

3. בחירת משתנים לאופטימיזציה בזמן ביצוע קוד

  • עובדה קבועה היא שחישובי נקודה צפה אורכים זמן רב יותר מחישובי נקודה קבועה. אל תשתמש במשתנה של נקודה צפה כאשר אין צורך בערך עשרוני. עבוד עם מספרים שלמים לא חתומים בכל מקום אפשרי.
  • משתנים מקומיים עדיפים על פני משתנים גלובליים. אם משתמשים במשתנה בפונקציה בלבד, יש להכריז עליו בפונקציה זו מכיוון שהגישה למשתנים גלובליים היא איטית יותר מהמשתנים המקומיים.
  • MCU של 8 סיביות ימצא משתנה בגודל בתים יחיד מהר יותר לגישה ו- MCU של 16 סיביות ימצא משתנה של 2 בתים שקל יותר לגשת אליו בגלל אורך הכתובת שנוצר.

4. אופטימיזציה של פעולות חשבון

ניתן למטב את פעולות החשבון בדרכים הבאות.

  1. השתמש בטבלאות חיפוש של ערכים שחושבו מראש במקום להעריך Sine או כל פונקציה טריגונומטרית אחרת או כל פעולה אחרת שאת התוצאה שלה ניתן לדעת מראש בקוד.
  2. במקרה שכבר מאוחסנת בזיכרון טבלת סינוס, ניתן להעריך את הקוסינוס על ידי קידום מצביע המערך השווה ל 90 מעלות.
  3. בין ארבע פעולות החשבון, חלוקה וכפל לוקחים את זמן העיבוד הרב ביותר, בפועל זה יכול להיות בטווח של מאות מיקרו-שניות בערך במקרה של ערכי נקודה צפה.
  4. השתמש בהוראות משמרת סיביות במקום חלוקה וכפל. הוראת משמרת ימנית 3 משמשת לחלק ב -23 כאשר כהוראת משמרת שמאלית 1 תשמש להכפיל ב -21.

5. השתמש במיקרו-בקר מסוג DSP לחישובים אינטנסיביים

לחלק מהמיקרו-בקרים יש יחידת עיבוד DSP אחרת מאשר ה- ALU הקונבנציונאלי המובנה בארכיטקטורה שלהם. מנוע DSP זה מיועד לביצוע חישובי חשבון במהירות רבה במספר הנמוך ביותר של מחזורי השעון (אחד ברוב המקרים) מהר יותר מאשר ה- ALU.

הוראות שמעבד DSP יכול לבצע מהר יותר ואז ALU הן:

  • הוראות העברת סיבוב וסיבוב.
  • כפלות, חלוקות ופעולות חשבון אחרות.
  • הערכת Sines ופונקציות טריגונומטריות אחרות.
  • כל פעולות ה- DSP כגון FFT, DFT, קונבולציה וסינון FIR.

השימוש במנוע DSP של מיקרו-בקר מחייב:

  • בפרויקט משולבות ספריות DSP נפרדות.
  • שמות הפונקציות שונים מספריית המתמטיקה הרגילה של שפת C. ניתן להשתמש בתיעוד של ספריות ופונקציות אלה מאתר היצרנים המתאים.
  • מנוע DSP משתמש בסוג משתנה שונה 'חלקי'. למד כיצד להשתמש במשתני סוג שבר לפני שתמשיך עם פונקציות ספריית dsp.

שים לב שפונקציות סטנדרטיות של ספריית מתמטיקה לא יפעילו את מנוע DSP מכיוון שהן מתורגמות להוראות הרכבה של ALU.

6. עבדו עם מפריעים

השתמש בהפרעות לביצוע פונקציות ספציפיות כגון:

  • קריאת ערכי ADC.
  • שליחה וקבלה מ- UART.
  • עדכון רישומי מחזור חובה של PWM.
  • תקשורת CAN או I2C.

הפרעות ישמשו לפונקציות אלה במהירות לעומת ביצוען בגוף הראשי באמצעות שיחת פונקציה או קוד מוטבע.

הפרעות יופעלו גם רק כנדרש, ואילו אם הם מקודדים בגוף הראשי, הקוד יבוצע בכל איטרציה של לולאת זמן (1).

7. השתמש במהדרים הטובים ביותר הזמינים

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

8. השתמש באמירות מותנות בצורה מושכלת

  • כשמשתמשים בסדרה של הצהרות if-else שמור תחילה על המצב הסביר ביותר. בדרך זו MCU לא יצטרך לסרוק את כל התנאים לאחר שהוא ימצא את המצב האמיתי.
  • הצהרת מקרה החלפה היא בדרך כלל מהירה יותר אם אם אחר.
  • השתמש בהצהרות מקוננות אם-במקום במקום סדרת הצהרות. בלוק אם-אחר בעל הצהרות רבות עשוי להיות מחולק לענפי משנה קטנים יותר כדי לייעל את המצב הגרוע ביותר (האחרון).

9. השתמש בפונקציות מוטבעות

פונקציות שיש להשתמש בהן רק פעם אחת בקוד עשויות להיות מוכרזות כסטטיות. זה יגרום למהדר לבצע אופטימיזציה של פונקציה זו לפונקציה מוטבעת ולכן לא יתורגם קוד הרכבה לשיחת הפונקציה.

  • ניתן להכריז על פונקציה בשורה באמצעות מילת המפתח 'סטטית' יחד איתה.

10. השתמש בלולאות מופחתות

לולאה מצטמצמת תייצר פחות קוד הרכבה בהשוואה לולאה מצטברת.

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

בהתחשב בכך שהלולאה צריכה לחזור מאה פעמים, הפחתת הוראה אחת מהלולאה תמנע את ביצועה מאה פעמים ולכן ההשפעה עשויה להיות משמעותית יותר כאשר הלולאה תצטרך לחזור פעמים רבות.

מסיימים

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

מאמר זה מדויק ונכון למיטב ידיעת המחבר. התוכן מיועד למטרות מידע או בידור ואינו מחליף ייעוץ אישי או ייעוץ מקצועי בעניינים עסקיים, פיננסיים, משפטיים או טכניים.

מאמרים חדשים

מעניין היום

כיצד לעבוד עם מטא נתונים של תמונות
מחשבים

כיצד לעבוד עם מטא נתונים של תמונות

מטא נתונים הם חדשות בימינו: חוקים חדשים לשמירת נתונים דוקרים בהגדרת מה מדובר בהקשר למעקב אחר תעבורת טלפונים והודעות. אי-אמיתות של נתוני תמונה או וידאו יכולה לפעמים להתגלות על ידי חוסר עקביות במטא הנתו...
כיצד להשתמש בטבלאות ציר ב- Microsoft Excel
מחשבים

כיצד להשתמש בטבלאות ציר ב- Microsoft Excel

סיימון הוא כותב תוכן ומומחה בתחום המחשוב. הוא גם נהנה לשתף מתכונים טעימים עם הקוראים.יש לי 20 שנות ניסיון בעבודה במחלקת פיננסים או חשבונאות. התחלתי לעבוד לראשונה עם גיליונות אלקטרוניים לפני למעלה מ -2...