|
עמוד:71
הדוגמה הבאה עוסקת בשיקוליו של מתכנת בבואו לבחור במרחב הרצוי : דוגמה 2 . 2 משתנים ומרחבים א . מצאו איזה משתנה יאלץ מתכנת להשתמש במרחב , xdata-ה במקום במרחב . data-ה רמז : מערך גדול מדי . ב . מתי ישתמש מתכנת במרחב , idata-ה וכך ימנע מההרכבה החיצונית של מרחב ? xdata-ה ג . מתי ישתמש מתכנת במרחב ? code-ה ד . מתי ישתמש מתכנת במרחב ? bdata-ה פתרון : א . את פתרון סעיף א' נציג באמצעות התשובה לשאלה הבאה : מהו גודלו המרבי של מערך איבריlong- ( ארבעה בתים כל איבר , ( שאפשר למקם RAM-ב הפנימי ? לכאורה 32 איברים : . 128 : 4 = 32 אולם מהדרי C 51 משתמשים בשמונה תאי RAM-ה הפנימי לצורכיהם , ומותירים בידי המתכנת רק 120 תאים . לכן , הפקודה שלהלן : 1 ) data long NUM [ 30 ] תעבור את שלב ההידור בהצלחה , כי . 4 x 30 = 120 לעומת זאת , הפקודה הבאה תיכשל : 2 ) data long NUM [ 31 ] המהדר יפיק את הודעת השגיאה הזאת : No sufficient space in data memory : 4 bytes short . משמעות ההודעה : אין מספיק מקום במרחב : data-ה חסרים 4 בתים . בבקרים הראשונים של משפחת , 8051-ה יאלץ המתכנן לבנות RAM חיצוני , ולהחליף את הפקודה האחרונה בפקודה : 3 ) xdata long NUM [ 31 ] ב . . 1 בבקרים המתקדמים של משפחה זו אפשר למקם את המערך האחרון במרחב , idata-ה וגם את המערך , long NUM [ 32 ] כי . 32 x 4 = 128 בחלק מן הבקרים הללו מצביע המחסנית SP מאותחל למרחב , idata-ה ולכן , בשעת דחק זו – יש להזיזו למרחב . data-ה . 2 כשקיימת דרישה לכמות תאים גדולה , 128-מ אפשר כמובן לפזר אותם בין שני המרחבים . idata-ו data למשל , עיינו בשתי הפקודות האלה :
|
|