1 / 31

Real Time Systems

Real Time Systems. Chapter 6 Low level Programming. System Programming. 2 סוגים של מערכות: Embedded - רכיבי חומרה הכוללים מעבד, זיכרון לקוד ולנתונים וקלט/פלט ספציפיים לדרישות. דוגמאות: מיקרוגל, טלפון סלולרי, מכונת כביסה

tevy
Download Presentation

Real Time Systems

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Real Time Systems Chapter 6 Low level Programming

  2. System Programming • 2 סוגים של מערכות: • Embedded - רכיבי חומרה הכוללים מעבד, זיכרון לקוד ולנתונים וקלט/פלט ספציפיים לדרישות.דוגמאות: מיקרוגל, טלפון סלולרי, מכונת כביסה • מערכות משולבות מחשב – במערכת קיים מחשב עם כרטיס מיוחד ששולט על התקני החומרה. התוכנה רצה במחשב וקוראת/כותבת מידע לכרטיסדוגמאות: רמזור, וידאומט

  3. מערכות משובצות • 99% ממערכות המחשוב בעולם • מערכת כזו צריכה: • חומרה: micro controller, זיכרון, I/O • מערכת הפעלה RT • ROM מסוג מסוים עבור הקוד

  4. סוגי מעבדים למערכות RT • Mips, Power PC, 68xxx • MPC8xx, x86, TMS320 • 8051,80251,8051XA • ARM,SH,H8 • ועוד מאות סוגים אחרים

  5. מערכות הפעלה RT • VxWorks, Nucleus, DriveWay, e/BSD • RTLinux, TargetOS, CMX-RTX, • CCOS, DSPios, RTPX, MCX-08 • ThreadX, PDOS, INTEGRITY • ועוד מאות מעה"פ נוספות.

  6. מערכות הפעלה RT • התאמה בין המערכת למוצר הסופי והדרישות לדוגמא: למכונת כביסה ולטלפון סלולרי אין אותן דרישות • לרוב המערכות תמיכה בשפות C/C++ • לחלקן תמיכה גם ב-java • למערכות יש דרישות שונות מבחינת זיכרון • לכל המערכות יש תמיכה ב- multitasking

  7. מערכות משולבות מחשב • החומרה הדרושה • כרטיס ייעודי במחשב • תוכנה שכתובה ב- C , C++ • מערכת הפעלה סטנדרטית (dos, windows, linux) • מערכות מסוג זה מפותחות במקביל (תוכנה, חומרה)

  8. RealMode • יישום יחיד • משתמש יחיד • מגבלת זיכרון MB1 כולל שטח עבור התקנים • היישום יכול לבצע כל דבר במערכת

  9. Protected Mode • ריבוי משימות • אין מגבלת זיכרון • היישום מוגן ע"י המעבד מיישומים אחרים • היישום מוגבל בביצוע פעולות מסוימות • זיכרון וירטואלי

  10. Rings • ל – Protected Mode 4 מצבי עבודה • Ring 0 – Kernel mode • Ring 1 • Ring 2 • Ring 3 – User mode • תהליך יכול לרוץ במצב אחד בלבד

  11. תכנות מערכת • מערכת הפעלה RT חייבת לתמוך בגישה ישירה לחומרה כדי לחסוך זמן. • במערכות ההפעלה Windows אין תמיכה בכתיבת תוכנות ב- Kernel mode ולכן השימוש בהן לצורכי RT אינו נפוץ • מערכת הפעלה DOS עובדת ב- real mode ולכן התוכניתן יכול לבצע כל דבר בגרעין. הבעיה העיקרית היא שאין אפשרות להריץ תהליכים במקביל. בעיה זו יכולה להיפתר ברמת התוכנה.

  12. גישה ישירה לחומרה • כל התקן חומרה במחשב ממופה בזיכרון מיוחד • מרחב זיכרון זה נקרא מרחב ק/פ • גודלו 64KB • מרבית השטח פנוי כך שניתן להוסיף חומרה כמעט ללא הגבלה • כדי לגשת למרחב זה קיימות קריאות מערכת מיוחדות.

  13. גישה למרחב ק/פ • פונקציות: • unsigned inp(int port) • unsigned inpw(int port) • void outp(int port,char byte) • void outpw(int port,int val)

  14. דוגמא – בקר המקלדת • קיימים 2 בקרי 8042 , אחד בתוך המקלדת ואחד על הלוח הראשי. • הבקר ניתן לתכנות ומקבל פקודות שונות הקשורות למקלדת. • פקודה 0xed מציינת לבקר להדליק את נורות המקלדת. • הפרמטר מתקבל בשלוש סיביות במבנה CNS 2 1 0

  15. דוגמת קוד void main(void) { outp(0x60,0xed); delay(10); outp(0x60,5) }

  16. דוגמא נוספת if(kbhit()) x=inp(0x60); • הערך שנקבל אינו קוד Ascii של התו שנלחץ • המרת קוד הסריקה לקוד Ascii הינה באחריות ה- Bios ומבוצעת ע"י פסיקת תוכנה • למקלדת מנוהל buffer שמחזיק עד 16 תווים שלחצו. בשל גודלו הוא אינו ממופה במרחב ק/פ אלא במרחב הזיכרון הרגיל.

  17. מבנה הזיכרון • 1024 בתים ראשונים – וקטורי פסיקות • 256 בתים עוקבים – משתני Bios • החל מכתובת 0040:0000 מצויים משתני Bios המכילים מידע על אמצעי החומרה השונים. • חוצץ המקלדת ממופה לכתובות: 0040:001E עד 0040:003D. ב- offset001A נמצאת הכתובת (offset) של התו הבא בתור ובכתובת 0040:001C הכתובת של סוף התור. • בכל תא בתור נמצאים קוד סריקה (high) וקוד Ascii

  18. דוגמא #include <conio.h> #include<dos.h> void main(void) { int far *s=(int far *)0x0040001a; char far *x; cprintf("Press any key to continue:"); while (!kbhit()); x=(char far *)MK_FP(0x0040,*s); cprintf("%d\n\r",*x); }

  19. Real Time Clock • ניתן לגשת ישירות לשעון שנמצא ב- CMOS ולקבל בכל זמן את התאריך והשעה. • ממופה לכתובות 70, 71 • הפקודה נשלחת לכתובת 70 • התשובה מוחזרת דרך כתובת 71 • השעון מחזיר את השעה בדיוק של שניה, ניתן לקבל דיוק טוב יותר ע"י מיפוי פסיקת השעון

  20. Time • outp(0x70,4); • hour=inp(0x71); • outp(0x70,2); • minute=inp(0x71); • outp(0x70,0); • second=inp(0x71);

  21. Date • outp(0x70,7); • day=inp(0x71); • outp(0x70,8); • month=inp(0x71); • outp(0x70,9); • year=inp(0x71); • printf(“%x/%x/%x”,day,month,year);

  22. מדידת זמנים • בכתובת 0040:006C קיים מונה שסופר את מספר פסיקות השעון שהתקבלו. long far *p=(long far *)0x0040006c; start=*p; //do something end=*p; time=(end-start)/18.2;

  23. Keyboard Status Byte • נמצא בכתובת 0040:0017, ניתן לדגימה ומיסוך פשוט Ins on Caps on Num on Scrl on L Shift R Shift Alt Ctrl

  24. Reset void ((far *fp)())=(void (far *)())0xffff0000; *(int far *)0x00400072=0; //0x1234 for warm fp();

  25. Memory Mapped Devices • התקני חומרה שצריכים שטחי זיכרון גדולים מקבלים שטח בתוך מרחב הזיכרון הרגיל. • כרטיס המסך מקבל 128KB עבור מצב גרפי ומצב טקסט. • טקסט: חצי ראשון של סגמנט B – מונוכרום, חצי שני עבור CGA ומעלה • גרפי: סגמנט A

  26. int get_video(void) { int seg; if (*(char far *)0x00400049==7) seg=0xb000; //MDA else seg=0xb800; //CGA or better return seg; }

  27. void cls(char ch,char attr,int page) { int count, seg; char far *video; seg=get_video(); video=(char far *)MK_FP(seg,page*4096); for (count=0;count<2000;count++) { *video++=ch; *video++=attr; } }

  28. void wrt_chr(char chr,int attr,int row,int col,int page) { register int a=attr; char far *video; int seg,off; seg=get_video(); off=row*160+col*2+page*4096; video=(char far *)MK_FP(seg,off); *video++=chr; *video++=a; }

  29. void wrt_msg(char *str,int attr,int row,int col,int page) { register int a=attr; char far *video; int seg,off; seg=get_video(); off=row*160 + col*2 +page*4096; video=(char far *)MK_FP(seg,off); while(*str) { *video++=*str++; *video++=a; } }

  30. void scr_attr(int attr,int row1,int col1,int row2,int col2,int page) { register int r,c; int seg,charperrow,delta; char far *video; seg=get_video(); video=(char far *)MK_FP(seg,(row1*160+col1*2+page*4096)+1); charperrow=col2-col1+1; delta=160-(col2-col1)*2; for(r=1;r<=row2-row1+1;++r) { for (c=1;c<charperrow;++c) { *video=attr; video+=2; } video+=delta; } }

  31. שימוש בפסיקת תוכנה void setpage(int page) { _AH=0x05; _AL=page; geninterrupt(0x10); }

More Related