אסמבלר.

yair24

Member
אסמבלר.

שלום, שאלה של רעיון באסמבלר. יש לי פסיקת RS232 שכל פעם כשמגיע בית הפסיקה מתרחשת. אני צריך לבנות פרוטוקול מאוד פשוט: בפרוטוקול יש מחרוזת שמגיעה והיא באורך 2 בתים: הבית הראשון צריך להיות הערך אסקי N והבית שאחריו הוא מספר בין 0-255 בפסיקה אני צריך לבצע בדיקה על הבית הראשון שהגיע, אם הוא באמת N אז זה אומר שהבית שאחריו הוא המספר ואני צריך לקחת את הבית השני ולשים אותו בתוך משתנה בשם PLENGTH. את הסינטקסט של האסמבלר אני יודע (זה לא אסמבלר של 8088 או 8086 אלא של משהו אחר: מיקרוקונטרולר PIC) הבעיה שלי היא שכל פעם שמגיע בית לUART יוצאת הפסיקה, ולכן אני לא יכול לבדוק את הבית הראשון בפסיקה, בגלל שגם בבית השני כשהוא מגיע הפסיקה מתרחשת ושוב פעם הוא מבצע את הבדיקה של האות N. אני מקווה שהשאלה ברורה. יאיר
 

yair24

Member
לא כתבתי את השאלה:

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

shed

New member
בצורה פשוטה

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

yair24

Member
הופה!!

רעיון מספר 2 הוא רעיון יפה מאוד!!! נראה אם אני מצליח לממש אותו. תודה רבה יאיר
 

selalerer

New member
אל תשכח לא לאפשר פסיקות בתוך הפסיקה

כי אז היא יכולה להשתבש אם תוך כדי הריצה שלה היא נקראת שוב.
 

yair24

Member
ודרך אגב...

אין לי מערכת הפעלה, אני קובע איפה לשים משתנים בזיכרון. יאיר
 
למעלה