RSS 1.0 FEED Powered by GM-RSS ארכיון האתר בטל רישום כתוב אלינו משאבי הפריק רישום לאיגרת פורום מייקרוסופט פורום הפריק מי אנחנו דף הבית

כתבה למפתחים: קומפילציה של קוד שפותח ב- ++eVC לעומת NET CF. - סוג המעבד
Amir - 04/01/2004
 

אחד מההבדלים המשמעותיים ביותר בין סביבת NET CF. לסביבת eVC הוא תאימות לסביבה ולסוג מעבד.

כידוע, לפוקט פיסי יכולים להיות מעבדים מתצורות שונות כגון ARM, MIPS, SH3 וכו'.

קוד שעבר תהליך קומפילציה בסביבת NET CF. יעבוד בעקרון על כל סוגי המעבדים ללא שיהיה צורך להעביר אותו התאמה מיוחדת. לעומתו קוד שעבר תהליך קומפילציה בסביבת eVC יעבוד רק על מכשיר שבו קיים המעבד (CPU) שעבורו קומפל הקוד.

הסיבה לכך היא שקוד ב- NET CF. שיכול להיות #C או VB.NET מקומפל לשפת ביניים שנקראת MSIL. זוהי אינה שפת מכונה ולכן ניתן להעביר אותה לסביבות רבות ללא ביצוע שינוי בקוד או קימפולו מחדש. כל זאת בניגוד לקוד מ-eVC שכן הופך לשפת-מכונה לאחר תהליך הקומפילציה.

בכתבה זו אני אתמקד בהבדלים בין קוד שקומפל לשפת-מכונה לקוד שקומפל לשפת MSIL. המטרה של הכתבה היא להסביר מדוע קוד שקומפל ב-eVC עבור האמולטור לא יעבוד על הפוקט. זוהי טעות שכיחה שמופיעה אצל מפתחים מתחילים ורצוי למנוע אותה כבר בהתחלה.

כאשר תפתחו פרוייקט חדש ב-eVC++ 4.0 זוהי התמונה שתקבלו:
eVC-NewProject (45k image)

תיבת ה-CPUs היא זו שצריכה לעניין אתכם בשלב זה. מה שמופיע בה הוא:


* Win32 (WCE ARMV4)
* Win32 (WCE emulator)

שתי האפשרויות מסומנות.

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

אני לא ארחיב את הדברים לגבי האמולטור אך בקצרה, זוהי סביבה שרצה על המחשב השולחני ומדמה פעולה של פוקט פיסי. מכיוון שלא ניתן להכניס מעבד ARM לתוך מחשב שולחני, אנו חייבים להעביר את הקוד תהליך קומפילציה שמותאם ל-emulator כדי שהקוד ירוץ עליו. באותה מידה שקוד שעבר קומפילציה עבור ה-emulator לא ירוץ על הפוקט.

כמו שציינתי בתחילת הכתבה - קוד שקומפל לשפת מכונה יכול לרוץ רק על פלטפורמה שיכולה לקרוא את שפת המכונה הזו. שפת מכונה תלויה בסוג מעבד ולכן קוד כזה ירוץ רק על המעבד שאליו הוא יועד.

לעומת זאת - הקוד שקומפל ב-NET CF. ירוץ על כל פלטפורמה שבתוכה הותקן רכיב שמתרגם את שפת MSIL לשפת מכונה. MSIL אינה שפת מכונה והפקודות שבה אינן תלויות במעבד מסויים. למעשה מה שעושה את ההבדל הוא הרכיב המתרגם - זה שונה בין פלטפורמה אחת לשניה ומיקרוסופט אחראית כאן על שחרור גירסאות מתאימות למעבדים שונים או לפלטפורמות שמתנהגות אחרת.

אחרי שתפתחו את הפרוייקט ב-eVC בפעם הראשונה זה מה שתראו בסרגל הכלים WCE Configuration:
EVC-emulator-Debug (6k image)

כמו שאתם רואים מצד שמאל מופיע סוג הפלטפורמה, ולידו מופיעים הרכיבים החשובים ביותר להגדרה בתהליך הקומפילציה:
Win32 (WCE emulator) Debug שזוהי הסביבה שעבורה הקוד שלנו יעבור תהליך קומפילציה.

ומשמאלו - Pocket PC 2003 Device שזוהי כתובת היעד להרצת הקוד או ביצוע פעולות Debug.

אלה הם שלושת המצבים האחרים שאפשר לבחור:

