מבוא

[התוכנה המודגשת של הטמעת תוכנה תמיד דרשה הבנה עמוקה של חומרה ותוכנה.האינטראקציה בין ההיגיון הדיגיטלי של מיקרובקר, זיכרון, היקפים, ומגבלות בזמן אמת יוצרת נוף מרתיע הרבה יותר מורכב מאשר פיתוח יישומים מסורתי.FLT:0JTA (קבוצת פעולה ניסיונית) מאסטרל:1LT ו-LTF:2DSW (S: ⁇ ) שימוש יעיל ביותר של מערכת הפעלה זו, שימוש בממשק התואם (T) כדי להפוך את כל דבר יעיל ביותר לממשק התואם (Digical DEBODLT)

הבנת JTAG ו SWD

כדי לטבול ביעילות, עליך להבין את היכולות והמגבלות של הממשק שאתה משתמש בו.

JTAG (IEEE 1149.1)

(ג) פותח במקור לבדיקת לוחות מעגלים מודפסים באמצעות סריקות גבול, אך הוא הפך במהרה לסטנדרט עבור circuit debugging ותוכנית מיקרו-בקרים, FPGAs, ו- ICs מורכבים אחרים.הממשק משתמש בחמישה אותות: FLT:0TCKFLT 1 (שעון גבול) 1 (TEST) LT2SLT3 (Test)

SWD (Serial Wire Debug)

SWD הוא חלופה מודרנית יותר, שני חוט שפותחה על ידי ARM עבור הליבה של סדרת Cortex-M. זה מחליף את אותות ארבעת-הנתונים JTAG עם יחיד דו-צדדי:0SWIOFLT:1 (Serial Wire I/O) ו-FLT:2SWClrfph 3 (SWCD Wire) מציע מספר יתרונות מעשיים פחות עבור יישום נתונים פשוטים (Sic) ו-iOS) באמצעות שימוש בפרוטוקולים הנדרשים על בסיס CDPTSDPTS.

מתי להשתמש JTAG לעומת SWD

  • (FLT:0)Use JTAGFLT:1 אם אתה צריך בדיקות סריקות גבול, הם debugging מכשירים שאינם-ARM (למשל, חלק RISC-V, FPGAs, DSP), או דורשים ממשקי debug מרובים המחוברים בשרשרת daisy.
  • (FLT:0)Use SWDIRFLT:1 עבור ARM Cortex-M, Cortex-A, או Cortex-R מכשירים כאשר ספירת לוחמת מוגבלת, אתה צריך מהירויות תכנות מהירות יותר, או שאתה רוצה לשחרר GPIOs בדרך כלל בשימוש על ידי JTAG. SWD לעתים קרובות מספק גם צופה חוט סדרתי (SWV) עבור מעקב בזמן אמת.

(בהשוואה עמוקה יותר) עיין ב-JTAG/SWD של הממשק JTAG/SWD (בקיצור:2ARM's SWD PerspectiveFLT 3:2).

הגדרת הסביבה של דיון אמין

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

בחירת טיעון Probe

(ב) ,ההשקעה בבדיקת איכות של טיהור (FLT) בעוד שתאים זולים יכולים לעבוד עבור פרויקטים של תחביבים, ייצור ניכוי דרישות אמינות (תקני תעשייה כוללים את FLT:0Segger J-Linkigr J-LinkFLT:1, FLT:2-LinkST-Link / V3FLT 3), תכונות פלאשיביות ו-SLT5GLGLGLITRETERLITER (מספקות) , 7.

« תרגולים טובים ביותר

  • (FLT:0) שמור חוטים קצרים.FLT:1 שעון מהיר במהירות גבוהה (עד 50 MHz עבור SWD ו 100 + MHz עבור JTAG) רגישים לבעיות זהות. השתמש כבלים מעוותים או מגנים אם רץ יותר מכמה סנטימטרים.
  • (FLT:0)Use נאותה משיכת-up/pull-down מתנגדים.FLT:1 רוב קווי SWD ו- JTAG דורשים למשוך חברות על לוח היעד (בדרך כלל 4.7 k ⁇ ל 10 k ⁇ ל- VCC) יש בדיקות מסוימות יש משיכת-אפים פנימיים, אך לאמת תאימות.
  • (ב) ,0) ,(ה) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (FLT:0) רמות מתח צ'אק (Check מתח) 1FLT:1 וודא את המתח ההתייחסות של בדיקת הדבג (VTref) מתאים למתח I/O של המטרה באופן אוטומטי תחושה VTref, אך השימוש בתאים עם שינוי רמת שינוי עשוי להיות הכרחי עבור מערכות מעורבות.

