בימים האחרונים התחלתי לאסוף את הכלים והחומרים הדרושים ללמידה רצינית של 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.]
קדימה, לעבודה…
איך סביבת פיתוח. microC arm
קראת את התגובה הקודמת שלי?
שלום
איך סביבת פיתוח PRO for ARM
קצת פאדיחה להודות, אבל עד עכשיו רק קראתי ועוד לא תכנתי בפועל שום דבר עם ARM… אז אני לא מכיר את סביבות הפיתוח השונות ולא יכול לחוות עליהן דעה. מעבר לזה, מהשם Pro אני מניח שמדובר על גרסה בתשלום, ואלה אפילו לא בתוכנית שלי 🙂
יש לי את הלוח הקטן (STM32F103).
מאוד נוח בשביל ללמוד ARM. ממליץ לך להשתמש בIAR.
עבדת גם עם Atollic TrueStudio, או רק עם IAR? אני פשוט לא רואה כרגע מצב שבו ישתלם לי לקנות את הגרסה המלאה, כך שבמוקדם או במאוחר אצטרך לעבור ממילא לפתרון אחר כדי להתגבר על מגבלת גודל הקוד של הגרסה החינמית.
רק בIAR ו-KEIL. למה שתקנה את הגרסה המלאה? יש גרסה חינמית עד 32 קילובייט קוד.
גם פרוייקטים עם מערכת הפעלה לא מגיעים לגודל הזה.
עבור הלוחות Discovery של ST (לא הM0 הזה, אותו אני לא מכיר), קיים אוסף של פרויקטים לדוגמה (חלקם מרשימים) וכמובן גם הם לא מגיעים למגבלות הגודל שציינת.
החינמית של IAR מוגבלת ל-16KB ל-Cortex-M0, המגבלה של 32KB היא רק ל-M3/4. זה נכון שאני לא מצפה להגיע לגבול הזה בקרוב, ובכל זאת – מספיק שפעם אחת אצטרך להשתמש באיזו ספריה מוכנה גדולה מאד (והיו דברים מעולם, אפילו בארדואינו) או שמסיבה כלשהי ארצה לשמור Lookup table ענקית דווקא ב-Flash, ואני בבעיה.
אני לא פוסל מראש שום IDE ואין לי מניות אצל אף אחד… נתחיל ונראה 🙂
באיזה לוח אוולואציה אתה מתכנן להשתמש? איפה אפשר למצוא tutorials המוכוונים לדגם בקר/לוח אוולואציה ספציפיים?
תודה מראש
הלוח הגדול שבתמונה הוא מסדרת STM32 Nucleo – יש מבחר גדול של לוחות מהסדרה הזו, עם מיקרו-בקרים ופרמטרים שונים, והם עולים בסביבות 13 דולר ליחידה לפני משלוח.
אפשר למצוא טונות של מדריכים לכל לוח באתרים של היצרנים (זה המקור הכי מוסמך, אז כדאי להתחיל שם), ביוטיוב ועוד. בדיוק בשביל זה המציאו את גוגל 🙂