יום שלישי, 31 בינואר 2017

חידושים בהמרה אוטומטית של קוד MATLAB ומודלים של Simulink לקוד C++/C ובניתוח סטטי של קוד C++/C

לפני כארבעה חודשים שוחררה גרסת ה-MATLAB השנייה לשנת 2016, R2016b. הגרסה כוללת הרבה שיפורים ויכולות חדשות ל-MATLAB ולכלים המשלימים אותו, ובפרט – לכלים המאפשרים המרה אוטומטית של קוד MATLAB ומודלים של Simulink לקוד C/C++ והמאפשרים ניתוח סטטי של קוד C/C++. במסגרת סדרת הפוסטים העוסקים בחידושים בגרסה הנ"ל (לחצו לפוסט הקודם בסדרה), מובאת להלן סקירה בנושאים שבכותרת, אשר נכתבה על ידי מיכאל דוננפלד, מהנדס אפליקציה בחברת סיסטמטיקס, המהווה מוקד ידע בכל הקשור לשימוש בכלים המוזכרים להלן.

MATLB Coder
בכלי המאפשר המרת קוד MATLAB לקוד C/C++, נוספו:
·         תמיכה בפונקציות רקורסיביות ו-Anonymous Functions.
·         תמיכה באלגוריתמי לימוד מכונה מסוג SVM  ו-Logistic Regression.
·         תמיכה ב-29 פונקציות מתוך ה-Wavelet Toolbox, כלי לניתוח אותות ותמונות באמצעות גלונים.

Simulink Coder
בכלי המאפשר המרת מודלים של Simulink (כולל Stateflow) לקוד C/C++, נוספו היכולות הבאות:
·         ייצור קוד מתוך בלוקים ייעודיים המגדירים כיצד לאתחל את המודל, לאפס את המודל ולסיים את ריצת המודל  (Initialize Function, Reset Function, Terminate Function).
·         ייצור קוד מבלוקים המאפשרים לקרוא ולכתוב ל-states של המודל.
·         ייצור קוד אוטומטי התומך בלוח Nucleo של חברת STMicroelectronics.

Embedded Coder
בכלי, המאפשר קבלת קוד C/C++ אופטימלי עבור מערכות Embedded, מתוך קוד MATLAB או מודלים של Simulink, תוך שימוש בכלי/ם הרלוונטי/ם המוזכר/ים לעיל, נוספו היכולות הבאות:
·         אפשרות לקבוע את ממשק התוכנה של פונקציות המיוצרות מ-Simulink Function block.
·         תמיכה בייצור קוד המוכוון ללוח מסוג STM32F746G-Discovery  המבוסס על Cortex-M7.
·         הקטנת כמות הזיכרון הנדרש ע"י שימוש חוזר במרחב זיכרון (Buffer reuse) במקרים שונים כגון: מבנים גלובליים של nonreusable subsystems.
·         אופטימיזציה בקוד של חישוב אינדקסים בגישה למטריצות בתוך לולאות.
·         הקוד המחולל מיוצר ללא שימוש בפעולות כפל, אלא משתמש רק בפעולות חיבור והזזה.

Polyspace Bug-Finder & Code-Prover
בכלים המאפשרים איתור באגים בתוכנה בעזרת Static Analysis והוכחה של העדר שגיאות run-time בקוד, נוספו היכולות הבאות: 
·         קונפיגורציה אוטומטית לבדיקת קוד שמקומפל ע"י Diab Compiler.
·         אפשרות הגדרות נוחה המבחינה בין קוד שרץ כמשימה מחזורית מול קוד שרץ דרך פסיקה. זאת על מנת לאפשר זיהוי בעיות הנוגעות ל-multitasking כגון: race condition, read/write contentions וכדומה.
·         אפשרות להריץ את הכלי מתוך שורת מערכת ההפעלה.
·         אפשרות להריץ אנליזה של הכלי אוטומטית מסביבת IBM®  Rhapsody 8.1 באמצעות שימוש ב-add-in  ייעודי.
·         קבלת מדד המשערך את כמות הזיכרון של משתנים מקומיים בקוד.