למה ללמוד על ARM Cortex-M?

בימים האחרונים התחלתי לאסוף את הכלים והחומרים הדרושים ללמידה רצינית של ARM Cortex-M. על מה מדובר, ולמה אני עושה את זה לעצמי?

ספר ולוחות ARM Cortex-M
ספר ולוחות ARM Cortex-M

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

יחד עם זאת, אי אפשר להכחיש שעולם ה-32-ביט הוא גדול, רחב ומשמעותי ביותר, ובתוך העולם הזה, מיקרו-בקרים מבוססי ARM Cortex-M מובילים בהפרש עצום. אז למטרות למידה כללית, בלי יעד ספציפי מוגדר מראש, נדמה לי שזהו הכיוון הטוב ביותר: הן מבחינת מבחר וזמינות של מיקרו-בקרים, והן מכיוון שזו כנראה האופציה הכי "עמידה לעתיד" (Future proof), כלומר יש לה את הסיכוי הכי נמוך להיעלם מהשוק בטווח הנראה לעין.

מה זה ARM Cortex-M?

חברת ARM (ראשי תיבות של Advanced RISC Machines, ו-RISC זה ראשי תיבות של Reduced Instruction Set Computing) פיתחה מספר ארכיטקטורות למעבדים (Processors), ויצרה על בסיס הארכיטקטורות האלה תוכניות לבניה של מעבדים שונים. בניגוד לחברות אחרות, שמייצרות רכיבים בעצמן (ולעתים קרובות באופן בלעדי), ב-ARM בחרו במודל אחר: הם מוכרים לכל דיכפין את הרשיונות לשימוש בארכיטקטורות ובתוכניות שלהם, והקונים הם אלה שהופכים אותן למוצרים פיזיים.

Cortex-M היא משפחה של מעבדים שמיועדים להיות ה"לב" של מיקרו-בקרים (ה-M מגיע מ-Microcontrollers). כל חברה שקונה את הרשיון למעבד כזה (למשל מעבד Cortex-M0 או Cortex-M4) מייצרת מיקרו-בקר שכולל אותו ואת כל האלמנטים ההיקפיים הדרושים כגון זיכרון, מודולי תקשורת ועוד.

המשמעות של זה היא שמיקרו-בקרי Cortex-M4 שונים יכולים להיות בעלי יכולות שונות מאד זה מזה, אך המעבד, ה"לב" שלהם, יהיה זהה. לכן, מעבר בין מיקרו-בקרים כאלה (ולמידה של מיקרו-בקר חדש) אמורים להיות קלים יותר מאשר מעבר בין ארכיטקטורות שונות, למשל בין AVR ו-PIC.

במילים אחרות, מרגע שאלמד לעבוד עם Cortex-M מסוים, לא אהיה כבול לשום יצרן או דגם ספציפי, ואוכל להעביר את הקוד ואת הידע שלי בחופשיות יחסית בין מיקרו-בקרים שונים, קיימים או עתידיים, בעלי אותו מעבד. כמובן שבפועל המעבר לא יהיה חלק, ונתח גדול מאד מכל מערכת הוא האלמנטים ההיקפיים שכאמור אינם שייכים לסטנדרט. אף על פי כן, מבין כל הארכיטקטורות 32-ביט שקיימות כיום בשוק, אין ספק שאלה של ARM הן בעלות הפוטנציאל הרחב ביותר, ואומרים שהן גם די טובות כשלעצמן.

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

אז איך לומדים את זה?

כבר היו לי היתקלויות בעבר עם מספר מיקרו-בקרי Cortex-M – בקורס מקוון מצוין ב-edX, ועם PSoC4 של Cypress. בשני המקרים, התחושה שלי היא שמה שהספקתי לעשות לא התחיל אפילו לגרד את פני השטח.

מכיוון שאני כבר יודע מה זה מיקרו-בקר ומה עקרונות הפעולה שלו, החלטתי להסתער על הנושא מהצד הטכני וה-Low-level, כגון דפי הנתונים והספר שבתמונה למעלה. אני לחלוטין לא ממליץ עליהם למתחילים, כי בלי רקע מתאים או הכוונה רצינית פשוט אי אפשר להבין מהם כלום (שימו לב שהמילה Beginners לא מופיעה בכותרת הספר…)

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

סביבת הפיתוח שבה אנסה להשתמש, לפחות בשלב ראשון, היא Atollic TrueStudio, מכיוון שהיא מוצעת בגרסה חינמית ללא מגבלות זמן או גודל קוד, וזה דבר נדיר בעולם ה-ARM. [עדכון, סוף 2020: סביבת הפיתוח הזו נרכשה ע"י STMicroelectronics וננטשה לטובת סביבת הפיתוח STM32CubeIDE.]

קדימה, לעבודה…

להרשמה
הודע לי על
10 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

איך סביבת פיתוח. microC arm

שלום
איך סביבת פיתוח PRO for ARM

יש לי את הלוח הקטן (STM32F103).
מאוד נוח בשביל ללמוד ARM. ממליץ לך להשתמש בIAR.

רק בIAR ו-KEIL. למה שתקנה את הגרסה המלאה? יש גרסה חינמית עד 32 קילובייט קוד.
גם פרוייקטים עם מערכת הפעלה לא מגיעים לגודל הזה.
עבור הלוחות Discovery של ST (לא הM0 הזה, אותו אני לא מכיר), קיים אוסף של פרויקטים לדוגמה (חלקם מרשימים) וכמובן גם הם לא מגיעים למגבלות הגודל שציינת.

באיזה לוח אוולואציה אתה מתכנן להשתמש? איפה אפשר למצוא tutorials המוכוונים לדגם בקר/לוח אוולואציה ספציפיים?

תודה מראש