Embedded – מערכות משובצות מחשב
במיסגרת הסידרה על מקצועות פיתוח תוכנה שונים אכתוב היום על מערכות משובצות מחשב.
מי שיצא לו לדבר איתי על הנושא ומכיר את דרכי המקצועית יודע שיש לי פינה חמה לנושא מערכות משובצות מחשב ושהנושא מרתק אותי. זהו נושא רחב ביותר ואנסה כאן לגעת בעיקרי הדברים.
הדבר שמייחד פיתוח תוכנה במערכות משובצות מחשב הינו השימוש הישיר או המקורב לרכיבי החומרה השונים שנמצאים על המערכת. כאן יש התייחסות לרכיבים פיסיים שמגיבים ופועלים בקצבים משלהם, כאן יש להכיר את הרכיבים, אופן פעולתם ושיבוצם במערכת. תוכנה שנבנתה למערכת אחת תצטרך לעבור התאמות על מנת לעבוד על מערכת אחרת. אנו קוראים לתוכנות האילו low-level בגלל קירבתם “לברזלים”.
מערכת הפעלה כדוגמאת Windows, iOS, Android וכו הינם מערכות משובצות מחשב (!!!) מערכות אילו מכירות את ארכיטקטורת המעבד הראשי, את הרגיסטרים שלו, מרחב הכתובות, התמיכה בזיכרון וירטואלי, דיפדוף וכו. רוב התוכנות והאפליקציות שאנו כותבים על מנת שירוצו מעל מערכות הפעלה אילו אינן מערכות משובצות מחשב.
ובכן, תוכנת Embedded רצה על חומרה מסויימת, או על ארכיטקטורת חומרה מסויימת. חלקן, כדוגמאת מערכות ההפעלה שהזכרתי משמשות כפלטפורמה לריצת אפליקציות, מערכות משובצות אחרות הינן מערכות סגורות המספקות שירותים מסויימים, לדוגמא: המצלמה הדיגיטלית הינה מערכת משובצת מחשב, למערכת זו יש מעבד ראשי, תגובה ללחצנים, הפעלת תפריט למשתמש, עיבוד תמונה ועוד. אולם זוהי מערכת סגורה, במצלמה מסוג אחר “רצה” תוכנה אחרת.
במשפחת תוכנות הembedded רצוי להזכיר את המושג Firmware, “קושחה” זוהי מערכת תוכנה סגורה, הרצה על חומרה מסויימת אשר פועלת באופן עצמאי כמו המצלמה, דיסק-און-קי ועוד.
נחזור לתיכנות בסביבה משובצת., רכיבי החומרה השונים שמורכבים במערכת מתקשרים דרך רגיסטרים שונים למרחב הזיכרון של המערכת. הם נשלטים על ידי אותם רגיסטרים ועל ידי אותות המחוברים לביטים מסויימים במרחב הכתובות. בהתאם לתכנון המערכת, האותות עשויים להפעיל פסיקות ועל התוכנה להיות בנויה כך שתנהל ותתנהל בתוך העולם הזה ב”זמן אמת”. זוהי סביבה מורכבת ורב מימדית, עליך לחשוב שבכל סידרת פעולות, סידרת פעולות אחרת עשויה להשתרבב פנימה ולשנות את מצב המכונה. בסביבה זו עליך להשתמש באמצעי הגנה מיוחדים כדוגמאת סמפורים בכדי להגן על פעולות מסויימות.
בסביבה זו, שפת התוכנה המתאימה ביותר לפיתוח הינה שפה שיכולה להתייחס באופן ישיר לחומרה, שפת האסמבלי של המעבד או שפה כמו C אשר מאפשרת שליטה גבוהה יחסית בתצורת קוד המכונה המיוצר על ידי הקומפיילר. כאן לא נשתמש בשפות ברמת אבסטרקציה גבוהה כמו JAVA.
תוכנה במערכות משובצות מחשב מפיחה “רוח חיים” במכונה ופיתוח התוכנה דורש התרכזות לא רק בפיתרון בעיה לוגית והפיכתה לתוכנה כי אם גם התייחסות להתנהגות המכונה ולמערכת כולה.
העוסק בתחום זה צריך להכיר מושגים בסיסיים בחומרה ועליו לדעת שבמקצוע זה לא פותרים רק בעיות לוגיות ואבסטרקטיות בעזרת תוכנה כי אם עוסקים בבעיות פיזיות של סיגנלים והתנהגות המערכת.
מעניין כבר אמרתי ?