המלצה לשימוש בצ'אט מותאם לפרויקטים בתכנות מערכות
למי שמחפש את הדרך הטובה ביותר לקבל 100 בפרויקט הסופי בקורס תכנות מערכות, מומלץ להשתמש בצ'אט המותאם לפרויקטים של תכנות מערכות. הצ'אט מבוסס על פרויקטים שקיבלו 100 ומספק תמיכה מותאמת אישית.
טיפים חשובים לפרויקט:
מה התקן של הקוד בו יהיה עליכם לעבוד בפרויקט?
- גרסת שפת C: שימוש בתקן ANSI C (עד C89). דוגמה: בעת כתיבת פונקציות יש להקפיד על השימוש במבנה סטנדרטי הנתמך בכל המהדרים.
-
מחרוזות (strings) תמיד יכילו את Null-terminator:
-
בגלל שהקוד מתקמפל על לינוקס בגרסה מאוד ישנה, אינכם יכולים
להשתמש בפונקציות מתקדמות כמו
strcpy,strcat,strncatועוד. דוגמה: מומלץ לממש פונקציות משלכם שמוודאות כי המחרוזת מסתיימת בתו\0(Null-terminator) כדי למנוע בעיות בזמן ריצה.
-
בגלל שהקוד מתקמפל על לינוקס בגרסה מאוד ישנה, אינכם יכולים
להשתמש בפונקציות מתקדמות כמו
- ייצוג מחרוזות: מחרוזות הן מערכים של תווים כאשר הייצוג נעשה באמצעות ASCII Encoding.
- הרצת הקוד בטרמינל/Command Line: הקוד צריך לעבוד בצורה חלקה בסביבת טרמינל, עם תמיכה בקלט מקובצים (באמצעות command line arguments) או בקלט ישיר מהמשתמש.
אוסף טיפים להתחלה של הממן הסופי (מעבדה בתכנות מערכות - MMN14):
-
הכרת מבנה הפרויקט:
עיינו בקבצים שהועלו, ובמיוחד בקובץ
assembler.cהמציג את הזרימה המרכזית של התוכנית. יש להבין את חלוקת השלבים: טרום עיבוד (preprocessing) → מעבר ראשון (First Pass) → מעבר שני (Second Pass) → המרת קוד לבסיס 64 וכתיבת קובץ פלט. הסבר: בכל שלב, יש קובץ או פונקציה שמבצעת חלק מהמשימה – לדוגמה, במעבר הראשון נאספות תוויות והוראות. -
הכנת הסביבה:
יש להקמפל את הקוד עם
gccתוך שימוש בדגלים-ansi -Wall -pedanticלקבלת כל האזהרות האפשריות. ודאו שכל הקבצים (.c ו-.h) מסודרים כראוי, כולל Makefile במידת הצורך. השתמשו בפקודתvalgrindלבדיקת דליפות זיכרון. -
שלבי הביצוע:
-
טרום עיבוד (Preprocessing):
הקובץ
preproc.cאחראי על טיפול במקרואים והסרת רווחים מיותרים. הערה: ודאו שהמקרואים מוגדרים ומפורשים בצורה נכונה. -
מעבר ראשון (First Pass):
הקובץ
first_pass.hמציין את הפונקציהexe_first_passשהיא הליבה של המעבר הראשון. בשלב זה נאספות הגדרות תוויות (labels) ומנוהלים זיכרון והוראות. טיפ: השתמשו בפונקציהhandle_allocationכדי לוודא שאין דליפות זיכרון. -
מעבר שני (Second Pass):
מתבצע בקובץ
second_pass.cומטרתו לוודא שהתוויות מוגדרות כראוי ולהמיר פקודות לבסיס 64. דגש: יש לבדוק שאין תוויות כפולות, למשל באמצעותcheck_each_label_once. -
המרת קוד לבסיס 64 וכתיבת פלט:
הפונקציה
conv_code_base64ממירה את קוד המכונה לבסיס 64 וכותבת אותו לקובץ.ob.
-
טרום עיבוד (Preprocessing):
-
טיפול בשגיאות וניהול זיכרון:
השתמשו בקובץ
Errors.cכדי להבין את סוגי השגיאות האפשריים ואת אופן הטיפול בהן. הקובץutil.cמכיל פונקציות עזר כגוןhandle_mallocלטיפול בזיכרון ו-twos_complimentלייצוג מספרים. -
עבודה עם תוויות (Labels) וטבלאות:
בקובץ
table.hתמצאו את הגדרות מבני הנתונים הקשורים לתוויות וטבלאות סמליות. ודאו שאתם משתמשים בפונקציותinsert_label_tableו-insert_other_labelsלניהול הטבלאות. -
טיפים לכתיבת קוד נקי ומסודר:
הקפידו להשתמש בשמות משתנים ברורים ולהימנע מהגדרת משתנים גלובליים אם אין בכך צורך. חלקו את הקוד לפונקציות קטנות שכל אחת ממוקדת במשימה אחת בלבד. דוגמה: במקום פונקציה ארוכה המכילה את כל הלוגיקה, חלקו אותה לפונקציות כמו
calculate_sum(),validate_input()וכו'. בנוסף, הוסיפו תיעוד (comments) מעל כל פונקציה להקל על בדיקה ותחזוקה. -
בדיקות ודיבוג:
בצעו הרצות בדיקה על קבצי קלט עם סוגים שונים של פקודות ותוויות. ודאו כי אין שורות ארוכות מדי (הגדרת
MAX_LINE_LENGTH = 81). השתמשו בקבציםlexer.cו-handle_text.cלבדיקת תווים, זיהוי אופקודים ותוויות.
חלוקת עבודה נכונה בזוגות + עבודה מסודרת עם GitHub:
-
חלוקת עבודה נכונה בזוגות:
יש להגדיר אחריות לכל אחד מהשותפים. דוגמה: אחד מתמקד בפרה-פרוססינג ובמעבר הראשון, והשני במעבר השני ובהמרת הקוד לבסיס 64, כאשר שניכם בודקים את ניהול הזיכרון והטיפול בשגיאות.
-
עבודה במקביל:
חלקו את העבודה לפונקציות קטנות שכל אחד יכול לעבוד עליהן בנפרד. דוגמה: אם אחד עובד על
lexer.c, השני יכול לבדוק אתcode_conversion.c. -
בדיקות מקיפות ושילוב הקוד:
כל אחד צריך לבדוק את הקוד של השותף לפני שמחברים את כל החלקים. לאחר המיזוג, הריצו בדיקות עם קלטים שונים לוודא שהכל פועל כראוי.
-
עבודה נכונה עם GitHub:
-
יצירת מאגר (Repository) מסודר:
פתחו ריפו ב-GitHub מהיום הראשון. טיפ: עבודה ב-repository מסודר מקטינה את הסיכון לאיבוד קוד.
-
שימוש בענפים (Branches) לעבודה מקבילה:
השתמשו ב-
mainכקוד יציב ובענפים נפרדים כגוןfeature-first-passו-feature-second-passלעבודה על חלקים שונים. הסבר: כך ניתן לבדוק שינויים בנפרד ולמזג רק לאחר בדיקות. -
כתיבת Commitים מסודרים:
כל שינוי חשוב יש לתעד עם commit מתאים. דוגמה:
git commit -m "הוספת תמיכה בטבלאות". -
שימוש ב-GitHub Issues לניהול משימות:
תעדו כל משימה עם סטטוס ברור (למשל: In Progress, Done) והערות רלוונטיות. טיפ: רשימת משימות מסודרת עוזרת למעקב ולארגון העבודה.
-
ביצוע Code Review:
לפני מיזוג הקוד (merge), על השותף השני לקרוא ולהעיר הערות על הקוד. הסבר: זהו תהליך חשוב לשמירה על איכות הקוד ולהפחתת שגיאות.
-
שימוש בתגיות (Tags) או גירסאות (Releases):
לאחר סיום חלק משמעותי, תייגו את הקוד עם
git tag(למשל:git tag v1.0-first-pass). הערה: כך ניתן לחזור בקלות לגרסאות קודמות במקרה הצורך.
-
יצירת מאגר (Repository) מסודר:
אם תעקבו אחרי הטיפים האלה, תוכלו להתחיל את העבודה בצורה מסודרת, לחסוך זמן בדיבוג ולהבטיח שהפרויקט יתקדם על פי התקנים הטובים ביותר! 🚀