Table of Contents
מבוא: The Role of Real-Time הפעלה Systems in Embedd Design
מערכות Embedded דורשות יותר ויותר ביצוע צפוי, שקיפות נמוכה, וטיפול במקביל של אירועים מרובים.מערכת הפעלה בזמן אמת (RTOS) מספקת את המסגרת כדי לעמוד בדרישות אלה מבלי לכפות מפתחים לבנות לוגיקה תזמון מאפס. בין האפשרויות הזמינות, FreeRTOS הוא מערכת הפעלה קלה, קוד פתוח כי הפך את הבחירה דה-למעשה עבור microcontrollers (U) ומעבדים קטנים, המאפשרים זעירים של חומרים, ומאובטחים, כדי ליצור תכונות סטנדרטיים, כדי ליצור תכונות עשירות, כדי ליצור תכונות סטנדרטיות, יעיל של חומרה.
מאמר זה מרחיב את המדריך המקורי ל-FreeRTOS, לצלול עמוק יותר לתוך הארכיטקטורה, התצורה, ניהול המשימה, מנגנוני סינכרון ויכולות מתקדמות.עד הסוף, תהיה לך הבנה מעמיקה של איך למנף את FreeRTOS לפיתוח תוכנה מוטבעת ברמה הייצור.
מה זה FreeRTOS?
FreeRTOS היא מערכת הפעלה מובילה בזמן אמת kernel המיועדת במיוחד עבור מערכות משובצות.זה נוצר על ידי ריצ'רד בארי והוא נשמר כעת תחת מטריה של אמזון Web Services (AWS) FreeRTOS, הבטחת תמיכה מתמשכת והיערכות עם האינטרנט של דברים (IoT) מערכות אקולוגיות.הגרעין מספק אמצעי זהירות רב-מחדשניים, תקשורת בין-טק, סינכרומים פרימיטיביים, ותוכנות הדורשות, ותוכנות, תוך זמן בלבד.
תכונות מפתח שהופכות את FreeRTOS כל כך מאומצות כוללות:
- מקור פתוח תחת רישיון MIT:FLT:1 לא דמי רישוי, זמינות קוד מקור מלא ושימוש סחיר במוצרים מסחריים.
- (FLT:0)Portability:IRFLT:1 , נמלים רשמיים עבור עשרות ארכיטקטורות MCU (ARM Cortex-M, RISC-V, AVR, PIC, וכו ') ושרשרת הכלים (GCC, IAR, Keil, LLVM).
- (FLT:0) טביעת רגל מינימלית: 1 (FLT:1) הקרנל יכול לרוץ מעט כמו 4 KB של ROM ו 1 KB של RAM, מה שהופך אותו מתאים למכשירים רגישים בעלות.
- התנהגותו של LT:0 (Deterministic): 1FLT:1 Scheduling Overhead הוא קבוע ועצמאי ממספר המשימות, הבטחת תזמון צפוי.
- קהילה פעילה ותמיכה מסחרית: FLT:1 ; פורומים ושירותים מקצועיים של צוות FreeRTOS ושותפים.
FreeRTOS הוא לעתים קרובות המפגש הראשון של מהנדסי RTOS, ומפת המושגים שלה ישירות למערכות מורכבות יותר, מה שהופך אותו לפלטפורמת למידה מעולה כמו גם בסיס מוכן לייצור.
מטרות ליבה ואובייקטי קרנל
לפני צלילה לצעדים מעשיים, חיוני להבין את אבני הבניין הבסיסיות של FreeRTOS מספק.
משימות
משימות הן חוטים עצמאיים של ביצוע ה- CPU זמן על פי לוח זמנים ראשוני מבוסס עדיפות.כל משימה יש ערימה משלה והקשר. FreeRTOS תומך במספר בלתי מוגבל של משימות (מוגבל רק על ידי זיכרון זמין) המתגים בין משימות המבוססות על סדר העדיפויות שלהם ועל המדינה (קרי, ריצה, חסום, מושעה).
המונחים:
קוויות מאפשרות להעביר מסרים בין משימות ובין הפרעות ומשימות.הם המנגנון העיקרי לתקשורת בין-task. תורי FreeRTOS הם FIFO או LIFO (האחרון באמצעות FLT:0)0 (00reaFLT:0reaFLT:0reaFLT:1) ויכולים להחזיק פריטים בגודל קבוע.
סממטים ומטאפורים
FreeRTOS מציע זרע בינארי, ספירת סמטים, ו mutexes. Binary semaphores לפעול כמו דגלים פשוטים המשמשים עבור אותות או סינכרון משימות (למשל, הודעה כי הפרעה התרחשה) ספירת סמטחים לנהל משאבים מרובים, בעוד mutexe מספק הפרדה הדדית עם מנגנון ירושה בנוי כדי למנוע עדיפות כדי למנוע במניעת העדיפות בנסיגה.
תוכנה Timers
הקרנל מספק לוחות תוכנה המבצעים פונקציה של קריאות כאשר פרק זמן עובר. Timers יכול להיות צילום אחד (אש פעם) או עומס אוטומטי.הם לרוץ במשימה ייעודית שירות לוח זמנים, כך המטפלים שלהם צריכים להיות קצרים ולא חסימת.
קבוצות אירועים
קבוצות אירועים מאפשרות משימה לחכות לשילוב של מספר ביטים (אפילוטים) כדי להיות מוגדר.הם מפשטים תרחישים שבהם פעולה תלויה במספר מצבים סינכרוניים, כגון קריאות חיישן ועיתונות של כפתור משתמש.
מתחילים עם FreeRTOS
אימוץ FreeRTOS דורש הערכה של חומרת היעד שלך, קבלת מקור הקרנל, והגדרתו כדי להתאים את מגבלות היישום שלך.
בחירת מיקרו-בקר
יציאות FreeRTOS קיימות כמעט לכל משפחת MCU פופולרית.מ.מ.ר. כי המכשיר הנבחר שלך יש מספיק RAM ופלאש עבור הקרנל בתוספת המשימות שלך.לדוגמה, ARM Cortex-M0+ עם 16 KB RAM יכול לרוץ בנוחות כמה משימות, בעוד קורטקס-M4 עם 256 KB תומך רבים.בדוק את דף נמל ה-FreeRTOS הרשמי או את ה- SDK של ספק הסיליקון שלך לדוגמאות טרום-ממות.
הורדה ו-Integrating the Kernel
הקוד המקור האחרון של FreeRTOS זמין מהאתר הרשמי של FreeRTOS:0FreeRTOS 1FIRLT 1 או באמצעות GitHub.ההפצה כוללת את הליבה של הקרנל (ראה 10:1), קבצים ניידים (FLT:2), ופרויקטים דמו.עבור התחלה יעילה, העתק את ה-FLT:3 ואת הבמאי המתאים לתוך העץ שלך.
ארכיון תגיות: The FLT:4
כל התנהגות הקרנל נשלטת באמצעות FLT:5 [השגת ההגדרות האלה נכון היא קריטית עבור שני הביצועים והיציבות.
- (ב) [15] ויקרא י"ד): "החלב" (ב) ל-1 לתזמון ראשוני (הטיפטי ליישומים בזמן אמת).
- (ב) ויקרא י"א: "ה' (ב"ד)" (ב"ב)" (ב"ב)"ב"ה', "ה', "ה')" (ב"ב)"ב"ה', "ה'"ה', ב'"ה'.
- (FLT:0) ;00(FLT:103) תדירות של מערכת לוח זמנים של לוח זמנים מפריע.ערכים נפוצים הם 100 הרץ (10 מ"ס) או 1000 הרץ (1 מ"ג) גבוה יותר שיעור לשפר את ההחלטה אבל להגדיל את פני השטח.
- (ב) ויקרא י"א: "ה', ב': "ה', ב': ויקרא י', ב'"ה', ב'"ה', ב')
- [01:0] ⁇ [ה]: [ה] [ה]] [במילים] [במילים]] על ייעוד הדלפק ועל ברירת המחדל למשימות חדשות אם לא צוין.
- (ב) ויקרא י"א: "ה' י"א: "ה', ויקרא י': "וַיָּבְהִיא עַל עַמֶּה יְהִדְהִיתִיתִי" (במדבר כ"ד).
- (FLT:0 ⁇ ; 13): ⁇ 1 ל 1 עבור 16 סיביות נגד קרציות (saves RAM אבל מגביל את ערך הקרציות המקסימלי ל 65535 - לא מומלץ עבור מערכות ארוכות טווח או גבוה של לקות).
בנוסף, בחר תוכנית ניהול הערימה באמצעות FLT:14 ו- (FLT:15 ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
ניהול משימות וניהול מחזור חיים
יצירת משימות היא פשוטה, אבל הפרטים של ערימה, סדרי עדיפויות, ושינויים ממשלתיים משפיעים עמוקות על אמינות המערכת.
(ב) שימוש ב-[[1924]]
המשימה נוצרה על ידי הגדרת תפקיד שלעולם לא ישוב (לדוגמא: ⁇ ).
TaskHandle_t xHandle;
xTaskCreate(
vTaskFunction, // Task function pointer
"MyTask", // Name for debugging
configMINIMAL_STACK_SIZE, // Stack size in words
NULL, // Parameters passed to task
2, // Priority (higher number = higher priority)
&xHandle // Optional task handle
);
הפונקציה [F:22LT] צריכה לזרז כל חומר נחוץ ולאחר מכן להיכנס ללולאה האינסופית שלה, ביצוע העבודה, השינה או ההמתנה לאירועים.
סדרי עבודה והלוחם
FreeRTOS תומך בעדיפות 0 (נמוכה) ל-FLT:23 (המשימה המזויפת היא בראש סדר העדיפויות 0. לוח הזמנים הממוקד תמיד ירוץ בראש סדר העדיפויות הגבוה ביותר מוכן אם שתי משימות חולקות את אותה עדיפות, הן זמן-כיני (סביב-רובין) עם משך שווה לתקופה אחת של סיגנל.
מדינות משימות
כל משימה קיימת באחת מהמדינות הללו:
- (ב) ⁇ :0) , ⁇ : ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) מדרש: "המשימה יכולה לפעול אך ורק לכהונה או למשימות פרטיות שוות ערך מתבצעת כיום.
- (ב) [המשימה]:0 [ב]: [המשימה] היא לחכות לאירוע (זמן, הודעה תור, סמאפור וכו'] היא אינה דורשת זמן CPU.
- (ב) ,0) ,המשימה הוסרה מהרשימה המוכנות של לוח הזמנים, בדרך כלל באמצעות ההרחבה:24 ניתן לחדשה באופן מפורש.
חסימת היא המנגנון העיקרי לשימוש יעיל ב- CPU: במקום סקר, משימה פשוט מחכה למצב, ומאפשרת משימות פרטיות נמוכות יותר לרוץ.
הגנה על Overrun
אחד המקורות הנפוצים ביותר של באגים של FreeRTOS הוא ערימה מעל גדות.הגרעין מספק שתי בדיקות אופציונליות: FLT:25 מתי אפשר, הוא יכול לזהות מעל גדות בזמן מתג הקשר.תמיד להקצות גודל ערימה נדיב במהלך הפיתוח ולהשתמש הפונקציה FLT:26 כדי לראות את שטח הערימה המינימלית של חינם.
הקצאה סטטית (באמצעות FLT:27) מציעה שליטה רבה יותר על ידי כך שאתה נותן את ערימה buffer בעצמך, אשר נמנע מפיצול heap ומאפשר מיקום באזורי זיכרון ספציפיים (למשל, זיכרון משותף הדוק עבור משימות בזמן אמת).
סינכרון ותקשורת בין-Task
משימות לעתים רחוקות לעבוד בבידוד; הן צריכות לתאם ולחליף נתונים. FreeRTOS מספק מספר מנגנונים, כל אחד מתאים לדפוסים מסוימים.
המונחים: data Passing
השתמש תורים לשלוח נתונים ממשימה אחת (או להפריע) לאחר.התור מאחסן מספר קבוע של פריטים בגודל נתון.לדוגמה, משימת קריאה של חיישן עשויה לשלוח FLT:28 דגימות למשימה של כניסה.
- (ב) , שלח פריט ממשימה (אם מלא).
- (ב) ,30 (ב) - קבל פריט (בלוק אם הוא ריק).
- (ב) , (ב) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
תמיד לבדוק ערכים חוזרים; תור עשוי להיות מלא או שיחת טלפון עשוי לצאת בזמן ISRs, קונסול:33 או FLT 34 להחזיר מציין אם יש צורך בשינוי הקשר.
המונחים: Simple Signals
סימאפורים בינאריים אידיאליים להכרזה על משימה שאירוע התרחש.לדוגמה, הפרעת GPIO יכולה "לספק" smaphore, ומשימה המתנהית יכולה "לתפוס" אותו ולעבד את האירוע.הדברים האלה מפריעים לשגרת שירות (ISRs) החל מלוגיקה.ISRFLT:35; המשימה משתמשת ב-LTF:36 בלולאה.
המונחים: Priority Inheritance
כאשר משימות מרובות גישה למשאב משותף (למשל, UART או מבנה נתונים), להשתמש ב- mutex במקום ב- binary semaphore. Mutexes כוללים מנגנון ירושה עדיפות אשר מעלה באופן זמני את עדיפות המשימה להחזיק את המנעול לעדיפות הגבוהה ביותר של כל משימה המתנה.זה מונע משימות פרטיות בינונית מחסימת משימה גבוהה (priority inversion in an Always in a muversion).
ספירת סמטפורות לניהול משאבים
ספירת סמפורים לעקוב אחר מספר המקרים הזמינים של משאב.לדוגמה, מאגר של חמישה ערוצי DMA ניתן לנהל עם ספירת ספירה ראשונית ל-5.משימה "לקחת" ,Smaphore כדי לרכוש ערוץ ו"נותנות" אותו בחזרה כאשר נעשה.זה מונע מעבר להחלפה.
קבוצות אירועים עבור Multi-Condition SynSyncization
אם משימה צריכה לחכות עד כמה אירועים עצמאיים התרחשו, קבוצות אירועים יעילים יותר מאשר מספר רב של סמפורים. bits נקבעים על ידי משימות או ISRs, ומשימה המתנה יכולה לציין מסיכה של ביטים ואם כל או כל אחד צריך להיות מוגדר.
המונחים: Deferred Processing
אחד הדפוסים החשובים ביותר ב-FreeRTOS הוא לשמור על ISRs קצרים מאוד במקום לבצע עיבוד מורכב בתוך הפרעה, להשתמש בגישה הבאה:
- בתוך ISR, לאסוף נתונים מינימליים ולאות משימה (באמצעות סמפו, תור או הודעה למשימה).
- חסם את המשימה, אשר פועל בראש סדר העדיפויות הרגיל כדי לבצע את המריבה הכבדה.
- השתמש בגרסאות "מ-ISR" של שיחות API של FreeRTOS (ראה LT:39 וכו ') ולבדוק את פרמטר ה-FLT:41.אם למשימה שאינה חסומה יש עדיפות גבוהה יותר מאשר המשימה המופרעת, נדרש מתג הקשר.
עיבוד הפרעה מופרך (נקרא גם מטפל "חצי וחצי") מבטיח כי המערכת נותרה תגובה תוך שמירה על קוצר רוח צפוי. FreeRTOS תומך גם קינון של הפרעות, אבל עליך להבטיח כי רמות העדיפות להפריע נקבעות כראוי - עבור ARM Cortex-M, הקרנל דורש כי רמת העדיפות הגבוהה ביותר של המשתמש תהיה בשימוש עבור זמן מתקתק ו- API- ISRing.
Best Practices for Production-Ready FreeRTOS Applications
מעבר לשימוש בסיסי, מספר שיטות מפרידות מערכת יציבה ממערכת שברירית.
ניהול זיכרון
בחר יישום הערימה התואם את תבנית ההקצאה שלך:0heap 4Felo:4FLT:1 הוא בדרך כלל ברירת מחדל טובה כי הוא מתמזג בלוקים חופשיים סמוכים, אם היישום שלך יוצר וממחק משימות או תורים לעתים קרובות, להימנע מ-FLT:2heap 2FLT 3 (ללא פחם) כפי שהוא מוביל לפירוק בטיחות, לשקול הקצאה סטטית לחלוטין.
(ב) עיין ב[[המאה ה-20]], ב[[1924]] וב[[1924]], [[1924]], [[1924]], [[1924]], [[1924]]]], [[1924]]]]]]
אסטרטגיה מועדפת
סדרי עדיפויות על בסיס המועד האחרון והביקורתיות של כל משימה.תכנית טיפוסית:
- (ב) ⁇ :0) בראש סדר העדיפויות: ⁇ 1 (הזמן) , בקרת דרכים (למשל, מנוע PID, עיבוד אודיו).
- (ב) עדיפות:0Medium: רכישת נתונים תקופתיים 1:1 עם דרישות שקיפות בינונית.
- (ב) ,0) לוטו עדיפות: משימות רקע 1:1, עדכוני ממשק משתמש, כניסה.
להימנע ממשימות מרובות עם אותה עדיפות אם כולם זקוקים למועדים של חברות, כי זמן-הזמן יכול להציג חוסר צדק. השתמש בלוק כדי לאפשר משימות פרטיות נמוכות לרוץ כאשר משימות פרטיות גבוהות יותר מחכים.
אופטימיזציה: Tickless Idle
מכשירים משובצים רבים הם מופעלים על ידי סוללות. FreeRTOS תומך במצב של שיתוק קלקים אשר עוצר את הסימון המחזורי להפריע כאשר המערכת היא idle וכל המשימות חסומות למשך ידוע.הMCU יכול להיכנס למצב שינה עמוק.זה מוגדר על ידי הגדרת ההרחבה של 1 וספק את המאקרוFLT:46 ו- FLT:47 התוצאה יכולה להפחית את הכוח על ידי מספר פקודות של קיבולת של מספר טבלאות.
ויכוח ופרופסור
FreeRTOS כולל סטטיסטיקות במשרה מלאה (אפשרות ל-FLT:48 ו-FLT:49) המספקות אחוזי ביצוע משימה.זה עוזר לזהות מטענים ודוכןים CPU.בנוסף, ה-FLT:50:50 ו-FLT:51 פועל להפיק מסכמי זיכומים שניתן לקרוא להם על ידי אדם.
לניתוח עמוק יותר, לשלב את האירועים הקרנל (מתגים טקסט, תור, ISR ערכים) 1 (כיום חלק מ-AWS IoT Tester). כלי זה מתעד אירועי גרעין (מתגים, תפעול, ISR ערכים) ומציג אותם בקו זמן, בלתי סביר לאמוד בעיות תזמון ועדיפות ראשונה.
תכונות מתקדמות
הודעות משימה
הודעות משימה מספקות אלטרנטיבה קלה לסמטפורים ולתנורים עבור אות פשוט.כל משימה יש ערך התראה מובנה-ב- 32 סיביות וספירת הודעה מתפתלת.שלח הודעה (באמצעות FLT:52 או FLT:53) יכול למנוע את המשימה עם אפס מראש מאובייקט גרעין נפרד.
סטרימינג Buffers and Message Buffers
מוכר ב-FreeRTOS V10.0.0.0, buffers הזרמים מאפשרים נתונים באורך משתנה לעבור בין משימות או בין ISR לבין משימה ללא תור בגודל קבוע. A הודעה buffer הוא חיץ זרם אשר גם משמר גבולות הודעה. אלה שימושיים עבור מצבים שבהם גודל הנתונים אינו ידוע מראש, כגון מחסניות רשת או קידודים.
Co-Routines (Legacy)
FreeRTOS כולל גם קידודים, שהם משימות ללא ערימה שחולקים ערימה אחת. הם משמשים לעתים רחוקות ביישומים מודרניים כי הם מסבך את הפעוט וחוסר את התכונות המלאות של משימות. מומלץ להשתמש במשימות סטנדרטיות אלא אם כן אתה מאוד לא מאומנים RAM (למשל, 8 סיביות MCU).
מסקנה
FreeRTOS מספק בסיס חזק, מנוהל היטב לבניית יישומים מוטבעים יעילים.התמיכה שלה עבור ריבוי משימות ממריץ, סינכרוניזציה עשירה, ותכונות מתקדמות כמו idle טיקאי והודעות משימה הופכת אותו מתאים לכל דבר מנקודות חיישן פשוטות לשערי IoT מורכבים.על ידי הבנת הפרמטרים של תצורה של הקרנל, לאחר שיטות הטובות ביותר עבור ניהול זיכרון ועדיפות, ומינוף כלים אמינים, תוך כדי שמירה על מערכות יעילות יכול לפתח.
(ב) לעיין בבקשות ההדגמה של [[המאה ה-[[1924]], וכן ב[[1924]], [[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]] ו[[1924]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]] ו[[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]] [[1924]]]]]]]]]]]]]]]]]]]] [[1924]]]]]]]]]]]] [[1924]]]]]]]] [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] [[1924]] [[1924]] [[1924]]]]]]]]]]]]]]]]]]]]]]]]]] [[1924]]]]]]]]]] [[[[1924]]]] [[[[1924]]]]]]]] [[[[1924]]]]]] [[[[1924]]]]]] [[[[1924]]]]]]]] [[[[1924]]]]]]]] [[[[1924]]]]]]]] [[[[[[[[1924]]]]