תגית: Hardware Pitfalls

  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (FLT:0) ניצול nRST:FLT:1 רבים MCUs דורשים אות איפוס כדי להיכנס למצב debug. Connect the nSRST קו NSRST של הבדיקה כדי לקבוע את לוח האפס אם חיבור אוטומטי נכשל.
  • (ב) ⁇ :0) ,2 (ב) , אל תשאיר SWDIO משוך נמוך חיצוני (למשל, על ידי כפתור או GPIO אחרים) במהלך debug - זה יכול למנוע ראשונית.

עבור דיאגרמות מפורטות, להתייעץ עם FLT:0 (OpenOCD's debug Fiter חומרה מדריך חומרה פיזור 1:

הקמת תהליך של דיון שיטתי

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

1 לבדוק את הקישורים המוקשים

לפני השקת כל כלי תוכנה, השתמש ב- Multimeter או או או אוקטילוסקופ כדי לאשר את VCC, GND, וכי השעון של המטרה וקווי נתונים הם toggling. רבים debug בדיקות נבנות-בקודות זיהוי מטרה - להפעיל את אלה הראשון.

בדיקה אחרונה ב-3 ביולי 2008. ^ Power Supply Stability

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

מבחן סטטוס Boot

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

4.לתקן את הקשר של Debugger

רוב IDEs (IAR, Keil, STM32CubeIDE, VS קוד עם Cortex-Debug) לספק מבחן חיבור. Run It ולוודא כי ה- debugger יכול לקרוא ולכתוב לזיכרון.אם לא, חיבורי pinamine מחדש הגדרות שעון.

קוד מבחן מינימלי

קישור LED או כדי לעקוף GPIO בלולאה פשוטה. השתמש ב debugger כדי לעבור דרך קוד זה.זה מבטיח את הכלי שלך שרשרת ואת debugger עובד כראוי לפני התקפה לוגיקה מורכבת.

המונחים: Advanced Debugging Features

ARM Cortex-M הליבה כוללים חומרה רבת עוצמה ועקבות. Mastering תכונות אלה יכול להפחית את זמן הפחתת הצפה על ידי פקודות של גודל.

נקודות ונקודות מבט

הפסקות הפסקת ביצוע כאשר מגיעה הוראה מסוימת.הנקודות מפסיקות את ביצוע כאשר מיקום זיכרון קורא או כתוב. השתמש ב-Breakpoints (בדרך כלל 2-6 בהתאם לליבה) עבור חלקים קריטיים של זמן ונקודות תצפית חומרה עבור בעיות שחיתות נתונים.תוכנה שוברת נקודות (באמצעות הוראות BKPT) עבודה ב- RAM אך צורכת שתי מילים של שימוש בזיכרון.

זמן אמת (ETM / ETB ו SWO)

עבור פרופיל לא פולשני, השתמש ממשק עקבות:

  • (FLT:0) Embedd Trace Macrocell (ETMrea)FLT:1 מספק זכר גבוה של הוראות שבוצעו, המחייב נמל עקבות ייעודי (למשל, 4pin TPIU).
  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

כדי להשתמש SWO/ITM, לאפשר שעון ה-McU ברשומות ה- debug של MCU והגדרת ה-FLT שלך כדי ללכוד את הנתונים.

ניתוח Fault Analysis

(ב) כאשר מתרחש הרדפו או אוטובוס, הליבה דוחפת מסגרת ערימה עם כתובת החזרה ורישום סטטוס אשם. השתמש במגרש לקרוא את FLT:0BFARphFLT:1 (Bus Fault address), כרך 2UFSRFLT 3 (Usage Fault), ו-FLT:4HFGR: LT5, באופן אוטומטי, אשר נגרם על ידי שימוש ב-Fed) לזיכרון בלתי-Fed (מקודשלא ניתן ל-Fed).