EVC-emulator-Release (6k image)

EVC-ARMV4-Debug (6k image)

EVC-ARMV4-Release (6k image)

אם תרצו לבדוק את הקוד על האמולטור, יש לבחור באחד מהמצבים:
Win32 (WCE emulator) Debug
Win32 (WCE emulator) Release
כאשר גירסת ה-Debug מוסיפה קוד שמיועד לצורך תהליכי Debug וגירסת ה-Release הינה גירסת השחרור הסופית של האפליקציה.

אם תרצו לבדוק את הקוד על מחשב כף היד, יש לבחור באחד מהמצבים:
Win32 (WCE ARMV4) Debug
Win32 (WCE ARMV4) Release

החלק הימני ביותר יקבע לאיזה מכשיר נשלח את הקוד - למחשב כף היד או לאמולטור.

הנקודה החשובה ביותר שרצוי שתזכרו היא שאסור להעביר את הקוד קומפילציה עבור האמולטור כשאתם מתכוונים להשתמש באפליקציה על מחשב כף-היד. זה לא יעבוד כמו שצריך. הקוד מקומפל בכל מצב לשפת-מכונה "אחרת". האמולטור נחשב ל-"מעבד" עם סט פקודות שונה מ-ARM.

לסיכום, קוד שפותח ב-eVC הופך לקובץ exe בשפת-מכונה שמתאימה לסוג המעבד שעבורו היא פותחה. אין מדובר כאן במעבדים בעלי שמות יצרן שונים כמו Samsung או Intel אלא על מעבדים שתומכים בסט פקודות זהה (במקרה שלנו ARMV4). כל זאת בניגוד לקוד שפותח ב-NET CF. שאינו עובר את התהליך המתואר אלא הופך לשפה מיוחדת - MSIL.

בכתבה יצאתי מנקודת הנחה שאתם מכירים מושגים טכניים מעולם התכנות והפוקט. אם ישנו נושא לא ברור אני ארחיב עליו לפי בקשותיכם.

תגובות ותוספות יתקבלו בברכה.

להמשך דיון בנושא אנא הכנסו לפורום המפתחים.


אמיר ולדמן
(BlastPPC)
פורום המפתחים
פוקט פיסי פריק

הערות: 2 הערות

נתי,

לאבטחת קוד בסביבת NET. יש פתרונות כמו למשל ה- Dotfuscator שמגיע עם VS2003. ישנן מספר בעיות תאימות עם CF אבל גם עליהם ניתן להתגבר בצורה זו או אחרת. נושא האבטחה הוא מאד מתקדם ויתכן ואני אדבר עליו בעתיד.

לגבי ngen.exe - לא בדקתי את הנושא אבל מאחר וכל הקוד ב-NET CF. עובר קומפילציה חוזרת בכל פעם שהאפליקציה עובדת על המכשיר (אין Cache לקוד מקומפל לשפת-מכונה), אני מעריך שהדבר אינו אפשרי. לא נראה לי ש-ngen.exe יכול לעבוד על קוד שנכתב עבור CF.

נרשם על ידי BlastPPC בתאריך 04/01/2004, בשעה 07:54PM לפי שעון ישראל

אכן כתבה חשובה למי שמעוניין להתחיל.
הבדל נוסף שיש לקחת בחשבון כאשר מחליטים על סביבת פיתוח הוא אבטחה והצפנה של קוד ונתונים, בהם .NET לוקה בחסר.
האם תוכל להרחיב בכתבות נוספות לגבי אפשרויות אבטחה הנוגעות לשמירה על קריאות הקוד והצפנת נתונים.
כמו כן, האם יש אפשרות להפעלת ngen.exe בדומה ל-.net ?
תודה
נרשם על ידי נתי בתאריך 04/01/2004, בשעה 02:27PM לפי שעון ישראל

[ הקודם: "מה צריך הפוקט פיסי כדי לבלוט בעולם העסקי?" ] [לעמוד הראשי] [ הבא: "PocketFMS - תוכנה לטייסים" ]

Powered By Greymatter





חפש   
חפש באתר עם גוגל   
Google
Web pocketpcfreak.com
חברות התומכות באתר
Onroad
iGo Website
PocketPCNetL (5k image)
Visual CE
Pocket Gear
חפש מוצר באמזון
Search Now:
הגרלות באתר
פרסים ומעמדים
Helio Diamant and Saar Avigour are Microsoft MVPs
אתרים חברים
Pocket PC Thoughts
Pocket PC Writer Net