קצר בתקשורת (או: עוד סיבה לתעב ספריות)

אני נוטה להיות בררן מאד בפרויקטים שאני מוכן לבצע ללקוחות. זה לא כי אני סנוב, אלא פשוט כי הניסיון מלמד שדברים תמיד מסתבכים: אם הפרויקט מצריך איזושהי טכנולוגיה שעוד לא עבדתי איתה – וזה יכול להיות דבר שנראה בסיסי במידה מגוחכת ממש – איכשהו תמיד יוצא שהיא לא עובדת כצפוי, ואז הלו"ז מתעכב (במקרה הטוב) וכל הצדדים נפגעים. הנה עוד דוגמה…

כשלקוח ביקש לבנות מערכת מבוססת-ארדואינו ששולחת למחשב תמונה ממצלמה, ערכתי בירור זריז ומצאתי ב-Adafruit מצלמה קטנה שמתקשרת עם הארדואינו דרך חיבור טורי בקצב של 38,400 באוד. נראה מושלם: גם חומרה מתאימה לפרויקט, וגם ממקור שמספק תמיד הרבה מידע וקוד שאשכרה עובד. תקשורת עם המחשב ידעתי שאוכל לממש בעקבות העבודה על Serial Monitor Deluxe. מה רע?

כשהמצלמה הגיעה, הלכתי "לפי הספר" וביצעתי את הבדיקות המקדימות עם תוכנה ייעודית למחשב. הכל עבד. מעולה! כתבתי את התוכנית שלי, בהתבסס על הדוגמאות והספריה של Adafruit, והופ – לא עובד. המצלמה לא מגיבה לקריאות מהארדואינו. החומרה סבבה אבל תקשורת אין.

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

במפרט הרשמי של פקודות הספריה הזו, ובעצם כמעט בכל מקום אחר שחיפשתי, אומרים שהיא מסוגלת להגיע לקצבי נתונים של 57,600 באוד ואפילו יותר. אלא שבפועל זה פשוט לא ככה. אמנם שידור עובד לא רע, אבל כשמנסים לקלוט נתונים מבחוץ, כבר אחרי 19,200 באוד מתחילים גמגומים, וב-38,400 הזיוף הוא טוטאלי וחסר תקנה.

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

להרשמה
הודע לי על
4 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

אתה יכול לנסות להשתמש גם בארדואינו לאונרדו. התקשור הסריאלית שלו בפינים 0,1 לא קשורה לסריאל של המחשב אלא נעשית דרך האובייקט Serial1 (שלפי מה שהבנתי הוא גם כן סריאל חומרתי)

אדם חכם ציטט פעם (פיקטיבית) אדם חכם אחר, וכך אמר:"אל לי להשתמש בספריות. הספריות הן קוטלות הבינה. הספריות הן המוות הקטן המביא כליון מוחלט."

(: