הבסיס לניהול נכון של צריכת הספק ביישומי אמבדד מאת: אוהד בית-און – סאייטסיס
צריכת הספק נמוכה היא מרכיב חשוב במספר רב של מערכות משובצות מחשב.
כיום, יותר ויותר מוצרים מתוכננים לעבוד עם סוללות ללא כל התחברות למתח החשמל במשך פעולתם. ניתן לראות זאת במגוון מכשירים אלקטרוניים ניידים, במכשירים מתחום האוטומציה הביתית, במכשירים רפואיים המשתמשים בתקשורת אלחוטית, בהתקני ניווט אישיים ,במוצרים מתחום המשחקים הניידים ובאפליקציות נוספות רבות ומגוונות. כלומר, הביקוש עבור חיי סוללה ארוכים גדל באופן דרמטי וניכר בשנים האחרונות.
ואכן מספר המעבדים התומכים באפליקציות דלות הספק והמכילים בתוכם מנגנוני ניהול הספק עלה וממשיך לעלות בהתמדה.
הרבה אפליקציות מתחום המערכות המשובצות מבלות את רוב זמנן בהמתנה לאיזשהו מאורע שיקרה לדוגמא: קבלת נתונים בפורט סריאלי, שינוי מצב של PIN I/O , או בהמתנה לפקיעת זמן של Timer. אם המעבד יעבוד במהירותו המקסימאלית בזמן ההמתנה למאורעות אלו יגרום הדבר לאובדן רב של חיי סוללה בעוד שהתפוקה בפועל תהייה מינימלית כי המעבד נמצא בעצם – בהמתנה.
לפיכך במרבית האפליקציות, המעבד פעיל רק במהלך פרק זמן מאוד מצומצם ובכל שאר הזמן הוא נמצא במצב שינה המכונה sleep mode. מצב זה של המעבד מאפשר לו לחסכון רב בהספק ואורך חיי הסוללה ארוכים יותר.
עם זאת, השילוב בין ניהול צריכת ההספק במעבד והשימוש במערכת הפעלה לזמן אמת (RTOS) כמו µC/OS-II עשוי להיות בעל יתרונות ודרך טובה לא פחות לחסוך בצריכת הספק מאשר הסתמכות על מבנה המעבד בלבד. תוצאות של ניסויים הראו כי חלק מן המעבדים באפליקציות מסוימות עשויים להיות במצב המתנה (לא מבצעים דבר) במשך כ 60%-80% מזמן הפעולה שלהם. השימוש במערכת ההפעלה – µC/OS-II בשילוב השימוש ב- Idle task שלה , עשוי באופן משמעותי להפחית את צריכת ההספק ואת ה- CPU Overhead על ידי כך שמוודאים שה-CPU נמצא בPower mode הנמוך ביותר בכל פעם שהוא בהמתנה.
הפחתת צריכת ההספק במערכת .Embedded
המפתח הוא לצמצם את הזמן בו המעבד פעיל ובכך למקסם את הזמן שבו המעבד יכול להימצא ב-sleep mode . ניתן להפחית את הזמן הפעיל על ידי הפעלת אופטימיזציה של המהדר (קומפיילר), במוד שלspeed optimization . ככל שמשימה ספציפית תבוצע מהר יותר כך המעבד ירוץ פחות זמן.
שיקול חשוב נוסף הוא לתכנן את הקוד כך שיזהה מתי המערכת אינה מבצעת אף משימה.
גישה טובה לכך היא תכנון הקוד כמחולק למשימות ((Tasks תוך שימוש במערכת הפעלה לזמן אמת כדוגמת µC/OS-II המכילה task נוסף שמופעל רק כאשר אין אף Task אחר הנכנס לפעולה. אנו מכנים task זה בשם-Idle task והוא המקום המושלם ליישם את ניהול צריכת ההספק.
בפועל, בכל פעם שה-idle task נכנס לפעולה, הקוד שבו פשוט ממקם את המעבד במצב ה- power mode low הנמוך ביותר האפשרי.
השימוש ב- µC/OS-II
שימוש ב- µC/OS-II מארגן את הקוד בצורה נוחה וברורה. הקוד מחולק למשימות וה-scheduler של המערכת מתזמן אותן. מערכת ההפעלה מספקת בנוסף גם שירותים למשתמש כמו תקשורת בין המשימות השונותinter tasks communication , ניהול Timers ניהול משאבי זיכרון ועוד.
שימוש במערכת ההפעלה כדוגמת ה- µC/OS-II יכול לפתור מגוון של בעיות שעלולות להתרחש
אלמלא השימוש בה כדוגמת : מענה מהיר ובזמן מוגדר וידוע מראש ל-interrupts .
באפליקציות שונות המחייבות עמידה בdeadline- , בהם כמות ה-interrupts גדלה לרמה כזו המקשה על חיזוי זמן התגובה ל-interrupt , מערכת הפעלה לזמן אמת, מהירה כדוגמת ה- µC/OS-II היא הפתרון.
במערכת, כל משימה מקבלת עדיפות priority)) משלה על סמך חשיבותה. מערכת ההפעלה של מיקריום מוגדרת כ-preemptive . הכוונה היא שהמעבד תמיד יריץ את המשימה בעלת העדיפות (priority) הגבוהה ביותר.
למעשה, אחד היתרונות של ה- RTOS הינו, שהוספת משימה בסדר עדיפות נמוכה לא תשפיע על תגובת המערכת למשימות בסדר עדיפות גבוהה.
יש יתרונות רבים בישום ניהול צריכת הספק בתוך מערכת ההפעלה, שכן היא מאפשרת למפתחים להתרכז אך ורק בפיתוח האפליקציה. השימוש במערכת ההפעלה יכול גם להקל על חלוקת המשימות בין אנשי צוות הפיתוח כך שכל איש צוות יכול להתרכז במשימה מסוימת כאשר החיבור למערכת ההפעלה הוא פשוט . וכן השימוש ב- RTOS מאפשר באופן ניכר להפחית את זמן היציאה לשוק של המוצר.
שימוש ב- Low-Power Modes .
השימוש בLow-Power Modes – יעיל מאוד. Low-Power Mode זהו מצב שבו ניתן לשנות את מצב המעבד במטרה לחסוך בהספק. להרבה מהמעבדים יש Low-Power Mode נמוכים בהם ניתן לכבות חלקים שונים במעבד כאשר אין בהם צורך.
את האוסילטור (מתנד) ניתן לכבות או להעבירו למצב תדר נמוך יותר, ניתן לכבותTimers או פריפריות אחרות , וה- CPU יפסיק לבצע את הפקודות. למעבדים שונים יש רמות שונות של Low-Power Modes, כל אחד עם צריכת הספק שונה המבוסס על החלקים ברכיב שנשארו פועלים.
זמן ההתעוררות מ-Low-Power Modes כמובן משתנה בהתאם למעבד וכמובן בתלות בחלקים של המעבד אשר היו כבויים.
ה- µC/OS-II תמיד יוצרת idle task שיוצא לפועל כאשר אף אחד מהמשימות האחרות אינן מוכנות להרצה. בנוסף לכך, idle task יכול לקרוא לפונקצית hook: App_TaskIdleHook() שמאפשרת למשתמש להוסיף פונקציונאליות ל- idle task. למשל להכניס את הCPU – ל- Low-Power Mode.
לסיכום; בעבור תוספת מועטה של קוד ניתן לשפר באופן משמעותי את צריכת ההספק של המעבד. השימוש ב- µC/OS-II הוא פשוט ,אין צורך להגביר את מורכבות המערכת בכדי ליישם את ניהול צריכת ההספק, מאחר וה- µC/OS-II מנהל אותו ללא תקורה. השימוש ב- Idle task אשר במערכת ההפעלה מתאים בכדי לנהל את צריכת ההספק בדרך שתבטיח שהמעבד יימצא כמה שיותר זמן ב power mode-החסכוני ביותר.על מנת למזער את צריכת ההספק, יש לבחור מעבד שיכול לרוץ במתח נמוך ואף תומך ב- Low-Power Modes. יש גם לבחור קומפיילר יעיל בכדי להפחית את כמות הזמן שהמעבד עובד על מנת לבצע את העבודה הרצויה. בנוסף יש לשקול שימוש ב- RTOS יעיל כגון ה- µC/OS-II, בעל Footprint קטן ו – optimized task switching. לבסוף, רצוי ליישם את הפונקציונאליות של ניהול צריכת ההספק כך שהidle Task יהיה אחראי להבאת המעבד ל- Low-Power Mode. הקוד שמוציא את המעבד מ-Low Power Mode (בדרך-כלל ISR), יכול בפשטות להפעיל את ה-peripheral המתאים ולקבוע את תדר המעבד הרצוי.