שאלה

joshua149

New member
שאלה

אני מהנדס חשמל שמתעסק כרגע בתוכנה בעיקר בבדיקות תוכנה אך עם קשר הדוק לחומרה. מאד רוצה להיכנס לתחום ה-RT EMBEDDED האם אתם חושבים שאני יכול לפתח את עצמי לבד בשעות הפנאי שלי בתכנות בשפת C למרות שאני לא מתעסק בזה בעבודה ? ואם כן תנו לי עיצות כיצד לעשות זאת בצורה מיטבית.. תודה וחג שמח עם הרבה עבודה לכולנו ...
 
לדעתי כן.

אם אתה רוצה ללמוד לתכנת בלבד. אם אתה רוצה לפתח חומרה לא תוכל לעשות זאת לבד. עליך לרכוש ספר הסבר איך לכתוב בשפת C (עם קומפיילר לשפה זו בספר עצמו). אגב איך הצלחת למצא עבודה בבדיקות תוכנה ? מה שואלים אותך בראיון ?
 

pixiER

New member
C כן, אבל!!!

לתחום ה RT EMBEDDED בד"כ צריך ניסיון, ולא רק לדעת C, אלא אם כן, מקום העבודה הנוכחי שלך מוכן לקחת את הצ'אנס וללמד אותך ולהכניס אותך לתחום. וצריך למיטב ידיעתי C ברמה מאד מאד גבוהה, לא סתם ברמת ספר של קורס מבוא למדעי המחשב...
 

ami026

New member
תפרט מה זה רמה מאוד גבוהה?

הספר של "A book on C" לא מספיק? איזה רמה גבוהה יותר יש מעבר? אשמח לדעת גם איפה ניתן למצוא.. ואני לא מדבר על C בכל הקשור ל-kernels וכ'ו.
 

pixiER

New member
לא מספיק...

הספר ABC, הוא בסיסי ביותר. יש עוד הרבה מה ללמוד ב C חוץ מכל מה שהוא מכיל. נסה ספרים מתקדמים יותר, אני אישית לא מכירה משהו ספיציפי, אני רק יודעת שאפילו באוניברסיטה באחד הפרויקטים היותר גדולים שעשיתי, הייתי צריכה ידע הרבה הרבה יותר רחב ממה שהספר ההוא סיפק. במקרה שלי, זה היה ברמת ה FS, ואני בטוחה שזה היה רק קצה הקרחון. יש בשפת C המון המון פונקציות מובנות, שעושות נפלאות, למי שרק מכיר אותן, וכדאי להכיר אותן. אני הכרתי אותן במקרה, כי שותפי לפרויקט היה ממרמניק לשעבר, שזכר את רובן בע"פ, כי ככה זה כשהשבת שלך בסכנה...
בקיצור, יש עוד הרבה מה ללמוד... איפה? אני אחכה שגדולים וחכמים ממני יבואו וימליצו...
 

k e e n

New member
מה הקשר לC?

אם אתה רוצה להכנס לתחום של EMBEDDED , אתה צריך להכיר את סביבות העבודה, דהיינו את מערכת ההפעלה שיושבת על החומרה. בד"כ זה Vxworks, WinCE, Linux ויש עוד מלא אחרות. לכל מערכת כזו יש קומפיילר משלה (בד"כ הוא מבוסס על קומפיילר של C, אבל יש שם מלא פקודות מיוחדות שמאפשרות שליטה רבה יותר על רגיסטרים ומצב המעבד). מה גם שהנושא של דרייברים קשור קשר הדוק לקרנל של מערכת ההפעלה, וכידוע, לא משתמשים בפונקציות ספרייה (של C) בתוך הקרנל (כי זה מנפח את הקרנל בטירוף), אז מה היתרון בלהכיר את כל הפונקציות האלה? אם אתה מתעניין יותר בחומרה עצמה אז צריך לדעת לתכנן אותה (לדוגמה בVHDL או verilog), להריץ סימולציות , לבנות את הכרטיס עצמו ובמידת הצורך לכתוב לו גם דרייבר. כתיבת הדרייבר היא עסק לא פשוט- יש שם המון אסמבלי (ובשביל זה כדאי להכיר את המעבד של המערכת ואת הקרנל) ואח"כ צריך להריץ אינסוף בדיקות כדי לוודא שהדרייבר לא יפשל בעתיד.
 

® רן

New member
מאיפה הבאת את כל זה?

כל כך הרבה ממש שכתבת לא נכון שאני לא יודע מאיפה להתחיל... 1. נכון שצריך להכיר את מערכת ההפעלה שעובדים איתה - זה נכון למתכנת Windows באותה מידה שנכון למתכנת VxWorks או לינוקס. 2. לא נכון לגבי קומפיילר ייחודי. VxWorks משתמש בשפת ++C/C סטנדרטית ומגיע עם קומפיילר GNU, כמו בלינוקס/יוניקס. נכון שיש ספריות שונות ופונקציות ייחודיות, אבל גם ל Windows יש - ושם הן גדולות ומסובכות בהרבה. 3. לא נכון שהסיבה שלא משתמשים בפונקציות ספרייה בקרנל (בלינוקס) קשורה לניפוח או לגודל. הסיבה היא עניין של תלויות הדדיות. פונקציות הספריה תלויות בקרנל, ולכן זה תכנון שגוי לגרום לקרנל להיות תלוי בפונקציות הספריה. הקרנל נשמר כיחידה עצמאית. 4. לא נכון שלא צריך להכיר פונקציות ספריה של C - רק חלק קטן של הקוד נכתב ישירות בתוך הקרנל וגם במערכות Embedded רצה אפליקציה ב User space. 5. בד"כ כתיבת חומרה (VHDL/Verilog) וכתיבת דרייברים נעשית ע"י אנשים שונים, ואפילו ע"י מחלקות שונות בחברה. בכל מקרה תכנות Embedded אינו מסתכם בכתיבת דריבירים. דריברים הם חלק קטן אך חשוב מהפעילות של מערכת - לב המערכת הוא בד"כ תחום נפרד מהדריבר. 6. אין "המון אסמבלי" בדרייבר. לפעמים יש מעט, לפעמים אין בכלל. ונכון שצריך להריץ בדיקות - אז מה? על כל דבר צריך להריץ הרבה בדיקות. רן (מתכנת מערכות Embedded מאז 1998)
 

k e e n

New member
אנחנו כנראה מדברים על דברים שונים..

מבחינתי, להכיר את מערכת ההפעלה זה אומר להכיר את קטעי הקוד הרלוונטים ליישום שלי. לפעמים זה scheduler, לפעמים זה מנהל הזכרון. בwindows לדוגמה אני אף פעם לא אוכל לעשות את זה... לגביי קומפיילר, כתבתי שהוא מבוסס על קומפיילר קיים ל C, אבל לדוגמה בgcc יש הנחיות מיוחדות כשכותבים inline assembly שמאפשרות לך להגדיר איך יועברו הפרמטרים בעת ביצוע syscall - דרך רגיסטרים או על המחסנית וזה חשוב מאוד לדעת איך באמת מתבצעים דברים ברמת המעבד (במיוחד כשניגשים לIO-ports צריך לבטל caching לדוגמה ). לגבי שימוש בפונקציות ספריה- אם הבנתי אותך נכון אתה מתכוון לפונקציות ספריה בC שמהוות חלק מהAPI, ובאמת זה די חסר הגיון להשתמש בקרנל בפונקציות של API. אני התכוונתי לספריות שלא קשורות ל API והן רק מממשות מבני נתונים לדוגמה או פונקציות על מחרוזות. אפשר להשתמש בהן בקרנל, אבל הן מנפחות את הקובץ הסופי. בגלל זה במקום להשתמש ב printf בקרנל משתמשים ב printk. נכון שהאפליקציה שאתה מריץ רצה בuser space וכל עוד יש לך קומפיילר מתאים לחומרה אתה יכול לכתוב אפליקציות כאוות נפשך באיזו שפה שבא לך בלי לדאוג למה קורה ברמה נמוכה יותר. אבל כשאתה בונה מערכת מאפס, אתה בעצם כותב את כל מה שקורה ברקע בקרנל ושם אתה לא משתמש פונקציות ספריה. אני התחלתי מהתחום של כתיבת דרייברים לחומרה ייעודית ולכן נאלצתי להתחיל ממש מכלום- למפות רגיסטרים לאזורי זיכרון, לסנכרן קריאה/כתיבה, תורי I/O ושאר פרטים... זכורה לי התעסקות בלתי פוסקת באסמבלר....
 

® רן

New member
אוקיי

אם נחזור לשאלה המקורית, joshua149 שאל האם לקרוא ספר על C יעזור לו להיכנס לתחום RT/Embedded. אז כתשובה לזה קודם כל אני אגיד שלקרוא ספרים זה דבר חשוב וחיוני, אבל זה קצת כמו ללמוד שחייה בהתכתבות - בלי לקפוץ ממש למים הקרים ולכתוב קוד אמיתי שרץ במערכות אמיתיות, עובר Code review של אחרים, עובר QA, ורץ בשטח אצל לקוחות - בלי כל זה קריאת ספר לבד לא תועיל לך יותר מדי. זה נכון גם ל Embedded וגם לכל תחום אחר. לגבי Embedded באופן ספציפי, נכון שנדרשת היכרות יותר מעמיקה עם המעבד, החומרה ומערכת ההפעלה. עדיין, אפילו בתחום הזה, לא כל המתכנתים (ואפילו לא רובם) עובדים בשכבות הנמוכות ביותר. גם ב Embebbded יש הרבה אפליקציה, פרוטוקולים, אלגוריתמים, שכבות ניהול ודברים אחרים שלא שונים במהותם מתכנות ללא-Embedded. מהתגובה שלך ניתן היה להבין שתכנות Embedded שונה לגמרי מתכנות בסביבות אחרות, קביעה שאני לא מסכים איתה.
 

k e e n

New member
יש משהו בדבריך

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

Dvir27

New member
העצה שלי

אני לא בטוח אם אפשר לקרוא לזה RT EMBEDDED, אבל זה בטוח EMBEDDED : חשבת על התחום של הMICRO-CONTROLLERS? כדי לתכנת מיקרו-קונטרולר כמו הPIC הרמה של ABC אמורה להספיק (בלי נדר!) אבל כדי להבין אותו תצטרך לדעת אסמבלר. חוץ מזה תצטרך ידע בחומרה ברמה של הקורס במבנה מחשבים ספרתיים. ערכת הפיתוח הבסיסית זולה יחסית (משהו כמו 1200 ש"ח) והקומפיילר לאסמבלר ניתן להורדה בחינם (והקומפיילר לC מוגבל ל20 יום). כמו כן אפשר לחבר אליו התקנים אנאלוגיים (יכול להיות יותר מעניין מ"סתם" תכנות בשביל מהנדס חשמל). אני מפתח משהו בעזרתו בשעות הפנאי, אבל לי יש המון פנאי כי אני מהנדס חשמל מובטל. אז קח בחשבון שזה יקח חלק גדול משעות הפנאי שלך (לפחות בשלב הלימוד אם זה נושא חדש בשבילך). אתה יכול למצוא עוד מידע באתר של החברה שמייצרת את הPIC : www.microchip.com בהצלחה, דביר
 
למעלה