בעיות נפוצות

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

« « זוועות ומלבד Handlers

תרחיש נפוץ: ה- CPU פוגע ב-HardFault או NMI. הצעד הראשון הוא לזהות את המקור:

  1. הנקה מיד כאשר מתרחשת האשמה.
  2. בדקו את ה- PC המוטבע ו- LR.
  3. ראה את הרשומות של הסטטוס (SCB->CFSR, SCB->HFSR).
  4. הקצוב למחשב עם קובץ המפה שלך או disassembly.

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

זיכרון שחיתות ו- Stack Overflows

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

  • (FLT:0) Canaries:FLT:1 למלא את הערימה עם דפוס ידוע (למשל, 0xDEADBEEF) בסטארט-אפ.
  • (FLT:0) התבונן במשתנה:FLT:1hil) הגדר נקודת תצפית חומרה על משתנה מושחת לעיתים קרובות.ה נקודת המבט תעצור את ה- CPU בדיוק כאשר המשתנים כתובים, חושף את האשם.
  • (FLT:0) הגנה על האזור המזכר (MPU/MMU): המחשה: 1 השתמש ביחידת הגנת הזיכרון כדי ליצור אזורים לקריאה בלבד או ללא הפעלה עבור נתונים רגישים או חלקי קוד. Accesses המפרים את ההגנה גורם אשם.

לצליל עמוק בגילויי זרימה, ראה את הבלוג של ה-0.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.10.

בעיות של גזע ותזמון

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

  • (ב) ⁇ (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) [ה]הללו את GPIOs: [ה]: [ה] [ה] [הבא] [ה]] ל[דרוש מקור] [ה] [ה]]] [ה'[דרוש מקור]]] [ה'[דרוש מקור]'[דרוש מקור], [ה']
  • (הזרקת הזרקה:0) ירידה ב- 1:1 להוסיף עיכובים קטנים, אקראיים בקוד שלך (למשל, באמצעות לוח זמנים) כדי להדגיש את המערכת ולהגביר את ההסתברות של מצב גזע המתרחש.

Best Practices for Efficient Debugging Tool Usage

טיפים אלה יעזרו לך לעבוד מהר יותר ולהימנע מטעויות נפוצות.

שימוש ב-Hardware ו- Software Breakpoints

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

Windows Variable

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

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

Instrument: ITM ו-RTT

במקום להשתמש ב-UART פיזי עבור הודעות debug, השתמש בכלי המובנה של ממשק דה בודג' (FLT:0ITM (Instrumentation Trace Macrocell)BuildFLT:1 משתמש SWO לשלוח נתונים ללא חסימת. Set up ITM (0-31) כדי לסווג הודעות (למשל, 0: שגיאות ברמה גבוהה 1: זרימת 2: פילטרים להורדת רעש).

(FLT:0)RTT (Real-Time Transfer)FearLT:1 מ-Segger הוא חלופה מעולה המשתמשת ב- buffer זיכרון משותף ועובדת אפילו על ליבות ללא SWO. זה מספק העברת נתונים לטווח קצר בזמן עם CPU מינימלי יותר.רבים קוד פתוח קוד פתוח (Open-source debuggers) תמיכה RTT באמצעות תוספים ייעודיים.

תסריט ואוטומציה

משימות חוזרות ונשנות עם תסריטים debugger.רוב הדחפורים המקצועיים תומכים בתסריט באמצעות Python, Tcl, או שפה קניינית של פיקוד. Common Scripting משימות כוללות:

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

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

לשמור על קידוד

מסמך כל באג שאתה נתקל בו - הסימפטומים, שורש הגורם, ותיקון.לאורך זמן, אתה בונה בסיס ידע אישי המזרז את פיזור עתידי.כולל מפרט חומרה (למשל, "ריצוף SWCLK גרם לסירוגין לתלות על STM32G0 - קבוע על ידי 10k ⁇ משיכה עד 3.3V").

מסקנה

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