עמוד 1
תוכנית US212A -
הנחיות לעיצוב אפליקציות
הגרסה האחרונה: 1.0
2013-5-27

עמוד 2
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 2
הצהרה 1
דיאגרמות מעגלים ומידע אחר הנוגע למוצרים של Actions Semiconductor
חברת בע"מ ("פעולות") כלולה כאמצעי להמחשת יישומים טיפוסיים.
כתוצאה מכך, איננו בהכרח מידע מלא המספיק לבנייה.
למרות שהמידע נבדק וסביר כי הוא מדויק, פעולות עושה
אין מצגים או אחריות ביחס לדיוק או לשלמותו
תוכן פרסום זה ולא מתייחס לאחריות לאי-דיוקים
מסמך זה מסופק אך ורק כדי לאפשר שימוש במוצרי Actions
המוצג במסמך זה אינו מהווה חלק מציטוט או חוזה מכר כלשהו
אינה נושאת באחריות כלשהי לרבות הפרה של פטנט או זכויות יוצרים כלשהם למכירה
ושימוש במוצרי הפעולות, למעט כפי שבא לידי ביטוי בתנאי המכירה של פעולות
כל המכירות של מוצרי Actions מותנות בהסכמתך לתנאים
תנאי גרסה מיושמת לאחרונה להסכם התנאים וההגבלות של פעולות
תאריך לפני תאריך ההזמנה שלך.
מידע זה אינו מועבר לרוכש המוליכים למחצה המתואר
מכשירים כל רישיונות תחת זכויות פטנט, זכויות יוצרים, זכויות בסימן מסחרי, זכויות בסחר
סודות ו / או לדעת כיצד, או כל זכויות קניין רוחני אחרות של פעולות או אחרות,
עם זאת, בין אם על ידי ייצוג מפורש או משתמע, על ידי אסטופל, או
אחרת.
מידע המתועד כאן מתייחס אך ורק למוצרי Actions המתוארים כאן
מחליף, החל מתאריך השחרור של פרסום זה, את כל הנתונים שפורסמו בעבר ו-
מפרטים הנוגעים למוצרים מסוג זה המסופקים על ידי פעולות או על ידי כל אדם אחר
פעולות שומרות לעצמן את הזכות לבצע שינויים ב-
מפרטים ותיאורי מוצרים בכל עת ללא הודעה מראש. צור קשר עם הפעולות שלך
נציג מכירות כדי להשיג את המפרט העדכני ביותר לפני ביצוע ההזמנה למוצר.
מוצר פעולות עשוי להכיל פגמים או שגיאות בעיצוב הידועים בשם חריגות או שגיאות
עלול לגרום לסטייה של פונקציות המוצרים מהמפרט שפורסם
ניתן למצוא גיליונות "ארתיים" הנוגעים לחריגות או לתאונות המאופיינות כעת
על מעצבים לא להסתמך על היעדרם או מאפיהם של תכונות כלשהן או
הוראות של מוצרי Actions המסומנות "שמורות" או "לא מוגדרות." פעולות שומרות על אלה
להגדרה עתידית ולא תהיה אחריות כלשהי לסכסוכים או
אי התאמה הנובעת משינויים עתידיים בהן.
מוצרי הפעולות אינם מיועדים, מיועדים, מורשים או מתחייבים לשימוש בכל חיים
תמיכה או יישום אחר שבו כשל במוצר עלול לגרום או לתרום אישי
פגיעה או נזק קשה לרכוש. כל שימוש כזה או אחר ללא אישור בכתב מראש של
קצין הפעולות ובדיקות נוספות ו / או שינוי יהיו בסיכון מלא של

עמוד 3
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 3
צרכן.
עותקים של מסמך זה ו / או ספרות מוצרים אחרים של פעולות, כמו גם התנאים
ותנאי הסכם מכר, ניתן להשיג באמצעות ביקור באתר של פעולות בכתובת
http://www.actions-semi.com/ או מנציג פעולות מורשה. המילה
"פעולות", הלוגו של הפעולות, בין אם משתמשים בנפרד ו / או בשילוב, הוא סימן מסחרי
של פעולות חברת מוליכים למחצה בע"מ, שמות ומותגים של חברות אחרות שלהן
מוצרים העשויים מדי פעם להופיע באופן תיאורי בגיליון נתוני מוצר זה הם
סימנים מסחריים של מחזיקיהם בהתאמה; אין שום קשר, אישור או אישור על ידי אלה
אנשים טוענים או משתמעים אלא אם כן ניתן לומר במפורש בה.
פעולות מסרבות ומבטלות כל אחריות, כולל ללא
הגבלה כלשהי וכל אחריות המשתמעת בסחירות, התאמה ל
מטרה מסוימת, כותרת, וכנגד הפרה וכדומה, וכל
כל התחייבויות הנובעות מקורס כלשהו לטיפול או שימוש בסחר.
בשום מקרה לא יהיו פעולות מהימנות לכל ישיר, מקרי, עקיף,
נזקים מיוחדים, חיוניים או עקביים; או בגין אובדן נתונים, רווחים, חסכון
או הכנסות מכל סוג שהוא, ללא קשר לצורת הפעולה, מכל דבר שהוא מבוסס על
חוזה; נזיקין; רשלנות של פעולות או אחרות; אחריות קפדנית; הפרת
אחריות; או אחרת; כל מה שמאפשר נזק לקונה יש או לא.
נכשל במטרתו המהותית, ומעשיהם הומצאו בעבר
אפשרות של נזקים כאלה או לא.
המתנה:
אם ברצונך לקבל מידע אחר אודות החברה ומוצריה, אנא בקר באתר האינטרנט שלנו:
http://www.actions-semi.com

עמוד 4
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 4
2 תוכן
1
הַצהָרָה................................................. .................................................. ............... 2
2
תוכן עניינים................................................. .................................................. ............... 4
3
מבוא................................................. .................................................. .............. עשרים וארבע
3.1
היסטוריית גרסאות ................................................ .................................................. ............................ עשרים וארבע
3.2
מטרת הכתיבה ... .................................................. ............................ עשרים וארבע
3.3
מונחים וקיצורים ... .................................................. ..................... עשרים וארבע
3.4
מדריך למשתמש מדריך ............................................ .................................................. .................... 25
4
סביבת פיתוח...................................... .................................................. ... 28
4.1
בניית סביבת פיתוח ............................................. .................................................. ................. 28
4.1.1 התקנת Cygwin ............................................ .................................................. .... 28
4.1.1.1 התקנה חדשה של סיגווין ............................................ ............................................. 28
4.1.1.2 הסר התקנת cygwin ............................................. .................................................. .. 31
4.1.2 התקנת שרשרת כלים של SDE .......................................... ............................................... 32
4.1.3 התקנת ערכת פיתוח קושחה ... ................................ 32
4.1.4 כלי עורך ממשק משתמש וכלים לעיצוב תפריטים ........................................ ............................... 32
4.1.5 התקנת כלים לייצור המוני ... .................................................. ... 33
4.1.6 כיצד להרכיב AP, ליצור קושחה ולשרוף למחשב להפעלה ... ... 33
4.2
סימולטור ממשק משתמש ......................................... .................................................. ............ 34
4.2.1 תפקידו של סימולטור ממשק המשתמש ... .................................................. .. 34
4.2.2 מבוא לפרויקט סימולטור ממשק המשתמש ... ................................................ 35
4.2.3 סביבת פיתוח ושיטת שימוש בסימולטור ממשק משתמש ...................................... ............ 35
4.2.3.1 צור פרויקט ............................................ .................................................. ... 35
4.2.3.2 הקמת הפרויקט .................. .................................................. ... 38
4.2.3.3 הוספת ספריות וקבצים ... ........................................... 42
4.2.3.4 ערוך פרויקט ............................................ .................................................. ... 47
4.2.4 כיצד להגדיר סביבת פיתוח לסימולטור עבור ה- AP החדש שנבנה ... ................. 48
4.2.5 כיצד לבצע ניפוי באגים עם סימולטור ......................................... ....................................... 48

עמוד 5
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 5
4.2.5.1 הגדרות לפני השימוש ... .................................................. 48
4.2.5.2 התחל באגים (F5) ................................ ............................................... 52
4.2.5.3 קביעת נקודת הפסקה (F9) ......................................... ................................... 53
4.2.5.4 ניפוי שלבים בודדים (F10, צפו בקשר בין משתנים ושיחות פונקציה) ........................ ..... 54
4.2.5.5 הזן ניפוי באגים בגוף הפונקציה (F11) ........................................ ................................... 55
4.3
הצגת שיטת ניפוי באגים ............................................ .................................................. .................... 57
4.3.1.1 UDI ו- Insigh ............................................ .................................................. .. 57
4.3.1.2 הדפסה טורית ............................ .................................................. ... 60
4.3.1.3 סימולטור ממשק משתמש ............................................ .................................................. ....... 61
5
מבנה בסיסי של התיק ופיתוח ............................................. ....................................... 61
5.1
סביבת הפעלה בתיק ............................................... .................................................. ................... 62
5.1.1 סקירה כללית של מודול PSP ............................................ .................................................. ... 62
5.1.1.1 מושגי יסוד .................................. .................................................. ... 62
5.1.1.2 מדריך ממשק PSP ............................................ .............................................. 63
5.1.1.3 מנגנון תזמון המשימות ............................................ ................................................. 64
5.1.1.4 מנגנון BANK ............................................. .................................................. ... 65
5.1.1.5 מנגנון API ............................ .................................................. ....... 67
5.1.1.6 מנגנון VFS ............................................ .................................................. ... 68
5.1.2 סקירה כללית של פענוח וקידוד ............................................ .................................................. ..... 70
5.1.2.1 סקירה כללית של פענוח וקידוד ... .................................................. 70
5.1.2.2 טעינה ופריקה ............................................ .................................................. ... 70
5.1.2.3 פענוח וקידוד מפרט ממשק ........................................... ................................ 71
5.1.3 סקירה כללית של המודול המשופר ............................................ ............................................... 71
5.1.3.1 סקירה כללית של המודול המשופר ... ......................................... 71
5.1.3.2 מדריך ממשק משופר ............................ .................................... 72
5.1.4 יחסי שיחות מודול ............................................ .................................................. ..... 72
5.2
ניווט במדריך קוד ............................................... .................................................. .................... 74
5.2.1 ניווט בספריות תיקים ............................ .................................................. ... 74
5.2.2 ניווט בספריות Case_simulator ............................................ ....................................... 79
5.2.3 ניווט בספריות psp_rel ............................................ .................................................. 80

עמוד 6
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 6
5.3
מנהל האפליקציות ap_manager .............................................. .................................................. 81
5.3.1 הסטטוס והתפקיד של ap_manager ... .................................... 81
5.3.2 נקודות תכנון של Ap_manager ........................................ ....................................... 81
5.3.3 מודול כניסה של Ap_manager ............................................ .......................................... 82
5.3.4 מודול לולאת ההודעות של Ap_manager ... ................................... 83
5.3.5 הקצאת שטח Ap_manager ........................................ ....................................... 85
5.4
כבה וכבה את ap_config .............................................. .................................................. ... 85
5.4.1 הסטטוס והתפקיד של ap_config ....................................... ....................................... 86
5.4.2 תכנון נקודות של ap_config ........................................ ............................ 86
5.4.3 תהליך האתחול של ap_config ........................................ ............................ 86
5.4.4 תהליך הכיבוי של ap_config ........................................ ............................ 87
5.5
עיצוב ושימוש נפוצים .............................................. .................................................. ........ 88
5.5.1 עיצוב ושימוש באפליקציות ... ............................................... 89
5.5.1.1 סקירה כללית של הפונקציות של AppLib ... ....................................... 89
5.5.1.2 ניהול יישומים (תהליך) ......................................... .................................... 89
5.5.1.3 ניהול תקשורת הודעות ............................ ............................................... 90
5.5.1.4 ניהול טיימר ברמת היישום .......................................... ....................................... 93
5.5.2 תכנון ושימוש Common_func ... ................................... 95
5.5.2.1 סקירת פונקציות של Common_func ........................................ ............................. 95
5.5.2.2 עיבוד מחרוזות ............................ .................................................. ... 95
5.5.2.3 זיכרון נתיב .................................. .................................................. ... 96
5.5.2.4 הסבר על פריטי תצורה ............................ .................................................. ... 98
5.5.2.5 הסבר לתפריט הניתן להגדרה .......................................... .......................................... 99
5.5.2.6 ניהול פלט קול ............................................ ................................................. 99
5.5.2.7 עיבוד מיפוי מפתחות ............................................ ............................................... 100
5.5.2.8 עיבוד מוקדם של הודעות מפתח ............................................ ............................ 101
5.5.3 תכנון ושימוש נפוץ_וי ... ............ 102
5.5.3.1 בקרת רשימת תפריטים ............................................ ............................................... 103
5.5.3.2 בקרת עיון בקבצים ............................................ ............................................... 110
5.5.3.3 מחק את בקרת הקבצים ............................ ............................................... 113
5.5.3.4 פקדי דיאלוג .................................. .................................................. 114

עמוד 7
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 7
5.5.3.5 תיבת דו-שיח של חיבור USB ............................................ ................................................ 118
5.5.3.6 בקרת תיבת הגדרת פרמטרים ........................................... ........................... 119
5.5.3.7 בקרת סרגל עוצמה ............................................ .................................................. 122
5.5.3.8 בקרת מסגרת קריאת טקסט ........................................... ............................ 122
5.5.3.9 בקרות סרגל המצב ............................................ .................................................. 125
5.5.3.10
בקרת תצוגת אנימציה ............................................ ........................................ 127
5.5.3.11
בקרת נעילת מקשים ............................................... ............ 128
5.5.3.12
מגן מסך................................................ ............................................... 129
5.5.3.13
תיבת דו-שיח כיבוי ............................................ ............................ 129
5.5.4 תכנון ושימוש נפוץ_מיסק ... ............................... 130
5.5.4.1 טיימר מערכת ............................ .................................................. 131
5.5.4.2 שינה של יישום ............................................. .................................................. .... 131
5.5.4.3 עיבוד הודעות ברירת מחדל ............................ ............................................... 132
5.5.4.4 החל עיבוד מראש של הודעה פרטית .......................................... ..................................... 133
5.5.5 הקצאת שטח משותף ............................................ ........................................... 134
5.5.5.1 מרחב נתונים .................................. .................................................. .... 134
5.5.5.2 שטח קוד .................................. .................................................. .... 134
5.5.5.3 תיאור הקצאת החלל ............................................ ............................................... 135
5.5.5.4 תבנית סקריפט קישור ............................................ ............................................... 136
5.6
תכנון ופיתוח יישומי חזית ............ .................................................. ........ 136
5.6.1 מבנה ההרכב של יישום החזית .......................................... ............................ 136
5.6.1.1 רכיבי יישום ............................ ............................................... 136
5.6.1.2 ארכיטקטורת בסיסית ליישום ............................................ ............................................... 137
5.6.1.3 הצגת נושא היישום ............................ ............................................... 138
5.6.1.4 כיצד להשתמש ב- Common ............................................ ....................................... 139
5.6.1.5 מבנה קובץ תמונת יישום ... ........................................ 139
5.6.2 שטח הזיכרון של יישום החזית ... ............................ 141
5.6.2.1 שטח קוד תושב ... ................................................ 142

עמוד 8
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 8
5.6.2.2 שטח נתונים תושבים ... ................................................ 142
5.6.2.3 קוד BANK ומרחב נתונים BANK ......................................... ......................... 142
5.6.2.4 הפעל שטח ערימה ............................................ .................................................. 142
5.6.2.5 שטח ערימה ............................. .................................................. ........ 143
5.6.2.6 שטח VRAM ............................................. .................................................. 143
5.6.3 הפעלת היישום ............................................ .................................................. 143
5.6.4 יציאת האפליקציה ............................................ .................................................. 148
5.6.5 מדריך לפיתוח ליישום חזיתי ............................... ............................ 152
5.6.5.1 תהליך פיתוח AP קדמי ........................................ .......................................... 152
5.6.5.2 פיתוח תצוגת ממשק משתמש מפורט ... ............................ 153
5.6.5.3 הסבר מפורט על פיתוח תקשורת הודעות ... ........................................ 155
5.6.5.4 הסבר מפורט על פיתוח טיימר ברמת היישום ... .................................. 159
5.6.5.5 הסבר מפורט על פיתוח התפריט הניתן להגדרה ... .................................. 159
5.6.6 כתיבת סקריפט makefile ו- xn ליישום ........................................ ........................ 159
5.6.6.1 סקריפט makefile של אפליקציה ........................................... .............................. 159
5.6.6.2 סקריפט xn של יישום ........................................... ........................................ 160
5.6.7 כיצד להוסיף יישום חזית ... ........................................ 164
5.6.7.1 תיאור ספריית הדגמה של User1 User1 ........................................... ............ 164
5.6.7.2 עיצוב מתאר יישומי משתמש 1 ... ............ 165
5.6.7.3 שלב 1: בנה את ארכיטקטורת היישומים הבסיסית ........................................ ............ 166
5.6.7.4 שלב 2: פיתוח סצינת ההשמעה ......................................... ................................... 168
5.6.7.5 שלב 3: הוסף AP חדש למקרה ...................................... ........................... 173
5.6.7.6 שלב 4: ניפוי באגים בסצינת ההפעלה בסימולטור ממשק המשתמש ........................... ....... 174
5.6.7.7 שלב 5: פיתוח סצנת התפריט ......................................... ................................... 177
5.6.7.8 שלב 6: באגים בסצנת התפריטים בסימולטור ממשק המשתמש ... ....... 178
5.6.7.9 שלב 7: ניפוי באגים 1 AP בלוח ............................. ............................. 178
5.7
עיצוב ופיתוח יישומים אחוריים .................. .................................................. ........ 178
5.7.1 מבנה ההרכב של יישום הרקע ........................................ ............................ 179
5.7.1.1 רכיבי יישום ............................................ ............................................... 179

עמוד 9
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 9
5.7.1.2 מבוא לנושא היישום ............................................ ............................................... 179
5.7.2 שטח זיכרון של יישומי רקע .......................................... ............................ 180
5.7.2.1 שטח קוד תושב ... ................................................ 180
5.7.2.2 שטח נתונים תושבים ... ................................................ 180
5.7.2.3 קוד BANK ומרחב נתונים BANK ......................................... ......... 180
5.7.2.4 הפעל שטח ערימה ............................................ .................................................. 180
5.7.2.5 שטח ערימה ............................. .................................................. ........ 181
5.7.2.6 שטח VRAM ............................................ .................................................. 181
5.7.3 זרימת עיבוד הרחקה הדדית של מנועים ......................................... ........................................... 181
5.7.4 כיצד להוסיף יישום רקע ......................................... ........................................ 182
5.7.4.1 תיאור קטלוג הדגמה של User1_engine User ... ......................... 182
5.7.4.2 User1_engine מתאר עיצוב מתאר ........................................... ......................... 182
5.7.4.3 שלב 1: בנה את ארכיטקטורת היישומים הבסיסית ........................................ ............ 182
5.7.4.4 שלב 2: הוסף את user1_engine AP למקרה ....................................... ............ 183
5.7.4.5 שלב 3: תקשורת הודעות באגים וכו 'בסימולטור ממשק המשתמש ... .... 183
5.7.4.6 שלב 4: ניפוי באגים בלוח ......................................... ........................................... 183
5.8
תכנון ופיתוח רב-הברגה ............................................ .................................................. ........... 184
5.8.1 ארכיטקטורה מרובת חוטים ............................................ .................................................. ....... 184
5.8.1.1 צור חוט ילדים ............................................ .................................................. 184
5.8.1.2 הרס פתיל ילדים ............................................ .................................................. 184
5.8.1.3 תרחיש אופייני רב-הברגה ... ............................ 184
5.8.2 פיתוח מרובה-שלילי ............................ .................................................. ....... 185
5.9
תכנון ופיתוח מנהל התקנים ............................................ .................................................. ........ 185
5.9.1 מבנה תוכנית הנהג ............................ ............................ 186
5.9.1.1 פרויקט מנהל התקנים ............................ ............................................... 186
5.9.1.2 קובץ תמונת מנהל התקן ... ........................................ 186
5.9.2 שטח הזיכרון של הנהג ... ............................ 188
5.9.3 הפעלה ויציאה מהנהג ......................................... ....................................... 189
5.9.4 הסבר מפורט על ממשק הנהג ... ............................................. 190
5.9.4.1 כניסה לכניסה מאוחדת ............................ ............................................... 190

עמוד 10
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 10
5.9.4.2 טבלת ממשקי הכונן ............................ .................................................. 191
5.9.4.3 הצהרה והגדרת ממשק פנימי ... ..................................... 192
5.9.4.4 מספר פקודת ממשק חיצוני והגדרת מאקרו ......................................... .............................. 192
5.9.4.5 תהליך שיחת ממשק חיצוני ........................................ ........................................ 193
5.9.4.6 שנה את הממשק החיצוני של מנהל ההתקן ........................................ ........................................ 194
5.9.5 כונן כתיבת סקריפט makefile ו- xn ......................................... ............................... 194
5.9.5.1 כונן סקריפט makefile ............................................ ..................................... 194
5.9.5.2 סקריפט xn של מנהל ההתקן ............................................ ............................................... 195
5.9.6 כיצד להוסיף מנהל התקן ... ........................................ 198
5.10
מדריך התאמת הקצאת שטח זיכרון ............................. ................................................ 198
5.10.1
תרשים להקצאת זיכרון מקרה ............................................ ........................................... 198
5.10.2
תיאור מטלה ... .................................................. ... 200
5.10.3
מדריך התאמה ... .................................................. ... 200
6
הסבר מפורט על נהג התיק ........................... ....................................... 201
6.1
עיצוב כונן מפתח ......................................... .................................................. .................. 202
6.1.1 סקירה כללית של הדרישות ועקרונות העיצוב .......................................... ............................ 202
6.1.2 עקרון לוח המקשים ............................................ ............................................. 202
6.1.2.1 עיקרון כפתור ADC ... ............................ 202
6.1.2.2 עקרון כפתור ה- GPIO ........................................ ........................................... 203
6.1.2.3 עיקרון העיצוב של כפתור ה- IR ... ....................................... 203
6.1.3 מודול פונקצית כונן מפתח ... ............................................. 203
6.1.3.1 סריקת מקשים ושליחת הודעות ... ..................................... 204
6.1.3.2 בקרת טעינה ............................................ .................................................. .... 204
6.1.3.3 אתחול ההתקנה וההסרת ההתקנה של מנהל התקן ............................. .................................. 205
6.1.3.4 קבל את הכתובת של טבלת המיפוי המפתח ... ..................................... 205
6.1.4 תכנון ממשק חיצוני מונע מפתחות ......................................... ................................... 206
6.1.5 תיאור הקצאת הזיכרון עבור מנהל התקן KEY ......................................... ................................... 207
6.1.6 מדריך שינוי מנהל התקן KEY ........................................ ............................................. 207
6.1.6.1 שינוי כפתורים פיזיים וטבלת מיפוי כפתורים ........................................ ........................... 207
6.1.6.2 שינוי מחזור חיי הלחצן ........................................ ........................................ 208
6.2
עיצוב מנהל התקן LCD ............................................ .................................................. .................. 208

עמוד 11
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 11
6.2.1 סקירת דרישות ועקרונות תכנון ....................................... ............................ 208
6.2.2 מודול פונקצית מנהל התקן LCD ............................................ ............................................. 209
6.2.2.1 פונקצית מודול LCD ... ............................................... 209
6.2.2.2 אתחול חומרת LCD ............................................ ............................ 210
6.2.2.3 פונקציות חומרה בסיסיות LCD ... ....................................... 210
6.2.3 תכנון ממשק חיצוני של מנהל התקן LCD ......................................... .................................... 211
6.2.4 תיאור הקצאת זיכרון של מנהל התקן LCD ......................................... .................................... 214
6.2.5 מדריך שינוי של מנהל התקן LCD ....................................... ........................................... 215
6.2.5.1 החלפת מסך LCD חדש ... ............................................. 215
6.2.5.2 שינוי GPIO בנושא LCD ... ....................................... 215
6.2.5.3 כיצד לשנות את גודל המסך ... ............................ 216
6.2.6 תצורת פונקציה של מנהל התקן LCD .......................................... ........................................... 217
6.3
עיצוב מונע ממשק המשתמש ............................................... .................................................. ... 218
6.3.1 סקירת דרישות ועקרונות תכנון ....................................... ............................ 218
6.3.2 אופטימיזציה של מערכת התצוגה ............................................. .................................................. 218
6.3.3 מודול פונקציית מנהל התקן ממשק משתמש ... ............................................... 220
6.3.3.1 מבנה כולל ............................................ .................................................. .... 220
6.3.3.2 מודול פונקציה ............................ .................................................. .... 221
6.3.3.3 פתיחה וסגירה של קובץ סגנון .......................................... .................................... 223
6.3.3.4 תצוגת בקרה וקבל מאפיינים ............................... ..................................... 223
6.3.3.5 הגדר סוג שפה ............................................ ............................................... 224
6.3.3.6 המרה לקידוד תווים ............................................ ............................................... 224
6.3.3.7 עיבוד גרפי ............................ .................................................. .... 225
6.3.3.8 תצוגת תמונה ............................................ .................................................. .... 225
6.3.3.9 תצוגת מחרוזת ............................ .................................................. 226
6.3.4 תכנון ממשק חיצוני מונע ממשק המשתמש ......................................... ....................................... 227
6.3.5 מבנה נתוני מפתח ............................................ .................................................. 233
6.3.5.1 הצגת הנתונים הפרטיים של PicBox .......................................... ................................. 234
6.3.5.2 הצגת הנתונים הפרטיים של TextBox .......................................... .............................. 234
6.3.5.3 הצגת הנתונים הפרטיים של TimeBox ............................. ............................. 235

עמוד 12
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 12
6.3.5.4 הצגת הנתונים הפרטיים של NumBox .......................................... ............................. 237
6.3.5.5 הצגת הנתונים הפרטיים של ProgressBar ... ........................ 238
6.3.5.6 הצגת הנתונים הפרטיים של ListBox ............................. ................................ 239
6.3.5.7 הצגת הנתונים הפרטיים של DialogBox .......................................... ........................... 240
6.3.5.8 הצגת הנתונים הפרטיים של ParamBox .......................................... ........................... 241
6.3.5.9 הצגת מבנה נתוני מחרוזות ......................................... ..................................... 243
6.3.6 בקרת תהליך תצוגה ............................................ .................................................. ... 244
6.3.6.1 תהליך תצוגה של PicBox ............................................ ........................................ 244
6.3.6.2 תהליך התצוגה של ListBox ... ........................................ 244
6.3.6.3 תהליך התצוגה של TextBox ... ............ 244
6.3.6.4 תהליך התצוגה של SliderBar ... ..................................... 244
6.3.6.5 תהליך התצוגה של ProgressBar ............................................ ................................ 244
6.3.6.6 תהליך התצוגה של TimeBox ............................................ ..................................... 244
6.3.6.7 תהליך התצוגה של DialogBox ... ................................... 244
6.3.6.8 תהליך התצוגה של NumBox ... ..................................... 244
6.3.7 תצוגת מחרוזת תווים ............................ .................................................. ....... 244
6.3.7.1 סקירת עיצוב ............................ .................................................. .... 244
6.3.7.2 הצגת בחירת BUFFER ... ............ 245
6.3.7.3 תכנון עיבוד תצוגת מחרוזות ......................................... .................................. 246
6.3.7.4 מימוש גלילת מחרוזת כלפי מעלה ......................................... .................................. 246
6.3.7.5 טיפול מיוחד בתאילנד ............................................ ............................................... 247
6.3.7.6 טיפול מיוחד בערבים ............................................ ........................................... 247
6.3.8 תיאור הקצאת הזיכרון עבור מנהל התקן ממשק המשתמש ......................................... ....................................... 249
6.3.9 תמיכה מרובת שפות ............................................ .................................................. .... 249
6.3.9.1 קידוד תווים וספריית גופנים ... ............................ 250
6.3.9.2 דרישות ונקודות תכנון ... .................. 252
6.3.9.3 מחרוזת משאבים ............................ .................................................. 253
6.3.9.4 תהליך תצוגה ............................ .................................................. .... 253

עמוד 13
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 13
6.3.9.5 הוסף שפה .................................. .................................................. .... 254
6.3.10
תמיכה בריבוי גופן / גופן ............................................. ........................................... 255
6.3.10.1
פורמט גופן ...................................... ............................................... 255
6.3.10.2
תיאור תצורת גופנים ......................................... ........................................ 255
6.4
עיצוב מנהל התקן ממשק משתמש שחור-לבן ............................................. .................................................. .......... 257
6.4.1 סקירת דרישות ועקרונות תכנון ....................................... ............................ 257
6.4.2 הנחיות שינוי ............................................ .................................................. .......... 258
6.5
ברוך הבא עיצוב מונע ............................................... .................................................. ......... 260
6.5.1 ההגדרה ותפקיד ברוך הבא ......................................... ........................................ 260
6.5.2 ממשק החומרה של ברוך הבא ............................................ ........................................... 260
6.5.3 התחל ותהליך עסקי של ברוך הבא ......................................... ................................. 261
6.5.4 כיצד לשנות את ממשק הפתיחה .......................................... ................................... 262
7
תכנון ופיתוח ממשקים ............................................ ............................ 264
7.1
הצגת שיטות הניתנות להגדרה ............................................ .................................................. ............ 264
7.2
ממשק משתמש הניתן להגדרה .............................................. .................................................. ....................... 264
7.2.1 סקירה של עורך ממשק משתמש ............................................ .................................................. ... 265
7.2.1.1 מושגי יסוד ... .................................................. .... 265
7.2.1.2 הרכב בסיסי של פקדים ............................ ............................................... 265
7.2.1.3 פריסת כלי עורך ממשק משתמש ........................................... ......................................... 269
7.2.1.4 תיאור תפריט כלים ............................................ ............................................... 270
7.2.1.5 פעולה בסיסית ............................ .................................................. .... 270
7.2.1.6 הנדסה וסגנון ............................................ .................................................. 271
7.2.1.7 תבנית תת-סצנה ............................................ .................................................. 272
7.2.2 שלבי עבודה של עורך ממשק המשתמש ........................................... ............................................. 272
7.2.2.1 שלב 1: צור פרויקט AP חדש ............................ ..................................... 273
7.2.2.2 שלב 2: הגדר משאבים .......................................... .......................................... 274
7.2.2.3 שלב 3: ערוך את ממשק המשתמש של הסצנה ......................................... ....................................... 276
7.2.2.4 שלב 4: צור תוצאות .......................................... ......................................... 277
7.2.2.5 שלב 5: ממשק ניפוי באגים .......................................... ............................................. 277
7.2.3 תצורת בקרת עורך ממשק משתמש ... ............................................. 277
7.2.3.1 בקרת PicBox ............................................ ................................................. 277

עמוד 14
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 14
7.2.3.2 בקרת TextBox ............................................ ............................................... 280
7.2.3.3 בקרת NumBox ............................................ ............................................. 283
7.2.3.4 בקרת TimeBox ............................................ ........................................... 287
7.2.3.5 בקרת ProgressBar ............................................. ......................................... 290
7.2.3.6 בקרת ListBox ............................................ ................................................. 294
7.2.3.7 בקרת ParamBox ............................................ ............................ 295
7.2.3.8 בקרת סליידר ............................................ ............................................. 295
7.2.3.9 בקרת DialogBox ............................................ ............................ 295
7.2.3.10
בקרת AttributeBox ...................................... ................................ 295
7.2.4 תיאור פרויקט נפוץ ...................................... ............................................. 296
7.3
תפריט הניתן להגדרה ............................................. .................................................. ................... 296
7.3.1 סקירת הדרישות ... .................................................. .......... 296
7.3.2 נקודות מפתח בתכנון וביצוע ............ .................................................. 297
7.3.2.1 פריטי משאבי תפריט ............................................ .................................................. 297
7.3.2.2 פורמט קובץ mcg ............................................ ............................................... 299
7.3.3 תהליך פיתוח תפריט הניתן להגדרה ......................................... ......................................... 301
7.3.3.1 שלב 1: צור * .sty ו- * _res.h ................................... ........................... 302
7.3.3.2 שלב 2: בניית פריטי משאב בתפריט ........................................ ... 302
7.3.3.3 שלב 3: הכנה ואריזה כ * .ap ........................... .............................. 302
7.3.3.4 שלב 4: קבע את תצורת עץ התפריט וייצר * .mcg .......................... .................... 302
7.3.3.5 שלב 5: תפריט ניפוי באגים ............................... ........................................ 305
7.3.4 מדריך לשינוי תפריט הניתן להגדרה ......................................... ......................................... 307
7.3.4.1 הוסף / מחק תפריט כניסה ............................... ........................................ 307
7.3.4.2 הוסף / מחק פריטי תפריט ............................... ............................ 307
7.3.4.3 השתמש בכלי פיתוח ערכות הקושחה .......................................... ................. 307
8
יישום ap_music ...................................... ............................................. 309
8.1
סקירה כללית של הדרישות ... .................................................. .......................... 310
8.2
עיצוב אדריכלות כולל ............................................ .................................................. .................. 311
8.3
עיצוב אפליקציית ממשק UI למוזיקה ............................................ .................................................. ........ 311

עמוד 15
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 15
8.3.1 חלוקת מודולים פונקציונליים ליישום ממשק UI ........................................ ............................. 311
8.3.2 סנכרון ואינטראקציה עם מודולים אחרים ........................................ ............ 313
8.3.3 ספריית ap_music תלויה ביישום ותיאור הממשק שלה ....................................... ............ 314
8.4
תהליך עסקי של יישום ap_music ............................. ...................................... 314
8.4.1 התהליך הכללי של יישום ap_music .......................................... ....................................... 314
8.4.2 תהליך האתחול של המודול ............................................ ........................................... 315
8.4.3 תרשים זרימה כללי של תזמון הסצנות ....................................... ............................................... 317
8.4.4 תרשים זרימה של תרחיש רשימה ... .................................................. 320
8.4.4.1 חלק לבקרת התפריט ............................................ ............................................. 322
8.4.4.2 רשימת בקרת רשימה ............................................ ............................................... 324
8.4.4.3 בקרת תמונות באלבום ............................................ ............................................... 325
8.4.5 הפעל תרשים זרימה של סצנה ............................................. .................................................. 326
8.4.6 הגדרת תרשים זרימה של סצנה ............................................ .................................................. 331
8.4.7 זרימת עיבוד מודול הסימניות ........................................... .............................................. 333
8.4.8 תרשים זרימה של מודול יציאת היישום .......................................... ............................ 338
8.5
הסדרה קוראת לממשק ותיאור הרצף של הפעלת קובץ שמע ....................................... .................. 338
8.6
כיצד להפחית את התמיכה בפורמט שמע ......................................... ............ 345
8.7
כיצד לממש ניתוח ותצוגה של מילים ......................................... ....................................... 345
8.8
איך מוסיקה משיגה ומציגה תמונות אלבומים ......................................... ................................. 347
8.9
תצוגה ID3 של אילו סוגים של קבצים תומכת ביישום המוזיקה ......................................... ......................... 349
8.10
כיצד לממש השמעה של נקודת הפסקה של המוסיקה כשהמחשב הקטן מופעל ......................................... ............... 350
8.11 music כיצד לבחור אלבום מסוים ולהשמיע את כל האלבומים של אמן מסוים ......................... .......... 352
8.12
כיצד לאתר את רשימת ההשמעה של אלבומים, זמרים וכו '.......................................... ................................... 352
8.13 כיצד מוסיקה מתמודדת עם קבצים שאינם תומכים בפורמט ...................................... ........................... 353
8.14 מהן אמצעי הזהירות לקריאה וכתיבה של VRAM לפני ואחרי מוזיקה ... ............... 354
8.15 למה לשים לב במהלך כיבוי המוזיקה על ידי לחיצה ארוכה על כפתור ההפעלה כאשר המוזיקה מתנגנת ... .... 355
8.16
מהן אמצעי הזהירות לקריאה וכתיבה של VRAM במהלך השמעת שירים ... ............................. 355
8.17 כיצד ניתן לשמוע את החלפת התמונות והפרקים של האלבום ........................................ ............ 356
8.18 כיצד ניתן להשמיע את פונקצית קורות החיים של נקודת השבר ......................................... .......................................... 357
8.19 כיצד לשמור ולקרוא קובץ קופה נשמע ...................................... .............................. 358
8.20 כיצד השמיעה קוראת ושומרת את קובץ ההפעלה ... ................................ 358

עמוד 16
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 16
8.21
כיצד לקנן פריטי תפריט בבקרות הרשימה .......................................... ........................................... 358
8.22
כיצד לחשב את פריטי ההפעלה בתפריט המקוננים של בקרת הרשימה ...................................... ... 359
8.23
כיצד בקרות רשימה ותפריט מממשות זיכרון נתיב ........................................ ........................ 359
8.24 מדוע יש להוסיף __FAR__ כאשר מוכרזת פונקציית המוסיקה בקובץ הכותרת ........................... .................. 360
9
music_engine engine ................................................ ..................................... 362
9.1
סקירה כללית של הדרישות ... .................................................. .......................... 362
9.2
עיצוב כולל ... .................................................. .......................... 362
9.3
תהליך עסקי של מנוע מוסיקה ............ .................................................. ........ 363
9.3.1 התהליך הכולל של מנוע המוזיקה ... ............................ 363
9.3.2 מצב זרימת העיבוד של מנוע המוזיקה ......................................... ..................................... 364
9.3.3 זרימת עיבוד ההודעות של מנוע המוזיקה ......................................... ..................................... 367
9.4
סנכרון ואינטראקציה עם מודולים אחרים ............................................ .................................................. 368
9.5
הספרייה התלויה באפליקציות ותיאור הממשק שלה ............ .................................................. 370
9.6
כיצד להוסיף הודעת מנוע .................. .................................................. .... 370
10
יישום ap_record ...................................... ............................ 371
10.1
סקירה כללית של הדרישות ... .................................................. .................... 371
10.2
עיצוב אדריכלות כולל ............................................ .................................................. ............. 371
10.2.1
תרשים מבנה כולל ............................................ .................................................. 371
10.2.2
חלוקת מודולים פונקציונליים ..................................... ............................................. 372
10.3
סנכרון ואינטראקציה עם יישומים אחרים ... ............................................. 372
10.4
ספריית תלות ביישומים והממשק שלה ............................ .................................................. .... 372
10.5
תהליך עסקי מיושם ............................................ .................................................. .......... 374
10.5.1
התהליך הכולל של היישום ותהליך תזמון התרחיש .......................................... ....................... 374
10.5.2
תרשים זרימה של סצינת התפריט הראשי ............................ ........................................ 374
10.5.3
תרשים זרימה של סצנת הקלטות ... ........................................... 375
10.6
כיצד לממש את פונקציית ניטור ההקלטה ............................ ............................................... 375
10.7
תיאור הסדרה המתקשר ורצף פקודות ההקלטה .......................................... ................................... 377
11
יישום ap_picture ...................................... ........................................... 378
11.1
סקירה כללית של הדרישות ... .................................................. .................... 378
11.2
עיצוב אדריכלות כולל ............................................ .................................................. ............. 378
11.2.1
תרשים מבנה כולל ............................................ .................................................. 378

עמוד 17
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 17
11.2.2
חלוקת מודולים פונקציונליים ..................................... ............................................. 379
11.3
סנכרון ואינטראקציה עם יישומים אחרים ... ............................................. 379
11.4
ספריית תלות ביישומים והממשק שלה ............................ .................................................. .... 379
11.5
תהליך עסקי מיושם ............................................ .................................................. .......... 379
11.5.1
התהליך הכולל של היישום ותהליך תזמון התרחיש .......................................... ....................... 380
11.5.2
תרשים זרימה של תרשימי רשימת הקבצים ............................ .................................... 381
11.5.3
תרשים זרימת תצוגה מקדימה של תמונה ............................................. .................................... 382
11.5.4
תרשים זרימה של סצנת השמעה של תמונות ............................ .................................... 383
11.5.5
תרשים זרימה של סצנה בתפריט המוקפץ ............................................ .................................... 385
11.5.6
תרשים זרימת תרשים זרימת תמונה ............................ .................................... 385
11.6
תרשים זרימת נתונים לפענוח תמונות ............................ .................................................. ... 386
11.7
כיצד לשנות את מספר השורות והעמודות בתצוגה המקדימה של התמונה ... ................................ 388
12
יישום ap_video ...................................... ................................................ 388
12.1
סקירה כללית של הדרישות ... .................................................. .................... 388
12.2
עיצוב אדריכלות כולל ............................................ .................................................. ............. 388
12.2.1
תרשים מבנה כולל ............................................ .................................................. 388
12.2.2
חלוקת מודולים פונקציונליים ..................................... ................................................ 389
12.3
סנכרון ואינטראקציה עם יישומים אחרים ... ................................................ 389
12.4
ספריית תלות ביישומים והממשק שלה ............................ .................................................. .... 389
12.5
תהליך עסקי מיושם ............................................ .................................................. .......... 389
12.5.1
התהליך הכולל של היישום ותהליך תזמון התרחיש .......................................... ....................... 390
12.5.2
תרשים זרימה של תרשימי רשימת הקבצים ............................ .................................... 391
12.5.3
תרשים זרימה של סצנת הפעלת וידיאו ............................................ .................................... 392
12.5.4
תרשים זרימה של סצנה בתפריט המוקפץ ............................................ .................................... 393
12.5.5
תרשים זרימת סצינת תפריט וידאו ............................................. .................................... 394
12.6
תרשים זרימת נתונים של פענוח וידאו ............................ .................................................. .... 394
12.7 כיצד מממש וידיאו את התצוגה של ממשק הווידיאו והממשק המשתמש, כמו סרגל התקדמות בו זמנית ... ..... 395
12.8 כיצד לבצע אופטימיזציה של ביצועי התצוגה במהלך הפעלת וידיאו ......................................... .................................. 396
12.9
כיצד לממש מסך מלא להצגת סרגל התקדמות וסרגל עוצמת הקול במהלך הפעלת וידאו ......................... 396
12.10
מדוע קובץ התצורה של תפריט הווידאו שונה במצב אוסף ............................... .......................... 398
13
יישום ap_radio ...................................... ........................................... 399
13.1
סקירה כללית של הדרישות ... .................................................. .................... 399

עמוד 18
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 18
13.2
עיצוב אדריכלות כולל ............................................ .................................................. ............. 399
13.2.1
תרשים מבנה כולל ............................................ .................................................. 399
13.2.2
חלוקת מודולים פונקציונליים ..................................... ........................................ 400
13.3
סנכרון ואינטראקציה עם יישומים אחרים ... ........................................... 401
13.4
ספריית תלות ביישומים והממשק שלה ............................ .................................................. .... 402
13.5
תהליך עסקי מיושם ............................................ .................................................. .......... 402
13.5.1
התהליך הכולל של היישום ותהליך תזמון התרחיש .......................................... ....................... 402
13.5.2
תרשים זרימת סצנת שידור רדיו ............ .................................... 404
13.6
כיצד להגדיל את מספר תחנות הרדיו שנקבעו מראש ... .............................................. 406
14
fm_engine engine ...................................... ........................................... 408
14.1
סקירה כללית של הדרישות ... .................................................. .................... 408
14.2
עיצוב כולל ... .................................................. .................... 408
14.3 תהליך עסקי של מנוע FM ............................................ .................................................. ........... 409
14.3.1
התהליך הכולל של מנוע ה- FM ............................................ ............ 409
14.3.2
זרימת עיבוד ההודעות של מנוע FM ............................................ ............................... 410
14.4
סנכרון ואינטראקציה עם מודולים אחרים ............................................ ............................................. 410
14.5
הספרייה התלויה באפליקציות ותיאור הממשק שלה ............ .............................................. 411
14.6
כיצד להוסיף הודעת מנוע .................. ................................................ 411
15
מנהל התקן FM ............................................ ............................................... 411
15.1
סקירת דרישות ועקרונות תכנון ............................ .................................................. ... 411
15.2
עיצוב כולל ... .................................................. .................... 412
15.2.1
המיקום של כונן ה- FM במבנה המערכת ... ......................... 413
15.2.2
חלוקת מודולי כונן FM ............................ ............ 413
15.3 תכנון ממשק חומרה של מנהל התקן FM ........................................ .................................................. .. 414
15.4 עיצוב ממשק יישומי מונע FM ... .................................................. .. 415
15.5 הממשק המאוחד המסופק על ידי מנהל התקן ה- FM והצגת כל ממשק להגדרת מאקרו ... ............... 416
15.6 תרשים זרימת נתונים המונע על ידי FM ... .................................................. ........... 417
15.7 תיאור הקצאת זיכרון מנהל התקן FM ........................................ .................................................. .. 417
15.8 מדריך שינוי לכונן FM ... .................................................. ....... 418
15.9 הוראות לתצורת מנהל התקן FM ............................................ .................................................. .......... 419
15.10
כיצד להוסיף ממשק יישומים מונע FM ......................................... ............................... 419

עמוד 19
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 19
16
יישום ap_mainmenu ...................................... .................................... 419
16.1
סקירה כללית של הדרישות ... .................................................. .................... 419
16.2
עיצוב אדריכלות כולל ............................................ .................................................. ............. 420
16.2.1
תרשים מבנה כולל ............................................ .................................................. 420
16.2.2
חלוקת מודולים פונקציונליים ..................................... ............................................. 420
16.3
מחזור חיי היישום ............................................. .................................................. .......... 421
16.3.1
השקת יישום ............................................ .................................................. 421
16.3.2
יציאת היישום ............................................ .................................................. 421
16.4
סנכרון ואינטראקציה עם יישומים אחרים ... ........................................... 421
16.5
ספריית תלות ביישומים והממשק שלה ............................ .................................................. .... 421
16.6
תהליך עסקי מיושם ............................................ .................................................. .......... 422
16.6.1
התהליך הכולל של היישום ותהליך תזמון התרחיש .......................................... ....................... 423
16.6.2
תרשים זרימה של שולחן העבודה (mainmenu_desktop) ........................................... ....... 424
16.6.3
תרשים זרימה של סצנה בתפריט המוקפץ (option_menulist) .......................................... ... 424
16.7
כיצד להוסיף פורטל יישומים ............................ ............................................. 424
16.8
כיצד למחוק את רשומת היישום .................. ............................................. 425
17
יישום ap_browser ...................................... ....................................... 426
17.1 סקירה כללית של הדרישות ............................................ .................................................. .......................... 426
17.2 תכנון אדריכלות כולל ........................... .................................................. .................. 426
17.2.1
תרשים מבנה כולל ............................................ .................................................. 426
17.2.2
חלוקת מודולים פונקציונליים ..................................... ........................................... 426
17.3 סינכרון ואינטראקציה עם יישומים אחרים ... .................................................. .. 427
17.4 ספריות תלויות יישומים והממשקים שלהן ........................................ .................................................. ......... 427
17.5 התהליך הכולל של היישום ותהליך תזמון התרחיש ......................... ............................ 428
17.6 כיצד הדפדפן שומר גישה ויציאה מ- ... ................................. 428
17.7 כיצד למחוק את כל הספריה בדפדפן ............................ ................................. 429
17.8 כיצד להיכנס לספרייה שצוינה ולעיין בקבצים ... ............................................. 430
17.9 כיצד לגבות ולשחזר פריטי קטלוג ........................................ .................................................. ..... 431
18
יישום ap_udisk ...................................... ............................................. 432
18.1
סקירה כללית של הדרישות ... .................................................. .................... 432
18.2
עיצוב אדריכלות כולל ............................................ .................................................. ............. 432

עמוד 20
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 20
18.2.1
תרשים מבנה כולל ............................................ .................................................. 432
18.2.2
חלוקת מודולים פונקציונליים ..................................... ........................................... 433
18.3
סנכרון ואינטראקציה עם יישומים אחרים ... ........................................... 433
18.3.1
השקת יישום ............................................ .................................................. 433
18.3.2
יציאת היישום ............................................ .................................................. 433
18.4
ספריית תלות ביישומים והממשק שלה ............................ .................................................. .... 434
18.5
תהליך עסקי מיושם ............................................ .................................................. .......... 434
18.6
תיאור תכנון מודול ראשי ............................................ .................................................. .......... 434
18.6.1
תיאור מודול ... .................................................. ... 434
18.6.2
פונקצית מודול ...................................... .................................................. ... 434
18.6.3
תהליך תזמון סצנה ............................................ ............................................. 435
18.6.4
תרשים זרימת עיבוד הודעה ............................................. ........................................... 435
18.6.5
טעינת תרשים זרימה ......................................... .................................................. 436
18.7
תיאור עיצוב מודול האתחול .............................................. .................................................. .. 436
18.7.1
תיאור מודול ... .................................................. ... 436
18.7.2
פונקצית מודול ...................................... .................................................. ... 436
18.7.3
היגיון תהליכים ...................................... .................................................. ... 437
18.8
צא מתיאור עיצוב המודול ................................... .................................................. ... 438
18.8.1
תיאור מודול ... .................................................. ... 438
18.8.2
פונקצית מודול ...................................... .................................................. ... 438
18.8.3
היגיון תהליכים ...................................... .................................................. ... 438
18.9
הצגת תיאור עיצוב מודול ............................................ .................................................. ... 438
18.9.1
תיאור מודול ... .................................................. ... 438
18.9.2
פונקצית מודול ...................................... .................................................. ... 438
18.9.3
היגיון תהליכים ...................................... .................................................. ... 438
18.10
כיצד לשנות את התכונות של התקן USB ............................ ............................ 439
18.11
איך לממש טעינה בלבד מבלי לדווח על מכתב כונן USB ... ............................... 439
18.12
איך להבין שכאשר אין כרטיס מוכנס, לא מדווח על מכתב כונן הכרטיס ... ........................... 439
19
יישום ap_playlist ...................................... ........................................... 439
19.1
סקירה כללית של הדרישות ... .................................................. .................... 439
19.2
עיצוב אדריכלות כולל ............................................ .................................................. ............. 441
19.2.1
תרשים מבנה כולל ............................................ .................................................. 441
19.2.2
חלוקת מודולים פונקציונליים ..................................... ............................................. 442
19.3 מחזור החיים של אפליקציית ה- PLAYLIST ............................................ ................................................ 442

עמוד 21
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 21
19.3.1
השקת יישום ............................................ .................................................. 442
19.3.2
יציאת היישום ............................................ .................................................. 443
19.4
הספרייה התלויה באפליקציות ותיאור הממשק שלה ............ ............................................. 444
19.5 תיאור הקצאת שטח הזיכרון ליישום PLAYLIST .......................................... .................................. 444
19.6
חלוקת שטח RAM ביישומים ............................................ ............................................... 446
19.7 תהליך עסקי של יישום PLAYLIST ............................ ... 450
19.7.1
התהליך הכללי של הבקשה ............................................. ............................... 450
19.7.2
תהליך האתחול של המודול ............................................ ....................................... 453
19.7.3
דרכי חציית קבצים ..................................... .............................................. 454
19.7.4
השג אחסון מידע על קבצים .............................................. ....................................... 456
19.7.5
מיון רשימה ...................................... .................................................. ... 457
19.7.6
תרשים זרימה של מודול יציאת היישום ............................ ................................... 467
19.8 תיאור מבנה הנתונים של רשימת ההשמעה ............................................ .................................................. .. 467
19.8.1
מבנה נתוני מבנה .............................................. ........................................... 467
19.8.2
רשימת מבנה קובץ LIB ............................................ ....................................... 468
19.9
כיצד להוסיף או למחוק תבנית קובץ מהרשימה ... ..................... 471
19.10
כיצד להסיר את רשימת ההשמעה VIDEO או AUDIBLE ............................... ... 472
19.11
כיצד לסנן את הקבצים שנוצרו על ידי יישום ההקלטה ... ................................... 473
20
ap_setting יישום ...................................... ........................................... 473
20.1
סקירה כללית של הדרישות ... .................................................. .................... 473
20.2
עיצוב אדריכלות כולל ............................................ .................................................. ............. 473
20.2.1
תרשים מבנה כולל ............................................ .................................................. 473
20.2.2
חלוקת מודולים פונקציונליים ..................................... .............................................. 474
20.3
סנכרון ואינטראקציה עם יישומים אחרים ... .............................................. 474
20.4
ספריית תלות ביישומים והממשק שלה ............................ .................................................. .... 475
20.5
תהליך עסקי מיושם ............................................ .................................................. .......... 475
20.6
תרשים זרימת נתונים של נתוני תצורה ............................ .................................................. .... 476
20.7
מבנה נתוני מפתח ............................................ .................................................. .......... 476
20.8
כיצד להוסיף פריט תצורה .................................. .................................................. ... 478
עשרים ואחת
יישום ap_tools ...................................... ............................................... 479
21.1
סקירה כללית של הדרישות ... .................................................. .................... 479
21.2
עיצוב אדריכלות כולל ............................................ .................................................. ............. 479

עמוד 22
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 22
21.2.1
תרשים מבנה כולל ............................................ .................................................. 479
21.2.2
חלוקת מודולים פונקציונליים ..................................... .............................................. 479
21.3
סנכרון ואינטראקציה עם יישומים אחרים ... .............................................. 480
21.4
ספריית תלות ביישומים והממשק שלה ............................ .................................................. .... 480
21.5
תהליך עסקי מיושם ............................................ .................................................. .......... 480
21.5.1
התהליך הכולל של היישום ותהליך תזמון התרחיש .......................................... ....................... 480
21.5.2
תרשים זרימת תרשים של רשימת כלים ............................ .................................... 483
21.5.3
תרשים זרימת סצנת לוח השנה .............................................. ........................................... 484
21.5.4
תרשים זרימת תרחיש של שעון סטופר ............................. ........................................... 485
21.6
כיצד להוסיף קבוצת התראות ............................................. .................................................. ... 486
עשרים ושתיים
יישום ap_alarm ...................................... ............................................. 486
22.1
סקירה כללית של הדרישות ... .................................................. .................... 486
22.2
העיקרון העיצובי והפעלת שעון המעורר ............................ ............................................... 486
22.3
עיצוב אדריכלות כולל ............................................ .................................................. ............. 487
22.3.1
תרשים מבנה כולל ............................................ .................................................. 487
22.3.2
חלוקת מודולים פונקציונליים ..................................... ............................................. 487
22.4
סנכרון ואינטראקציה עם יישומים אחרים ... ........................................... 488
22.5
ספריית תלות ביישומים והממשק שלה ............................ .................................................. .... 488
22.6
תהליך עסקי מיושם ............................................ .................................................. .......... 488
22.6.1
התהליך הכולל של היישום ותהליך תזמון התרחיש .......................................... ....................... 488
22.6.2
תרשים זרימה לאחר יציאת פסק זמן ............................................ ................................. 489
22.7
מבנה נתוני מפתח ............................................ .................................................. .......... 489
עשרים ושלוש
יישום ap_ebook ...................................... ............................ 491
23.1
סקירה כללית של הדרישות ... .................................................. .................... 491
23.2
עיצוב אדריכלות כולל ............................................ .................................................. ............. 491
23.2.1
תרשים מבנה כולל ............................................ .................................................. 491
23.2.2
חלוקת מודולים פונקציונליים ..................................... ............................................. 492
23.3
סנכרון ואינטראקציה עם יישומים אחרים ... ............................................. 493
23.4
ספריית תלות ביישומים והממשק שלה ............................ .................................................. .... 493
23.5
תהליך עסקי מיושם ............................................ .................................................. .......... 494
23.5.1
התהליך הכולל של היישום ותהליך תזמון התרחיש .......................................... ....................... 494
23.5.2
תרשים זרימה של תרשימי רשימת הקבצים ............................ .................................... 496

עמוד 23
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 23
23.5.3
קרא את תרשים הזרימה של הסצנה ............................................ ........................................... 497
23.5.4
תרשים זרימה של סצנה בתפריט המוקפץ ............................................ .................................... 499
23.6
כיצד לשנות את מספר השורות והעמודות בכל עמוד בסצנת הקריאה ...................................... .......................... 500

עמוד 24
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 24
3 מבוא
3.1 היסטוריית הגרסאות
3.2 מטרת הכתיבה
תאר בפירוט את המבנה הבסיסי, פיתוח יישומים, פיתוח מנהל התקנים של תוכנית US212A; תאר כל אחד מהם
תכנון ויישום מנהל התקן, תכנון ויישום של כל יישום. משמש להנחיית התכנון והפיתוח המפורטים של קייס
זה גם מספק התייחסות לפיתוח משני ותחזוקת קוד.
3.3 מונחים וקיצורים
קיצורים, מונחים
הֶסבֵּר
US212A
מתייחס למכלול התוכנית העיצובית המתאים ל- ATJ212X IC, כולל פלטפורמת תוכנה ותואמתה
כלי פיתוח, תכנון חומרה וכו '.
מערכת הפעלה
מערכת הפעלה
יישום (AP) מתייחס ליחידת היישומים שניתן לתזמן ולהוציא לפועל על ידי מנהל המשימות.
תרחישי יישום
מתייחס לממשק ספציפי של יישום ספציפי.
יישום חזית
ידוע גם בשם יישום ממשק משתמש, הוא מתייחס ליישום שצריך להציג את הממשק. סוג זה של יישום לעיתים קרובות
לאחר שהממשק נעלם, האפליקציה יצאה גם היא. מכונה יישום חזית במסמך זה
יישום רקע
זה הופך שוב ליישום מנוע, מה שאומר שאין צורך להציג את הממשק, אלא להשלים תהליך בקרה ספציפי,
והיישום המתוזמן לביצוע על ידי מנהל המשימות. מסמך זה מכונה באופן קולקטיבי היישום האחורי
להשתמש.
תַאֲרִיך
גרסת מספר
תגובה
מְחַבֵּר
2012-08-02
0.1
צור גרסה ראשונית
פול חן
2013-05-27
1.0
פרסם את המסמך לראשונה
קאי לי ג'ן

עמוד 25
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 25
לולאת הודעה
מתייחס לולאה רציפה של קבלת ועיבוד הודעות, וסרגל יציאת הלולאה
קבצים, לרוב בגלל עיבוד הודעה ספציפית.
VRAM
קיצור עבור זיכרון RAM וירטואלי. מחולק באזור המערכת של FLASH לפי מוחלט
אזור ה- FLASH לקריאה וכתיבה של כתובות, לכל AP יש שטח 1K המשמש בעיקר לאחסון
אחסן את נתוני התצורה של כל AP שצריך לשמור ב- FLASH לצורך ההפעלה הבאה. מערכת
במיוחד לספק ממשקים קשורים, היישום צריך לעבור רק ב- VRAM המתאים לכל AP
ניתן לקרוא ולכתוב ישירות את ערך הכתובת היחסי.
ID3
ממוקם בכמה בתים בתחילת או בסופו של קובץ mp3, מידע נוסף על ה- mp3
זמר, כותרת, שם אלבום, שנה, סגנון ומידע נוסף
אמנות אלבום
תמונת אלבום
Lrc
פורמט קובץ למילים
רשימת השמעה
רשימת השמעה של קובץ מוסיקה
רשימת מועדפים
מועדפים למוזיקה
קובץ mcg
מתייחס לקובץ המאחסן את פרטי תצורת התפריט
קובץ יציב
מתייחס לקבצים המאחסנים משאבים קשורים ותכונותיהם, כגון משאבי מחרוזת, תמונות
משאבים ומיקומם, גודלם ומידע אחר.
3.4 מדריך למשתמש
ניתן לחלק את המבנה של מסמך זה ל 6 חלקים, כמוצג באיור למטה:

עמוד 26
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 26
חלק 1: מבוא
כולל היסטוריית גרסאות, מטרת כתיבה, טרמינולוגיה וראשי תיבות, ומדריך למדריך למשתמש.
חלק ב ': סביבת פיתוח
הכירו כיצד לבנות סביבת פיתוח, כיצד להשתמש בכלים מסוימים ואיך לבצע באגים. כלי עורך ממשק משתמש ותצורת תפריט
הצגת הכלי ממוקמת בחלק החמישי, כלומר תכנון ופיתוח ממשק, המתמקד בו.
חלק 3: מבנה בסיסי ופיתוח בסיסי
הציגו את עקרון המבנה הבסיסי של המקרה, כמו גם את העיצוב והפיתוח של היישום והמנהל.
עקרונות המבנה הבסיסיים של התיקים כוללים: סביבת הפעלה של תיקים, ניווט בספריות קוד, מנהל יישומים, אתחול וכיבוי
תכנון ושימוש במודול הממשק הבסיסי הנפוץ למחשבים ויישומים.

עמוד 27
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 27
יש לקרוא בפירוט את החלק הזה של המסמך. הקוראים יכולים למעשה להבין את US212A באופן מלא ומוחלט באמצעות חלק זה של המסמך.
זה מאוד מועיל לפתח מקרה מושג חזק, יעיל ומאוחד.
חלק 4: הסבר מפורט על נהג ה- CAE
הציגו 3 נהגים הקשורים באופן הדוק למקרה: מנהל התקן KEY, מנהל התקן LCD, מנהל התקן ממשק משתמש, 3 מנהלי התקנים אלה
הבנת פונקציית הקלט / פלט של המשתמש היא מנהל התקן מבוסס-מקרה.
בנוסף, מכיוון שלנהג ה- Welcome ומנהג ה- LCD יש מערכת יחסים גדולה יותר, הם מוסברים גם בחלק זה.
מנהל התקן FM אינו הנהג הבסיסי של התיק, אך כחלק מפונקציית הרדיו הוא מודול חיצוני אופציונלי
הנהג לא מוצג בחלק זה, אלא מוצב מאחורי אפליקציית הרדיו.
חלק חמישי: עיצוב ופיתוח ממשקים
להציג את התכנון והפיתוח של ממשק משתמש הניתן להגדרה ותפריט הניתן להגדרה, כולל הצגת שימוש בכלי ותמיכה בפיתוח קוד וכו '.
חלק ו ': הסבר מפורט על היישום
הכירו את העיצוב והפיתוח של כל יישום.

עמוד 28
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 28
4 סביבת פיתוח
4.1 בניית סביבת פיתוח
4.1.1 התקנת סיגווין
אם טרם התקנת את סיגווין, אנא עקוב אחר סעיף 1 להתקנה חדשה.
אם התקנת בעבר את cygwin, אך התקנת אותו בדיסק המערכת, או שאתה לא בטוח אם הוא עדיין זמין, אנא עקוב אחר השני
הסר לחלוטין את השיטה בסעיף ולאחר מכן התקן אותה בהתאם לסעיף 1.
4.1.1.1 נקי התקן של סיגווין
הַנָחַת יְסוֹד:
1) לא ניתן להתקין את Cygwin תחת אות כונן המערכת, מכיוון שקל להפעיל אותה לא נכון על ידי תוכנות אחרות, במיוחד תוכנת האנטי-וירוס.
2) להתקנת גרסה מסודרת של סייגווין, דרוש לפחות 600M שטח, אנא אשר את המחיצה הזמינה לפני ההתקנה. לְהַלָן
הליך ההתקנה הוא להתקין ל- D: \, או למחיצות אחרות (למעט דיסק המערכת).
3) Cygwin מותקן בספריית השורש, ולא ניתן להתקין אותו לנתיב הדומה ל- D: \ Program Files \ cygwin.
4) אם התקנת את cygwin בעבר, התקנת בדיסק המערכת או שאתה לא בטוח אם הוא עדיין זמין, אנא הסר אותו קודם.
לשיטות טעינה ופריקה, עיין בסעיף 2;
העתק את ה- cygwin בגרסה המסודרת של השרת לספרייה המקומית D: \ MIPS_TOOLS \ cygwin_full, הנתיב הזה הוא
זה הנתיב של שלב 4) להלן.
1) לחץ פעמיים על setup.exe ולחץ על הבא.
2) בחר "התקן מתוך מדריך מקומי" ולחץ על הבא.

עמוד 29
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 29
3) בחר בנתיב ההתקנה D: \ Cygwin ולחץ על הבא;

עמוד 30
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 30
4) בחר את הנתיב של מתקין המקור ולחץ על הבא.
5) לחץ על התיבה האדומה שליד הכל, ברירת המחדל תשתנה להתקנה (אם המחשב מגיב לאט, ייתכן שתמתין מספר שניות
ישתנה, לחץ שוב והמשיך להתקנה מחדש ——> הסרת התקנה ——> ברירת מחדל ——> מחזור התקנה, אנו מאפשרים לו בעת ההתקנה
במצב התקנה), לחץ על הבא כדי להמשיך.

עמוד 31
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 31
6) המתן לסיום ההתקנה מאוחר יותר (יתכן שיעברו עשר דקות לסיים את ההתקנה).
אם הדבר יבקש משהו כמו "שגיאת זיכרון" במהלך תהליך ההתקנה, סביר להניח שלמחשב שלך אין מספיק זיכרון. אתה יכול ללחוץ על "קבל"
"בטל", ואז "הפעל מחדש" את המחשב ("יציאה" לא משחרר לחלוטין את הזיכרון) ואז התקן מחדש.
7) הגדר משתני סביבה. בחלון המשנה "משתני מערכת" תחת חלון "משתני סביבה", הגדל את הערך של "נתיב"
הוסף "; D: \ Cygwin \ bin" (השתמש בפסיקולון בין הנתיבים, והקצה האחרון אינו נדרש; שימו לב: הערך של משתנה סביבת המערכת הוא
"; D: \ Cygwin", אתה יכול ליצור ב- cygwin, אך אינך יכול לבצע בשורת הפקודה cmd, מה שגורם לאובדן QAC
לִהַבִיס).
8) בדוק אם הנתיב בקובץ D: \ cygwin \ cygwin.bat הוא "chdir D: \ cygwin \ bin", אם כן, דלג
אחרת, שנה אותו לנתיב זה "chdir D: \ cygwin \ bin".
4.1.1.2 הסר את ההתקנה של סייגווין
אם התקנת בעבר את cygwin ב- C: \ Cygwin, עקוב אחר השלבים שלהלן כדי למחוק אותה (אם מתוארים כמה צעדים
הפרויקט כבר לא קיים, תוכלו לדלג עליו)
1) עקוב אחר שלבים 1) עד 4) בסעיף 1. בממשק של שלב 5) בסעיף 1, התיבה האדומה נמצאת בהסרת ההתקנה
כאשר, לחץ על הבא כדי להסיר את ההתקנה עד שיסתיים.
2) מחק את C: \ Cygwin ואת כל ספריות המשנה שלו.
3) מחק את הנתיב החל מ- C: \ Cygwin בנתיב משתנה סביבת המערכת.
4) מחק התחלה -> 3 פריטים באיור למטה בכל התוכניות (לחץ באמצעות לחצן העכבר הימני כדי למחוק).

עמוד 32
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 32
5) מחק את הפריטים ברישום (התחל -> הפעל, הזן regedit)
"HKEY_CURRENT_USER_Software_Cygnus פתרונות"
"HKEY_LOCAL_MACHINE_Software_Cygnus פתרונות"
4.1.2 התקנת מחזיק הכלים של SDE
השלבים הם כדלקמן (ניתן להעתיק ישירות את שורת הפקודה למטה):
1) מקם את קובץ ההתקנה בספריה D: \ cygwin \ tmp \ PN0016-06.61-2B-MIPSSW-MSDE-v6.06.01.tgz.
2) cd / usr / local כדי להזין / usr / local, תוכנית היישום של המשתמש ממוקמת בדרך כלל בספריה זו.
3) mkdir sde60601 יוצר את הספרייה sde60601
4) cd sde60601 כדי להזין sde60601
5) פתח את קובץ ההתקנה של "gzip -dc /tmp/PN00116-06.61-2B-MIPSSW-MSDE-v6.06.01.tgz | tar xf -"
6) sh ./bin/sdesetup.sh מבצע את סקריפט ההתקנה וקובע כמה משתנים בסביבה.
אתה רוצה להוסיף ספריית MIPSsim MDI?
קלט n
האם אתה רוצה ליצור תצורת בדיקה FS2?
קלט n
להגדיר סביבה באופן גלובלי ב- /etc/profile.d?
הזן את y
7) סגור את Cygwin ופתח אותו מחדש, שרשרת הכלים של sde מוכנה לשימוש.
4.1.3 התקנת ערכת פיתוח קושחה
ניתן להשלים את ההתקנה כברירת מחדל ללא תצורה מיוחדת.
4.1.4 כלי עורך ממשק משתמש וכלי עיצוב תפריטים
אין צורך להתקין את כלי עורך ממשק המשתמש, פשוט פתח אותו והשתמש בו.

עמוד 33
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 33
עריכת התפריט יכולה להשתמש בכלי שינוי ה- FW.
4.1.5 התקנת כלים לייצור המוני
ניתן להשלים את ההתקנה כברירת מחדל ללא תצורה מיוחדת.
4.1.6 כיצד להרכיב AP, ליצור קושחה ולשרוף אותה למחשב קטן להפעלה
1. קומפילציה של AP: ​​בכל ספריית AP, ישנם קבצי קובץ קבצים, תקליטור לספריית ה- AP המתאימה ויוצרים ישירות
זהו זה.
באפשרותך גם לבצע \ usdk212a \ case \ cfg \ makefile כדי לבצע את כל מוצרי ה- AP בקבוצות.
2. צור קושחה:
בצע \ usdk212a \ case \ fwpkg \ buildfw.bat כדי ליצור קושחה.
3. הורד את הקושחה למחשב הקטן:
1. חבר את המחשב למחשב במצב ADFU או במצב דיסק U;
2. פתח את כלי הייצור ההמוני;
3. בחר את הקושחה, בחר באפשרות תצורת ההורדה המתאימה והורד;
4. המתן להשלמת ההורדה, סרגל ההתקדמות מציג "100% מצליח", מה שאומר שההורדה נכונה, אחרת ההורדה נכשלה.
נסה להוריד שוב;

עמוד 34
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 34
4.2 סימולטור ממשק משתמש
4.2.1 תפקידו של סימולטור ממשק המשתמש
סימולטור ממשק המשתמש הוא כלי שאינו תלוי בלוח הפיתוח ויכול לפתח באופן עצמאי תוכניות משובצות במחשב האישי.
בעיקר כדי לשפר את יעילות הפיתוח הנמוכה, שיטת איתור באגים יחידה והסתמכות יתר על לוח הפיתוח בתהליך ההדרכה הקבוע של התוכנה המוטמעת.
סטָטוּס. זה לא שייך לקטגוריה של הדמיית חומרה, זה סימולציה של סביבת תוכנה משובצת, כל עוד זה קוד שלא קשור לחומרה,
שניהם יכולים להשתמש בסימולטור ה- ui כדי לפתח ולבצע באגים.
הסימולטור פותח תחת סביבת Windows 200 / Windows XP ו- VC ++ 6.0, והוא תואם את תקנות ANSI C.
בתנאים רגילים ניתן להריץ את כל ה- AP וחלק מהקוד תחת psp במקרה לאחר הידור ב- VC6.
התוצאה עולה בקנה אחד עם לוח הפיתוח.
ישנם שני יתרונות עיקריים בשימוש בסימולטור:
1. שפר את יעילות הפיתוח
כדי לפתח תוכנית בלוח הפיתוח, אתה צריך לקמפל אותה בסביבת Cygwin, ואז ליצור את הקושחה ולהוריד אותה ללוח הפיתוח.
העלה את תוכנית האימות, תהליך זה אורך דקות, אם הקושחה גדולה יותר, זמן צריבת הקושחה ארוך יותר,
בסביבת המחשב, אתה רק צריך לקמפל ולרוץ כדי לראות את התוצאות, והמהירות משתפרת מאוד;
2. קל למעקב וניפוי באגים

עמוד 35
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 35
במצב פיתוח נפוץ, כאשר יש צורך באיתור באגים, מרבית התקשורת עם המחשב היא דרך היציאה הסדרתית או יציאת ה- USB.
הצגת תוכנה, בקרה, ניפוי שיטות ושיטות אחרות. לעתים קרובות כדי לקבוע לאיזה פיסת קוד יש בעיה, זה לוקח הרבה פעמים,
הוסף קוד ניפוי במספר מיקומים בכדי להציג את הערכים של משתנים מרובים. באג פשוט עשוי לארוך זמן רב.
מַסלוּל;
תחת הסימולטור תוכלו לקבוע בקלות נקודות נקודת שבירה, מעקב אחר שלב אחד, הצגת ערכים משתנים, רמות שיחות פונקציה וכו '.
קל לבדוק שגיאות נפוצות כמו הצפת זיכרון, פעולת מצביע null ואי התאמה בין סוגים משתנים;
במקביל, עבור צרכים מיוחדים מסוימים, נדרש כלי ניפוי עזר מיוחד כדי לבדוק את השפעת הממשק הנוכחי בזמן.
4.2.2 מבוא לפרויקט סימולטור UI
4.2.3 סביבת פיתוח ושיטת שימוש בסימולטור ממשק משתמש
4.2.3.1 צור פרויקט
עבור כל מודול או מנהל התקן של יישומי AP, יש ליצור פרויקט VC מתאים.
בואו ניקח את מודול יישום הממשק הראשי (mainmenu.ap) כדוגמה כדי להמחיש את שלבי היצירה של הפרויקט.
1. פתח את Visual C ++ 6.0, בחר בתפריט המשנה קובץ → חדש:

עמוד 36
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 36
איור 31-1 צור פרויקט
2. לחץ על הדף <פרויקטים>, בחר Win 32 Dynamic-Link Library, הזן את שם הפרויקט
שם התוכנית, בחר בסימולטור \ יישומים \ נתיב בספריית הסימולטור במיקום ולחץ על כפתור [אישור]:

עמוד 37
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 37
איור 31-2 הזן את שם הפרויקט
3. בחר בפרויקט DLL ריק ואז לחץ על סיום כדי להשלים את יצירת הפרויקט הבסיסית.
איור 31-3 בחר פרויקט ריק

עמוד 38
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 38
4.2.3.2 הקמת הפרויקט
1. לחץ באמצעות לחצן העכבר הימני על שם הפרויקט כדי להציג תפריט ובחר את פריט ההגדרה. אתה יכול גם לבחור תחת תפריט פרויקט
הגדרה או מקש חם Alt + F7:
איור 31-4 הגדרת הפרויקט
2. בחר את הדף <Debug> והזן ".. \ .. \ bin \ Debug \ Simulator.exe" בשדה ההפעלה להפעלת באגים:
הזן ".. \ .. \ bin \ Debug \" בספריית העבודה: העמודה:

עמוד 39
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 39
איור 31-5 הזן את debug הספרייה
3. בחר את הדף C / C ++, בחר כללי בעמודה קטגוריה והוסף הגדרות מאקרו בהגדרות מעבד המקדים:
המשמעות של " מחשב ", PC מיועדת להבדל בין הסימולטור לסביבת המיני מחשבים.

עמוד 40
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 40
איור 31-6 הוסף מאקרו מעבד מראש
4. בחר יצירת קוד בעמודה קטגוריה וביצוע ניפוי באגים מרובים בשרשור בעמודה השתמש בספריית זמן ריצה
DLL, בחר בייט 1 בעמודת היישור של מבנה:
איור 31-7 בחר יישור של בתים בודדים
5. בחר כותרות הידור מראש בעמודה קטגוריה ובחר לא להשתמש בכותרות שהולכו מראש:

עמוד 41
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 41
איור 31-8 אל תשתמש בכותרות הידועות מראש
6. בחר מעבד מקדים והזן בספריות כלול ספריות נוספות:
".. \ .. \ .. \ Psp_rel \ inc, .. \ .. \ .. \ case \ inc":

עמוד 42
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 42
איור 31-9 הזן את כולל נתיב
7. בחר בדף קישור והזן ".. \ .. \ bin \ Debug \ mainmenu.ap בשדה קובץ פלט: בשדה אובייקט / ספרייה
מודולים
טור
לאבד
להיכנס
".. \ .. \ Bin \ debug \ SimKernel.lib .. \ .. \ bin \ debug \ SimBase.lib .. \ .. \ bin \ debug \ comlib.lib":
איור 31-10 הזנת שם קובץ הפלט
4.2.3.3 הוספת ספריות וקבצים
1. לחץ באמצעות לחצן העכבר הימני על התיקיה קבצי מקור ובחר הוסף קבצים לתיקיה:

עמוד 43
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 43
איור 31-11 הוספת קבצים לפרויקט
2. הוסף לתיקיה את קובץ C תחת ספריית AP (. \ Case \ ap \ ap_mainmenu):

עמוד 44
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 44
איור 31-12 בחר את הקובץ שנוסף
3. לחץ באמצעות לחצן העכבר הימני על סמל התיקייה קבצי מקור ובחר "תיקיה חדשה":

עמוד 45
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 45
איור 31-13 צור תיקיה נפוצה
הזן ForSim בשם העמודה החדשה בתיקיה בחלון התיקיה החדשה שצץ:
איור 31-14 קלט נפוץ
לחץ באמצעות לחצן העכבר הימני על התיקיה ForSim בחלון הפרוייקט ובחר "הוסף קבצים לתיקיה":

עמוד 46
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 46
איור 31-15 הוספת קבצים נפוצים
הוסף SMcommval.c ל- ForSim. SMcommval.c היא ספריית זמן ריצה המשמשת לדמות ap. כל ap
שניהם זקוקים לקובץ, ניתן להשתמש באותו קובץ:

עמוד 47
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 47
איור 31-16 הוספה SMcommval.c כדי ForSim
4.2.3.4 ערוך את הפרויקט
בחר בתפריט Build, בחר Rebuild All, הידור ללא שגיאה, אתה יכול להתחיל להפעיל את הבאגים.
איור 31-17 ערוך את הפרויקט

עמוד 48
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 48
4.2.4 כיצד לבנות סביבת פיתוח סימולטור עבור ה- AP החדש שנבנה
אתה יכול להשתמש בסימולטור המתואר בסעיף הקודם כדי ליצור פרוייקט חדש ואז לבצע את ההוראות להגדרת תצורה
פריטי הגדרת פרוייקט, הוסף את קבצי המקור של פרויקט זה ואז ערוך.
אתה יכול גם להשתמש בפרויקט AP קיים כדי לשנות ישירות, לדוגמה, ליצור פרויקט עם mainmenu_ap כתבנית
שלבי ה- record_ap הם כדלקמן:
1. העתק את הספרייה mainmenu_ap ושנה אותה ל record_ap. שנה mainmenu.def ו- mainmenu.dsp בספרייה
שם שמו של amainmenu.dsw ל- record.def, record.dsp, record.dsw ואז נפתח עם UltraEdit
record.dsp, שנה את מחרוזת התפריט הראשי בפנים להקלטה;
2. פתח את record.dsw, מחק את כל הקבצים שנוספו במקור ואז הוסף את הקבצים שצריך להקים מנהל התקן זה,
פשוט לקמפל.
4.2.5 כיצד לבצע ניפוי באגים עם סימולטור
4.2.5.1 הגדרות לפני ניפוי באגים
אם ישנם מספר פרויקטים בסביבת העבודה הנוכחית, קבעו את הפרויקט לניפוי כפרויקט הפעיל.
נקודת הפסקה שנקבעה תקפה. שיטות להלן:
נניח שמדובר בפרויקט ap_maimenu שאותו באגים, בחר Project → Set Active בשורת התפריטים של VC
פּרוֹיֶקט. לחלופין, בחר בפרויקט שיוגדר, לחץ באמצעות לחצן העכבר הימני ובחר "הגדר כפרויקט פעיל":

עמוד 49
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 49
איור 31-18 הגדרת הפרויקט הפעיל
על מנת להציג את הפרויקט הפעיל בנוחות, תוכלו לבחור כלים → אפשרויות בסרגל התפריטים VC ולבחור
בפריט "עיצוב", בחר חלון סביבת עבודה בעמודה קטגוריה ובחר "לישו" בעמודת הגופן, ואז
ואז לחץ על כפתור OK:

עמוד 50
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 50
איור 31-19 הגדרת גופן חלון סביבת העבודה
באופן זה, הפרויקט הפעיל (ap_playlist) יוצג מודגש לצורך זיהוי קל:

עמוד 51
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 51
איור 31-20 תצוגת פרויקט פעיל
לאחר הגדרת הפרויקט הפעיל, עדיף לבנות מחדש את הפרויקט הפעיל על ידי בחירת התפריט Build
→ בנה מחדש את כולם:

עמוד 52
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 52
איור 31-21 מחדש את כולם
לאחר שבנייה מחדש של הכל נכונה, לחץ על F5 כדי להתחיל באגים.
4.2.5.2 התחל באגים (F5)
הגדר את הפרויקט לניפוי באגים כפרויקט הפעיל, הידור וקישור נכון, לחץ על F5 כדי להתחיל באגים, והתכנית נכנסת
סטטוס ניפוי באגים. התוכנית תמשיך לרוץ ולהיפסק כאשר היא פוגעת בנקודת שבירה (אם קיימת):

עמוד 53
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 53
איור 31-22 התוכנית פועלת לנקודת שבירה
לאחר שהתכנית נעצרת בנקודת הפסקה, תוכלו ללחוץ על F10 או F11 למעקב אחר שלבים בודדים, או שתוכלו ללחוץ על F5 כדי לעבור את נקודת הפסקה ולבצע אותה כל הדרך חזרה.
עצרו עד נקודת המפגש הבאה.
4.2.5.3 קביעת נקודת שבירה (F9)
קבע נקודות הפסקה כדי להציג ערכים משתנים ומגמות תוכניות בזמן אמת. אתה יכול להגדיר נקודת הפסקה לפני שתלחץ על F5 כדי להתחיל באגים,
ניתן להגדיר אותו גם במהלך ניקוי באגים. העבר את הסמן לשורת קוד מסוימת בחלון הקוד VC ולחץ על F9 כדי לקבוע נקודת הפסקה.
לאחר קביעת נקודת הפסקה, הקו בו נמצא נקודת הפסקה יסומן באדום, כמוצג באיור 9-6:

עמוד 54
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 54
איור 31-23 תצוגת נקודת הפסקה
4.2.5.4 ניפוי שלבים בודדים (F10, צפו בקשר בין משתנים וקריאות פונקציה)
כאשר התוכנית נעצרת בנקודת השבירה, לחץ על F10 כדי להפעיל את התוכנית בזה אחר זה, והפונקציה תהיה
בצע הצהרה מבלי להיכנס לפונקציה.
אתה יכול לבחור בתפריט תצוגה → ניפוי באגים ב- Windows → ערימת שיחות כדי להציג את הקשר ההיררכי של כל שיחת פונקציה;
הזן את שם המשתנה בתוכנית בעמודה "שם" בחלון השמאלי התחתון, והערך שלו יוצג בעמודה "ערך".

עמוד 55
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 55
איור 31-24 התבונן בערימה ובמשתנים
4.2.5.5 הזן ניפוי באגים בגוף פונקציות (F11)
כאשר התוכנית עוברת להצהרת פונקציות, לחץ על F11 כדי להזין את עקוב גוף הפונקציה; אם תלחץ על F10
המשפט הבא מבוצע מבלי להיכנס לגוף הפונקציה. אם הפונקציה מבוצעת ל- _app_init:
איור 31-25 ביצוע שלב יחיד
אם תלחץ על F11 בשלב זה התוכנית קופצת לכניסה של גוף הפונקציה:

עמוד 56
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 56
איור 31-26 גוף פונקציה פרוגרסיבית F11
אם תלחץ על F10, התוכנית קופצת למשפט הבא של הפונקציה להפעלה:
איור 31-27 פונקצית דילוג F10
הערה: התנאי הנדרש להכנס לניפוי באגים בגוף הפונקציה על ידי לחיצה על F11 הוא שהפרויקט (פרויקט A) בו נמצא גוף הפונקציה חייב להיות בסביבת העבודה הנוכחית.
בתוך. אם פרויקט A אינו הפרויקט שנבצע באגים (פרויקט B), הוסף את פרויקט A לסביבת העבודה הנוכחית ותן

עמוד 57
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 57
קישור פרויקט B לפרויקט A, ראה 7.2 לשיטת קישור ואז ניפוי באגים מחדש.
4.3 מבוא לשיטות ניפוי
4.3.1.1 UDI ו- Insigh
1. פעולות התקנת כלי איתור באגים
פתח את חבילת ההתקנה של כלי הבאגים והפעל את ATD_V2.1_Setup.exe, כמוצג באיור:
המשך לעקוב אחר ההנחיות להתקנה כברירת מחדל.
שתיים, חבר UDI
חבר UDI, זה יבקש חיבור ADFU. אם מנהל התקן ADFU אינו מותקן, אנא התקן תחילה את מנהל ההתקן של ADFU;
ואז פתח את הכלי UDIServer, התקן את מנהל ההתקן של M4K

עמוד 58
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 58
לאחר ההצלחה, הסמל יוצג כ-
חבר UDI למחשב הקטן, לאחר שהחיבור תקין, מחוון ה- DEM של UDI יהיה דולק;
שלוש, ניפוי באגים
בעת ניפוי באגים UDI, שיטת הבאגינג היא כדלקמן:
1. פתח את הכלי Insight ולחץ על הסמל בשולחן העבודה
, או "התחל -> כל התוכניות
-> ATD_V2.1-> mips-elf-Insight ";
2. קובץ—> פתוח—> בחר את הקובץ שאותו ייבדל (exe או .elf);

עמוד 59
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 59
3. אם זו הפעם הראשונה להשתמש בכלי זה, אנא בדוק את ההגדרות, קובץ -> הגדרות Targer, ואשר שההגדרות הן כדלקמן:
4. הפעל -> התחבר למטרה; "הצלחה התחבר" תתבקש לאחר ההצלחה;
5. הגדר את BreakPoint, לחץ באמצעות לחצן העכבר הימני על "הגדר נקודת הפסקה בחומרה" לפני שורת הקוד, מומלץ להיות הראשון
הגדר את נקודת השבירה של החומרה בו זמנית; אם נקבע ש"כל (כולל פונקציות המשנה) מבוצעים מהמצב הנוכחי לנקודת הפסקה "
הקוד כבר נמצא בזיכרון. ניתן לקבוע נקודות עצירה של תוכנה, מומלץ להשתמש בנקודות הפסקה של חומרה (ניתן להגדיר עד 4 נקודות הפסקה של חומרה.
נקודת שבירה).

עמוד 60
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 60
6. לחץ על סמל "המשך"
, התוכנית תפעל לנקודת הפסקה שנקבעה.
7. המשך באגים קשורים;
1) כלי תובנה יכול להציג רישום וזיכרון,
2) בכל פעם שאתה מפעיל מחדש את באגים, עליך להגדיר את מחשב הרשמה ל- 0xBFC00000, והמערכת מתחילה מכתובת זו.
מהלך \ לזוז \ לעבור;
3) צפו בנקודות הפריצה בתפריט
 
אתה יכול להציג את נקודת השבר הנוכחית בחלון, אם אתה צריך לנקות את נקודת הפסקה, אתה יכול ללחוץ באמצעות לחצן העכבר הימני
לחץ על נקודת שבירה ובחר הסר; אם ברצונך לנקות את כל נקודות הפסקה, תוכל לעבור ל"הסר הכל "הכללי
 
4.3.1.2 הדפסה טורית
1. היכן שאתה צריך להדפיס, השתמש בפונקציה libc_print (char Charts *), נתונים לא חתומים,
מצב char שאינו חתום)

עמוד 61
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 61
s
כתובת מחרוזת
נתונים
ערך
מצב
מצב הדפסה,
0, רק מחרוזות הדפסה;
1. הדפס רק את הערך;
2. שני המיתרים והערך מודפסים
הערה: ניתן להדפיס עד 16 תווים בכל פעם.
2. החומרה UART_TX יכולה להשתמש ב- GPIOA17 או GPIOA21, אותם ניתן לתכנן בהתאם לתכנית בפועל.
קבע את התצורה של ה- GPIO המשמש את UART_TX ב- manager_main.
לדוגמה, באמצעות GPIOA21, התצורה היא כדלקמן
* (uint32 *) (0x9fc19a88) = 0xFFFF1FFF; // GPIO A21
* (uint32 *) (0x9fc19a8c) = 0x00006000; // GPIO A21
השתמש ב- GPIOA17, התצורה היא כדלקמן
* (uint32 *) (0x9fc19a88) = 0xFFFFFFC7; // GPIO A17
* (uint32 *) (0x9fc19a8c) = 0x00000020; // GPIO A17
ביניהם, 0x9fc19a88 - uart_tx_gpio_cfg_mask, 0x9fc19a8c - uart_tx_gpio_cfg_value, אמיתי
בעיקרו של דבר, MFP_CTL1 מוגדר.
3. פתח את תוכנת הדפסת היציאה הטורית והגדר:
שיעור Baud-115200
ביטים נתונים -8
עצור ביט 1
בדוק ספרה-אין
בקרת זרימה - אין
4.3.1.3 סימולטור ממשק משתמש
סימולטור ממשק המשתמש הוא פרוייקט VC ++, שניתן לבצע ניפוי בעזרת פלטפורמת הפיתוח והבאגוגים החזקים של VC ++.
אנא עיין בסעיף סימולטור ממשק המשתמש לשימוש ספציפי.
מבנה בסיסי והתפתחות בסיסית 5
ראשית הציגו את סביבת הריצה של המקרה, ואז הסבירו את המבנה והפיתוח הבסיסיים של התיק על בסיס זה, ותנו את היישום
למפתחי מנהל התקנים ותיקים יש יכולות הבנה ופיתוח אחידות ומקיפות.

עמוד 62
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 62
5.1 סביבת הפעלה בתיק
סביבת ההפעלה של המקרים מתייחסת לסביבת הפלטפורמה שעליה תלויים היישום בתיק ומנהל התקן ותפעול התיק
סביבת ההפעלה מספקת להם מסגרת בסיסית שהיא יציבה, יעילה, עוצמתית וקלה לפיתוח.
סביבת ההפעלה של המקרים כוללת את המודולים הבאים:
● PSP, כולל גרעין מערכת הפעלה, libb ספריית פונקציות בסיסיות, מנהל התקן בסיסי לפלטפורמה. חבילת מנהל התקן בסיסית אחת
כולל מנהלי מערכת קבצים, מנהלי התקנים חיצוניים להתקני אחסון כגון nandflash, כרטיס, uhost וכו '.
● כונן api.a בכניסה מאוחדת
● פענוח וקידוד מודול DSP
● מודולי משתמש כלליים כגון ניתוח ID3, ניתוח מילות מילים, בורר קבצים
5.1.1 סקירה כללית של מודול PSP
5.1.1.1 מושגי יסוד
ליבת מערכת ההפעלה
ליבת ליבת מערכת ההפעלה היא מערכת ההפעלה UCOS II בזמן אמת, המממשת תזמון משימות מקדים בזמן אמת ותקשורת בין משימות.
בנוסף, ליבת מערכת ההפעלה מיישמת גם ניהול תקשורת הודעות, ניהול API, ניהול בנקים, ניהול AP,
ניהול כוננים, ניהול חריגים ופריעות, שירות עיכוב זמן וכו '.
יישום, תהליך, פתיל, משימה ועדיפותה
עבור מהנדס פיתוח האפליקציות הכללי, האובייקט שהוא מפתח הוא היישום. בפלטפורמת US212A,
על מנת לתמוך בתרחישים אמיתיים של יישומים כפולים, כגון השמעת מוסיקה בזמן צפייה בתמונות, כלומר יישומי חזית פלוס יישומי רקע,
אנו מחלקים יישומים לשלושה סוגים, היינו יישומי חזית (או יישומי ממשק משתמש) ויישומי רקע (או יישומי מנוע)
ומנהל אפליקציות. מנהל היישומים הוא יישום מיוחד שאחראי על יצירת ומחזור יישומי חזית ויישומי רקע.
היישום ב- PSP מתממש כתהליך, כלומר הגוף העיקרי עם קוד ומרחב נתונים בלעדי. המבוא של מושג התהליך מיועד
מאחור.
על מנת לתכנן וליישם יישומים היררכיים, למשל, יישום התמונה מחולק לחלק אינטראקציה של משתמשים ולחלק פענוח בסיסי של תמונה
הצגנו את מושג החוטים והחוטים המכוסים כמושג המשימות של UCOS II. במילים אחרות, כל אחד צריך
ניתן לחלק את היישום / התהליך למספר אשכולות ליישום ולבסוף לרוץ במקביל על ידי משימות מרובות בליבת UCOS II. האשכולות האלה

עמוד 63
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 63
שטח קוד משותף ושטח נתונים שבבעלות התהליך, כאשר החוט שנוצר על ידי המערכת בעת טעינת היישום נקרא החוט הראשי, ואחרים
האשכולות נקראים חוטי ילדים ומתוחזקים דרך ממשק ניהול האשכול המסופק על ידי libc. עבור חוטים, יש לשים לב במיוחד
העניין הוא שחוטים זקוקים לשטח מחסנית משלהם, כך שמספר חוטי המשנה לכל יישום מוגבל. העיצוב הנוכחי הוא
חוט ילד אחד.
המשימה היא נושא הליבה של UCOS II והיחידה הבסיסית של שיחות מקדימות בזמן אמת. עדיפות המשימה היא תזמון משימות
הבסיס החשוב ביותר הוא שככל שקדימות המשימה גבוהה יותר, כלומר ככל שערכה קטן יותר, כך קל יותר לתזמן את המשימה.
יישום
(מוסיקה / תמונה / ספר אלקטרוני / ...)
חוט ראשי
תהליך
חוט ילד אחד חוט ילד שני חוטי ילד ...
UCOS TASK1
UCOS TASK2
UCOS TASK3
משימת UCOS ...
AP
ליבק
KERNEL / UCOS
נהג
מנהלי התקנים הם תבניות אנקפסולציה עבור כמה מודולים נפוצים עצמאיים, כגון מנהלי מערכת קבצים ומנהלי התקנים אחסון חיצוניים.
בנוסף, נוח לנו לנהל, אנו גם מכסים את הגרעין ואת ה- libc כנהגים.
עבור מהנדסי פיתוח תיקים, הנהגים החשובים להם ביותר הם נהגי מקרה. מנהלי התקנים אלה קשורים לתיק.
זה קשור, כלומר כדי להתאים את עצמו למקרים שונים, יתכן שיהיה צורך לשנות את מנהל ההתקן של ה- Case. מנהלי התקנים אלה כוללים נהגי ממשק משתמש, LCD
מנהל התקן, מנהל התקן KEY, מנהל ברוכים הבאים, מנהל התקן FM וכו '.
בסיסי וקודק
מנגנון הקישור של הבסיס והקודק של הפענוח והקידוד של US212A שונה מאוד מהפתרונות הקודמים.
זה מחובר ישירות דרך קישור סטטי; בעוד US212A מארז את הבסיס והקודק בנפרד כ * .al
פרמט קובץ תמונה, כשאתה צריך להשתמש ב- basal ו- codec, השתמש בממשק ה- API של המערכת כדי לטעון אותו ולכפות אותו כקוד
חוט המשנה של הפענוח, ואז בקרת גישה בעקיפין לפענוח קידוד ופענוח של חוטי משנה דרך ממשק ה- API הכרחי של ה- basal & codec.
Basal נקרא גם mmm, שהוא מודול אמצעי תווך למולטימדיה. זהו גשר בין AP לקודק.
חלק מהפרטים מכוסים ומסופקים לשיחת ap עם ממשק API חובה, הנוח עבור ap להבין ולהשתמש בו.
5.1.1.2 מדריך ממשק PSP

עמוד 64
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 64
עיין ב" us212a_psp ממשק manual.chm "להוראות ממשק PSP.
5.1.1.3 מנגנון תזמון המשימות
הגרעין של US212A הוא UCOS II, והיחידה הבסיסית שלו היא משימה. ישנם 3 מצבי משימה:
● שינה
● מצב מוכן
● מצב ריצה
יחסי המעבר בין שלושת מצבי המשימה הללו מוצגים באיור שלהלן:
1.send_sync_msg:
2.sys_os_time_dly:
1.reply_sync_msg:
2.sys_os_time_dly:
1.
2.
ISR
תיאור:
● העדיפות מוקצית באופן אחיד במקרה, בתנאי, וההקצאה היא כדלקמן:
שם / סוג המשימה
עדיפות למשימה (ככל שהערך קטן יותר, כך העדיפות גבוהה יותר)
תיאור
פענוח משנה של פענוח רקע AP_BACK_HIGH_PRIO 3
כמו למשל פענוח מוסיקה
פתיל הראשי של יישום רקע AP_BACK_LOW_PRIO 4
למשל מנוע מוסיקה
פענוח / קידוד קדמי
פְּתִיל
AP_FRONT_HIGH_PRIO 6
כגון פענוח תמונות, וידאו
פענוח, קידוד שיא
השרשור הראשי של יישום החזית AP_FRONT_LOW_PRIO 7
לדוגמה, יישום חזית התמונה

עמוד 65
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 65
מנהל יישומים
AP_PROCESS_MANAGER_PRIO 13
כלומר ap_manager
משימת IDLE
OS_LOWEST_PRIO 15
המזל אינו מוכן למשימות אחרות
משימת IDLE
● ניתן לראות גם מהטבלה שלעיל שהמערכת מכסה את מודול הפענוח / קידוד כחוט, שיכול לשפר עוד יותר את המשימה.
מקביליות בשירות, היא יכולה לקבל את פעולת המפתח של המשתמש בעת פענוח / קידוד, כגון
האובייקט בוטל.
● על מנת להבטיח שלמשימות עם עדיפות נמוכה יותר, כגון ap_manager, תהיה הזדמנות להשיג שליטה לרוץ, גבוהה
על משימות עדיפות ללכת לישון באופן פעיל, כלומר לקרוא לפונקציה sys_os_time_dly . באופן כללי,
אנו דורשים שכל לולאה המעבדת הודעה תתקשר sys_os_time_ dly בגוף הלולאה כדי לישון באופן פעיל למשך פרק זמן
זמן, אורך זמן השינה תלוי בסצינה הספציפית.
● גרעין עיצב הפסקת טיק טיימר של 10 מס ', כך שכל 10 מס' הוא יבדוק אם יש כזה
הגיע זמן השינה של המשימה, אם יש, הכניסו את המשימה למצב מוכן. תקתק הטיימר קוטע את ביצוע ה- ISR ויוצא.
החלפת המשימות תבוצע.
5.1.1.4 מנגנון בנק
ה- US212A היא מערכת נדירה בזיכרון כמו הפתרונות הקודמים, ולזיכרון הפיזי שלה, כלומר SRAM, יש רק
עשרות עד מאה או מאתיים KB, ברור שאי אפשר לטעון את כל הנהג והיישום לזיכרון ולהישאר תושבים, אז עלינו להרחיב
הרחב את שטח הזיכרון הפיזי, השתמש במרחב זיכרון וירטואלי עם מרחב כתובת מספיק גדול, והשתמש במנגנון BANK כדי לנהוג וליישם
השג עיבוד שקוף.
המנגנון שנקרא BANK הוא להרחיב חתיכה אחת של שטח זיכרון פיזי למספר חלקים של שטח זיכרון וירטואלי, הנקרא עמוד BANK
מצד שני, הגישה לדפי BANK אלה ממופה לאותו מרחב זיכרון פיזי באמצעות מנגנון מסוים, כמובן מכיוון ש
מספר דפי BANK חולקים את אותו שטח זיכרון פיזי, כך ששטח הזיכרון הפיזי יכול רק לאחסן אותו
עמוד BANK פנימה, כך שכאשר התוכנית ניגשת לדף BANK שעדיין לא קיים במרחב הזיכרון הפיזי,
המערכת צריכה להעביר את דף BANK למרחב הזיכרון הפיזי. הדבר החשוב ביותר במנגנון BANK הוא כיצד להשיג שקיפות
מתג BANK. ב- US212A, מנגנון BANK הוא מנגנון חומרה שלם, המשתמש בפלטפורמת MIPS
הטמעת מנגנון החמצה של TLB.
מכיוון שהקצאת שטח הזיכרון הפיזי של תוכנית היישום ותוכנית הנהג שונה, US212A מתייחס לבנק של השניים
העיצוב שונה גם הוא.
בנק בנק

עמוד 66
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 66
❖ VA (addr virtual) היא כתובת ההפעלה הווירטואלית של קישור BANK, כולל מספר העמוד עמוד מס '(14bit) וקיזוז העמודים.
קיזוז עמודים (18 ביט).
Group קבוצת בנק AP (8 ביט) מייצגת את מספר קבוצת הבנק. כמו
▪ AP_BANK_FRONT_CONTROL_1 = 0x40;
▪ AP_BANK_FRONT_UI_1
= 0x48;
Num בנק מספר (6 ביט) מייצג את מספר הבנק בקבוצה, כך שלבנק יש עד 64 בנקים.
קיזוז עמודים (18 ביט) מייצג את הכתובת הפיזית, ותומך במקסימום 256KB של שטח זיכרון פיזי.
בנק DRV
Ind כתב אישום בנקאי (4 סיביות) מייצג את הסיווג של בנק הגרעינים, כלומר בנק A / Bank B ובנק C.
ישנם הבדלים בגודל שטחי הבנק.
Group קבוצת בנק (4 ביטים) פירושה קיבוץ בנקאי, יש 16 קבוצות בסך הכל, ביניהן 1111 היא קבוצת השירות שהוקצתה לגרעין כברירת מחדל.
במובן המרחבי, יש לראות באישום בנקאי כחלק מקבוצת הבנקים.
Num בנק מספר (6 ביט) מייצג את מספר הבנק בקבוצה, כך שלבנק יש עד 64 בנקים.
קיזוז עמודים (18 ביט) מייצג את הכתובת הפיזית, ותומך במקסימום 256KB של שטח זיכרון פיזי.
נקודות שיש לציין בעת ​​השימוש בבנק:
❖ עם מעבר הבנק, הקוד והנתונים המאוחסנים במקור במרחב הזיכרון הפיזי התואמים לקבוצת הבנק

עמוד 67
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 67
החלף ללא כל גיבוי ושמירה. אז שימו לב למקרה שימוש כזה: פונקציה 1 של בנק 1
התקשר ל- func2 של BANK 2 מאותה קבוצת BANK, והעביר את מצביע הנתונים של const של BANK 1 ל- func 2,
בעת מעבר ל- func 2 באופן זה, מכיוון שנתוני ה- const של BANK 1 מוחלפים, func2 משתמש בנתוני ה- const
שגיאה בלתי צפויה מתרחשת כאשר המצביע ניגש לנתונים מלוכלכים.
❖ דבר נוסף שצריך לציין הוא כי יש להקדים את שם קטע הבנק ב- xn עם BANK. לפרטים ראו יישום ומנהל התקן
* .Xn תיאור קובץ של תוכנית ההפעלה.
5.1.1.5 מנגנון API
מנגנון ה- API של מנהל התקן US212A שונה למדי מהתכנית שלפני 9X. כי UA212A מבוסס על 32
בליבת MIPS M4k, למערכת יש מספיק פיסות כתובת כדי לבטא וליישם את מנגנון בנק החומרה, כולל ap bank ו-
בנק a / b / c. לפיכך, ממשק ה- API של הנהג של US212A אינו צריך עוד לקחת בחשבון את המנגנון הבנקאי
ממשק ה- API שקוף לחלוטין.
ממשק ה- API של מנהל התקן US212A מורכב מארבעה חלקים:
● כניסה מאוחדת בכונן המנוהלת על ידי הגלעין: היא מורכבת מסדרה של ממשקי שיחה מאוחדים של כניסת כונן,
הכניסה המאוחדת op_entry היא פונקציה קטנה של 4 בתים, ותפקידה לעבור במזהה op_entry המתאים לנהג.
והשתמש בהוראות ההפסקה כדי להיכנס לזרימת השיחות של ה- API.
● טבלת ממשק מנהלי התקנים: מערך של ממשקים חיצוניים המסופקים על ידי מנהל ההתקן, התואם למזהה op_entry.
● הצהרת ממשק פנימית והגדרה: הנהג מיושם באופן פנימי, ופרמטר הממשק נדרש בהחלט להיות 3 (מנהל התקן VFS הוא 4
הצורך בפועל למילוי פרמטרים בטלים * null בפחות משלושה פרמטרים (4 עבור מנהל התקן VFS).
● מספר פקודת ממשק חיצוני והגדרת מאקרו: ההגדרה בקובץ הכותרת, היישום ומנהלי התקנים אחרים עוברים את הממשק שהוגדר כאן
הגדרת המאקרו מכנה את ממשק ה- API; הגדרת המאקרו היא המופע הקורא של op_entry, תוך העברת מספר הפקודה ופרמטרי הממשק.
להתקשר לממשק ה- API שצוין, התואם לממשק החיצוני בזה אחר זה.
הנהג ירשום את טבלת הממשק של מנהל ההתקן למנהל מנהל ההתקן של הגרעין במהלך ההתקנה, ואז בעת התקשרות לממשק ה- API, יש לעבור
מזהה op_entry ומספר הפקודה של הממשק החיצוני יכולים למצוא את הממשק האמיתי המתאים.
תהליך ההתקשרות של ממשק ה- API הוא כדלקמן: (קח דוגמה ui_show_picbox שמונע על ידי Ui)

עמוד 68
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 68
5.1.1.6 מנגנון VFS
המאפיינים החיוניים ביותר של מערכת הקבצים הווירטואליים הם כדלקמן:
● מערכות קבצים ספציפיות שונות שקופות לשכבת היישום, כלומר, לשכבת היישומים אין צורך לדאוג למערכת הקבצים הספציפית, והממשק שלה הוא
מאוחד
● מנהלי התקנים ספציפיים שונים הם גם שקופים למערכת הקבצים, כלומר, מערכת הקבצים אינה צריכה לדאוג למנהלי ההתקן הספציפיים.
האינטראקציה הדינאמית מנוהלת על ידי שכבת הפעולה של מכשיר החסימה של מערכת הקבצים הווירטואלית (שכבת החסימה)
ה- VFS של US212A מתוכנן ומיושם באופן הבא:
התקן
+ סוג מכשיר (DRV_NAND / DRV_CARD / DRV_UHOST)
+ מספר ממשק API של device_read
+ מספר ממשק API של device_write
+ מספר API של ioctl
+ מספר API אחר
שמן
+ סוג_שמן (fat16 / fat32 / exfat)
+ מספר ממשק API של fat_read
+ מספר ממשק API של fat_write
+ מספר API אחר
vfs_mount
+ סוג מכשיר uchar
+ סוג שומן uchar
+ void * fat_private_data
+ n
+1
+ n
+1
+1
+1
קוֹבֶץ
+ struct * p_vfs_mount
+ void * file_struct_data
+ פעולות קובץ
1. כל מנהל התקן מתאים למבנה ההתקן.
2. כל מערכת קבצים תואמת את מבנה נתוני השומן.

עמוד 69
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 69
3. מבנה הנתונים המשולב של מערכת הקבצים ומנהל ההתקן הוא vfs_mount , שנועד לנהל מכשירים ספציפיים ולפרוס כלים עליהם.
מערכת קבצי גוף. GL5110 לכל התקן יש רק דרייבר אחד בזיכרון, גם אם שני היישומים בו זמנית
גש למכשיר זה. כל התקן תואם מערכת קבצים ספציפית. כאשר שני היישומים עוברים אותו דבר
כאשר שתי מערכות קבצים ניגשות לאותו מכשיר (אותו דיסק משמש להאזנה לשירים ותמונות), על מנת להפוך את מערכת הקבצים כמו כונן אחסון
ככונן טהור, יש לחלץ ולשחרר את הנתונים הפרטיים של מערכת הקבצים המתאימה לכל יישום.
למבנה vfs_mount. לדוגמה, מיקום הקבצים של יישום המוסיקה נמצא בספריית משנה מסוימת, ויישום התמונה
מיקום הקבצים נמצא בספריית השורש, שני היישומים האלה יזדקקו לשורש כשאתם מתקשרים לממשק file_dir_next כדי לקבל את הקובץ הבא.
הפעל בהתאם לנתונים פרטיים אלה, כגון מספר האשכול אליו מערכת הקבצים ניגשת כעת. לשכבת ה- VFS לא אכפת מהנתונים הפרטיים האלה,
רק חבר מסוג * חלל * משמש להקלטה ומתעדכן על ידי ממשק הפעולה של מערכת הקבצים. ברור, הנתונים הפרטיים האלה
זה יהיה משתנה גלובלי, המרחב יוקצה במודול מערכת הקבצים והכתובת יוקצה ל- vfs_mount
חבר fat_private_data. לכן ניתן לראות כי בין המכשיר ומערכת הקבצים יש קשר 1: 1, לבין המכשיר ומערכת הקבצים
vfs_mount הוא קשר 1 ל- N (1 עד 2 כאשר שני היישומים ניגשים לאותו מכשיר); הדבר נכון גם לגבי שומן ו- vfs_mount
זהו גם קשר בין 1 ל- N.
4. GL5110 מוחק את כל מבני נתוני המטמון כדי לחסוך זיכרון, ולכן יש למצוא דרך לייצר את היישום
ניתן לתכנות בשקיפות, כלומר היישום אינו צריך לדאוג לממשק מערכת הקבצים הספציפי הבסיסי. כי קשר הנתונים vfs_mount
המבנה שומר מידע ספציפי על מערכת הקבצים, כך שהמכשיר יכול להחזיר את אינדקס vfs_mount בעת התקנת מערכת הקבצים,
על יישומים להוסיף אינדקס זה לכל הממשקים הבאים שמתקשרים למערכת הקבצים. באופן זה, שכבת VFS יכולה להיות
הוביל לקבלת ממשק מערכת קבצים ספציפי.
5. מערכת קבצי הרכבה להתקנים קוראת drv_mount. בפונקציה זו פעולת ההתקן מתקבלת לפי סוג ההתקן DRV_XXX.
כממשק, וגלו איזו מערכת קבצים תקפה נפרסת על נתוני המכשיר, ולטעון אותה לפי סוג מערכת הקבצים
מנהל ההתקן של מערכת הקבצים הספציפית, והשלים את מילוי מבנה הנתונים vfs_mount, כלומר מנהל התקן הכריכה והקובץ הספציפי.
מערכת קבצים, ולבסוף מחזיר את האינדקס של vfs_mount.
6. GL5110 צריך גם להשיג את המטרה של פיתוח מערכות קבצים שלא אכפת להם ממנהלי התקנים הבסיסיים. כך GL5110 ישמור על זה פשוט
שכבת הבלוק. יהיה פרמטר בממשק מערכת הקבצים הוא מנהל התקן מסוג device_type, file
ממשק המערכת קורא לבסוף למנהל ההתקן הבסיסי דרך שכבת החסימה. שכבת חסימת תתקשר בהתאמה לפי type_type
ממשק הכונן.
7. מבנה נתוני הקבצים משמש לפעולות קבצים, כגון פעולות קריאה, כתיבה או חיפוש. vfs_mount הוא חבר בקובץ,
מכיוון שפעולת הקבצים קשורה גם למערכת הקבצים ולמנהג הבסיסי, ההקצאה הושלמה ב- sys_open. בנוסף, כל אחד
בהכרח ידית הקבצים תכלול אלמנטים כגון מצביעי קבצים. המרחב עבור חברים אלה מסופק על ידי מערכת הקבצים הספציפית ומציין
לחבר הנתונים file_struct_data של הקובץ.

עמוד 70
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 70
5.1.2 סקירה כללית של פענוח וקידוד
בתפיסות הבסיסיות בסקירת מודול PSP, הצגנו בקצרה את basal & codec, הנה הבא
תאר את סקירה כללית של מודולי הפענוח והקידוד של הפלטפורמה כולה.
5.1.2.1 סקירה של פענוח וקידוד
קידוד ופענוח מורכב משני חלקים: basal ו- codec, ap משתמש בממשק ה- API החיובי המתאים לבסיס
בקרת גישה עקיפה ואז קודקוד בקרת הגישה דרך בסיסי.
תחת פלטפורמת US212A, Basal מתאים לממשק ה- API החובה המתאים כדלקמן:
בזל (מ"מ)
ממשק API חובה
פענוח שמע mmm_mp.al int mmm_mp_cmd (void *, mmm_mp_cmd_t, int חתום)
קידוד שמע mmm_mr.al
int mmm_mr_cmd (void *, mmm_mr_cmd_t, int חתום)
פענוח תמונות mmm_id.al
int mmm_id_cmd (void * id_handle,
mmm_id_cmd_t cmd, מפתח לא חתום)
פענוח וידאו mmm_vp.al
int mmm_vp_cmd (void * vp_handle, cmd int חתום,
לא חתום בכיר)
לפקודות ספציפיות, עיין ב "us212a_decoding and קידוד specification.chm ממשק".
פלטפורמת US212A תומכת בתרחישים של יישומים כפולים, כמו צפייה בתמונות בקדמת הבמה והאזנה למוזיקה ברקע, הדורשת תמיכה סימולטנית בקדמת הבמה.
basal & codec ורקע basal & codec, כך שממשקי הטעינה והפריקה המסופקים על ידי המערכת יספקו פרמטר
המספר מציין אם יש למלא נכון את הבסיס והקודק ברקע, אחרת המערכת תעשה שגיאה.
Basal & codec תומכים גם במנגנון BANK, המוקצה ונשלט לחלוטין על ידי המערכת, ומשתמשי ap אינם זקוקים לטיפול.
חוט המשנה של הקידוד והפענוח של basal & codec נמצא במודול קישור שונה מה- ap המתאים, ואינו יכול לשתף קוד
ונתונים.
5.1.2.2 טעינה ופריקה
טעינה ופריקה של בזל , הנקראת על ידי ap:
int sys_load_mmm (char * mmm_name, bool is_back_ap);
void sys_free_mmm (bool is_back_ap);

עמוד 71
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 71
העמסת ופריקת קודקים , הנקראת על ידי basal:
int sys_load_codec (char * codec_name, bool is_back_ap);
void sys_free_codec (bool is_back_ap);
קח דוגמה ap_picture, טעינה ופריקה של בסיס, ויצירת והרס של פענוח וקידוד תת-חוטים, פקודות בסיסיות
התהליך השלם של שיחת ה- API הוא כדלקמן:
טען בסיס פענוח תמונות (פענוח תמונה)
sys_load_mmm ("mmm_id.al", FALSE);
● צור חוט משנה לפענוח תמונות
mmm_id_cmd (& picture_handle, MMM_ID_OPEN, 0);
● התקשר ל- API הכרחי
mmm_id_cmd (picture_handle, MMM_ID_SET_FILE, & g_picture_userinfor);
● הרס את חוט המשנה של פענוח התמונה
mmm_id_cmd (picture_handle, MMM_ID_CLOSE, 0);
● הסר התקנת פענוח תמונה בסיסית
sys_free_mmm (FALSE);
5.1.2.3 מפרט פענוח וקידוד קידוד
אנא עיינו ב "us212a_decoding interface and coding interface manual.chm" לקבלת הוראות לפענוח וממשק קידוד.
5.1.3 סקירה כללית של המודול המשופר
המודול המשופר הוא שכבת ביניים שאינה תלויה יחסית ביישומים ספציפיים והיא ממוקמת בין ap ל- psp.
הפונקציות הקבועות יותר של האפסולציה מכוסות בניהול ושימוש.
5.1.3.1 סקירה כללית של המודול המשופר
המודול המשופר של US212A כולל 3 חלקים:
● בורר קבצים fsel: השתמש בתצוגת היישום כדי להפעיל את מערכת הקבצים, רשימות השמעה ומועדפים, עיון בספריות,
בחירת קבצים ופעולות אחרות; US212A תומך בתרחישים של יישומים כפולים, כמו צפייה בתמונות בקדמת הבמה והאזנה למוזיקה ברקע, כך שתוכלו
נדרש מודול fsel נפרד לחזית ואחורי הפגישה, לפיכך fsel מתוכנן לפי הסצנה והתפקיד.
הפרטים מתוארים בפירוט בהמשך.
● מודול ניתוח ניתוח id3: השתמש בממשק אחיד כדי לנתח ולקבל את מידע התווית של קבצי מולטימדיה, ולחסל עריכת טקסט שונים

עמוד 72
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 72
ההבדל בקוד.
● מודול ניתוח מילים של lrc: מיין את המילים לפי חותמת הזמן של המילים, השתמש בחותמת הזמן כמילת המפתח כדי לקבל את המילים, מילים של lrc
מודול הניתוח אינו קשור עוד למושג תצוגת הדמות, לאחר ששכבת ה- ap משיגה שורה של מילים, היא תופיע באופן אוטומטי
הבינו את הצגת מחרוזת המילים.
המודול המשופר משותף לכל יישומי הקצה הקדמי ויישומי הקצה האחורי.כדי להקל על השימוש ב- ap אנו משתמשים בתרחישים ופונקציות
כבסיס, ספק תבניות סקריפט קישור מרובות עבור היישום לשימוש ישיר.היישום צריך רק להכניס את ה- xn המתאים לקובץ ה- fil
הקובץ מתווסף לרשימת הערכים של פרמטר LD_SCRIPT.
תבנית סקריפט הקישור מאוחסנת בספרייה psp_rel \ usermodule \ enhanced \ case_link_xn.
תבניות חלוקת המודולים המשופרות ותסריט הקישורים מופיעים באופן הבא:
מודול משופר
תיאור מודול
תסריט קישור
גלישה במדריך Fsel
מימוש מערכת קבצים, רשימת השמעה, אוסף
ספריית תיקיות וגלישת קבצים
bs_link.xn
בחירת קובץ Fsel
מימוש מערכת קבצים, רשימת השמעה, אוסף
בחירת קובץ תיקיות
fsel_link.xn
רזולוציית id3
מימוש קבצי מולטימדיה מסוגי קידוד שונים
השגת פרטי התווית של היצירה
id3_link.xn
ניתוח לירי
מימוש ניתוח ניתוח קובץ המילים lrc
lrc_link.xn
הערה: סקריפטים הקישורים האחרים בספריה case_link_xn הם שילובים או גרסאות של הסקריפטים שלעיל, אשר מתאימים יותר
זה משולב ומשונה ליישומים ספציפיים.
5.1.3.2 מדריך ממשק משופר
עיין ב" us212a_enhanced interface manual.chm "להוראות הממשק המשופר.
5.1.4 קשר שיחות מודול
ניתן לסכם את סביבת ההפעלה של המקרה ואת המקרה עצמו למודולים הבאים:
1. אפליקציית AP
2. מנהל התקן וממשק ה- API שלו
3. ספריית תווך משופרת וממשקים אחרים
4. מודול פענוח וקידוד וממשק ה- API שלו

עמוד 73
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 73
5. מודול PSP וממשק ה- API שלו
הקשר המתקשר בין מודולים אלה מוצג באיור הבא:
תיאור:
● מנהל התקן הוא מנהל התקנים שקשור למקרה ספציפי, הקוד ממוקם בספריית המקרים / drv ו- AP עובר
התקשר לממשק * _op_entry.o המקביל בספרייה הסטטית Api.a.
● ספריית ממשקים נפוצה היא אוסף מכוסה של כמה פונקציות ציבוריות של AP, והקוד ממוקם בתיק / תיקייה נפוצה
הורד, הכן באופן עצמאי וקשר ל- AP עם קובץ ELF של * .o.
● ספריית זמן הריצה Crt.o היא קובץ ספרייה מיוחד. לאחר טעינת AP, היא תחילה תפעיל את פונקציית __start ב- Crt.o
(יש לציין את הכניסה כ- __ התחלה בקובץ ה- xn של סקריפט הקישור של AP), פונקציה זו היא ה- AP
צור חוט ראשי ולאחר מכן קפוץ לפונקציה הראשית כדי להתחיל להריץ קוד AP.
● פענוח Mmm וקידוד תווך
● ממשק ה- API של הפלטפורמה הוא ממשק פונקציונלי שאינו תלוי בפתרון הספציפי, ומבוסס על הספרייה הסטטית Api.a המתאימה
* _op_entry.o הממשק מספק שירותי מערכת לעולם החיצון.

עמוד 74
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 74
5.2 ניווט בספריות קוד
ספריית הקוד בחבילת השחרור של US212A היא כדלקמן, כולל תיק, case_simulator, psp_rel וכו ', ב-
להלן יציג בקצרה את שלושת החלקים האלה, כך שתהיה לנו הבנה כללית של ספריית הקוד של התוכנית, ויקל על ההסבר בהמשך.
5.2.1 ניווט בספריות תיקים
ספריית המקרים היא ספריית העבודה של ה- AP וקוד המקור מונחה התיקים של פיתרון US212A.
התיאור של כל חלק בספריית המקרים מוצג בטבלה הבאה:
תוכן עניינים
תיאור
ap
AP וקוד מקור נפוץ ותסריט קישור מורכב
CFG
תיק ערוך וקשר קבצים ציבוריים
drv
מנהל התקן, כולל מנהל התקן fm, מנהל התקן, מנהל התקן lcd, נהג ui
וברכת נסיעה
fwpkg
תיקים הקשורים לחבילת קושחה קייס
inc
תיק קובץ כותרת ציבורי
lib
קובץ obj נפוץ לקישור ישיר של AP
מַשׁאָב
AP ופרויקטים של עורך ממשק משתמש משותף וקבצי המשאבים שלהם
כלים
כלי פיתוח עזר למקרה, כולל כלי עורך ממשק משתמש, הכלי לשינוי fw

עמוד 75
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 75
build_sty.bat
הפק קבצים .sty חדש * של כל הפרויקטים של עורך ה- U ו- Common UI
הרחב את תיקיית המקרים / ap וראה את כל ה- AP והמדריכים הנפוצים של הפתרון US212A.
התיאור של כל AP ונפוץ בספריית המקרים / ap מוצג בטבלה הבאה:
תוכן עניינים
תיאור
ap_manager
יישום לניהול אפליקציות, יצירה ומיחזור של יישומי AP אחרים
ap_config
יישום הפעלה וכיבוי
ap_mainmenu
יישום ראשי, המספק כניסה AP חזותית
ap_music
דלפק הקבלה של אפליקציות למוזיקה, משתפים פעולה עם Music Engine בכדי לממש פונקציית מוסיקה מלאה
ap_picture
יישום תמונה
ap_video
אפליקציית וידיאו
ap_record
הקלטת אפליקציה
ap_radio
דלפק הקבלה של יישומי הרדיו, משתפים פעולה עם FM Engine למימוש פונקצית רדיו שלמה
ap_ebook
יישום ספר אלקטרוני
ap_browser
יישום דפדפן, בחר שמע, וידאו, תמונה, ספר אלקטרוני וקבצים אחרים להפעלה
לָשִׂים
ap_playlist
יצירת רשימת הפלייליסט, צור ועדכן את רשימת ההשמעה
ap_tools
יישום כלים, המספק שעון עצר, לוח שנה, שעון מעורר, אינטראקציה עם נתונים ופונקציות אחרות

עמוד 76
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 76
ap_alarm
אפליקציית שעון מעורר
Ap_setting
יישום הגדרה, המשמש להגדרת תצורת פרמטרים של המערכת
ap_udisk
יישום דיסק U, כמכשיר MSC לחיבור למחשב ולביצוע העברת נתונים
ap_upgrade
שדרוג אוטומטי של דיסק U
מוסיקה
מנוע רקע ליישום מוסיקה, הנשלט על ידי Music AP למימוש פונקציית המוסיקה
fm_engine
מנוע רקע ליישומי רדיו, הנשלט על ידי רדיו AP למימוש פונקצית רדיו
מְשׁוּתָף
מודולי פונקציה נפוצים של היישום מוצגים עוד יותר בטבלה הבאה
ספריית המקרים / ap / נפוצה מורחבת כמוצג באיור למטה.
התיאור של כל חלק תחת תיקיית המקרים / ap / common מופיע בטבלה הבאה:
תוכן עניינים
תיאור
applib
ספריית ממשק פונקציות בסיסית ליישום, כולל ממשק ניהול יישומים (תהליך), ברמת היישום
ממשק ניהול טיימר, ממשק ניהול תקשורת הודעות
נפוץ_פונק
יישום ספריית ממשקים נפוצה של פונקציות משנה, כולל עיבוד מחרוזות (כולל תווי עיצוב
מחרוזת, השמיט את טופס התצוגה, הוסף נקודות לשם הקצר, הצגת מידע על באגים), זיכרון נתיב,
הסבר על פריט תצורה, הסבר על תפריט תצורה, עיבוד מיפוי מקשים, ניהול פלט קול,
עיבוד מוקדם של הודעות מפתח, עיבוד מראש של הודעות אפליקציה וכו '.
נפוץ_מיסק
יישום ספריית ממשק פונקציות שונות של פונקציות משנה, כולל טיימר מערכת, שינה של יישום
שינה, עיבוד הודעות ברירת מחדל, הגדרת כיוון המסך, מיפוי בהירות תאורה אחורית, הסוללה
מיפוי כמויות, עיבוד הודעות אזעקה, עיבוד מוקדם של הודעות פרטיות, איתור אנטנה
ניהול וכו '.
נפוץ_ואי
החל פקדים נפוצים, כולל רשימות תפריטים, דפדפני קבצים ומחק קבצים, מימין
תיבת דו-שיח, תיבת הגדרת פרמטרים, שורת מצב, תצוגת אנימציה, נעילת מקשים, שומר מסך, כבוי
תיבת דו-שיח ממוחשבת, תיבת דו-שיח לחיבור USB, תיבת תצוגה טקסט, סרגל עוצמת קול וכו '.

עמוד 77
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 77
נתונים
נתונים כלליים נפוצים של מודול, כאשר applib_globe_data.c הוא כל היישומים
השתמש בנתונים גלובליים משותפים
* .xn וקובץ fil
עריכת הסקריפט של המודול המשותף וסקריפט הקישור לקישור AP, היכן
יש להוסיף את קטע הפלט ב- common_aphead.xn ישירות ל- AP עצמו
סקריפט הקישור הולך; common_engine.xn הוא סקריפט הקישורים של יישום הרקע;
common_front.xn הוא סקריפט קישור ליישום קדמי מלא פונקציונלי;
common_front_no_selector.xn לפני הצורך בבורר הקבצים
תסריט קישור
ספריית המקרים / הגדלות מורחבת כמוצג להלן:
התיאור של כל חלק תחת תיקיית המקרים / inc מוצג בטבלה הבאה:
תוכן עניינים
תיאור
app_msg.h
הודעות פרטיות של יישומים, הודעות מערכת, אירועי מיפוי gui וקבצי כותרת להגדרה אחרים
applib.h
נפוץ-> יישומי ממשק הקשורים לקבצי כותרת וסוגי כותרות
case_include.h
קובץ כותרת מקרה, כולל קבצי כותרות אחרים
Case_type.h
קובץ כותרת מסוג יישום, כולל מזהה יישום, app_result_e וכו '.
Common_func.h
ממשקים קשורים נפוצים-> common_func וסוגי קבצי כותרת

עמוד 78
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 78
Common_res.h
עם
Common_sty.h
פרויקט UI נפוץ להגדרה ליצירת קבצי כותרות
Common_ui.h
ממשקים קשורים כותרות מסוג Common_ui ו- common_misc
קוֹבֶץ
Config_id.h
קובץ כותרת להגדרת זיהוי פריט תצורת קושחה
תצוגה
Fm_interface.h
Key_interface.h
Lcd_driver.h
ממשק חיצוני של מנהל התקן וסוג קובץ כותרת
gui_msg.h
קובץ כותרת להגדרה הקשורה להודעת מפתח
setting_common.h
קובץ הכותרת להגדרת מבנה משתנה של סביבת המקרה
ספריית המקרה / fwpkg מורחבת כמוצג להלן:
התיאור של כל חלק תחת תיקיית המקרה / fwpkg מוצג בטבלה הבאה:
תוכן עניינים
תיאור
ap
קובץ תמונת יישום * .ap
Drv
קובץ השפעת מנהל התקן * .drv
גוֹפָן
טבלת המרות של קובץ גופן וטבלת קוד
מקג
קובץ תצורת תפריט הניתן להגדרה * .mcg
דִיר חֲזִירִים
קובץ תצורת ממשק משתמש הניתן לתצורה * .sty

עמוד 79
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 79
Alarm1.mp3
קובץ MP3 מעורר ברירת מחדל של שעון מעורר
Build_mcg.bat
אצווה לעדכון קבצי תצורת תפריט הניתנים להגדרה, כאשר מזהה מחרוזת או תפריט
עדכן כאשר משתנה כתובת פונקציית ההתקשרות היחידה
Buildfw.bat
אצווה של דור הקושחה
Config.bin
,
config.spc, config.txt
קובץ סל תצורת קושחה, קובץ מפרט תצורת קושחה (שינוי כלי
מפרט), סקריפט תצורת קושחה, כדי לשנות את תצורת הקושחה, כגון ערכי ברירת מחדל,
על ידי שינוי הסקריפט config.txt ולאחר מכן ביצוע עדכון האצווה genconfig.bat
חדש; כדי להוסיף פריט תצורה חדש, עליך לשנות את config.txt ו-
קובץ config.spc
Fwimage.cfg
סקריפט תצורת אריזת קושחה
Legal.txt
עם
m_type.txt
קובץ טקסט לתצוגה ישירה בתיבת התצוגה של הטקסט, הראשון הוא מידע חוקי, האחרון
הוא סוג mp3
ברוך הבא
קובץ נתוני משאב ממשק ברוך הבא
ספריית המקרים / כלים מורחבת כמוצג להלן:
התיאור של כל חלק תחת תיקיית המקרים / כלים מוצג בטבלה הבאה:
תוכן עניינים
תיאור
Gen_config
החל את כלי הפרשנות של תסריט התצורה, לאחר עדכון סקריפט התצורה, הפעל את genconfig.bat
פחית
עורך ממשק משתמש
כלי עריכה UI הניתן להגדרה של יישום, לקטלוג יש קובץ תיאור פשוט
ui_editor tool.doc
TreeLayer.exe
כלי עריכת תפריט הניתן להגדרה
5.2.2 ניווט בספריות case_simulator
ספריית case_simulator היא ספריית העבודה של הכלי Simulator UI.

עמוד 80
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 80
התיאור של כל חלק תחת ספריית case_simulator מוצג בטבלה הבאה:
תוכן עניינים
תיאור
אפליקציות
פרויקטים של סימולטור ממשק משתמש UI
פַּח
סימולטור ממשק משתמש לקבצי יעד שונים וכלי עזר
CaseDrivers
פרויקטים של כונן שכבת מקרה, כולל כונן מפתח, כונן lcd, כונן ממשק משתמש ופרויקטים אחרים
5.2.3 ניווט בספריות psp_rel
ספריית psp_rel היא מודול היעד הקשור לפלטפורמה, ספריית יעד, קוד מקור משופר וספריית יעד, כלי פלטפורמה,
וקבצי כותרות וכו '.
החלקים בספריית pep_rel מתוארים בקצרה בטבלה הבאה.
תוכן עניינים
תיאור
פַּח
AFI.bin, שהוא קובץ היעד בו סוף סוף משתמש psp לקישור לקושחה
CFG
Psp אוסף וקישור קבצים ציבוריים
לִכלוֹל
קובץ כותרת ציבורי של Psp
lib
Psp יכול לקשר אוסף אובייקטים של קובצי אובייקטים, כולל usb, משופר וכו '.
כלים
כלים לפיתוח עזר הקשורים ל- Psp
מודול
קוד מקור של תווכה, כולל בורר קבצים, מתורגמן למילים, מתורגמן ID3
לַחֲכוֹת

עמוד 81
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 81
5.3 מנהל האפליקציות ap_manager
Ap_manager, מנהל היישומים, אחראי על יצירה ומחזור של יישומים אחרים, כמו גם יישומי תיאום אחרים
משימת השימוש בתוכנית.
5.3.1 הסטטוס והתפקיד של ap_manager
US212A היא מערכת תזמון מקדימה רב משימות, הגרעין שלה הוא UCOS II, והיחידה הבסיסית של תזמון היא משימה. אני
אמרנו שה AP / יישום יטען כתהליך / חוט ראשי, וניתן ליצור חוטי ילדים בתהליך / בחוט הראשי.
ארכיטקטורה מרובת חוטים עם פוזיקס. החוט מיושם במערכת באמצעות משימות ב- UCOS II.
לפיכך, אנו יכולים לראות ב- US212A מערכת תזמון "רב משימות" דו-ברמה:
1. רמת יישום: ap_manager הוא ליבת התזמון, ap_manager אחראי על יצירת ומחזור יישומים אחרים
תכנית.
2. רמת המשימה UCOS II: ליבת UCOS II היא ליבת התזמון.
לאחר כיבוי המכשיר, האתחול מתחיל, טוען את הגרעין ופועל, הגרעין טוען ap_manager ומופעל, ואז
ap_manager יוצר את האתחול של ap_config ואז ap_manager נכנס לולאת תזמון היישום.
Ap_manager הוא ליבת תזמון האפליקציות, והפונקציות הספציפיות שלה הן כדלקמן:
1. צור ap_config בעת האתחול והפעלת תהליך האתחול.
.2 קבל הודעות אסינכרוניות מיישומי חזית אחרים הנוצרים על ידי יישומי חזית, וצור יישומים מקדימה באופן אסינכרוני.
.3 קבל את הודעת הסנכרון של יישום החזית ליצירת אפליקציית הרקע וצור את יישום הרקע באופן סינכרוני.
.4 קבל את הודעת הסנכרון של יישום החזית ההורג את יישום הרקע והורג באופן סינכרוני את יישום הרקע.
5. כיבוי עיבוד, הרוג את יישום החזית הנוכחי ואת יישום הרקע, ואז צור ap_config, בצע את תהליך הכיבוי.
6. הכנסו ליישום Udisk, הרגו את יישום החזית הנוכחי ואת אפליקציית הרקע, ויצרו יישום Udisk.
5.3.2 נקודות תכנון של Ap_manager
האיור הבא ממחיש את מערכת היחסים הקוראת לכל מודול: היישום מגיע ממודול הכניסה, מבצע את פעולות האתחול הדרושות ויוצר
לאחר ap_config, הכנס את מודול לולאת ההודעות כדי לבצע שאילתות מחזוריות של הודעות פרטיות. אם מתקבלת הודעה, מודול עיבוד ההודעות
לעיבוד, סנכרון או אינטראקציה של הודעות נדרש בשלב זה, אשר יש ליישם בעזרת מודול העברת הודעות. מודול עיבוד ההודעות שייך להודעה
חלק מהמודול המחזורי, ומודול ההודעות הוא רק אוסף של ממשקי תקשורת הודעות.

עמוד 82
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 82
מודול כניסה
מודול לולאת הודעה
מודול לעיבוד הודעות
מודול העברת הודעות
הפעלת יישום: נוצר על ידי המערכת, היישום ap_manager ייווצר לאחר שהמערכת תפעל ותטען את מערכת ההפעלה.
יציאת יישום: יישום ה- Manager לעולם לא ייצא, והוא תמיד יפעל בזיכרון כאשר הוא מופעל.
Ap_manager הוא יישום מיוחד מאוד עם פונקציות פשוטות, נקודות העיצוב שלו הן כדלקמן:
Ap_manager נמנע מלתקשר לממשק Common, שמנו שוב כמה ממשקים הכרחיים ב- ap_manager
מיושם להתאמה טובה יותר לתנאים המציאותיים המוגבלים מאוד של שטח קוד ap_manager, הממשקים הללו כוללים: applib_init,
open_config_file, get_config_default, send_async_msg, Broadcast_msg, reply_sync_msg.
הערה: יישום send_async_msg אינו בטוח. כאשר הוא שולח הודעה ליישום רקע, ניתן לעבד אותה רק כראוי
נהל music_engine ו- fm_engine, כך שאם יישום יישום רקע חדש לתוכנית, יש לשנות אותה
מימוש send_async_msg, כך שהוא יכול לשלוח נכונה הודעות ליישום הרקע החדש שנוסף.
Ap_manager ייווצר רק פעם אחת בעת הפעלת המערכת, כך שמודול הכניסה שלו נמצא גם במחזור חיי המערכת כולו
פעולה זו תבוצע רק פעם אחת, אז אנו מציבים כמה פעולות שצריך לבצע רק פעם אחת במודול זה, כולל תצורת חומרת Case
ואתחול, האתחול משתנה של נתונים גלובליים, פתיחת קובץ תצורת קובץ ה- config.bin וכו '.
5.3.3 מודול כניסה של Ap_manager
לאחר יצירת האפליקציה Ap_manager, הזן את מודול הכניסה, האחראי על תצורת וחומרת Case של Case, Case
אתחול משתני נתונים גלובליים, פתח את קובץ התצורה של המקרה config.bin וצור ap_config כדי להמשיך בתהליך האתחול.
התהליך מוצג באיור שלהלן:

עמוד 83
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 83
מקרה
UART
GPIO
24 מגהרץ
מקרה
מקרה
config.bin
ap_config
5.3.4 מודול לולאת ההודעות של Ap_manager
הפונקציה של מודול לולאת ההודעות של Ap_manager היא פשוטה, והתהליך העיקרי הוא כדלקמן:
תיאור:

עמוד 84
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 84
1. מכיוון ש- ap_manager רק צריך לקבל ולעבד את ההודעות שנשלחו ל- ap_manager, אנו מתקשרים ישירות
הממשק sys_mq_receive (MQ_ID_MNG, & pri_msg) מקבל הודעות מתור ההודעות הפרטי של ap_manager.
2. מכיוון ש- ap_manager מתחייב רק במשימת ניהול האפליקציות, הזמינות של משימה זו אינה גבוהה, לכן שמנו
עדיפות המשימות של ap_manager מוגדרת יחסית נמוכה, וכל לולאת הודעה תיתלה למשך 50 מס ', מה שמפחית את מערכת ריבוי המשימות.
לחץ התזמון.
לאחר שקבלת ההודעה מקבלת את ההודעה, ההודעה מופצת ומעובדת. ההודעות שאנו מעבדים כוללות:
MSG_CREAT_APP: צור יישום באופן אסינכרוני. הודעה זו היא הודעה אסינכרונית. לאחר קבלת הודעה זו, עליך להמתין לשליחתה
לאחר יישום ההודעה הזו, יישום הייצור שנוצר.
MSG_CREAT_APP_SYNC: יצירת יישומים באופן סינכרוני. הודעה זו משמשת ליישום החזית ליצירת מנוע הרקע.
הודעת סינכרון, אם היצירה מוצלחת, השב MSG_REPLY_SUCCESS, אם היצירה נכשלה, השב
MSG_REPLY_FAILED.
ישנן המוסכמות הבאות לגבי איזה סוג יישום צריך ליצור ואת פרמטרי הכניסה שלה:
בתים הראשון של תוכן ההודעה הפרטית msg_apps_t-> content-> data [4] הוא מזהה היישום, והבית השני הוא
הפרמטרים של הכניסה.
MSG_KILL_APP_SYNC: משמש להרוג הודעות סינכרון ברקע, בגלל מגבלות הזיכרון, הפיתרון הנוכחי מאפשר רק
יתכן שרקע רקע פועל 1. לתרחישים של יישומים עם התנגשויות שטח, עליך לשלוח הודעה זו כדי להרוג את הרקע.
MSG_POWER_OFF: הודעת הכיבוי, המשתמש לוחץ על כפתור הכיבוי, או שהסוללה חלשה, היישום ישלח
הודעה זו, המנהל מקבל הודעה זו וצריך לשאול את מצב הרקע, ואז ליצור את יישום config לכיבוי וכיבוי.
יש להעביר את הסוג והסטטוס של הקצה הקדמי והאחורי ליישום config דרך פרמטרי הכניסה של היישום (מכיוון שהמפרט הנוכחי הוא אם
כשיש מנוע רקע, יש לשחזר את יישום החזית המתאים למנוע הרקע בפעם הבאה שהוא מופעל.
מצב ההפעלה זהה. אם אין מנוע רקע, בפעם הבאה שתתחיל ליישום התפריט הראשי, וסמל היישום יישאר
היישום הראשון, כך שיישום config צריך לדעת את פרטי הרקע בעת כיבוי, אך כאשר התצורה פועלת, הרקע כבר
לאחר שנהרג, אין דרך לדעת מה הסטטוס, ולכן המנהל צריך ליידע את הפרמטרים).
MSG_USB_TRANS: ההודעה לכניסה לכונן הבזק מסוג USB, המשתמש מתחבר למחשב דרך כבל USB ומאשר שהוא צריך להיכנס לכונן הבזק מסוג USB.
לאחר מכן, Common שולח הודעה זו. בשלב זה המנהל צריך גם לשאול את מצב הרקע ואת סוג הרקע ומצבו.
המדינה מועברת ליישום config דרך פרמטרי הכניסה של היישום, מכיוון שמפרט התוכנית הנוכחי הוא שאם הקובץ לא עודכן לאחר הכניסה לדיסק U
לאחר יציאת דיסק U, אם קיים מנוע הרקע הקודם, ייושם יישום החזית המתאים למנוע הרקע.
מצב ההפעלה לפני הכניסה לדיסק U זהה. אם אין מנוע רקע, חזרו ליישום התפריט הראשי לאחר היציאה.
בדיסק U יש קבצים מעודכנים, ודיסק U יוצר יישום רשימת השמעה. לאחר היצירה הוא חוזר ליישום התפריט הראשי, אז דיסק U
היישום צריך לדעת את פרטי הרקע בעת כיבוי, אך כאשר התצורה פועלת, הרקע נהרג ולא ניתן לדעת את הסטטוס.
לכן, יש ליידע את המנהל על ידי פרמטרים.

עמוד 85
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 85
בנוסף, כאשר המנהל יקבל הודעות MSG_POWER_OFF ו- MSG_USB_TRANS, הוא ייתן לכל היישומים.
שלח את הודעת MSG_APP_QUIT כדי לבקש מכל היישומים לפרוש מהיישומים שלהם כאשר הם מקבלים הודעה פרטית זו.
5.3.5 הקצאת שטח Ap_manager
Ap_manager הוא אחד משלושת היישומים, כך שיש לו קבוצה משלה של שטח עצמאי, והקצאת החלל היא כמו
תַחַת:
מרחב נתונים גלובלי במקרה
0x9fc19f80-0x9fc19fff כולל 128B. שטח הנתונים הגלובלי הזה משותף לכלל מכשירי ה- AP, רק ב- ap_manager
זה מאותחל פעם אחת, משמש בעיקר לאחסון נתונים גלובליים של כמה מקרים של המודול Common.
שטח נתונים בלעדי של Ap_manager
0x9fc1adc4-0x9fc1d000, שזה 0x100 בסך הכל עם שטח הקוד לתושב 0xbfc1ad00-0xbfc1adc3
בתים.
שטח קוד לתושב
0xbfc1ad00-0xbfc1adc3, ומרחב הנתונים התושב 0x9fc1adc4-0x9fc1d000 סך הכל 0x100
בתים.
שטח מגזר ממשק המשתמש
(0x7f ** 0000 + 0x1ae00) - (0x7f ** 0000 + 0x1afff) 0x200 בתים בסך הכל, זהו הבנק היחיד של ap_manager
מִגזָר.
שטח הנתונים של Ap_manager ומרחב קוד התושב מוגבלים יחסית, ולכן יש צורך לייעל את הלולאה העיקרית של עסק לעיבוד הודעות
פונקציה, נסה להכיל את הפונקציה כפונקציה ולהכניס אותה למקטע ממשק הבנק; ובמרחב הנתונים, אם זה לא מספיק,
אתה יכול להשתמש בחלק הנותר של שטח הנתונים הגלובלי של Case.
5.4 אתחול וכיבוי ap_config
Ap_config הוא אפליקציה חזיתית מיוחדת וחלק מהותי במבנה הבסיסי של קייס, כל כך נאמר
ap_config מוצג כאן.

עמוד 86
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 86
5.4.1 הסטטוס והתפקיד של ap_config
היישום ap_config אחראי על האתחול והכיבוי. יש להתקין את מנהל ההתקן בעת ​​האתחול.
צור יישום שיופעל לאחר האתחול ונקה את הנתיב שהוקלט בתפריט בו זמנית. אם זה ההפעלה הראשונה, עליך גם ליצור רשימת השמעה;
הכיבוי צריך לשמור את מידע היישום שפעל לפני הכיבוי ל- vram.
5.4.2 תכנון נקודות של ap_config
מנקודת המבט של הפיתרון, המפתח להפעלת ap_config הוא להחליט לאיזה אפליקציה להגיע ואופן הכניסה ליישום.
הנוסחה, זה צריך לקחת בחשבון את האלמנטים הבאים:
● מצב הכיבוי האחרון
● אירוע שמפעיל אתחול
באשר לכיבוי, השיקול העיקרי הוא אם כבל ה- usb או כבל מתאם הטעינה מחוברים, ואם כן, יש לטפל בטעינה.
5.4.3 תהליך האתחול של ap_config
האירועים שמפעילים את האתחול כוללים:
● לחץ לחיצה ארוכה על לחצן ההפעלה
● הפעלת תזמון אזעקה
● חבר את כבל ה- USB או את כבל מתאם הטעינה
לאחר כיבוי המכשיר, האתחול מתחיל, טוען את הגרעין ופועל, הגרעין טוען ap_manager ומופעל, ואז
ap_manager יוצר ap_config לאתחול, הזן את תהליך האתחול כמוצג להלן:

עמוד 87
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 87
5.4.4 תהליך הכיבוי של ap_config
האירועים המפעילים כיבוי כוללים:
● סוללה חלשה: כאשר יישומים מקדימה אחרים מקבלים את הודעת הסוללה הנמוכה MSG_LOW_POWER, הם נכנסים לתהליך הכיבוי: שידור
הודעת MSG_POWER_OFF, לאחר ש- ap_manager מקבל את ההודעה, היא משתלטת על שליטת הכיבוי, לפני שנהרג
יישומי שולחן עבודה ויישומי רקע וליצור ap_config במצב כיבוי, כלומר sys_exece_ap ("config.ap", 0,
1 | ((uint32) last_ap_id << 8) | ((uint32) last_engine_state << 16)).
● לחץ לחיצה ארוכה על כפתור הכיבוי כדי להיכנס לתיבת הדו-שיח כיבוי, אם אתה ממשיך ללחוץ על כפתור הכיבוי למשך 3 שניות, הוא נכנס לתהליך הכיבוי,

עמוד 88
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 88
התהליך עולה בקנה אחד עם כוח נמוך.
לאחר כניסה ל- ap_config וכיבוי, התהליך מוצג באיור הבא:
5.5 תכנון ושימוש נפוצים
נפוץ הוא חלק מהותי בארכיטקטורת המקרים. נפוצים ו- psp מספקים תיאום קל
הסביבה הבסיסית לניהול ופיתוח, וכדי להבטיח שהמקרה יהיה בהסכמה לגבי פונקציות שאינן עסקיות, יסייעו במימוש מושג הפיתרון.
הוליסטי.

עמוד 89
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 89
על מנת להשיג את המטרות שלעיל, Common עיצב ויישם את ספריות הממשק הפונקציונליות הבאות:
● יישומי ספריית יישומי ממשק פונקציות בסיסיים
● יישום ספריית ממשק בסיסית של ממשק יישומי משותף common_func
● בקרה נפוצה של יישום common_ui
● יישום ספריית ממשק שונות של פונקציות משנה נפוצות common_misc
מסמך זה אינו מציג ממשקים ספציפיים יותר מדי, אנו נתמקד בסטטוס ובפונקציה של כל ממשק, כמו גם בנקודות השימוש העיקריות.
לקבלת מבוא ממשק מפורט, עיין ב "us212a_common Interface Manual.chm".
5.5.1 תכנון ושימוש באפליקציות
5.5.1.1 סקירה של פונקציות AppLib
יישומי ספריית ממשק פונקציות בסיסיות של יישומים, כולל ניהול תכניות (תהליך) של יישומים, ניהול טיימר ברמת היישום, תקשורת הודעות
ניהול מכתבים.
ממשקים אלה קשורים רבות לארכיטקטורה הבסיסית של היישום.
5.5.1.2 ניהול יישומים (תהליך)
US212A היא מערכת תזמון רב-משימות מקדימה שיכולה להכיל 3 יישומים בו זמנית, כלומר מנהל תהליכים.
ap_manager, יישום חזית ויישום רקע, יישום החזית ויישום הרקע עשויים להכיל שני אשכולות, כלומר 2 משימות
שֵׁרוּת. דרישות אלה, כגון ניהול יישומים ותקשורת הודעות בין יישומים, מחייבות את המערכת לנהל את כל היישומים.
לכן, AppLib מקצה אובייקט מבנה app_info_t לכל יישום, בסך הכל 3 אובייקטים של מבנה. ה
תיאור המבנה מוצג בטבלה הבאה:
חבר מבנה
תיאור
בשימוש
שימוש במבנה דגל, 1 פירושו בשימוש, 0 פירושו לא בשימוש
app_id
מספר תעודת זהות
סוג app
סוג יישום, קרי מנהל תהליכים, יישום חזית או יישום רקע
mq_id
עבד את מזהה תור ההודעות הפרטיות
אַחֵר
שמור, לא משמש באופן זמני
בתכנון הממשק, עיצבנו את שני הממשקים הבאים:
● bool applib_init (uint8 app_id, app_type_e): רישום ואתחול יישומים.
● bool applib_quit (בטל): יציאת יישום.

עמוד 90
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 90
בנוסף, לצורך קלות השימוש, הקמנו משתנה גלובלי g_this_app_info לכל יישום שיצביע על עצמו
אובייקט המבנה app_info_t, המשתנה מאתחל ב- applib_init.
5.5.1.3 ניהול תקשורת הודעות
במערכת תזמון רב משימות התקשורת בין יישומים (תהליכים) חשובה מאוד. תקשורת הודעות שנבחרה US212A
כשיטת תקשורת בין יישומים (תהליכים).
בנוסף, הפיתרון הקודם של פעולות המשימה היחידה השתמש בהודעות הקש על מקש והודעות מערכת כדי להשיג קלט לחץ על מקש ולכידת אירועי מערכת.
תפוס, ב- US212A, אנו עדיין שומרים על מנגנון זה. לכן, תקשורת ההודעות של US212A היא
יישום ההרחבה על בסיס תוכנית המשימה.
בשל חוסר העקביות בתוכן הודעת המפתח, הודעת המערכת והודעת האפליקציה, עיצבנו ויישמנו את הדברים הבאים
סוגי תורי הודעות:
● תור להודעות gui: משמש לאחסון הודעות מפתח, הודעות מסך מגע, הודעות gsensor וכו '. למערכת יש הודעות אחת בלבד
תור הודעות gui. ניתן לגשת לתור ההודעות gui רק על ידי יישום החזית, שהוא האינטראקציה בין המשתמש ליישום החזית.
מַעֲבָר.
● תור להודעות מערכת: משמש לאחסון הודעות מערכת, הודעה מסוג זה היא פשוטה מאוד, רק צריך להיות סוג ההודעה,
באופן דומה, למערכת יש רק תור להודעות מערכת. הודעת מערכת היא קבלת הודעות פרטיות ביישום ביישום החזית
זה מתקבל ומשודר ליישום החזית ולאפליקציית הרקע כהודעות פרטיות של אפליקציה, ובאופן כללי הוא מתקבל על ידי אפליקציית החזית.
להיתמודד עם. נראה שתור הודעות מערכת זה אינו מיותר, אך מכיוון שהודעות מערכת נמצאות בדרך כלל בגרעין המערכת ובכונן
אין להם מידע הקשור ליישום ואינם יכולים לשלוח הודעות פרטיות ליישום ליישום.
כך שניתן לשלוח תחילה רק לתור הודעות המערכת.

עמוד 91
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 91
● תור הודעות בין יישומים: ידוע גם בשם תור הודעות פרטי של יישומים, המשמש לאחסון הודעות בין יישומים שנשלחו על ידי יישומים אחרים
הודעה. בנוסף לסוג ההודעה, הודעה זו צריכה להיות גם פרמטרי קלט ופלט. כל אפליקציה
דרוש תור להודעות פרטיות, כך שיש במערכת 3 תורי הודעות פרטיים.
אתחול מודול תקשורת הודעות: לאחר הפעלת היישום, רישום ואתחל, יש לקרוא לקול הממשק
applib_message_init (app_msg_dispatch msg_dispatch) מאתחל את מודול תקשורת ההודעות, הממשק יהיה
תור ההודעות הפרטי של היישום הנוכחי ותור ההודעות gui (רק יישום החזית) מוחקים, וההודעות הפרטיות של היישום מחולקות ל
פונקציית השליחה נרשמת למודול המשותף, כך שתרחיש הבקרה הציבורית יכול להתמודד עם הודעות פרטיות של יישומים כמו תרחיש היישום.
מנהל התקן מגלה שהלחצן נלחץ ושולח KEY_TYPE_DOWN,
KEY_TYPE_LONG, KEY_TYPE_HOLD ו- KEY_TYPE_SHORT_UP הודעות. מסר מפתח דרך
ממשק bool post_key_msg (input_gui_msg_t * input_msg) נשלח לתור ההודעות gui.
עבור הודעות מערכת, הגלעין או מנהל ההתקן מזהים אירוע מערכת מסוים ומתקשר ישירות לממשק int mq_send (uint8

עמוד 92
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 92
queue_id, void * msg, void * null2) שלח הודעה.
להודעות פרטיות של יישומים אנו מספקים 3 שיטות שליחה:
● שליחה סינכרונית של הודעות פרטיות של יישומים: שיטה זו משמשת להשגת בקרת סנכרון. לאחר ששולח ההודעה שולח הודעת סנכרון,
יחכה עד שמקבל ההודעה יקבל ויגיב לפני שתמשיך, יבטיח שתהליכי השולח והמקלט יהיו קשורים זה לזה
מערכת. שליחה סינכרונית כרגע משמשת ליישומי חזית לשליחת הודעות סינכרון ליישומי רקע, או ליישומי חזית לשליחת הודעות סינכרון.
יצירת הודעות / הרג יישומי רקע. שלח באופן סינכרוני דרך ממשק bool send_sync_msg ( uint8 app_id,
msg_apps_t * msg, msg_reply_t * תשובה, פסק זמן ל- uint32) שלח הודעה.
● שלח באופן פרטי באופן אסינכרוני הודעות פרטיות: שיטה זו משמשת שולח ההודעות כדי להודיע ​​למקבל על אירוע.
אין דרך לדעת האם האירוע יקבל הודעה לנמען. שלח באופן אסינכרוני דרך bool הממשק
send_async_msg ( uint8 app_id, msg_apps_t * msg) שלח הודעה.
● שידור הודעות פרטיות של יישומים: שיטה זו משמשת כאשר אינך מכיר את הנמען הספציפי או מצפה מכל היישומים לקבל
שליחת הודעה במקרה של הודעה, שידור שידור הוא גם שידור אסינכרוני. בעת שידור הודעה, אם אפליקציה
אם אינך מעוניין לקבל סוגים מסוימים של הודעות, אתה יכול לסנן אותם. אם יישום רוצה להיות בלעדי, זה לא
אם ברצונך לעבד הודעות אלה על ידי יישומים אחרים, באפשרותך להגדיר סריקה; זהו מנגנון הסינון והשידור של השידור.
השידור שולח הודעות דרך הממשק bool broadcast_msg (msg_apps_t * msg), ואפליקציית החזית מעבירה
הודעות מערכת נשלחות דרך הממשק bool broadcast_msg_sys (msg_apps_t * msg).
כפי שהזכרנו קודם, להודעות פרטיות של יישומים יש פרמטרי קלט ופלט, להלן הסבר ספציפי לכך:
US212A הוא פתרון נדיר בזיכרון ומשאבי הזיכרון מוגבלים מאוד. לפרמטרים של שטח גדול לא שלחנו את ההודעה ישירות
הפרמטרים מועתקים לתור ההודעות, אך פרמטרי ההודעה ממוקמים במאגר השולח ורק מצביע החוצץ מסופק להודעה שקיבלה
מקבל. אבל יש בעיה עם זה, כלומר אם המקלט לא סיים לעבד את ההודעה, והשולח מעכב את פרמטרי ההודעה.
אם אזור הכביסה נהרס, תתרחש שגיאה כאשר המקלט מעבד את ההודעה. כך שלשיטה זו יש הגבלות, בלבד
רק באמצעות שליחה סינכרונית ניתן להימנע ממצב זה ביעילות.
אותו עיקרון חל גם על פרמטרי פלט, רק מצב השליחה הסינכרוני יכול להבטיח שניתן יהיה לשלוח את ההודעה בחזרה בבטחה.
משתמשים בכל פרמטרי הפלט. כמובן שהמאגר של פרמטרי הפלט נפתח גם במרחב הזיכרון של השולח.
לכן, עבור פרמטרי קלט ופרמטרי פלט, אנו מציינים:
● ניתן לשלוח הודעות מערכת רק באופן אסינכרוני, ללא פרמטרי הודעה ופרמטרי פלט.
● שליחה אסינכרונית של הודעות פרטיות יכולה לכלול רק 4 בתים של פרמטרים; אין פרמטרי פלט.
● שליחה סינכרונית של הודעות פרטיות, שיכולות להכיל 4 בתים של פרמטרים, או להשתמש בפרמטרים שטח גדולים,
שתי השיטות נקבעות על ידי שני הצדדים בהודעה; ניתן לספק פרמטרי פלט.
לצורך קבלת הודעות אנו מספקים ממשק לכל תור הודעות. ממשקים אלו שוכנים בזיכרון:
● קבלת הודעת מפתח: bool get_gui_msg (input_gui_msg_t * input_msg)

עמוד 93
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 93
● קבלת הודעות מערכת: bool get_sys_msg (sys_msg_t * sys_msg)
● קבלת הודעות פרטיות של יישום החזית: bool get_app_msg ( private_msg_t * private_msg)
● קבלת הודעה פרטית של יישום רקע: bool get_app_msg_for_engine ( private_msg_t * private_msg)
לאחר קבלת הודעת הסנכרון, עליה להגיב בסוף הודעת התגובה לפני ששולח ההודעה יוכל להמשיך לרוץ. עם
התגובה להודעת השלב מיושמת באמצעות ממשק bool reply_sync_msg ( private_msg_t * private_msg).
עוד על מידע העברת הודעות, עיין בפיתוח הודעות להסביר מידע  .
5.5.1.4 ניהול טיימר ברמת היישום
תכננו ויישמנו טיימר ברמת היישום ב- US212A כדי להקל על המשתמשים להפעיל את היישום בנוחות בעת פיתוח יישומים.
ביצוע פונקציות עסקיות במחזור הפיתוח.
עקרון העבודה של טיימרים ברמת היישום: טיימרים ברמת היישום אינם זקוקים לתמיכה של הפרעות טיימר לחומרה, ודורשים גישה רק ל
הזמן המוחלט של המערכת. התוכנה שלנו קובעת Tout נקודת זמן העולה על הזמן האבסולוטי הנוכחי במחזור אחד ואז בודקת באופן מחזורי
מבחן (ב get_app_msg ממשק איתור השיחה handle_timers , תקופת איתור שינה sys_os_time_dly
(השוואה בין הזמן) האם הזמן האבסולוטי האחרון האחרון חורג מנקודת הזמן Tout? אם הוא חורג, זה אומר שלפחות שבוע עבר
נקודה, ולאחר מכן בצעו את הפונקציה התקופתית בזמן זה, ועכבו את ה- Tout בתקופה אחת. בדרך זו
כעת פונקציה מסוימת מבוצעת מדי פעם.
מכיוון שהטיימר ברמת היישום הוא טיימר המיושם לחלוטין על ידי תוכנה, ניתן לתכנן אותו ליישם ממשק פונקציונלי עשיר, כולל יצירה
עבור טיימרים, שנה את תקופת הטיימר, הפסק את התזמון, הפעל מחדש את התזמון ומחק את הטיימרים, הצהרת הממשק היא כדלקמן.
● צור טיימר תקופתי: int8 set_app_timer (timer_attrb_e attrb, uint16 timeout, timer_proc
func_proc);
● צור טיימר צילום יחיד: int8 set_single_shot_app_timer (timer_attrb_e attrb, פסק זמן ל- uint16,
timer_proc func_proc);
● שנה את תקופת הטיימר: bool modify_app_timer (int8 timer_id, uint16 time time);
● עצור תזמון: bool stop_app_timer (int8 timer_id);
● טיימר הפעלה מחדש: bool restart_app_timer (int8 timer_id);
● מחק טיימר: bool kill_app_timer (int8 timer_id);
ה- timer_proc מוגדר כ: typedef void (* timer_proc) (void);
בנוסף, הטיימר ברמת היישום הוא למעשה שיחת פונקציה המתבצעת בתנאי מסוים.כמובן, הטיימר יכול להיות
הידית מיושמת כפונקציה של בנק או מתקשרת לפונקציות בנקאיות אחרות. כמובן שלא ניתן ליישם את פונקציית הידית

עמוד 94
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 94
לצורך העברת פרמטרים, ניתן להשתמש רק במשתנים גלובליים כדי להעביר את נתוני הפעולה ולהחזרת תוצאות הפעולה.
לטיימר ברמת היישום יש מקום מיוחד מאוד, כלומר שטח נתוני הטיימר נפתח ביישום הנוכחי
בדרך זו היא אינה תופסת את מרחב הנתונים המצומצם של המערכת.
אתחול מודול טיימר ברמת היישום: לאחר הפעלת היישום, הרשמה ואתחול, יש לקרוא לקול הממשק
init_app_timers (טיימרים app_timer_t *, ספירת uint8) בצע אתחול מודול טיימר ברמת היישום.
תיאור נקודות המפתח והקשות בעיצוב טיימר ברמת היישום:
1. סוג טיימר: מחולק לטיימר בודד ולמתמר שליחה תקופתי. לאחר שנוצר הראשון, הטיימר מפעיל את ביצועו.
זה נמחק אוטומטית הפעם ונוצר באמצעות הממשק set_single_shot_app_timer ; לאחר שנוצר האחרון, הביצוע מופעל מעת לעת,
השתמש בממשק set_app_timer שנוצר, יש לקרוא לממשק לאחר מחיקת השימוש kill_app_timer .
2. תכונות טיימר: מחולק לתוכני ממשק משתמש וטיימרים של בקרה, הראשון עובד רק כאשר התאורה האחורית פועלת
גילוי והפעלת ביצוע: לאחרון אין מגבלות כאלה.
3. תג טיימר: מכיוון שהטיימר שייך ליישום כולו במרחב הנתונים, ניתן להשתמש בו בכל התרחישים
כל הטיימרים מתגלים והביצוע מופעל. אבל אנחנו לא רוצים שהטיימר שנוצר בסצינה A יוכל
די להפעיל את הביצוע, ולכן אנו מתייגים לכל טיימר תג סצינה כדי להגביל את איתור הטיימר והפעלת ההפעלה.
שׁוּרָה. השימוש הספציפי הוא כדלקמן:
1) טיימר המערכת משתמש ב- APP_TIMER_TAG_SYS, 0xff, כל הסצינות יתגלו ויופעלו לביצוע.
2) 0x80 ~ 0xfe, סצנת בקרה נפוצה.
3) 0x00 ~ 0x7f, סצנה מותאמת אישית ap, כולל סצנת בקרה מותאמת אישית, כאשר 0x00 הוא סצנת היישום העיקרית, צריך
אתחל את תג הסצינה ל- 0x00 לאחר הפעלת היישום.
4) כדי להיכנס לסצנה, התקשרו תחילה להצהרה הבאה כדי להחליף את תג הסצינה לתג הייחודי התואם לסצנה הנוכחית.

עמוד 95
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 95
uint8 תג_גיבוי;
tag_backup = get_app_timer_tag ();
שינוי_אפ_טיימר_תג (APP_TIEMR_TAG_XXX);
5) כדי לצאת מסצינה, שחזר את תג הסצינה הקודם.
change_app_timer_tag (tag_backup);
מידע נוסף על הוראות טיימר ברמת היישום עיין בפיתוח טיימר ברמת היישום הסבר הוראות  .
5.5.2 תכנון ושימוש Common_func
5.5.2.1 סקירת פונקציות של Common_func
יישום של ספריית ממשק בסיסית משותפת של פונקציות משנה common_func, כולל עיבוד מחרוזות (כולל מחרוזת מעוצבת, שמירה
טופס מוצג מעט, שם קצר פלוס נקודה, שם קוד פנימי שהומר לקוד UNICODE, הצגת מידע על באגים), זיכרון נתיב, פריטי תצורה
פרשנות, פרשנות הניתנת להגדרה, ניהול פלט קול, עיבוד מיפוי מקשים, עיבוד מוקדם של הודעות מפתח וכו '.
5.5.2.2 עיבוד מיתרים
עיבוד מחרוזת ותצוגה הם פונקציה בסיסית לפתרונות עם מסכי תצוגה. על מנת להפחית את הנטל של יישומים,
על מנת להבטיח כי עיבוד המחרוזת והיישום של כל היישומים יהיו עקביים, אוסף ומזכיר אותו במהלך התכנון והביצוע.
הוציא את עיבוד המחרוזות וממשק התצוגה שלהלן.
1. עיצוב מחרוזת: בתצוגת המחרוזת, יש מצב שמשאב המחרוזת (להלן מכונה תבנית המחרוזת)
הכנס מחרוזת משתנה כגון שם קובץ. בדומה לממשק תצוגת ההדפס המעוצב, אנו זקוקים למצב מחרוזת
הלוח מכיל סמל או שילוב מיוחד כדי לציין שיש להחליפו במחרוזת משתנה, ואז לספק את תוכן המחרוזת שיש להכניס,
שלב בין שני העיצוב לתוכן המחרוזת הסופי לתצוגה.
הצהרת הממשק היא: bool com_string_format (string_desc_t * תבנית, string_desc_t * מחרוזות)
2. השמיט את טופס התצוגה: בתצוגת הרשימה, לעיתים נדרש להציג את פריטי הרשימה העולים על שטח התצוגה בטופס התצוגה שהושמט.
תצוגת קו. יישמנו ממשק כזה במנהל התקן ה- ui, אבל זה לא מאוד קל לשימוש עבור היישום, כך
אפוף במשותף שוב.
הצהרת הממשק היא: uint16 com_ellipsis_to_longname (uint8 * long_name, uint8 * ellipsis_name,
uint16 ellipsis_len)
3. שם קצר פלוס נקודות: המר 8 + 3 שמות קצרים לשמות קבצים מנוקדים, כמו ABC
מומר ל -
ABC.mp3.
הצהרת הממשק היא: void com_dot_to_shortname (uint8 * short_name)

עמוד 96
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 96
4. המירו את שם הקוד הפנימי לקוד UNICODE: US212A צריך להשתמש בשם הקוד של UNCIOD כדי ליצור קבצים ותיקיות.
אבל קל לבצע את שם קוד UNICODE לטעות, לכן אנו מספקים ממשק להמרת שם הקוד הפנימי לקוד UNICODE.
הצהרת הממשק היא: void com_ansi_to_unicode (שם קובץ uint8 *)
5. הצגת מידע על ניפוי באגים: במהלך תהליך הפיתוח והביצוע של באגים, אם אנו צריכים להציג את הערך של משתנה, נוכל
הצג באמצעות ממשק זה.
הצהרת הממשק היא: void com_dump_debug (uint16 x, uint16 y, uint8 *, ערך uint32)
5.5.2.3 זיכרון נתיב
כאשר אנו גולשים ברשימת התפריטים או ברשימת הקבצים, אנו מקווים לעיתים קרובות ללכת בדרך של היציאה האחרונה לאחר היציאה.
הכנס שוב שלב אחר שלב, הדורש זיכרון נתיב, כך שחווית הפעולה תהיה חלקה מאוד.
אנו מגדירים תחילה את זיכרון הנתיב:
1) זיכרון הנתיב צריך לשנן את הסצינה של כל רמה ברשימה, כלומר מאיזה פריט הרשימה מוצגת, איזה
פריט אחד הוא פריט ההפעלה.
2) רמת זיכרון הנתיב בגלישה ברשימת הקבצים צריכה להגיע ל 9 רמות ומעלה, אשר נקבעת על ידי מערכת הקבצים ובורר הקבצים.
החליט. רמת זיכרון הנתיב של רשימת התפריטים היא בתוך 8 רמות.
3) היישום שומר את זיכרון הנתיב באופן עצמאי, וכל יישום שומר עד 4 זיכרונות נתיב בגלישה ברשימת הקבצים.
זיכרון נתיב רב-דיסק: כל יישום חוסך עד 8 זיכרונות של נתיבי רשימת תפריט, וכל עץ בתפריט בשיעור משמש
זיכרון שבילים.
מבנה נתוני זיכרון הנתיב הוא כדלקמן:
ביניהם, history_index_t משמש לאיתור פריט זיכרון הנתיב, והיסטוריה_item_t הוא הנתיב המאוחסן בפועל ב- VRAM.
פריט זיכרון נתיב. זיכרון הנתיב של כל המקרה מאוחסן ב- VRAM כך:

עמוד 97
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 97
History_item_t
0
History_item_t
1
History_item_t
15
...
History_item_t
0
History_item_t
1
History_item_t
15
...
0
3
1 ...
2
APP_ID = 0
APP_ID = 1 ... APP_ID = 30
History_item_t
0
History_item_t
1
History_item_t
15
...
History_item_t
0
History_item_t
1
History_item_t
15
...
0
3
1 ...
2
APP_ID = 31
זיכרון הנתיב של רשימת התפריטים זהה למבנה רשימת הקבצים, ההבדל טמון בזיכרון של כל נתיב ברשימת התפריטים.
הפריט History_item_t הוא 8 פריטים, והמספר הכולל של זיכרונות הנתיבים ברשימת התפריטים עבור כל יישום הוא 8.
ברשימת הגלישה, הנתיב ישתנה לעתים קרובות, אם תעדכן את זיכרון הנתיב עבור כל שינוי
VRAM, אז הלחץ לכתוב ל- VRAM יהיה גדול יותר, ומהירות הכתיבה של VRAM היא איטית יחסית, ולא קל לגלוש ברשימה.
גם לאנרגיה יכולה להיות השפעה מסוימת. לכן, אימצנו שיטת חציצה להתמודדות עם זיכרון הנתיב בתהליך הגלישה ברשימה,
זיכרון הנתיב לא יתעדכן במהלך תהליך הגלישה, והוא יתעדכן ל- VRAM רק ביציאה מהגלישה ברשימה.
במקרים מיוחדים מסוימים, ננקה את זיכרון הנתיב.
1) בעת ההפעלה, תוכנות מסוימות ינקו את כל הזיכרון של נתיב רשימת התפריטים, צור רשימת השמעה והקבצים יהיו רשומים
כדי לנקות את כל זיכרונות נתיב הטבלה, אתה יכול להתקשר לממשק com_clear_all_history .
2) כאשר דיסק מסוים של יישום מסוים נהרס, ניתן למחוק את הזיכרון של נתיב רשימת הקבצים של הדיסק, וניתן לקרוא לו
com_clear_app_history ממשק.
לכן, מודול זיכרון הנתיב מספק את הממשקים הפונקציונליים הבאים:
1) קבל את פריטי זיכרון הנתיב ברמה הנוכחית:
bool com_get_history_item (history_index_t * index, history_item_t * history)

עמוד 98
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 98
כאשר ממשק זה נקרא לראשונה, זיכרון הנתיב כולו יוטען במאגר ואז ייקרא ישירות מהמאגר.
2) הגדר את פריט זיכרון הנתיב ברמה הנוכחית:
bool com_set_history_item (history_index_t * index, history_item_t * history)
ממשק זה רק מעדכן את זיכרון הנתיב למאגר.
3) עדכן את זיכרון הנתיב ל- VRAM:
bool com_update_path_history (history_index_t * index)
ממשק זה נקרא רק כשאתה יוצא מהגלישה ברשימה לאחר התקשרות לממשק זה, המאגר ישוחרר.
4) נקה את כל רשימות התפריט / זיכרונות הנתיב של רשימת הקבצים:
bool com_clear_all_history (סוג uint8)
5) נקה את זיכרון הנתיב של רשימת הקבצים של הדיסק שצוין של היישום שצוין:
bool com_clear_app_history (סוג uint8, uint8 app_id, דיסק uint8)
5.5.2.4 הסבר על פריט תצורה
פריט התצורה של המקרים פשוט מאוד לשימוש. כאשר המערכת מופעלת, פתח את קובץ config.bin ב- ap_manager וקבל את משפט הקובץ.
טפל ב- config_fp, ואז כל היישומים האחרים יכולים לקרוא ולהסביר ישירות פריטי תצורה ב- config_fp.
ישנם שני ממשקים המסופקים על ידי הסבר פריט התצורה:
1. קרא פריטי תצורת מקרה:
bool com_get_config_struct (uint16 config_id , uint8 * buf, uint16 buf_len)
היכן buf תואם למעשה אחד משלושת המבנים הבאים:
2. קרא את ערך ברירת המחדל של פריט תצורת המקרה. ממשק זה תקף רק לפרמטרים מספריים:

עמוד 99
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 99
uint16 com_get_config_default (uint16 config_id )
לקבלת מבוא מפורט יותר של פריטי תצורת תיקים, עיין ב.
5.5.2.5 הסבר לתפריט הניתן להגדרה
הסבר לתפריט הניתן להגדרה ממשק פונקציות בסיסי כולל:
1. פתח את קובץ התפריט הניתן להגדרה, ממשק זה נקרא בדרך כלל בעת האתחול של היישום:
bool com_open_confmenu_file (const char * שם קובץ)
2. סגור את קובץ התפריט הניתן להגדרה, ממשק זה נקרא בדרך כלל כשהיישום יוצא:
bool com_close_confmenu_file (בטל)
3. קרא את כותרת רשימת התפריטים של קובץ התפריט שניתן להגדרה:
bool com_get_confmenu_title (uint8 menu_id, menu_title_data_t * confmenu_title)
4. קרא את פריטי התפריט ברשימת התפריטים שצוינה של קובץ התפריט שניתן להגדרה:
bool com_get_confmenu_item (menu_title_data_t * confmenu_title, uint16 item_index,
menu_item_data_t * confmenu_item)
5. השג את מספר האינדקס של פריט בתפריט ברשימת התפריטים שצוינה של קובץ התפריט שניתן להגדיר:
uint16 com_get_confmenu_active (menu_title_data_t * confmenu_title, uint16 key_str)
uint16 com_get_menu_active (uint8 menu_id, uint16 key_str)
פרטים נוספים על מידע תפריטים להגדרה, מתייחס השליטה ברשימת תפריט  ואת תפריטים להגדרה  אחת.
5.5.2.6 ניהול פלט קול
ישנם 4 היבטים שמעורבים בפלט קול: פלט שמע (כולל השמעת מוסיקה, הפעלת וידיאו ורדיו FM),
מתג צליל מקשים, הקלטה (כבה באופן זמני את צליל המקש) והאם הרמקול מופעל או לא. על מנת לתאם את התפתחותם של ארבעה אלה
Heguan, לכן תכנן ויישם ניהול פלט קול. בנוסף, מכיוון שנדרשות מאות ms כדי להפעיל את המודול האנלוגי של הרשות הפלסטינית,
על מנת למזער את הפתיחה והסגירה של הרשות הפלסטינית, יש צורך גם בניהול פלט קול אחיד.
עבור היישום, היישום יודע מתי יש פלט שמע, מתג צליל המקשים הוא אפשרות לתפריט, ולכן אנו צריכים
כדי לספק את הממשקים הבאים:
1. צליל הכפתור לסירוגין:
bool com_set_sound_keytone (uint8 kt_enable)
בקרת פלט שמע:
bool com_set_sound_out (sound bout sound, soundout_state_e state, void * sound_func)

עמוד 100
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 100
לפלט השמע יש 4 מצבי בקרה ומצבים, כלומר התחלה, השהיה, המשך, עצירה, על מנת לצמצם את פתיחת הרשות הפלסטינית
ובסגירה, הרשות הפלסטינית לא תיסגר כאשר תושהה, כך שניתן יהיה לחדש במהירות את הפעלת נקודת השבירה בהתאוששות שלאחר מכן.
3. ממשק הגדרת עוצמת קול, כל יישום משתמש בממשק זה כדי להגדיר את עוצמת הקול בצורה אחידה לשמירה על רמת עוצמת הקול הנוכחית:
bool com_set_sound_volume (נפח uint8)
4. הקלטת ממשק שליטת קול:
bool com_set_sound_record (bool on_off, סוג uint8)
5.5.2.7 עיבוד מיפוי מפתחות
מיפוי המפתח הוא למפות את הודעת המפתח לאירוע מסוים, כדי לממש את לולאת עיבוד ההודעות והמנגנון מונע האירועים.
המפתח למיפוי מקשים הוא להגדיר נכון את טבלת מיפוי המפתחות.
מיפוי המפתחות מחולק לשני חלקים, כלומר טבלת המיפוי של מפתחות המשתמש וטבלת המיפוי של מקשי קיצור הדרך. ברירת המחדל היא טבלת המיפוי של מקשי הקיצור
לקבוצת הודעות המפתח המעובדות עדיפות נמוכה יותר מטבלת המיפוי של מפתח המשתמש. במילים אחרות, אם המשתמש רוצה לשים קיצור דרך מסוים
למטרות אחרות, ניתן להוסיף את מקש הקיצור לטבלת המיפוי של מפתח המשתמש, או למפות את מקש הקיצור כ
MSG_NULL לביטול מקש הקיצור.
המבנה של טבלת המיפוי של הודעות המפתח היא כדלקמן:

עמוד 101
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 101
תיאור:
1. סוג הודעת המפתח בטבלת המיפוי של הודעות המפתח ממולא לפי סוג או. בהתאמה להודעת המפתח, המפתח הנוכחי
סוג ההודעה והסוג מעט ביטוליים, ואם התוצאה אינה 0 היא נחשבת להתאמה.
2. טבלת המיפוי של הודעות המפתח חייבת להסתיים בפריט המיפוי KEY_NULL, ומיפוי המפתחות לטבלה הוא למצוא
פריט המיפוי שערך הודעת המפתח שלו הוא KEY_NULL הוא תנאי הסיום.
המשתמש מחלץ את הודעות המפתח שהמשתמש דואג להם וממפה אותם לאירועים עסקיים בהתאם לתרחיש המשתמש הספציפי. לא מופיע לעיתונות המשתמש
טבלת המיפוי של הודעות המפתח והודעות המפתח שאינן בטבלת המיפוי של מקשי קיצור הדרך תתעלם על ידי תרחיש המשתמש ושום דבר לא ייעשה
תְגוּבָה.
ממשק מיפוי המפתח הוא כדלקמן:
bool com_key_mapping (input_gui_msg_t * input_msg, msg_apps_type_e * gui_event, const
key_map_t * key_map_list)
הערה על השימוש בממשק:
כאשר מתקשרים לממשק זה, מתרחש לעתים קרובות מעבר BANK, והפרמטר key_msp_list של ממשק זה הוא נתונים על const,
זה שייך לקטע .rodata ביישום, והוא בדרך כלל ארוז בסעיף BANK. אם נקרא קוד הממשק (מדויק יותר
כדי להיות בטוח, מופע key_map_list) מאוחסן בחלק UI BANK ואז מופע key_map_list יעבור ל
החלק על ממשק המשתמש בו נמצא הממשק מוחלף ומתרחשת שגיאה. אז, הקוד שקורא לממשק זה (ליתר דיוק
מופע key_map_list) ממוקם בקטע CONTROL BANK, או מופע key_map_list ממוקם באותו
בחלק UI BANK עם אותו ממשק, זה המקום שבו ממוקם key_map_list של פקדים נפוצים רבים
הסיבות ל- common_msgmap_data.c.
5.5.2.8 עיבוד מוקדם של הודעות מפתח

עמוד 102
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 102
כאשר המשתמש לוחץ על מקש, לרוב הוא מלווה בעיבוד מיוחד, כגון יציאה משומר המסך, שחזור התאורה האחורית וטון המקשים.
ועוד רבים. אנו יכולים לעבד מראש על ידי הרכבת פונקצית וו בממשק המקבל הודעות GUI של יישום החזית, כך
זה יכול לפשט את ממשק קבלת ההודעות GUI ולייעל את ארכיטקטורת הפתרונות.
הפונקציות שתוכננו ויושמו לצורך עיבוד מוקדם של הודעות מפתח כוללות:
1. סנן הודעות מקשים: תרחיש השימוש הוא כזה, לפעמים המשתמש לוחץ על מקש כאשר המקש אינו משוחרר
עבור לסצנה אחרת או AP אחר, כך שתקבל את פעולת המעקב אחר הסצנה או AP החדשה
הודעות LONG, HOLD, SHORT_UP, אך המשתמש לא רוצה לקבל את ההודעות האלה בסצנה החדשה או ב- AP, מקווה
יכול לסנן באופן שקוף את הודעות העיתונות המקשיות הללו. לכן אנו שומרים על ערך הודעת המפתח הנוכחי בפונקציית ה- hook. כאשר המשתמש רוצה
כשאתה מסנן את ההודעות הבאות של המפתח הנוכחי, עליך רק להתקשר לממשק void com_filter_key_hold (void) ואז לבדוק את הפונקציה.
על מנת לסנן את ההודעות הבאות של הודעת המפתח הנוכחית, עד לקבלת ההודעה SHORT_UP.
2. צא משומר המסך ושחזר את התאורה האחורית.
3. תגובת צליל מפתח, רק תגובה להודעת KEY_DOWN.
4. עיבוד נעילת מקשים, אם נעילת המקשים הנוכחית נעולה, פונקצית הוו תשלח הודעות מקש אחרות שאינן נעולות
המרה להודעת KEY_LOCKHOLD, המשמשת לבקשת נעילת המקשים נעילה.
5. נקה את הטיימר במצב סרק, הפעל מחדש את תזמון התאורה לעמעום התאורה האחורית וכו '.
ממשק העיבוד המוקדם של הודעות המפתח הוא כדלקמן:
bool com_gui_msg_hook (input_gui_msg_t * input_msg)
כאשר ממשק זה מחזיר FALSE, פירושו שהודעת העיתונות על המקשים מסוננת.
ממשק זה נקרא כאשר מתקבלת הודעת gui בפונקציה get_gui_msg .
5.5.3 תכנון ושימוש נפוצים
בקרה נפוצה של יישום common_ui, כולל בקרת רשימת תפריטים, דפדפן קבצים, מחיקת בקרת קבצים, תיבת דו-שיח,
תיבת דו-שיח לחיבור USB, תיבת הגדרת פרמטרים, סרגל עוצמת הקול, תיבת תצוגה טקסט, שורת מצב, תצוגת אנימציה, נעילת מקשים, מסך
הגנה, שיח כיבוי וכו '.
בקרות נפוצות חיוניות כדי להשיג שיטת פעולה עקבית לתוכנית ולהשיג את המטרה של עקביות רעיונית.
לתיאור כל בקרה משותפת, אנו עוקבים בעיקר אחר ההיבטים הבאים:
● הגדרת פקדים
● מאפייני הפקד ועיצובו, כולל מבנה נתוני המפתח הפנימיים
● תיאור תבנית ממשק המשתמש של סצינת הבקרה

עמוד 103
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 103
● בקרת עיצוב ממשק ותיאור
● נקודות לשימוש בפקדים
רוב הבקרות הנפוצות מתוכננות ומיושמות כסצינת בקרה למימוש אינטראקציה של קלט / פלט עם המשתמשים.
5.5.3.1 בקרת רשימת תפריטים
בקרת רשימת התפריטים מאפשרת למשתמש לבחור אחת מכמה אפשרויות מקבילות, בהן ניתן להשתמש לבחירת ביצוע
ניתן להשתמש בפעולת פקודת קו להגדרת פרמטרים מספריים לא ליניאריים, וכו '.
תכונות ועיצוב פקדים
1. תכונות בקרה
בתכנית US212A התפריט הוא מושג חשוב מאוד מכיוון שהצגנו את התכונות הבאות:
1. ניתן להגדיר תפריט, דרך חזותית ליישום מבנה רשימת התפריטים, מה שהופך את מבנה רשימת התפריט ליותר
פשוט וגמיש.
2. השתמש במספר גדול של פונקציות התקשרות חוזרות בתפריט, ושמור את שדה התפריט עבור מהנדסי פיתוח AP עם מבנה רשימת תפריט רב עוצמה
ביחס לפרטי פיתוח הסצנה, המהנדסים יכולים להתרכז בכתיבת פונקציית התקשרות חזרה של התפריט. כל פריט בתפריט יכול להתקין 3
פונקציית התקשרות חוזרת, כלומר פונקצית תגובה מיידית של התפריט, פונקציית תגובת קיצורי דרך משובצת ואישור פונקציית ביצוע
זה יכול להיות ריק בתנאים מסוימים. לפונקציית ההתקשרות לא קשורה למספר האינדקס של פריט התפריט ביחס לרשימת התפריטים, רק לפריט התפריט עצמו.
לכבות.
3. תמיכה בתפריט דינמי גמיש, על פי תנאים מסוימים, בעת כניסה לתפריט המשנה, חזרה לתפריט האב, ושרטוט מחדש של הזרם
ניתן לעדכן את רשימת התפריטים הקדמיים, ויש ליישם את התפריט הדינמי כתפריט כניסת משנה. כאן פירושו דינאמי לבנות
בעץ התפריטים שנוצר, התפריט הדינמי אינו חלק מעץ התפריט, אלא מחליף באופן זמני חלק מסוים מעץ התפריט במהלך הפעולה.
צומת הראש ברשימת התפריטים.
4. תומך בתוכן המשתנה של פריטי / כותרות בתפריט, והופך את רשימת התפריטים ליישומים יותר.
2. מושגים בסיסיים של בקרות
1. פריט פעיל: פריט התפריט המודגש, הפריט הפעיל שייך לפריט בדף הרשימה הנוכחי והמשתמש עובר
המקשים למעלה ולמטה מחליפים את הפריט הפעיל.
2. פריט נבחר שנבחר: ברשימת התפריטים הפרמטרים לבחירה יחידה, ייתכן שפריט התפריט האחרון שנבחר לא יופיע בו
בדף הרשימה הנוכחי, הפריט שנבחר בא לידי ביטוי בדרך כלל בממשק המשתמש כסמל שנבחר בסוף, כפי שמוצג בתבנית הבקרה שלעיל.
3. תפריט כניסה: תפריט הכניסה הוא הערך הכולל של עץ תפריט, וניתן לעצב כל סצנת תפריט עם תפריטי כניסה מרובים.
בחרו בתנאים מסוימים, ותפריט הכניסה יכול לשמש גם כעץ תפריט משנה של תפריטי כניסה אחרים, כדי להציג בצורה גמישה.
עץ התפריט מופיע.
4. רשימת תפריטים: רשימת התפריטים מתייחסת לדף רשימת תפריטים ברמה הנוכחית.

עמוד 104
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 104
5. פריט בתפריט, פריט בתפריט העלים וכותרת רשימת התפריט: פריט התפריט הוא הצומת של רשימת התפריטים, פריט בתפריט העלים אינו
פריט התפריט של התפריט ברמה התחתונה, כותרת רשימת התפריטים היא פריט התפריט עם התפריט ברמה התחתונה.
3. מבנה נתונים מפתח בפקד

עמוד 105
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 105
4. מרכיבי עיצוב מפתח - פונקציית התקשרות חוזרת של התפריט
לפני שמסבירים את פונקציית התקשרות חזרה, יש להסביר את סוג ערך ההחזרה של פונקציית ה- callback ואת פרמטר הפלט של פונקציית ה- callback.
1. ערך ההחזרה של פונקציית ה- callback: פונקציית ה- callback מוגדרת בסצנת gui_menulist / gui_menulist_simple
ערך ההחזרה ושיטת העיבוד שלו:
ערך החזרה
תיאור
RESULT_MENU_EXIT
צא מבקרת רשימת התפריטים והמיר ל- RESULT_REDRAW
לַחֲזוֹר

עמוד 106
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 106
RESULT_MENU_PARENT
חזור לרמה הקודמת, אם הרמה הנוכחית היא השורש, צא מפקד רשימת התפריטים
חלקים, שהומרו לחזרה RESULT_REDRAW
RESULT_MENU_CUR
הכנס מחדש לרשימת התפריטים ברמת הנוכחית, לאחר ביצוע פונקציית האישור,
חזרה כניסה לתפריט הדינמי
RESULT_MENU_SON
היכנס לרשימת התפריטים הבאה
RESULT_MENU_REDRAW_P
ARENT
חזור לרמה הקודמת לאחר שרטט מחדש את רשימת התפריטים, למשל לאחר בחירת סגנון
RESULT_MENU_REDRAW
צייר מחדש את רשימת התפריטים עבור menulist_simple שיחה מקוננת
בחזרה ל
RESULT_REDRAW
לחץ על מקש החזרה כדי לחזור לרמה הקודמת, או לצאת מהבקרה של רשימת התפריטים באופן רגיל וכו '.
חזור ל- AP, צייר מחדש את ממשק המשתמש, אם אתה חוזר לולאת תזמון הסצינות, בדרך כלל
פשוט תתעלם
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
ערך ההחזרה שהתקבל אינו RESULT_NULL והתוצאה מוחזרת
2. מבנה פרמטר הפלט של פונקציית ה- callback הוא כדלקמן:
פרמטרי הפלט של פונקציית התקשרות חוזרות יאותחלו למצב לא חוקי לפני שהם מועברים לפונקציית ההתקשרות, כלומר ret_str מאתחל ל
NULL, אחרים מאותחלים ל -1.
להלן הסבר על שלוש פונקציות ההתקשרות:
תפריט פונקצית תגובה מיידית

עמוד 107
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 107
אב-טיפוס פונקציה: typedef void (* menu_cb_leaf) (void)
פונקציה זו משמשת לתגובה מיידית כדי לספק פונקציית תצוגה מקדימה בעת מעבר לרשימות תפריטים מסוג פרמטר. פונקציה זו אינה לוקחת פרמטרי פלט,
שום תוצאה אינה מוחזרת, כך שהשימוש הוא פשוט מאוד.
פונקצית תגובת קיצור דרך משובצת
אב-טיפוס פונקציה: typedef app_result_e (* menu_cb_option) (בטל)
פונקציה זו משמשת לעיבוד מהיר של דברים מסוימים ברשימת התפריטים מבלי לצאת מזירת התפריטים.
EVENT_MENULIST_ENTER_OPTION תגובה לאירוע. הפונקציה מחזירה את התוצאה, לכן עליכם לבחור בזהירות לחזור
החזר את סוג התוצאה. תרחישי השימוש בפונקציית התגובה המהירה המוטמעת יכולים להתייחס לקביעת פונקציית הביצוע, אך לא ניתן להשתמש בפרמטר הפלט.
מספר.
קבע את פונקציית הביצוע
אב-טיפוס פונקציה: typedef app_result_e (* menu_cb_func) (void * param)
פונקציה זו נקראת כאשר מחליפים את רמת רשימת התפריטים וטוענים מחדש את השכבה הנוכחית כדי להוסיף את רשימת התפריטים. הפונקציה מחזירה את שניהם
עם פרמטרי פלט, השילוב של השניים מתאים לתרחישים שונים. להלן תרשימי השימוש העיקריים.
תרחיש 1: בחר את ראש רשימת התפריטים והיכנס לרשימת התפריטים ברמה הבאה בדרך כלל
בתרחיש זה, אם רשימת התפריטים ברמה הבאה היא רשימת תפריט כללית, כלומר אין תפריט דינמי, אין צורך לציין את הפריט שנבחר.
אין תוכן של פריט בתפריט שניתן לשנות, ואין צורך לשנות את תבנית הבקרה, אז פשוט הפוך את menu_cb_func ל- NULL.
זהו, אתה יכול גם ליישם פונקציה menu_cb_func שרק מחזירה RESULT_MENU_SON.
תרחיש 2: בחר את ראש רשימת התפריטים כדי להיכנס לתפריט הדינמי
בתרחיש זה, יש לבנות בזהירות את פרמטר הפלט menu_title_action_t. דוגמת הבנייה היא כדלקמן:
תרחיש 3: בחר את ראש רשימת התפריטים וציין את הפריט שנבחר
בתרחיש זה, יש לבנות בזהירות את פרמטר הפלט menu_title_action_t, והשיטה זהה לתרחיש 2. כלומר, שם str_id
הקצאת החברים היא מזהה משאב המחרוזות של הפריט שנבחר, אשר מוחזר מרשימת התפריטים על ידי מתורגמן התפריט לאחר קביעת פונקציית הביצוע.
התאם כדי לקבל את מספר האינדקס.
תרחיש 4: בחר את כותרת רשימת התפריטים, שנה את פריט התוכן / כותרת התוכן
בתרחיש זה, יש לבנות בזהירות את פרמטר הפלט menu_title_action_t, והשיטה זהה לתרחיש 2. כלומר, שם את ret_str

עמוד 108
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 108
הקצה כתובת חוצץ ובחר source_id, -1 פירושו לשנות את תוכן הכותרת, מזהה מחרוזת פריט התפריט הוא
מציין כדי לשנות את התוכן של פריט התפריט המתאים.
תרחיש 5: בחר את כותרת התפריט ושנה את תבנית בקרת התפריט
בתרחיש זה, יש לבנות בזהירות את פרמטר הפלט menu_title_action_t, והשיטה זהה לתרחיש 2. זה
style_id שונה למזהה התבנית של בקרת התפריט שצוינה, כגון MENULIST_TITLE.
תרחיש 6: בחר פריט בתפריט עלה
בחרו בתפריט העלים ובצעו את פונקציית ביצוע האישור לאחר ביצוע העיבוד העסקי, עליכם לבחור בזהירות את תוצאת ההחזרה. בנוסף,
ניתן להקצות את פרמטר הפלט menu_title_action_t str_id למזהה משאב מחרוזת של פריט בתפריט כדי לציין את היציאה
הפריט הפעיל ברשימת התפריטים לאחר היציאה.
ניתן להשתמש בתרחישים לעיל באופן מקיף, כמו בחירת כותרת רשימת התפריטים, כניסה לתפריט הדינמי, ציון הפריט שנבחר ותיקון
שנה את תבנית בקרת התפריטים וכו '. פונקציית ביצוע הקביעה של כותרת רשימת התפריטים בדוגמה לעיל, חלה גם על פונקציית ההתקשרות של התפריט ברמה הראשונה, כלומר, כאשר
יש לעבד את תפריט הכניסה ללא כללי על פי תנאים מסוימים, וזה יכול וצריך להיעשות בדרך של הדוגמה לעיל.
תבנית ממשק משתמש של סצנת בקרה
פרויקט עורך ממשק UI מספק תבניות בקרה עשירות לרשימת התפריטים, כמוצג באיור הבא:
MENULIST
MENULIST_TITLE
MENULIST_TITLE2
MENULIST_OPTION MENULIST_OPTION_TITLE MENULIST_OPTION_V
אם תבניות הבקרה לעיל אינן מתאימות, משתמשים יכולים ליצור תבניות בקרה משלהם בפרויקט Common. לכבות
לקבלת תבנית נוספת לבקרת מידע, עיין בממשק המשתמש שניתן להגדיר אותו.

עמוד 109
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 109
תכנון ממשק שליטה
app_result_e gui_menulist (uint16 style_id, menu_com_data_t * menu_com): תפריט פונקציונלי לחלוטין
ממשק בקרת רשימה.
app_result_e gui_menulist_simple (uint16 style_id, menu_com_data_t * menu_com): בלי
פונקצית זיכרון נתיב, גרסה מפוענחת של בקרת רשימת התפריטים שאינה תומכת בפונקציית תפריט דינמי, רשימת תפריטים מסוג זה שייכת לתפריט הפקודה
ברשימה, תהיה לו רמה אחת בלבד של תפריט, לאחר בחירת פריט התפריט עלה, צא מיד לאחר הביצוע.
פרמטרי החזרת הממשק מוצגים בטבלה הבאה:
ערך החזרה
תיאור
RESULT_REDRAW
צא מהבקרה של רשימת התפריטים באופן רגיל, צייר מחדש את ממשק המשתמש, אם אתה חוזר לזירה
לולאת תזמון, לרוב מתעלמת
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
ערך ההחזרה שהתקבל אינו RESULT_NULL והתוצאה מוחזרת
הוראות בקרה
1. חזור לפונקציית ביצוע התפריט הקודמת: לפעמים עלינו לבצע עיבוד מסוים כשחוזרים לתפריט הקודם,
לדוגמה, כמה תפריטי תגובה מיידית הוגדרו בעת החלפת פריטי תפריט, אך אנו דורשים שהם יכולים להיות כאלה
די לשחזור ההגדרות. לשם כך אנו מספקים את הממשקים המקוונים הבאים:
סטטי inline void gui_menulist_set_back2parent ( back_to_parent func, uint8 * arg_addr)
פונקציית ה- inline רושמת את פרמטרי ביצוע הפונקציה ואת התנאי בעת החזרה לתפריט הקודם לרשימת התפריטים. לאחר ההגדרה,
כל עוד אתה יוצא מרשימת התפריטים הנוכחית (חזור לתפריט הקודם או יוצא מסצנת רשימת התפריטים), פרמטר התנאי ייקבע
האם הערך * (uint8 *) (arg_addr) אינו אפס, אם כן, בצע את הפונקציה.

עמוד 110
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 110
2. קינון סצנת תפריט: לפעמים עלינו לקנן תפריט אחר בסצנת התפריט, אבל
סצנת התפריט gui_menulist מסובכת יותר, בקרת הערימה צורכת יותר וסצנה מקוננת משתמשת באותו תזמון ברמת היישום
התג בסצנה יגרום לבלבול מסוים. מאוחר יותר גילינו שתפריטי קינון הם בדרך כלל פשוטים ומובנים יחסית
לתפריט קיצורי דרך ברמה אחת שאינו דורש זיכרון מסלול, פיתחנו סצנת תפריט נוספת
gui_menulist_ פשוט כדי לתמוך בתפריטים מקוננים, הוא משתמש בתרחישים שונים של טיימר ברמת היישום מ- gui_menulist
תגית, לא תגרום לבלבול.
3. פקד רשימת התפריט מימש את זיכרון הנתיב, אם מוגדר הפריט שנבחר בעת כניסה לרשימת התפריטים ברמה הבאה, ו-
וההתאמה ברשימת התפריטים מוצלחת, ואז רשימת התפריטים תוצג כפריט הפעיל בהתאם לפריט שנבחר שצוין, אחרת
קרא את זיכרון הנתיב ב- VRAM / buffer כדי להציג את רשימת התפריטים.
נוסף על תיאור תפריטים להגדרה, עיין תפריטים להגדרה  ואת פיתוח תפריטים להגדרה להסביר  אחד.
5.5.3.2 בקרת עיון בקבצים
דפדפן הקבצים מספק דרך חזותית לגלוש ולבחור קבצים וספריות, כאשר מושג הקבצים משתרע על מועדפים,
אפשרויות קבצים שאינן מאורגנות במערכת הקבצים, כגון רשימות השמעה. דפדפן הקבצים זקוק לתמיכה של מערכת הקבצים ובורר הקבצים
כן, עליכם לוודא שמערכת הקבצים ובורר הקבצים הופעלו לפני השימוש.
תכונות ועיצוב פקדים
1. מבנה נתונים מפתח בתוך הבקרה

עמוד 111
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 111
תבנית ממשק משתמש של סצנת בקרה
פרויקט עורך UI המשותף מספק שתי תבניות בקרה לבקרת הגלישה בקבצים, כמוצג באיור הבא:
DIRLIST
רשימת קבצים

עמוד 112
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 112
אם תבניות הבקרה לעיל אינן מתאימות, משתמשים יכולים ליצור תבניות בקרה משלהם בפרויקט Common. לכבות
לקבלת תבנית נוספת לבקרת מידע, עיין בממשק המשתמש שניתן להגדיר אותו.
תכנון ממשק שליטה
app_result_e gui_directory (uint16 style_id, file_path_info_t * path_info, dir_com_data_t
* dir_com)
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור
RESULT_XXX_PLAY
בחר סוג מסוים של קובץ מפוענח להפעלה
RESULT_CONFIRM
אשר לבחירת תיקייה וכו 'חזור
RESULT_REDRAW
לחץ על כפתור החזרה כדי לחזור לרמת ה- AP לפי רמה ולשרטט מחדש את ממשק המשתמש
RESULT_DIR_ERROR_ENTE
R_DIR
החזרת שגיאה, הזן את שגיאת הספריה, כולל שורש
RESULT_DIR_ERROR_NO_F
ILE
שגיאת החזרה, אין קבצים ותיקיות בספריית השורש
RESULT_DIR_ERROR_SETL
OC
החזרת שגיאה, הגדרת המיקום נכשלה כאשר הרמה העליונה אינה ספריית השורש
לִהַבִיס
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
ערך ההחזרה שהתקבל אינו RESULT_NULL והתוצאה מוחזרת

עמוד 113
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 113
הוראות בקרה
1. תמיכה בהוספת רשימת תפריטים לפני רשימת הקבצים ברמה מוגדרת, כגון הוספת "אקראי
תפריט "הפעל" יכול להיות אנושי יותר לממש את הפונקציה של בחירה אקראית של שירים לנגינה. בקרת גלישה בקבצים אחת תומכת בקינון מרובה
רשימת תפריטים.
2. תפריט קיצורי דרך: במהלך גלישת קבצים, לחץ על מקש התפריט כדי להציג תפריט קיצורי דרך לעיבוד קבצים כדי לתמוך במחיקה
מחק קבצים, מחק תיקיות, העתק / הדבק קבצים ופונקציות אחרות.
3. בקרת הגלישה בקבצים מימשה את זיכרון הנתיב, קרא את זיכרון הנתיב מה- VRAM / buffert כדי להציג את הקובץ
רשימה.
5.5.3.3 מחיקת בקרת הקבצים
דפדפן הקבצים זקוק לתמיכה של מערכת הקבצים ובורר הקבצים, ויש להבטיח את מערכת הקבצים ובחירת הקבצים לפני השימוש
המכשיר מאתחל בהצלחה.
תכונות ועיצוב פקדים
בקרת מחיקת הקבצים אינה למעשה שליטה אטומית, אלא סצינה מיוחדת המורכבת משלטים אחרים. זה צריך
המשימות שיש להשלים כוללות: איתור הקובץ / התיקיה, אישור אם למחוק את הקובץ / התיקיה, ממשק המשתמש מראה שהקובץ / התיקיה נמחקים
התיקיה וקובץ ההנחיה נמחקו.
ישנם שני תרחישים לשימושם:
1. מחק את הקובץ שמושמע: תרחיש זה פתר את משימת איתור הקובץ, ונדרש לבצע רק את שלושת המשימות הבאות.
שֵׁרוּת.
2. מחק קבצים מגלישת קבצים: צריך להשתמש בפונקציה של דפדפן הקבצים כדי לאתר את קובץ / תיקיית היעד ואז
בצע את 3 המשימות הבאות. מחיקת קבצים בתרחיש זה יכולה להיות מיושמת כפונקציית קיצור דרך לגלישת קבצים.
ללא קשר למצב, בעת מחיקת קובץ, עליכם להבטיח את האבטחה של הקובץ / התיקיה שנמחקו, כלומר אם כפתור היעד
אם הוא משחק, הפסיק לשחק קודם, שחרר את שליטת הנגן בקובץ היעד ואז מחק אותו.
תכנון ממשק שליטה
app_result_e gui_delete (file_path_info_t * path_info, del_com_data_t * del_com)

עמוד 114
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 114
תיאור:
1. פונקציית del_func היא פונקציית התקשרות חוזרת שנוספת לפיתרון האבטחה של מחיקת קבצים / תיקיות. אנחנו יכולים
שחרר את השליטה בקובץ היעד ב- del_func.
2. שם הקובץ משמש רק לתצוגת ממשק משתמש, ולא כדי לאתר את קובץ / תיקיית היעד.
3. del_no מצביע על מיקום קובץ היעד ברשימת הקבצים הנוכחית, לא אפס פירושו השתמש ב- del_no כדי לאתר את קובץ היעד,
0 פירושו להשתמש ב- path_info לאיתור קובץ היעד.
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור
RESULT_REDRAW
שאל אם ברצונך למחוק את הדו-שיח לביטול ולחזרה ל- AP, צייר מחדש את ממשק המשתמש
RESULT_DELETE_FILE
מחיקת הקובץ הוחזרה בהצלחה
RESULT_DELETE_DIRLIST
מחק תיקיה או רשימה שהוחזרו בהצלחה
RESULT_DELETE_DIRLIST_
NOSELF
RESULT_DELETE_DIRLIST_NOSELF מחיקת קובץ
תיקיה או רשימה (אל תמחק את עצמה) הוחזרו בהצלחה
RESULT_ERROR
RESULT_ERROR חזור כשמחיקת הקובץ נכשלה
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
ערך ההחזרה שהתקבל אינו RESULT_NULL והתוצאה מוחזרת
5.5.3.4 פקדי דיאלוג
תיבת הדו-שיח היא בקרת בקרת הודעה אינטראקטיבית. חלון צץ כדי לספק למשתמש משהו שקרה או לשאול
מה לעשות לאחר מכן למשתמש וכו 'ואז בדרך כלל לחכות שהמשתמש יענה ואז להמשיך לשלב הבא בהתאם לבחירת המשתמש.

עמוד 115
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 115
תכונות ועיצוב פקדים
ראשית, נחלק תיבות דיאלוג ל -4 קטגוריות מנקודת המבט של ההיגיון העסקי:
1. משתמשים בתיבת הדו-שיח עם בחירת הכפתורים כאשר יש צורך לבקש מהמשתמש ולבקש מהמשתמש לבצע בחירה.
2. אין כפתור. לאחר ההודעה, המשתמש צריך ללחוץ על כפתור כלשהו כדי לחזור. ניתן להשתמש בתיבת דו-שיח זו בכמה
כאשר התוכן המהיר הוא ארוך, למשל, הסביר שם עצם.
3. אין כפתור, לאחר ההודעה תתבקש אוטומטית למשך 2 שניות ואז יחזור, זה כדי לתת למשתמש מספיק זמן לראות בבירור
הודעה מהירה של צ'ו.
4. אין כפתור, חזור מייד לאחר הנחיית המידע, כך שהאפליקציה תנחה את המשתמש ותשמור עליו עד הפעם הבאה
מסך, מבלי לעכב את זמן העיבוד העסקי הבא. זה משמש בתרחישים שבהם נדרשת תקופה ארוכה יותר של עיבוד עסקי לאחר ההנחיה.
בעיצוב ממשק המשתמש, אנו מתייחסים לעיצוב תיבות הדו-שיח בסגנון Windows. פרטי העיצוב הם כדלקמן:
1. עבור תיבות דו-שיח עם בחירת לחצנים, אנו מספקים את שילובי הכפתורים הבאים המוגדרים כברירת מחדל עבור המשתמשים לבחירה.
כאשר, כל כפתור יתאים לאירוע (על מנת להקל על עיבוד ערך ההחזרה של תיבת הדו-שיח, אנו בדרך כלל מכניסים לא,
ביטול וכן הלאה נחשבים לאירוע החזרת הביטול RESULT_REDRAW).
1) כן ולא.
2) אישור וביטול.
3) נסה שוב ובטל.
4) ביטול, נסה שוב והתעלם.
5) כן, לא ובטל.
מבנה הכפתור הוא כדלקמן:

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

עמוד 117
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 117
תזכורת כללית אזהרה כללית אזהרה חמורה פירושה ספק פירושו המתנה
תבנית ממשק משתמש של סצנת בקרה
פרויקט עורך UI המשותף מספק 4 תבניות בקרה לבקרות תיבות דו-שיח, כמוצג באיור הבא:
DIALOG_MSG DIALOG_ASK
DIALOG_MSG_V DIALOG_ASK_V
אם תבניות הבקרה לעיל אינן מתאימות, משתמשים יכולים ליצור תבניות בקרה משלהם בפרויקט Common. לכבות
לקבלת תבנית נוספת לבקרת מידע, עיין בממשק המשתמש שניתן להגדיר אותו.
תכנון ממשק שליטה
app_result_e gui_dialog (uint16 style_id, dialog_com_data_t * dialog_com): דו שיח מלא
מִסגֶרֶת.
app_result_e gui_dialog_msg (uint16 style_id, type dialog_type_e, uint16 str_id): משמש ללא לחץ
תיבת הדו-שיח של ההודעה הפשוטה של ​​כפתור.

עמוד 118
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 118
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור
RESULT_DIALOG_XXX
חזור לאחר בחירת מפתח חוקי
RESULT_REDRAW
חזרה לא חוקית, AP צריך לצייר מחדש את ממשק המשתמש
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
ערך ההחזרה שהתקבל אינו RESULT_NULL והתוצאה מוחזרת
5.5.3.5 שיח חיבור USB
תיבת הדו-שיח של חיבור USB היא מקרה מיוחד של בקרת תיבת הדו-שיח, המוקדשת לבחירת מצב החיבור לאחר הכנסת כבל ה- USB.
בתכנון ממשק המשתמש, הפקודה לתזמון הבחירה האוטומטי מתווספת על בסיס תיבת הדו-שיח עם הכפתורים.
תבנית ממשק משתמש של סצנת בקרה
פרויקט עורך ממשק UI הנו תבנית בקרה המיועדת לבקרת תיבת הדו-שיח של חיבור USB, כפי שמוצג באיור הבא:

עמוד 119
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 119
אם תבניות הבקרה לעיל אינן מתאימות, משתמשים יכולים ליצור תבניות בקרה משלהם בפרויקט Common. על שליטה
מידע נוסף על חלקים מהתבנית, עיין בממשק המשתמש שניתן להגדיר אותו.
תכנון ממשק שליטה
app_result_e gui_usbconnect (בטל)
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור
RESULT_USB_TRANS
בחר במצב העברת נתונים USB
RESULT_USB_PLAY
בחר במצב טעינת USB או בטל כדי לחזור לחיבור ברירת המחדל
נוּסחָה
RESULT_REDRAW
חזרה לא חוקית, AP צריך לצייר מחדש את ממשק המשתמש
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
ערך ההחזרה שהתקבל אינו RESULT_NULL והתוצאה מוחזרת
5.5.3.6 בקרת תיבת הגדרת פרמטרים
תיבת הגדרת הפרמטרים היא אחד מהפקדים התמציתיים ביותר להגדרת פרמטרים, ובדרך כלל משתמשים בה להגדרת פרמטרים ליניאריים ותומכת בריבוי
הגדרת פרמטרים, שניתן להשתמש בה להגדרת פרמטרים כמו תאריך ושעה.
תכונות ועיצוב פקדים
תיבת הגדרת הפרמטרים מחולקת לשלושה סוגים בסגנון:
1. תיבת הגדרה מספרית: סגנון זה יכול להדגיש את ערך הפרמטר ומשמש להגדרה כגון שנה, חודש, יום ושעה.
2. תיבת הגדרת המחוון: סגנון זה יכול להדגיש את מצב הפרמטר, וליידע את המשתמש כי ערך ההגדרה הנוכחי הוא ביחס לכלל
המיקום של מרווח ההגדרות משמש בעיקר להגדרות כמו עוצמת הקול והבהירות.
3. תיבת הגדרת סרגל הזזה וסרגל: סגנון זה מדגיש בעיקר את מצב הפרמטרים, וגם נותן ערכי פרמטרים ספציפיים.
משמש בעיקר להגדרות כגון זמן תאורה אחורית וכיבוי טיימר.
תבנית ממשק משתמש של סצנת בקרה
פרויקט עורך ממשק UI מספק 10 תבניות בקרה לבקרות דו-שיח, כפי שמוצג באיור הבא:

עמוד 120
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 120
PARAM_SIMPLE PARAM_TIME_24 PARAM_TIME_12 PARAM_DATE
SLIDER_SIMPLE SLIDER_SIMPLE_SYM SLIDER_SIMPLE_V
SLIDER_NUM
SLIDER_NUM_SYM
SLIDER_SETEQ
אם תבניות הבקרה לעיל אינן מתאימות, משתמשים יכולים ליצור תבניות בקרה משלהם בפרויקט Common. לכבות

עמוד 121
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 121
לקבלת תבנית נוספת לבקרת מידע, עיין בממשק המשתמש שניתן להגדיר אותו.
תכנון ממשק שליטה
app_result_e gui_set_parameter (uint16 style_id, param_com_data_t * param_com)
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור
RESULT_CONFIRM
אשר את הגדרות הפרמטר
RESULT_REDRAW
הגדרת פרמטר לא חוקית, חזור ל- AP, צייר מחדש את ממשק המשתמש
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
ערך ההחזרה שהתקבל אינו RESULT_NULL והתוצאה מוחזרת
הוראות בקרה
בהגדרת הפרמטר, לפעמים ערך הפרמטר (או הטווח שלו) ישתנה מעט בהתאם לתנאים מסוימים, כגון
באמצע הטווח, טווח "היום" יהיה שונה בהתאם ל"שנה "ו"חודש". לאחר שנכנס לפקד הגדרת הפרמטרים, איננו יכולים עוד
ערך פרמטר התערבות, אז כיצד יש לפתור אותו? חשבנו על דרך להוסיף פונקציית התקשרות חוזרת לפרמטרים
להתאים את הפונקציה , כדי לזהות את ערך הפרמטר בזמן אמת, ואם הוא מחוץ לטווח, הוא יקפוץ אוטומטית לשילוב מסוים
עבור אל הערך הרגיל כך שהבעיה תיפתר.
בנוסף, כמה הגדרות פרמטר צריכות להציג תצוגה מקדימה של ההשפעה של הגדרות הפרמטרים בזמן אמת, ולכן עלינו לספק אחרת
פונקציית ההתקשרות התקשרות חוזרת להשלמת תצוגה מקדימה של האפקט.

עמוד 122
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 122
5.5.3.7 בקרת סרגל עוצמת הקול
סרגל עוצמת הקול הוא מקרה מיוחד של בקרת תיבת הגדרת הפרמטרים, המוקדש לערך העוצמה הנוכחי והגדרות פרמטר אחרות הקשורות לנפח.
התאמת ערך העוצמה הנוכחי נועדה כפונקציית מקשי קיצור. בעיצוב ממשק המשתמש, סרגל העוצמה הוא הבסיס של תיבת הגדרת המחוון
הוסף אלמנטים נוספים של ממשק המשתמש על בסיס.
תבנית ממשק משתמש של סצנת בקרה
פרויקט עורך ממשק משתמש משותף הוא תבנית בקרה המיועדת לבקרת סרגל עוצמת הקול, כפי שמוצג באיור שלהלן:
אם תבניות הבקרה לעיל אינן מתאימות, משתמשים יכולים ליצור תבניות בקרה משלהם בפרויקט Common. על שליטה
מידע נוסף על חלקים מהתבנית, עיין בממשק המשתמש שניתן להגדיר אותו.
תכנון ממשק שליטה
app_result_e gui_volumebar (uint8 * נפח, uint8 * הגבלה, מצב uint8)
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור
RESULT_CONFIRM
אשר את הגדרת עוצמת הקול
RESULT_REDRAW
בטל את הגדרת עוצמת הקול ויצא. להתאמת מגבלת עוצמת הקול, התוצאה לא תישמר.
אם אין פעולה במשך 4 שניות בעת התאמת ערך הנפח הנוכחי, היא תחזור אוטומטית
RESULT_REDRAW)
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
ערך ההחזרה שהתקבל אינו RESULT_NULL והתוצאה מוחזרת
5.5.3.8 בקרת תיבת קריאת טקסט
מסגרת קריאת הטקסט היא בקרה המשמשת להצגת קבצי טקסט.קובץ הטקסט מחולק למספר עמודים לתצוגה.
הבא / קודם לעבור למעלה ולמטה.

עמוד 123
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 123
תכונות ועיצוב פקדים
סוגי הקידוד הנתמכים על ידי מסגרת קריאת הטקסט כוללים ANSI (מומלץ רק באנגלית), UNICODE 16 (קטן
סוף) ו- UTF-8.
באלגוריתם הפענוח של קבצי טקסט אנו מספקים ממשק בלבד להסבר עמוד אחד מהמיקום הנוכחי, ואינם מספקים
קדימה והסביר את הממשק עמוד אחד. זה מחייב את היישום העליון לפענח את התוצאה, כלומר את מיקום הקיזוז של כל עמוד,
מאגר למעלה ואז קרא את מיקום קיזוז העמוד הקודם מהמאגר לפענוח כאשר העמוד למעלה.
בנוסף, על מנת שאלגוריתם הפענוח יוכל לעבד קבצי טקסט ב- SD וקבצי טקסט במערכת הקבצים של המשתמש, אנו מחלצים
זה כמו קובץ טקסט ומיקום ממשק קריאה. עלינו רק להכיל את ממשק המיקום והקריאה של מערכת SD / File
השיר משיג את המטרות שלעיל.
תכנון ממשק שליטה
1. ממשק פענוח הטקסט המאוחד הוא כדלקמן:
text_end_mode_e text_decode_one_page (text_decode_t * text_decode, text_file_t * text_file,
uint16 * page_bytes)

עמוד 124
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 124
פרמטר ההחזרה של ממשק זה הוא מספר הבתים בדף הנוכחי. אם הפענוח נכשל, הוא מחזיר -1.
ערך החזרת הממשק הוא כדלקמן:
2. ממשק קריאת קובץ הטקסט של SD תוכנן כך:
app_result_e gui_text_read (uint16 style_id, const char * שם קובץ)
ביניהם, שם הקובץ הוא שיטת השמות של שמירת קבצי SD, כגון legal.txt.
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור

עמוד 125
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 125
RESULT_REDRAW
חזור ל- AP באופן רגיל וצייר מחדש את ממשק המשתמש
RESULT_ERROR
אין אפשרות לפתוח את הקובץ וכו ', להחזיר שגיאה (אלא אם כן באג המערכת, אחרת
בלתי אפשרי לחזור)
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
ערך ההחזרה שהתקבל אינו RESULT_NULL והתוצאה מוחזרת
הוראות קריאת קובץ טקסט SD
1. ניתן להשתמש בקריאת קובץ טקסט SD לקריאת מידע משפטי, מדריכי משתמשים וכו '.
2. מכיוון שקובצי הטקסט ב- SD הם בדרך כלל קצרים, אנו מגבילים את הטקסט למקסימום של 32 עמודים.
בתהליך, ניתן לאחסן את מיקום ההתחלה של כל עמוד כדי להקל על העברת הדפים.
3. קבצי הטקסט ב- SD מאוחסנים בפורמט המותאם לגזרה, ונקודת הסיום המדויקת של הקובץ אינה ידועה בזמן הקריאה, לכן עליך
הוסף את המסוף '\ 0' לסוף קובץ הטקסט SD בעצמך . UNICODE 16 חייב להוסיף 2 '\ 0' .
4. שימו לב כשאתם מתקשרים לממשק gui_text_read, בדרך כלל אינכם יכולים למלא ישירות את שם הקובץ ברשימת פרמטרי הממשק
, אך ראשית העתק את השם לערימה והעביר אותו בשם הקובץ בערימה. אנא עיין בדוגמה ap_setting בעת השימוש בו.
הסיבה לכך היא שהחלפת בנק בדרך כלל מתרחשת כאשר gui_text_read נקרא, וקוד הבנק הנוכחי נשטף. אם הקובץ
אם השם ממוקם בקטע .text או .rodata של הבנק הנוכחי, הוא יימחק.
5.5.3.9 בקרת סרגל המצב
בקרת סרגל המצב מציגה את מצב המערכת הנוכחי, כולל את סוג היישום הנוכחי של החזית, מצב הסוללה, מצב הכרטיס, הכבל
סטטוס חיבור, זמן מערכת וכו '. בנוסף להצגת סמלי המצב או המחרוזות שלמעלה בשורת המצב, עדיין יש מקום פנוי לשימוש
חזית התצוגה מחילה רכיבי ממשק משתמש מסוימים, אותם יש להציג לאחר התצוגה הראשונית של סרגל המצב.
תכונות ועיצוב פקדים
שורת המצב מיושמת כעדכון תקופתי, ותקופת האיתור היא 0.5 ש '. זה יעודכן רק לאחר איתור שינוי מצב. מתי
כמובן שמשתמשים יכולים גם להתקשר באופן פעיל לממשק התצוגה של שורת המצב בכדי לעדכן עדכון.
תכנון ממשק שליטה
app_result_e gui_headbar (עדכון headbar_update_e): ממשק תצוגה של סרגל המצב

עמוד 126
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 126
void gui_headbar_handle (void): בדוק אם סרגל המצב השתנה, וקרא אליו אם הוא משתנה
gui_headbar מעודכן. ממשק זה נמצא בפונקציית הידית של טיימר המערכת sys_status_timer_id
התקשר ל - sys_status_.
חלל gui_set_headbar_mode (מצב headbar_mode_e, headbar_icon_e icon_id): להגדיר את שורת המצב
מצב.
void gui_get_headbar_mode (מצב סרגל head_mode_e *, headbar_icon_e * icon_id): קבל את הנוכחי
מצב סרגל מצב.
אילו אלמנטים להציג בסרגל המצב מושגת באמצעות תצורת this_header_style, אם הפקד המתאים תקף
עדכן את התצוגה.
ממשק get_set_headbar_mode שולט גם על ההתחלה והעצירה של טיימר המערכת sys_status_timer_id.

עמוד 127
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 127
5.5.3.10 בקרת תצוגת אנימציה
בקרת תצוגת אנימציה היא בקרת תצוגה רציפה של שליטת PicBox רב-מסגרתית, שיכולה לממש תצוגה דינמית מתחילתה ועד סופה או מקצה להתחלה.
תכונות ועיצוב פקדים
לתצוגת האנימציה יש את המאפיינים הבאים:
1. מרווח זמן התצוגה של 2 פריימים רצופים.
2. כיוון תצוגת אנימציה, תצוגת אנימציה קדימה ותצוגת אנימציה הפוכה.
3. ניתן לסיים אותו בכל מיקום, כמו ממשק המשתמש של נעילת המפתח, אותו ניתן להפסיק בהנפשת הנעילה ואז להציג את אנימציית הנעילה.
4. יכולת לבצע עיבוד מסוים בתצוגה של שתי מסגרות תמונות רצופות, כגון הצגת על התמונה לאחר הצגת התמונה הקודמת
הצג רכיבי ממשק משתמש אחרים.
תכנון ממשק שליטה
app_result_e gui_animation (style_infor_t * style_infor, animation_com_data_t * anm_com):
השתמש בטיימר ברמת היישום כדי להציג תמונות באופן קבוע ולקבל הודעות. ניתן לסיים את האנימציה באמצעות הודעות הקש על מקש והודעות פרטיות של יישומים
לְהַצִיג.
app_result_e gui_logo (style_infor_t * style_infor, animation_com_data_t * anm_com): ישיר
השתמש ב- sys_os_time_dly כדי להציג תמונות באופן מעוכב בזמן, ללא קבלת הודעות, ולא ניתן לסיים אותם באמצעות הודעות הקש על מקש והודעות פרטיות של יישומים.
עצור את האנימציה, כך שבאופן כללי ממשק זה משמש להפעלת ולוגו של הלוגו בלבד.
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור

עמוד 128
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 128
RESULT_NULL
חזור ל- AP לאחר שתצוגת האנימציה מסתיימת כרגיל
RESULT_REDRAW
עיבוד חלוקת הודעות היישום מחזיר RESULT_REDRAW
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
תצוגת האנימציה מסתיימת ומחוזרת, או מסתיימת בגלל קלט גוי של המשתמש, בהתאם
על פי הודעת החזרה על מיפוי key_map_list, או ערך החזרה שהתקבל אינו
RESULT_NULL חזרה לתוצאות
5.5.3.11 בקרת נעילת מקשים
בקרת נעילת המקשים משמשת להפעלת נעילת הממשק, ביטול נעילת הממשק ומצב נעילה.
תכונות ועיצוב פקדים
מצב נעילת מקש המערכת מוגדר כך:
1. לאחר שהמערכת מופעלת, היא מאתחלת ל"מצב נעול "; אם HOLD הוא מתג למתג, קרא תחילה את מצב נעילת המקשים,
אם נקרא "מצב נעול", יש להציג את התמונה של "מצב נעול".
2. אם המערכת במצב "לא נעול", לחץ על לחצן הנעילה או סובב את מתג ההחלפה למצב הנעול ברגע זה, ואז
יש להציג את האנימציה "נעילה".
3. אם המערכת במצב "נעול", לחץ על לחצן הנעילה או סובב את מתג ההחלפה למצב לא נעול בשלב זה, ואז
יש להציג את האנימציה "בטל נעילה".
4. אם המערכת במצב "נעול", לחץ על כל כפתור פיזי אחר, למעט כפתור הכיבוי, כדי להציג "נעילה
בנוסף, בשורת "מצב נעול", לא ניתן לחזור על הפקודה.
5. בהנפשת התצוגה או בשורת מצב הנעילה, אם תלחץ על כפתור הנעילה או תשנה את מצב מתג ההחלפה,
אז יש לסיים את ההנפשה או ההנחיה לתמונה הנוכחית ויש להציג את האנימציה "נעילה" או "ביטול נעילה".
לגבי מנעולי מקשים המיושמים באמצעות מפתחות רגילים, אנו בדרך כלל לא מעבדים את היגיון נעילת המפתח במנהל התקן, אלא מציבים זאת
חלק מההיגיון מעובד בשכבת היישום.
עיצוב נעילת המפתחות צריך להשיג מטרה זו: שקוף לחלוטין ליישום, כלומר
Common פותר את כל פרטי נעילת המפתחות.
לכן אנו מתייחסים לנעילת המקשים כאל מקש קיצור. עדיף להשיג את הנעילה והפתיחה ישירות בטבלת המיפוי של מקשי הקיצור.
כפתור הנעילה ממופה כאירוע נעילה, וניתן לשפוט האם לנעול או לבטל את הנעילה בהתאם למצב הנוכחי של נעילת הכפתור. עבור "המצב הנעול
אתה צריך להשתמש במיומנות מסוימת בעיבוד לחיצה על כפתורים אחרים כדי להציג את התמונה "מצב נעול" במצב "במצב".
בלוק דיברנו על עיבוד מוקדם של הודעות מפתח, הפיתרון הוא להשתמש בהן. אנו בפונקציה com_gui_msg_hook,
נשפט שהוא נמצא במצב "נעול", והודעות מקש אחרות מומרות למפתחות וירטואליים KEY_LOCKHOLD, ועל אותה יש ללחוץ
מקשים מתייחסים כמקשי קיצור.
תכנון ממשק שליטה

עמוד 129
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 129
app_result_e gui_keylock (מנעול בול)
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור
RESULT_REDRAW
חזור ל- AP באופן רגיל וצייר מחדש את ממשק המשתמש
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
ערך ההחזרה שהתקבל אינו מעבד בהודעות היישום RESULT_NULL
לַחֲזוֹר
5.5.3.12 שומר מסך
כאשר המערכת במצב סרק למשך זמן מסוים, היא נכנסת לסצנת שומר המסך, שיכולה להציג את השעה הדיגיטלית ולהציג את ההפעלה הנוכחית
אלבום תמונות אלבום של מוסיקה, הציג תמונות הדגמה או כבה את התאורה האחורית של המסך וכו '.
תכונות ועיצוב פקדים
שומר המסך דומה למעשה לתהליך הפיכת המסך לשחור, הוא לא נכנס לסצינה החדשה, ועדיין מפעיל את ביטול הסצינה המקורית.
לולאת המנוחה, אך ממשק המשתמש של הסצינה המקורית כבר לא רענן.
שומר המסך יתחיל בתצוגות ממשק משתמש אחרות, ובדרך כלל דורש טיימר לעדכון מעת לעת, ולכן אנו קובעים את שומר המסך
תג סצינת טיימר ברמת היישום מוקצה כדי להבטיח ששומר המסך לא יתבלבל עם הסצינה המקורית.
תכנון ממשק שליטה
app_result_e gui_screen_save_enter (screen_save_mode_e ss_mode): הכנס את שומר המסך.
app_result_e gui_screen_save_exit (בטל): צא משומר המסך.
5.5.3.13 דיאלוג כיבוי

עמוד 130
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 130
תיבת הדו-שיח הכיבוי היא פונקציית מקשי קיצור פשוט כאשר המשתמש לוחץ על כפתור הכיבוי, תיבת הדו-שיח הכיבוי מופיעה ומציגה.
משך הזמן בו כפתור הכיבוי מוחזק, אם הוא סופר ל -3 שניות או אחר, זה אומר שהמשתמש אישר שהוא רוצה לכבות במקום ללחוץ על כפתור הכיבוי השגוי.
תבנית ממשק משתמש של סצנת בקרה
פרויקט עורך ממשק UI הנו תבנית בקרה המיועדת לבקרת הדיאלוג של הכיבוי, כפי שמוצג באיור הבא:
אם תבניות הבקרה לעיל אינן מתאימות, משתמשים יכולים ליצור תבניות בקרה משלהם בפרויקט Common. על שליטה
מידע נוסף על חלקים מהתבנית, עיין בממשק המשתמש שניתן להגדיר אותו.
תכנון ממשק שליטה
app_result_e gui_shut_off (בטל)
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור
RESULT_APP_QUIT
לחץ לחיצה ארוכה על כפתור הכיבוי למשך 3 שניות כדי לאשר את הכיבוי, היישום צריך להיות ללא תנאי לאחר החזרה
נשר
RESULT_REDRAW
הפסק את הכיבוי והחזרה, חזור ל- AP כדי לצייר מחדש את ממשק המשתמש
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
ערך ההחזרה שהתקבל אינו מעבד בהודעות היישום RESULT_NULL
לַחֲזוֹר
5.5.4 תכנון ושימוש נפוצים
יישום תת-פונקציה נפוצה ספריית ממשקים שונים Common_misc, כולל טיימר מערכת, שינה של יישום, מיקום הודעות ברירת מחדל
ניהול, יישום של עיבוד מוקדם של הודעות פרטיות, הגדרת כיוון המסך, מיפוי בהירות תאורה אחורית, מיפוי כוח סוללה, עיבוד הודעות אזעקה,
עיבוד גילוי אנטנה וכו '.
ניתן להשתמש בחלק זה של הממשק רק על ידי יישומי חזית, ויישומי רקע אינם יכולים ואינם זקוקים לשימוש.

עמוד 131
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 131
5.5.4.1 טיימר מערכת
טיימר מערכת מתייחס לטיימר ברמת היישום המשותף לכל יישומי החזית, המשמש לספק התנהגויות מסוימות של כל יישומי החזית
שירות תזמון עקבי.
US212A מיישם 2 טיימרים מערכתיים:
1. טיימר סוג שליטה sys_counter_timer_id , המשמש למימוש עמעום מסך עיתוי / שחור, הגנת מסך,
חזור לממשק הנגינה, כיבוי חסכון בחשמל, כיבוי טיימר ופונקציות איתור טעינה של סוללה חלשה וטעינה מלאה. תקופת הטיימר
הוא 500 שניות.
2. טיימר ממשק המשתמש sys_status_timer_id משמש ליישום פונקציית העדכון של שורת המצב התקופתית. תקופת הטיימר
הוא 500 שניות.
בהקדמה הקודמת לטיימר ברמת היישום, אמרתי שלטיימר ברמת היישום יש תג סצנה, ותג הסצינה של טיימר המערכת הוא
APP_TIMER_TAG_SYS, שמבטיח כי הטיימר ברמת המערכת תקף בכל יישום חזית, כאשר
עם זאת, sys_status_timer_id לא יבוצע כאשר המסך השחור.
עיצוב הממשק הוא כדלקמן:
void sys_timer_init (void): טיימר המערכת מאתחל ושני הטיימרים לעיל נוצרים. יישומי חזית (למעט
יש להתאים את Ap_config, ap_udisk, ap_playlist ויישומים מיוחדים אחרים) לאחר האתחול של טיימר ברמת היישום
השתמש בממשק זה כדי לאתחל. יודגש כי לאחר שנוצר בהצלחה sys_status_timer_id הוא יתקשר
stop_app_timer (sys_status_timer_id) הפסק להשתמש עד ש- gui_set_headbar_mode נקרא להגדרת שורת המצב
ולהתחיל בתזמון.
void sys_timer_exit (void): טיימר המערכת נהרס. התקשר כדי למחוק את שני הטיימרים לעיל כאשר היישום ייצא.
5.5.4.2 שינה ביישום
שינה של יישום, כלומר תן ליישום החזית להמתין פרק זמן.
כאשר האפליקציה במצב שינה, המשתמש יכול ללחוץ על הכפתור כדי לגרום לאפליקציה לצאת לישון מראש. הגדרת המפתח ליציאה משינה מוקדם היא 2
האחת היא שכל לחיצה על מקשים תצא, ופעולות הקש על מקש עוקבות יסוננו, והשנייה היא לציין את טבלת המיפוי של הודעות המפתח,
רק אירועים תקפים שתואמים לטבלת מיפוי המפתח ייצאו. בחר את הראשון לתרחישים כלליים של יישומים.
בידיעה מהדרישות שלעיל, היישום צריך רק לעבד את לולאת ההודעות של הכפתורים במהלך השינה, כך שניתן להשתמש בתזמון השינה בפשטות
sys_os_time_dly משחרר זכויות בקרת יישומים.
עיצוב הממשק הוא כדלקמן:
app_result_e com_app_sleep ( uint32 sleep_timer, const key_map_t * key_map_list)

עמוד 132
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 132
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור
RESULT_NULL
חזור כשנגמר זמן השינה
gui_event
עיבוד החזרת הודעות המערכת, הימנע מקינון
5.5.4.3 טיפול בהודעות ברירת מחדל
חלק מההודעות / האירועים הציבוריים במערכת מטופלים בדרך כלל בדרך ברירת מחדל, כולל אירועי מקשי קיצור דרך, מערכת
הודעות והודעות / אירועים ציבוריים אחרים וכו '. כמובן, זה לא אומר שניתן לטפל בהודעות / אירועים ציבוריים רק בדרך ברירת המחדל, כגון
אם המשתמש מעוניין בהודעה / אירוע ציבורי מסוים, הוא יכול לטפל בו תחילה ברשימת תפוצת ההודעות / האירועים שלו.
ההודעות / האירועים הציבוריים המטופלים בתכנית US212A הם כדלקמן:
1. אירועי מקשי קיצור דרך: אירוע נעילת מקשים, אירוע דיאלוג כיבוי, אירוע סרגל עוצמת הקול, חזרה לאירוע הממשק הראשי וכו '.
2. הודעות מערכת: הודעת תוסף USB, הודעת ניתוק USB, מטען הודעת תוסף מתאם, מטען
מתאם לשלוף הודעה, הודעת הכנס כרטיס, הודעה לשלוף כרטיס, הודעת הכנס דיסק U, הודעת שולף דיסק U, הגדרת RTC
הודעת אזעקת זמן, הודעת תקע באוזניות (אנטנה), אוזניות (אנטנה) ניתוק הודעה וכו '.
3. הודעות / אירועים ציבוריים אחרים: הודעת סוללה נמוכה, הודעת טעינה מלאה, הודעת שומר מסך, חזרה להודעת השמעה,
ועוד רבים.
עיצוב הממשק הוא כדלקמן:
app_result_e com_message_box (msg_apps_type_e msg_type)
ערך החזרת הממשק מוצג בטבלה הבאה:
ערך החזרה
תיאור
RESULT_NULL
החזר תוצאות ריקות, AP אינו יכול לעשות דבר
RESULT_REDRAW
חזור לממשק המשתמש לצייר מחדש, בדרך כלל AP צריך לצייר מחדש את כל ממשק המשתמש
החזרות אחרות שאינן RESULT_NULL אחרות
ערך
החזר ישירות את תוצאת ההודעה (אירוע)
השימוש הוא כדלקמן:

עמוד 133
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 133
5.5.4.4 החל עיבוד מראש של הודעות פרטיות
בסעיף לעיל הזכרנו שמשתמשים יכולים לתעדף הודעות / אירועים ציבוריים ברשימות ההפצה של ההודעות / האירועים שלהם.

עמוד 134
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 134
הקובץ, פירוש הדבר כי הודעות מערכת מסוימות עשויות שלא לבצע עיבוד ברירת מחדל, ואם נכניס את עיבוד ברירת המחדל
עיבוד חשוב כלשהו, ​​ואז העיבוד החשוב הזה יאבד, וכתוצאה מכך היבטים מסוימים של המערכת יוצאים משליטה.
לשם כך אנו מתייחסים למנגנון של עיבוד מוקדם של הודעות מפתח ומוסיפים עיבוד מוקדם להודעות פרטיות של יישומים, כלומר,
כל עוד מתקבלת ההודעה הפרטית של האפליקציה, פונקציית העיבוד המקדים תיקרא, אם נכניס את כל העיבוד הדרוש
עשה זאת בעיבוד המקדים, ואז זה לא יגרום לבעיות שלעיל.
כמובן שעיבוד מוקדם הוא מנגנון להתערבות בהודעות פרטיות של יישומים, המאפשר שינוי של הודעות וכו '.
בתכנית US212A, הפונקציות שמומשות באמצעות עיבוד מוקדם כוללות:
1. כאשר מתקבלת הודעה חשובה, שחזר את בהירות המסך, צא משומר המסך, נקה את טיימר ההמתנה כדי להתחיל לספור שוב
כאשר התאורה האחורית מתעמעמת, תזמון וכו 'וכו'. החדשות החשובות שהוזכרו כאן כוללות הסרת כרטיסים, הסרת דיסק U, הסרת USB (כולל טעינה
כבל חשמל), כיבוי והספק נמוך וכו '.
2. המערכת מערבת כבל ניתוק כבל USB וניתוק כבל טעינה, לכן עליכם להבחין בין ניתוק USB לבין ניתוק חיבור לביצוע עיבוד מראש.
חבר או נתק את כבל הטעינה.
5.5.5 הקצאת שטח משותף
5.5.5.1 מרחב נתונים
שטח נתונים עבור יישומי חזית
0x9fc1d200-0x9fc1d9ff סה"כ 2KB, שטח הנתונים הגלובלי הוא AP, מודול משותף ומשופר
משותף על ידי המודולים.
שטח נתונים ליישומי רקע
0x9fc1da00-0x9fc1dfff כולל 1.5KB, שטח הנתונים הגלובלי הוא AP, מודול משותף ומודול משופר
חסום משותף.
מרחב נתונים גלובלי במקרה
0x9fc19f80-0x9fc19fff כולל 128B. שטח הנתונים הגלובלי הזה משותף לכלל מכשירי ה- AP, רק ב- ap_manager
זה מאותחל פעם אחת, משמש בעיקר לאחסון נתונים גלובליים של כמה מקרים של המודול Common.
5.5.5.2 שטח קוד
מרחב הקוד של יישום החזית
קטע קוד תושב של יישום חזית: 0xbfc1ee00-0xbfc1f5ff סה"כ 2KB, המשמש לאחסון AP, מודול משותף,
ממשק התושבים של המודול המשופר ונתוני const ונתוני בנק קשורים.
קבוצת בנק בקרה קדמית : (0x40 ** 0000 + 0x1fe00) - (0x40 ** 0000 + 0x205ff) 2KB בסך הכל, בעיקר בשימוש

עמוד 135
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 135
לאחסון ממשקי AP שאינם תושבים, תרחישי בקרה נפוצים וכו '. המודול המשותף מעסיק את קבוצת בנק הבקרה
בנק 48 ~ בנק 63 הם 16 מספרי בנק.
קבוצת בנק קדמית של ממשק המשתמש : (0x48 ** 0000 + 0x1f600) - (0x48 ** 0000 + 0x1fdff) 2KB בסך הכל, משמש בעיקר לאחסון
שים ממשקים אחרים של מודול משותף וכו '. נקודה נוספת שזקוקה להסבר מיוחד היא שמכיוון שקבוצת הבנק UI היא בעצם
המודול המשותף הוא בלעדי, כך שניתן להקצות היטב את המודול המשותף על מנת להשיג מספר גדול של בנקים AP
לצורך העברת / שיתוף נתונים אנו משתמשים (0x48 ** 0000 + 0x1f600) - (0x48 ** 0000 + 0x1f7ff) כדי לאחסן סה"כ 0.5KB
יש נתוני בנק של המודול Common, כך שבמקטע בנק ממשק המשתמש יש רק 1.5KB שטח פנוי במקרים רבים.
בנוסף, חלק מהיישומי AP צריכים לשים כמה ממשקים בקבוצת הבנק UI במצבים מיוחדים כדי להימנע מהם
בנקים נחתכים לעיתים קרובות בקבוצת בנק הבקרה, לכן אנו שומרים 16 בנקים 0 בנק 15 בקבוצת בנק ממשק המשתמש
מספר הבנק ניתן ל- AP, כך שלמעשה, המודול המשותף יכול להשתמש רק ב 48 מספרי הבנק של בנק 16 ~ בנק 63.
שטח קוד ליישומי רקע
קטע קוד תושב של יישום רקע: 0xbfc1e800-0xbfc1edff סה"כ 1.5KB, המשמש בעיקר לאחסון AP, מודול משותף
ממשק תושב של מודול חוסם ומשופר ומשופר נתונים ונתוני בנק קשורים.
קבוצת בנק בקרת גב : (0x60 ** 0000 + 0x1e000) - (0x60 ** 0000 + 0x1e7ff) 2KB בסך הכל, בעיקר בשימוש
לאחסון ממשקי AP לא תושבים, ממשקים נפוצים שאינם תושבים וכו '. המודול המשותף תופס בנק 40 ~ בנק 63
מספר הבנק 24.
הערה: 6 ביט הגבוה ביותר בכתובת מייצג את מספר הבנק בקבוצת הבנק, לדוגמה, 0x10 מייצג את בנק 4.
5.5.5.3 הוראות להקצאת שטח
1. שקול היטב את המאפיינים של מנגנון הבנק:
1) לא ניתן להפסיק את נתוני הבנק במהלך מחזור החיים, למעט כמה נתונים טהורים הניתנים לקריאה חוזרת.
במקרה זה, יש לטעון מחדש את נתוני הבנק לאחר המעבר חזרה.
2) מעבר בנקאי מתרחש כאשר פונקציות של בנקים שונים באותה קבוצת בנק נקראות זו לזו. במקרה זה, למעט
בנוסף להוסיף שני מתגי בנק קדימה ואחורה, יש בעיה נוספת שזקוקה לתשומת לב מיוחדת, כלומר, נתונים קבועים, חבילה
כולל נתוני const ונתונים קבועים בפונקציה, אינך יכול להעביר פרמטרים לפי מצביע, מכיוון שהפונקציה קוראת
לאחר מתג הבנק, הנתונים הקבועים נחתכים, כלומר, התוכן אליו מצביע המצביע נשטף.
2. לעמוד ביעדי המיתוג של הבנק:
1) ביישומי רקע, באופן עקרוני, יישום הרקע צריך להיות במצב רגיל ולא קיבל את הבקשה פרטית
מעבר בנקאי לא יתרחש במקרה של הודעות.
2) עבור יישומי חזית, באופן עקרוני, לאחר שהמסך משחיר, אין פעולת מקשים ולא מתקבלת תגובה.
מעבר בנקאי לא יתרחש בעת שימוש בהודעות פרטיות.
הוראות מיוחדות:
1) ביצוע ה- ISR של הטיימר ברמת היישום שקוף למשתמש במידה מסוימת, ועיתוי השיחה שלו אינו

עמוד 136
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 136
זה נשלט ישירות על ידי המשתמש, כך שלעתים למשתמש לא אכפת במיוחד בגלל הטיימר ברמת היישום
מעבר בנקאי גרם. אז כאן מוצג במיוחד כדי להמחיש. כדי להפחית את התוצאה
מעבר בנקאי, ואז עקוב אחר התקנות: נסה להימנע מהצבת ה- ISR של הטיימר ברמת היישום בעיבוד ההודעות
הלולאה נמצאת בבנק אחר בקבוצת הבנק, או ש- ISR של כל הטיימרים ברמת היישום צריך להיות
אחסן אותם בכמה שפחות בנקים.
5.5.5.4 תבנית סקריפט קישור
המודול המשותף מספק 3 תבניות סקריפט קישורים שונות, בהן ניתן להשתמש ישירות.
פשוט הוסף את קובץ ה- xn המתאים לרשימת הערכים של פרמטר LD_SCRIPT בתכנית ה- makefile:
1. common_front.xn: סקריפט קישור מודול משותף ליישום קדמי מלא.
2. common_front_no_selector.xn: יישום קדמי סקריפט קישור מודול משותף ללא בורר קבצים.
3. common_engine.xn: יישום רקע סקריפט קישור מודול נפוץ.
הסיבה לכך שסקריפט הקישורים של המודול המשותף ליישום החזית מבדיל בין אם יש בורר קבצים הוא מכיוון שיש בורר קבצים
עבור היישום הקדמי, עליו להיות מקושר למודול המשופר, ופרויקט הקישור שלו יהיה הרבה יותר מסובך.
יתרון אחד בשימוש באותה סקריפט קישור מודול נפוץ הוא שלא משנה באיזה יישום מדובר, זהה
כתובת קישור הקישור לממשק עקבית, הנוחה לניפוי באגים בתוכניות. אבל בדרך זו, יישומים מסוימים יעשו זאת
הממשק הנפוץ שאורז בתוכו ארוז גם הוא ובוזבז שטח קושחה. לפיתרון nandflash, לא
בעיה, אך עבור פיתרון nor flash, אם יש הרבה מקום מבוזבז, כדאי לשקול להפיק את המרב מהתבנית
סקריפט קישור קטן.
5.6 תכנון ופיתוח יישומי קדמי
יישום החזית, המכונה גם יישום ממשק המשתמש, מתייחס ליישום שצריך להציג את ממשק המשתמש ולקיים אינטראקציה עם המשתמש באמצעות ה- GUI.
5.6.1 מבנה ההרכב של יישום החזית
5.6.1.1 רכיבי יישום
יישום החזית מורכב בעיקר מהחלקים הבאים:
❖ הגוף העיקרי של האפליקציה, כלומר החלק הרלוונטי בעסקי האפליקציות, התרחיש הוא היחידה העסקית וניתן להבין את האפליקציה כולה כתחום
לולאת תזמון סצינות, וכל סצנה היא לולאה לעיבוד הודעות

עמוד 137
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 137
Module מודול נפוץ, כלומר ספריית ממשק פונקציות בסיסית של יישומים
Library ספריית תיווך ופונקציות, כולל דפדפן קבצים, בורר קבצים, מתורגמן מילים, מתורגמן ID3, USB
ספריית פונקציות וכו '.
Library ספריית זמן ריצה, ctor.o, כאשר האפליקציה מתוזמנת, פונקציית התחלה __ בספריה תפעל תחילה ותיקרא על ידי פונקציה זו
הפונקציה העיקרית של היישום
Library ספריית ממשק API, api.a, גרעין וכניסת גישה של כל דרייבר
❖ צור סקריפט, * .makeefile
Script סקריפט קישור xn, * .xn, באופן כללי, יישום החזית כולל 3 סקריפטים של xn, שהם הקישור של ה- AP עצמו.
סקריפט קישור, חלק משופר מסקריפט הקישור וחלק משותף של סקריפט הקישור; סקריפט הקישור פועל גם כ- AP
קובץ תצורת חבילה
Files קבצי תצורה, כולל ממשק משתמש הניתן להגדרה *. תפריט תצורתי, להגדרה * .mcg ותצורת קושחה config.bin
הערה: יישום החזית אינו כולל פענוח / קידוד תווך וספריות. לניהול מודולים מגובש יותר, אנו מפענחים
/ קידוד תווך וספריות נארזות כקבצי * .אל, ונטענות ופועלות כחוטי משנה.
למידע נוסף על קבצי .al, עיין בסעיף.
5.6.1.2 ארכיטקטורת בסיסית ליישום
יישום החזית לוקח את מחזור תזמון הסצינות -> מחזור עיבוד ההודעות כמבנה הבסיסי. הסצנה כביכול היא כאשר האפליקציה מתוכננת,
כדי להפוך את העבודה לפיצול, לרוב ממשק ראשי מסוים (בדרך כלל ממשק למסך מלא) וכמה גבולות משניים סביבו
המשטח (בדרך כלל ממשק שאינו מסך מלא) מיושם באותה לולאת בקרה, אנו מכנים לולאת בקרה זו ואוסף הממשקים הללו.
הגופה היא סצנה.
תזמון הסצנה של יישום החזית מוצג באיור הבא:
סצנה 1
סצינה 2
סצינה 3
עיבוד מיתוג סצינה
כניסה לתוכנית
יציאה מתוכנית
להיכנס
נשר
להיכנס
נשר
להיכנס
נשר

עמוד 138
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 138
הארכיטקטורה הבסיסית של הסצנה מוצגת באיור שלהלן:
כניסה לסצינה
יציאת סצינה
צריך
עדכן את ממשק המשתמש
להשיג ולעבד
ריבית
עיבוד הודעות GUI
לולאת הודעה
עיבוד הודעות בקשה (חבילה
כולל הודעות מערכת)
צור טיימר
הרס טיימר
טיימר ברמת היישום
ביצוע תקופתי של עסק יישומים
תיאור:
❖ התרחיש מבוסס על לולאה לעיבוד הודעות, בה מתקבלים ומעובדים הודעות gui והודעות פרטיות על יישומים בלולאת עיבוד ההודעות.
שלח הודעה ועדכן את ממשק המשתמש לפי הצורך.
❖ בנוסף, לעתים קרובות יש כמה אירועי עיבוד תזמון בסצנה, כמו עדכון ממשק המשתמש הרגיל, שמושלם על ידי טיימר ברמת היישום.
ניתן לחלק את הקלעים לשתי קטגוריות: סצינות מותאמות אישית של AP וסצינות בקרה נפוצות. ניתן לממש את זירת השליטה הנפוצה
כדי להיות מקבילים לסצינות מותאמות אישית אחרות של AP, זה יכול להיות מקונן גם כסצנת משנה של סצינות מותאמות אישית של AP.
ביניהם, סצנת השליטה ברשימת התפריטים היא סצינה מיוחדת, סוג זה של סצינה דרך פונקציית ההתקשרות של התפריט, אתה יכול
הפעל פונקציות עסקיות של יישומים בתרחיש שליטת הרשימה.
5.6.1.3 מבוא לנושא היישום
גוף היישום של יישום החזית הוא קוד המקור המאוחסן בתיקיית המשנה של היישום, וניתן לחלק אותו לבסיסי יישומים מבחינת פונקציית הקוד.
ארכיטקטורה זו, תצוגת ממשק UI של יישומים ופונקציות עסקיות של יישומים:
Architecture אדריכלות בסיסית ליישום
✧ אתחול, כולל רישום applib, אתחול מנהל ההודעות, רישום טיימר ברמת היישום, תזמון מערכת
לאתחל את המכשיר, לקרוא משתני סביבת vm של יישומים, לפתוח mcg, קבצי sty וכו '.
✧ צא, כולל סגירת קבצי mcg ו- sty, שמירת משתני סביבת יישום vm, סגירת טיימר המערכת,
יציאת applib וכו '.

עמוד 139
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 139
Cycle מחזור תרחיש, ארגן עסקי יישומים לפי תרחיש.
Loop לולאת ההודעות, הגוף העיקרי של הסצנה, מקיימת אינטראקציה עם המשתמש והמערכת.
Functions פונקציות עסקיות ליישומים
✧ מכוסה בצורה של פונקציית התקשרות חזרה של התפריט, המבוצעת על ידי מתורגמן התפריט.
✧ השתמש בביצוע מחזור טיימר ברמת היישום.
✧ טיפול באירועי gui בלולאת ההודעות בסצינה או בהודעות פרטיות של אפליקציה.
Display תצוגת ממשק היישום
✧ בדרך כלל בלולאת ההודעות של הסצינה, אם הפונקציה העסקית של היישום צריכה לעדכן את תצוגת ממשק המשתמש, היא תבוצע.
באופן כללי, כל אלמנט ממשק משתמש תואם לקצת משתנה דגל עדכון ממשק המשתמש, ויש צורך לעדכן אלמנט ממשק משתמש מסוים.
הגדר את סמל הדגל המתאים.
Display ניתן להפעיל את תצוגת ממשק היישום ישירות ב- ISR של הטיימר ברמת היישום, שניתן ליישם בצורה פשוטה יותר.
תצוגת ממשק המשתמש מתעדכנת מעת לעת.
5.6.1.4 כיצד להשתמש ב- Common
Common הוצג בפירוט בתכנון והשימוש של מודול Common בפרק הקודם.
כדי להסביר כיצד להשתמש ב- Common.
Interaction אינטראקציה בין נתוני תצורת המערכת בין AP ל- COMMON, לאחר הגדרת com_set_sys_comval,
COMMON ניגש ישירות לנתוני תצורת המערכת של ה- AP דרך sys_comval.
❖ COMMON מיישם טיימר ברמת היישום, שיכול לתמוך בצורה מושלמת בטיפול הטיימר כפונקציה בנקאית או כשיחה
פונקציית בנק; בכידון יש להודיע ​​ל- AP על משהו מעבר למשתנים גלובליים, אך גם
אתה יכול לשלוח לעצמך הודעות אסינכרוניות.
❖ COMMON מבין שני טיימרים מערכתיים. ביניהם, 1 משמש לטיפול בתאורה אחורית, שומר מסך ולחזרה לעולם המשחק
כיבוי פנים, חסכון בחשמל, כיבוי מתוזמן וכו '; 1 משמש לעדכון מצב סרגל הראש.
COMM ב- COMMON, בתגובה להודעות פרטיות של יישומים, התקשר להודעה שהועברה בממשק applib_message_init
פונקציית חלוקת המידע מבצעת עיבוד הפצה. שימו לב גם כי COMMON מתקשר לפונקציית הפצת ההודעות של AP,
בדרך כלל עבור לבנק בקרה. אם המתקשר הוא בנק בקרה ויש נתוני בנק, אז בנק
הנתונים יישטפו אלא אם כן שטח נתוני הבנק שומר מקום לשני הבנקים.
❖ בכדי לאפשר אינטראקציה גדולה בין נתונים בין בנקים שונים בקבוצת הבנק UI, שמנו את 512 הראשונים
Bytes שמורים כמרחב נתוני בנק.
❖ יש אזור משתנה גלובלי של מערכת 128 בתים applib_globe_data.o (.bss) ב- COMMON,
אחסן משתנים לניהול מערכות, חלק זה של המשתנה יאתחל רק פעם אחת עם הפעלת המערכת; חלק זה של ניהול המשתנה
המידע הבסיסי של כל יישומי המערכת ומידע על מצב המערכת יכול להיות נוח מאוד לסייע למערכת הניהול.
5.6.1.5 מבנה קובץ תמונה ליישום

עמוד 140
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 140
תוכנית היישום מפיקה את קובץ התוצאה * .exe דרך קישור ההדרכה של make, אך מכיוון שקובץ * .exe מכיל הרבה
הרבה מידע על ניפוי באגים שלא משפיע באופן מעשי על ריצה, שמבזבז הרבה מקום; * .exe הוא ELF רגיל
ההסבר על מבנה הקבצים מורכב גם יותר. לפיכך אנו מספקים את כלי היצרן של היישום להסרת מידע על איתור באגים מיותר
מידע, רק חילץ את קטעי הקוד ונתונים שאנו זקוקים להם, וארוז אותם במבנה קבצים תמציתי מאוד, מיוצר
הכלי אורז את היישום לקובץ * .ap, המבנה של קובץ תמונה זה הוא כדלקמן:
שֵׁם
לְקַזֵז
(בתים)
אורך
(בתים)
מתאר
סוג קובץ
0
1
FILE_AP'P '
סיומת הקובץ: ". AP"
ap_type
1
1
סוג AP: AP_SYSTEM 0X00
AP_USER 0X01
כל השאר שמורים.
Major_version
2
1
מספר הגרסה העיקרית
שינוי קל
3
1
מספר גרסת קטין
קֶסֶם
4
4
לוגו קסם "bx29"
text_offset
8
4
קיזוז בקובץ קטע הקוד
אורך טקסט
12
4
אורך קטע הקוד
text_addr
16
4
הכתובת של קטע הקוד בזיכרון
נתונים_קזז
20
4
אתחל את הקיזוז בקובץ קטע הנתונים
אורך נתונים
עשרים וארבע
4
אתחול אורך קטע הנתונים
data_addr
28
4
אתחל את הכתובת של פלח הנתונים בזיכרון
bss_length
32
4
אורך קטע נתונים לא מאתחל
bss_addr
36
4
הכתובת של קטע הנתונים הבלתי מאתחל בזיכרון, לא אותחלה
קטע הנתונים מאתחל אוטומטית בעת טעינת היישום
ל 0
כְּנִיסָה
32
4
כתובת כניסה AP
לשוב
36
XXX
ריפוד בתים
AP_Bank_head
XXX
12 * X
כותרת בנק AP, כל 12 בתים תואם בנק אחד
טקסט_תוכן
אורך טקסט 2K מיושר
תוכן קוד תושב
נתונים_תוכן
אורך נתונים 2K מיושר
תוכן נתונים לתושבים
קוד בנק AP
XXX עם קו ישר
קוד בנק
תיאור:
❖ ממבנה קובץ היישום ניתן לראות כי יישום יכול להכיל רק קטע קוד אחד לתושב וראשון אחד
פלח נתוני תושבים ופלח נתוני תושבים לא מאותחל, כך שאם תוכנית היישום היא
החלל מחולק לשני מקטעי שטח או יותר, יש להשתמש באמצעים מיוחדים, במידת הצורך יש להתייעץ עם מהנדסי FAE
צ'נג שי.

עמוד 141
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 141
❖ כניסה היא בדרך כלל פונקציית __ התחלה של ספריית זמן הריצה, המוצהרת באמצעות ENTRY (התחלה __) בקובץ ה- xn.
Knowledge ידע משלים: מגזר
קטע פלח
תיאור
.טֶקסט
קטע קוד, כולל קבועים בקוד (מספרים ומיתרים, שימו לב שהוא משמש ישירות
יוצב בקטע .text, מייד לאחר סיום הפונקציה, כלומר לאחר הוראות jrc)
.רודאטה
פלח נתונים לקריאה בלבד, כולל משתנים גלובליים קבועים
.xdata
מגזר נתוני בנק, המוצהר כמשתנה של _BANK_DATA_ATTR_ (הערה:
קובץ ה- .xdata שאינו מקושר ב- * .xn יוצב אוטומטית לאחר הקטע .data
פני השטח, מה שאומר שהוא תופס את שטח הנתונים של התושבים)
.נתונים
משתנים גלובליים מאתחלים, כולל מחרוזות אתחול ללא הצהרת const
.bss
משתנים גלובליים לא מאולמים (מאותחל ל -0 גם אינו מאתחל), סעיף .Bss
ינוקה ל 0 בעת הטעינה
ציין את קטע קוד פלט השם
השתמש ב- __ סעיף __ (".קטע") כדי להגדיר את הפונקציה ואז בסקריפט הקישור XN
בקובץ, השתמש ב- filename.o (.section) כדי לייצג את קטע הפלט (. לא. הוא לא חובה)
5.6.2 שטח הזיכרון של יישום החזית
שטח הזיכרון שהוזכר כאן אינו שטח הזיכרון הפיזי של SRAM, אלא מתייחס לכל הכתובות בהן נעשה שימוש ביישום
סכום החלל.
חללים אלה כוללים את החלקים הבאים:
● שטח תושב
● שטח נתונים תושב
● קוד BANK ומרחב נתונים BANK
● הרץ שטח ערימה
● שטח ערימה משותף
● שטח VRAM
הצגנו קודם את מנגנון ה- BANK, המחלק את שטח הכתובות של 32 סיביות לשני חלקים, ואמצעי ה- 14 הסיביות הראשון
בעמוד לא, הסיבוב הבא 18 מייצג את כתובת הזיכרון הפיזי.
ביניהם, הדף לא של שטח הקוד של התושב הוא 0xbfc, הדף לא של שטח הנתונים של התושב הוא 0x9fc, ודור ה- BANK
ישנם מספר עמודים של קודים ונתוני BANK, אשר מוסברים בפירוט בהמשך.

עמוד 142
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 142
בנוסף, Common הוא חלק חשוב ביישום. להקצאת זיכרון, עיין בניתוח החלל של Common.
עם אחד.
5.6.2.1 שטח קוד תושב
קטע קוד תושב של יישום חזית: 0xbfc1ee00-0xbfc1f5ff סה"כ 2KB, המשמש לאחסון AP, מודול משותף,
ממשק התושבים של המודול המשופר ונתוני const ונתוני בנק קשורים.
5.6.2.2 שטח נתונים תושבים
שטח נתונים עבור יישומי חזית
0x9fc1d200-0x9fc1d9ff סה"כ 2KB, שטח הנתונים הגלובלי הוא AP, מודול משותף ומשופר
משותף על ידי המודולים.
מרחב נתונים גלובלי במקרה
0x9fc19f80-0x9fc19fff כולל 128B. שטח הנתונים הגלובלי הזה משותף לכלל מכשירי ה- AP, רק ב- ap_manager
זה מאותחל פעם אחת, משמש בעיקר לאחסון נתונים גלובליים של כמה מקרים של המודול Common.
5.6.2.3 קוד BANK ומרחב נתונים BANK
קבוצת בנק בקרה קדמית : (0x40 ** 0000 + 0x1fe00) - (0x40 ** 0000 + 0x205ff) 2KB בסך הכל, בעיקר בשימוש
לאחסון ממשקי AP שאינם תושבים, תרחישי בקרה נפוצים וכו '. המודול המשותף מעסיק את קבוצת בנק הבקרה
בנק 48 ~ בנק 63 הם 16 מספרי בנק.
קבוצת בנק קדמית של ממשק המשתמש : (0x48 ** 0000 + 0x1f600) - (0x48 ** 0000 + 0x1fdff) 2KB בסך הכל, משמש בעיקר לאחסון
שים ממשקים אחרים של מודול משותף וכו '. נקודה נוספת שזקוקה להסבר מיוחד היא שמכיוון שקבוצת הבנק UI היא בעצם
המודול המשותף הוא בלעדי, כך שניתן להקצות היטב את המודול המשותף על מנת להשיג מספר גדול של בנקים AP
לצורך העברת / שיתוף נתונים אנו משתמשים (0x48 ** 0000 + 0x1f600) - (0x48 ** 0000 + 0x1f7ff) כדי לאחסן סה"כ 0.5KB
יש נתוני בנק של המודול Common, כך שבמקטע בנק ממשק המשתמש יש רק 1.5KB שטח פנוי במקרים רבים.
בנוסף, חלק מהיישומי AP צריכים לשים כמה ממשקים בקבוצת הבנק UI במצבים מיוחדים כדי להימנע מהם
בנקים נחתכים לעיתים קרובות בקבוצת בנק הבקרה, לכן אנו שומרים 16 בנקים 0 בנק 15 בקבוצת בנק ממשק המשתמש
מספר הבנק ניתן ל- AP, כך שלמעשה, המודול המשותף יכול להשתמש רק ב 48 מספרי הבנק של בנק 16 ~ בנק 63.
קבוצת BANK 1 משופרת קדמית : (0x78 ** 0000 + 0x27000) - (0x78 ** 0000 + 0x277ff) = 2KB,
משמש לאחסון ממשק מודול התווך, אם אינך זקוק לתמיכה של תווך, אתה יכול לשים כל קוד ונתון.
קבוצות BANK משופרות מקדימה: (0x71 ** 0000 + 0x27800) - (0x71 ** 0000 + 0x27fff) = 2KB,
הוא משמש לאחסון ממשקים אחרים של מודולי תווכה. אם אין צורך בתמיכה של אמצעי תוכנה, ניתן להציב קוד ונתונים כלשהם.
5.6.2.4 הפעל שטח ערימה

עמוד 143
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 143
יישום החזית עשוי ליצור חוטי משנה, וחוטי המשנה זקוקים לערימות הפעלה עצמאיות, כך שהמערכת מקצה אותם ליישום החזית.
יש לטפל בנפרד בערימת המחסנית בה נעשה שימוש, בהתאם לשאלה האם ישנם חוטי ילדים:
● כשאין חוט ילדים: 0x9fc26eb0 ~ 0x9fc265c0 = 0x8f0 B
● כשיש חוטי ילדים:
✧ פתיל ראשי: 0x9fc26eb0 ~ 0x9fc26ac0 = 0x3f0 B
✧ משנה משנה: 0x9fc26ac0 ~ 0x9fc265c0 = 0x500 B
כאשר האפליקציה פועלת, שיחות פונקציות צורכות מקום רב בערימה, וכל שיחת פונקציה צורכת לפחות 24 בתים.
לכן, בתרחישים מסוימים עם פונקציות מורכבות, יש לשטח את הפונקציות ככל האפשר כדי לצמצם את השימוש בחלל הערימה.
בנוסף, חלוקת שטח המחסנית לעיל איננה מגבלה מתה, המשתמשים יכולים להיות גמישים בהתאם למצב בפועל של היישומים שלהם.
התאמה חיה, כלומר, החוט הראשי יכול להקצות גמישות ערכים בעת הגדרת OS_STK * ptos, בעוד שאשרי הילד גמישים בעת יצירת חוטים
מלא את הערך של חבר ה- pthread_param_t-> ptos.
5.6.2.5 שטח ערימה
המערכת מספקת 512 בתים של שטח ערימה, המשותף לכלל המערכת, והמרחב מוגבל יחסית. יישום
התוכנית יכולה להגיש בקשה זמנית לכמות זיכרון קטנה.
ערמת יישום: sys_malloc (& menu_history_addr, path_size);
ערימת חינם: sys_free (& menu_history_addr);
5.6.2.6 שטח VRAM
VRAM הוא שטח זיכרון לא נדיף שמור מהדיסק הראשי הנוכחי, יש לו קיבולת גדולה, אך מהירות הקריאה והכתיבה איטית מאוד.
בתרחישים שבהם המהירות אינה גבוהה, ניתן להשתמש בה לאחסון משתני סביבת יישומים ומאגרי נתונים זמניים.
המערכת מקצה 512KB שטח VRAM למקרה, ו- 1KB לכל יישום כדי לחסוך משתני סביבת יישומים.
השטח שנותר משמש כמאגר נתונים זמני ליישום.
כדי להקצות שטח VRAM ולהשתמש בו, שימו לב לא לכסות את שטח ה- VM של מודולים אחרים, ושימו לב לתחילת 0x80000
המרחב מוקצה ל- PSP. באופן עקרוני לא ניתן להשתמש במקרה. אם אתה באמת צריך להשתמש בשטח לאחר 0x80000, בבקשה
צרו קשר עם המהנדסים שלנו לקבלת תמיכה.
5.6.3 הפעלת היישום
❖ צור AP באופן סינכרוני ליצירת אודיו רקע, כגון מנוע מוסיקה
1) יישום החזית שולח את MSG_CREAT_APP_SYNC למנהל.אפ כדי לוותר על השליטה.
2) Manager.app מקבל את ההודעה של יצירת AP באופן סינכרוני ומתקשר ל- sys_exece_ap (ap_name, 1,

עמוד 144
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 144
(int32) ap_param) צור מנוע רקע.
3) המתן ליצירת מנוע הרקע וחזור למנהל .app ו- reply_sync_msg כדי לאפשר ליישום החזית להמשיך.
המשך ביצוע.
4) בשלב זה, הסנכרון של יצירת ה- AP הושלם.
Create צור באופן אסינכרוני AP המשמש ליצירת יישום חזית. ניתן ליצור אותו רק לאחר יישום החזית הנוכחי.
זה נגרם על ידי מגבלה של משאבי שטח הזיכרון.
1) יישום החזית שולח את MSG_CREAT_APP למנהל.אפ.
2) כאשר manager.app מקבל את הודעת ה- AP של היצירה האסינכרונית, התקשר תחילה ל- libc_waitpid כדי לחכות ל- AP החזית הנוכחי כדי לצאת
ואז התקשר אל sys_exece_ap (ap_name, 0, (int32) ap_param) כדי ליצור יישום חזית חדש.
3) בשלב זה, פעולת היצירה של ה- AP של manager.app הושלמה, ולא משנה אם ניתן ליצור את ה- AP בהצלחה.
קח דוגמה את הפעלת האפליקציה ap_music. מצב ההפעלה של יישום Ap_Music מחולק לשני סוגים: מהממשק הראשי
הפעל והפעל מהיישום ap_browser.
✧ התחל מהממשק הראשי (מצב פעיל): המשתמש בוחר את היישום ap_Music להפעלה ב- ap_mainmenu.
בלולאת ההודעות של אפליקציית Ap_mainmenu מתקבלת ההודעה EVENT_MAINMENU_CREATE_APP,
ולטפל בזה בפונקציית עיבוד ההודעות mainmenu_gui_msg_handle () של mainmenu_msg_handle.c
הודעה, פונקציה זו יוצרת יישומים שונים המבוססים על אינדקסים שונים ואיזה אינדקס מתאים
AP, מהשדה MAINMENU_AP_ID_ARRAY של קובץ התצורה usdk212a \ case \ fwpkg \ config.txt
באיזו יישום כל תעודת זהות AP מוגדרת בקובץ usdk212a \ case \ inc \ case_type.h שנמצא בפנים.
רֹאשׁ. כאשר ערך מזהה AP המתאים לאינדקס הוא 0x00, נוצר ap_music.
התחל את תהליך התחלת ap_music מ- ap_mainmenu באופן הבא:

עמוד 145
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 145
הַתחָלָה
Ap_mainmenu קיבלה הודעת יצירת AP
Ap_mainmenu שולח הודעה אסינכרונית המבקשת ליצור ap_Music ל- ap_manager
mainmenu_msg.type = MSG_CREAT_APP;
send_async_msg (APP_ID_MANAGER, & mainmenu_msg);
לולאת ההודעות של Ap_mainmenu מחזירה RESULT_APP_QUIT
Ap_manager קיבלה הודעה MSG_CREAT_APP
האם Ap_mainmenu יצא?
Ap_manager יוצר ap_music
סוֹף
י
Ap_manager מחכה ש- ap_mainmenu ייצא
נ
יציאה Ap_mainmenu
תרשים הזרימה של התחלת ap_music מ- ap_mainmenu מוסבר באופן הבא:
השלב הראשון: ap_maimenu מקבל את הודעת המפתח;
שלב 2: הודעת המפתח ממופה לקוד האירוע EVENT_MAINMENU_CREATE_APP; (התקשר
com_key_mapping ממשק, הקוד המתאים הוא ב mainmenu_msg_loop.c)
השלב השלישי: השב לאירוע EVENT_MAINMENU_CREATE_APP בקוד הטיפול באירועים: למשימה
המנהל שולח הודעות אסינכרוניות: send_async_msg (APP_ID_MANAGER, & mainmenu_msg); (קוד מתאים
הקוד נמצא ב mainmenu_msg_handle.c, וסוג ההודעה מוגדר MSG_CREAT_APP) ואז צא מה AP.
שלב 4: ap_manager מגיב להודעה MSG_CREAT_APP וקורא sys_exece_ap (ap_name, 0,
(int32) ממשק ap_param) כדי להריץ את היישום (הקוד התואם נמצא ב- ap_manager / manager_msg_handle.c)
שלב 5: שימו לב כי בשלב השלישי נשלחת הודעה "אסינכרונית" ו- ap_mainmenu יחזור מבלי לחכות לתגובת ההודעה.
חזור אל RESULT_APP_QUIT ויצא מ- ap_mainmenu.

עמוד 146
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 146
ממשק send_async_msg () הוא ממשק שליחת הודעות אסינכרוני, המוגדר ב
usdk212a \ case \ ap \ common \ applib \ Message_Bank_Send.c וקובץ הכותרת usdk212a \ case \ inc \ applib.h
בְּתוֹך. הפרמטר הראשון הוא מזהה ה- AP המקבל את ההודעה, והפרמטר השני הוא מבנה ההודעה private_msg_t.
התיאור של כל אחד מחברי המבנה הוא כדלקמן:
typedef struct
{
/ *! סוג הודעת היישום, ראה הגדרה של msg_apps_type_e * /
סוג uint32;
/ *! תוכן הודעת היישום * /
הִתאַחֲדוּת
{
/ *! הנתונים האמיתיים של תוכן ההודעה * /
נתוני uint8 [4];
/ *! מצביע חוצץ התוכן של ההודעה, המצביע על שטח הכתובת של שולח ההודעה * /
void * addr;
}תוֹכֶן;
} msg_apps_t;
במבנה נתונים זה, נתונים [0] מאחסנים את מזהה ה- AP שצריך ליצור (נקבע על פי ההגדרה במקרה_הטיפוס.ה),
נתונים [1] מגדירים את הפרמטרים שצריכים לצטט בעת יצירת AP. לפרמטרים שונים, לאחר יצירת ה- AP, יתכן שהוא מבוסס על פרמטר זה
לעבד תהליכים עסקיים שונים.
✧ התחל מדפדפן (מצב פסיבי): כאשר המשתמש בוחר קובץ מוסיקה לפתיחה ב- ap_browser, הוא
התחל ap_music והפעל את קובץ המוסיקה המתאים.
תרשים הזרימה להפעלת ap_music מ- ap_browser הוא כדלקמן:

עמוד 147
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 147
תרשים הזרימה של התחלת ap_music מ- ap_browser מוסבר באופן הבא:
שלב 1: בסצנת browser_scene_filelist () של היישום Ap_browser (סצנה זו מוגדרת בקובץ
browser_scene_browsing.c), על ידי קריאה לממשק gui_directory () המשותף למימוש הקובץ
עיין (ממשק זה מוגדר במקרה הקובץ \ ap \ common \ common_ui \ ui_directory.c ובקובץ הכותרת)
מקרה \ inc \ common_ui.h). כאשר המשתמש גולש בקובץ, הוא בוחר קובץ שמע ומידע הקובץ מאוחסן בו
במשתנה הגלובלי g_browser_var של AP זה, יוצא תזמון הסצנה.
שלב 2: Ap_browser מתקשר _browser_proc_result (תוצאה), ממשק זה שולח את יצירת הבקשה
ap_Music
הודעה אסינכרונית אל
ap_manager (ממשק זה מוגדר ב-
usdk212a \ case \ ap \ ap_browser \ browser_main.c בפנים): send_async_msg (APP_ID_MANAGER,
& msg) ;, ושמור את הקובץ ומידע הנתיב שלו במשתנה הגלובלי g_browser_var ב- VRAM.
לכן, מבלי לחכות לתגובת המקלט, הקוד הבא יוצא מ- ap_browser.

עמוד 148
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 148
send_async_msg () מוגדר ב- usdk212a \ case \ ap \ common \ applib \ Message_Bank_Send.c ובקובץ הכותרת
ב- usdk212a \ case \ inc \ applib.h,
השלב השלישי: ap_manager מגיב להודעה MSG_CREAT_APP וקורא sys_exece_ap (ap_name, 0,
(int32) ממשק ap_param) כדי להריץ את היישום (הקוד התואם נמצא ב- ap_manager / manager_msg_handle.c)
שלב 4: כאשר היישום ap_music פועל, הוא יקרא את הקובץ ונתיב המידע השמור מ- VRAM וישחק
קובץ האודיו המתאים.
5.6.4 יציאת האפליקציה
יציאת AP (יציאת AP תתפס על ידי libc_waitpid שנקרא על ידי מנהל AP), אירועי היציאה כוללים את הדברים הבאים
כַּמָה:
Application יישום החזית יוצא באופן פעיל לאחר שליחת היצירה האסינכרונית של יישום חזית חדש.
Manager המנהל .app יהרוג את כל האפליקציות בעת כיבוי או כניסה לדיסק U, כלומר, שליחת חריג של MSG_APP_QUIT
הודעה צעד ל- AP; AP יוצאת מרצון לאחר קבלת ההודעה.
AP ה- AP הקדמי יכול להרוג את מנוע הרקע באופן סינכרוני בעת הצורך, למשל, כאשר הווידיאו.אפ נכנס להפעלה, צריך לכבות את המוזיקה
מנוע.
1) יישום החזית שולח את MSG_KILL_APP_SYNC למנהל.אפ כדי לוותר על השליטה.
2) כאשר manager.app מקבל את הודעת היישום Kill kill, הוא גם שולח את MSG_APP_QUIT לרקע
מנוע.
3) לאחר קבלת ההודעה, מנוע הרקע יוצא באופן פעיל; לאחר היציאה מנהל .app מתקשר לתגובה_סינק_מסג
תן ליישום החזית להמשיך ולבצע.
4) עד כה, הסנכרון של הריגת ה- AP הושלם.
קח דוגמא את יישום ap_music. אפליקציית UI למוזיקה היא אפליקציית החזית ותהליך היציאה מהיישום כולל
המצבים הבאים:
✧ צא לאחר קבלת הודעה MSG_APP_QUIT
✧ המשתמש בחר לצאת ממשק המשתמש של מוסיקה באמצעות פעולת מקשים
תרחישים שבהם מוצא יישום ממשק המשתמש עבור קבלת ההודעה MSG_APP_QUIT, כולל: המשתמש מכבה באופן פעיל,
חיבור USB, כיבוי מתח נמוך, אזעקת תזמון וכו '. זרימת עיבוד הקוד היא כדלקמן:

עמוד 149
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 149
לגבי התהליך שלעיל ההסבר הוא כדלקמן:
שלב 1: יישום ממשק המשתמש ap_Music עשוי לצאת מהסיבות הבאות: כאשר כבל ה- USB מוכנס, הוא צריך לצאת
יישום ממשק משתמש ap_Music, הפעל יישום USB; כאשר זמן האזעקה נגמר, זקוק ליישום ממשק משתמש Ap_Music, הפעל יישום ap_tool;
מתגלה צריכת חשמל נמוכה ויש צורך לכבות אותה. יש לצאת מהיישום של ממשק המשתמש ap_music כרגיל; המשתמש לחץ לחיצה ארוכה על כפתור הכיבוי כדי לבקש כיבוי. ל
מכל סיבה שהיא לעיל, בלולאת ההודעות של כל סצינה ב- ap_music, תקבלו הודעות מתאימות, כולל
EVENT_ENTER_SHUTOFF_ASK, MSG_USB_STICK, MSG_LOW_POWER,
MSG_RTCALARM וחדשות אחרות. לפיכך, פירוש הדבר גם כי יש לעבד את ההודעות לעיל בכל מחזור חדשותי.
ביישום US212A, הוא מצוין בקובץ usdk212a \ case \ ap \ common \ common_misc \ Message_box.c
פונקציית העיבוד com_message_box () המגדירה את כל ההודעות הללו שצריך לעבד בכל מחזור הודעה.

עמוד 150
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 150
שלב 2: כל לולאת הודעות של ap_music מקבלת את ההודעה לעיל, היא תתקשר למטפל המקביל לעיבוד.
לדוגמה, אם הוא מקבל EVENT_ENTER_SHUTOFF_ASK שנוצר בלחיצה ארוכה על הכפתור, הוא יתקשר
הממשק gui_shut_off () בממשק usdk212a \ case \ ap \ common \ common_ui \ ui_shutoff.c, שהוא אסינכרוני
לאחר שידור ההודעה MSG_POWER_OFF, התחל לחכות להודעת MSG_APP_QUIT (שים לב שאם אתה לא יכול לחכות עד
ההודעה MSG_APP_QUIT, ממשק gui_shut_off () לא יכול לצאת בזמן ההמתנה ל- Xunhua).
שלב 3: לאחר ש- ap_manager מקבל את ההודעה MSG_POWER_OFF / MSG_USB_TRANS, הוא מעביר את כל הקדמי
יישום התחנה משדר באופן אסינכרוני את הודעת MSG_APP_QUIT וממתין ליציאה של יישום החזית.
שלב 4: לאחר ap_music ממתין להודעת MSG_APP_QUIT, לולאת ההודעות חוזרת ל- RESULT_APP_QUIT,
זה מוביל ליציאה של ap_music.
שלב 5: לאחר ש- ap_manager ממתין ל- ap_music לצאת, שחרר את המשאבים המתאימים של AP.
על פי התהליך שלעיל, אנא חשוב: אם אתה נתקל בחיבור כבל USB ביישום ממשק המשתמש , אתה מגלה שאין USB
כיצד באגים כאשר מחובר ואת UI מוסיקה לא לצאת ?
המשתמש בוחר לצאת מתהליך ap_music על ידי לחיצה על המקש, כאן, כדי לצאת מסצינת רשימת ap_music
קח דוגמה כדי להמחיש כיצד ap_music יוצא מהיישום תחת פעולת המפתח של המשתמש.

עמוד 151
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 151
ממש מעל
תרשים זרימה, מוסבר כך:
שלב 1: בסצנת הרשימה ישנם שני לולאות הודעות מקוננות, המוגדרות ב- Music_scene_listmenu.c
לולאת ה- while (1) של תפריט music_scene_list () בקובץ והשיחה הפנימית של לולאה זו
בממשק gui_menulist () במערכת usdk212a \ case \ ap \ common \ common_ui \ ui_menulist.c, יש גם
בזמן (1) לולאת הודעות. כשאתה מתקשר לממשק music_scene_listmenu (), אתחל את פרמטר התפריט menu_param
(Menu_com_data_t מבנה סוג), הזן זמן (1) לולאת הודעות; ולולאת ההודעות
כותרת, קורא לממשק gui_menulist (), הקורא מקובץ ה- mcg על פי פרמטרי התפריט שהוזמנו לפני

עמוד 152
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 152
פרטי התפריט המתאימים מוצגים ונכנסים לולאת ההודעות של עיבוד התפריט.
שלב 2: בלולאת ההודעות בעיבוד של ממשק gui_menulist () התקשר get_gui_msg (& input_msg)
קבלת הודעות GUI (כולל הודעות הקש על מקש). ברגע שתתקבל הודעה הקש על מקש היא תוגדר על ידי שיחה
הממשק ב- usdk212a \ case \ ap \ common \ common_func \ common_msgmap.c com_key_mapping ()
ממפה את ערך המפתח של מפתח לערך של הודעת אירוע, כאשר המפתח שחוזר לתפריט הקודם, ערך הודעת האירוע הממופה הוא
EVENT_MENULIST_BACK_PARENT. לערך הודעת האירוע, ההודעה של תפריט הממשק gui_menulist ()
שיטת העיבוד של הלולאה היא: אם נשפט כי תפריט האב של התפריט הנוכחי כבר MENU_TYPE_ENTRY (תפריט כניסה)
, צא מלולאת ההודעות של gui_menulist (), וערך ההחזרה הוא RESULT_REDRAW, ובכך נחזור ל
לולאת ההודעות בתפריט music_scene_list ().
שלב 3: בלולאת ההודעות ב- music_scene_listmenu (), שפט את החזרה של gui_menulist ()
אם הערך הוא RESULT_REDRAW, סצנת הרשימה תצא, והשיחה של music_scene_listmenu () תחזור
RESULT_MAIN_APP.
השלב הרביעי: ap_music יוצא מתזמון הסצנה ושולח ל- ap_manager את הבקשה ליצור את היישום ap_mainmenu
לאחר ההודעה האסינכרונית, צא מ- ap_music.
אנא חשבו: אם ברצונכם לשנות את הגדרת הכפתור כדי לחזור לתפריט הקודם, כיצד להשיג זאת? ? —— פשוט לשנות
המערך הקבוע שהוגדר ב- usdk212a \ case \ ap \ common \ common_func \ common_msgmap_data.c
Menulist_key_map_list [] מתאים לערך הודעת המפתח ואירוע.
5.6.5 מדריך פיתוח ליישומי חזית
5.6.5.1 תהליך פיתוח AP קדמי
1
הכן את ארכיטקטורת היישומים הבסיסית.
2
ניתק באגים לממשק המשתמש של AP בסימולטור ממשק המשתמש.
2.1 כתוב את הקוד הבסיסי של הסצנה.
2.2 הכן משאבי תמונות AP ומשאבי מחרוזות רב-שפות (ניתן לספק תחילה סינית מופשטת, אך
הגדר את השפה לסינית מופשטת ב- config.app).
2.3 תכנן את ממשק המשתמש בכלי עורך ממשק המשתמש, וצרו קבצי * .sty, * _res.h, * _sty.h.

עמוד 153
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 153
2.4 כתוב קוד תצוגה של ממשק המשתמש של הסצינה וניתן באגים בממשק המשתמש.
2.5 איתור באגים בפונקציות עסקיות שאינן קשורות לחומרה.
2.6 הערה: ליישום החזית צריך להוסיף פריט ממשק משתמש בכניסה לתפריט הראשי, או שניתן להכין את ה- AP לשרשרת.
התחבר ליישום ההצעה, כגון music.ap.
3
אם יש תפריט, עצב את התפריט.
3.1 כתוב את רשימת תפריט הכניסה ואת רשימת פריטי התפריט, כמובן, עליכם לכתוב גם את פונקציית ההתקשרות של התפריט, כגון:
test_cfg_menu_data.c.
3.2 הידור וקישור שוב ליצירת קובץ .ap
3.3 בדף אפשרויות עריכת התפריט בכלי לשנות fw, בחר את קובץ ה- AP ולחץ פעמיים כדי להיכנס לעריכת התפריט
חלון, ערוך ואישור כדי ליצור קובץ * .mcg, ואז ייצא אותו לספריית fwpkg / mcg. (ראה בהמשך לפרטים
מבוא כלי עזרה)
3.4 בתפריט הבאגים של סימולטור ממשק המשתמש, לא ניתן לבצע ניפוי של פונקציות התקשרות מסוימות הקשורות לפונקציות חומרה.
4
פיתוח מושלם, ניפוי באגים על הסיפון
4.1 כתוב את שאר המודולים של הפונקציה העסקית.
4.2 ערוך את פרויקט הקישור ויצר את קובץ ה- .ap.
4.2.1 שנה את ה- filefile המשמש את ה- AP בתבנית ה- makefile.
4.2.2 שנה את ה- xn המשמש את ה- AP בתבנית ה- xn.
4.2.3 ערוך קישור, נקה שגיאות וכמה אזהרות וצור קובץ .ap.
4.3 הוסף פריטי אריזה * .ap, * .sty, * .mcg ב- fwimage * .cfg, וחבילה ליצירת קבצי קושחה * .fw.
4.4 ניפוי לוחות.
כאמור, גוף היישום של אפליקציית החזית כולל את הארכיטקטורה הבסיסית, תצוגת ממשק המשתמש ופונקציות עסקיות. הארכיטקטורה הבסיסית היא יותר
זה פשוט יחסית. הוא הוצג בפירוט בסעיפים הקודמים. הבא, אנו נתמקד בתצוגת ממשק המשתמש ופונקציות עסקיות.
5.6.5.2 פרטי פיתוח של ממשק משתמש
שלבי פיתוח לתצוגה של ממשק המשתמש הם כדלקמן:
1
הראשון הוא ליצור את פרוייקט עורך UI של יישום החזית, לערוך ולייצר * .sty, * _sty.h, * _res.h וקבצי תוצאה אחרים.
חתיכות. לפרטים, עיין בפרק עיצוב ופיתוח ממשקים.
2
פתחו את הקבצים * .sty וה Common.sty בתהליך האתחול של יישום החזית, וסגרו אותם כשהיישום ייצא.
3
עיין ב "us212a_ui_driver interface manual.chm" וכתוב את התצוגה של כל בקרה על פי תרחישי שימוש ספציפיים
מעבד קוד.
4
אם ברצונך לבצע ניפוי באגים במחשב קטן, עליך לארוז את קובץ ה- .sty יחד, אם אתה עובד ב- UI Simulator
אינך צריך לדאוג לאיתור באגים בכלי. מומלץ בחום ליישם את הפיתוח והניפוי באגים של יישומי חזית ב- Simulator UI ככל האפשר
המשך הלאה.
בפרק תכנון ופיתוח ממשקים נדבר על השליטה המורכבת משלושה אלמנטים בסיסיים: תמונות, מחרוזות ומספרים.
כאשר האלמנטים הבסיסיים מרכיבים בקרה, המפתח טמון בבחירת מאפייני הבקרה:

עמוד 154
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 154
❖ אילו מאפיינים מסוג 1 ניתן להגדיר כברירת מחדל בשליטה
❖ אילו מאפיינים של קטגוריה 2 חייבים להיות פתוחים למשתמשים, אותם יכולים להתאים אישית על ידי המשתמשים בהתאם לצרכים הספציפיים שלהם
❖ איזו קטגוריה 3 יכולה להשתמש בהגדרות ברירת המחדל ולאפשר למשתמשים להתאים אישית תחילה
להלן לוקח את שליטת ה- PicBox כדוגמה להסביר.
תיאור:
1. במבנה נתונים זה, אם מדובר בפיקוד PicBox של מסגרת יחידה, ה- ID שייך לסוג התכונה השלישית, כלומר ברירת המחדל
השתמש במזהה התמונה שהוגדר, אך אם המשתמש צריך לציין תמונות אחרות בעצמו, ניתן לציין תחילה, אם זה PicBox עם מסגרות מרובות מסגרות.
לצורך הפקד, המשתמש צריך לציין את מספר המסגרת זה שייך לסוג המאפיין השני וצריך לציין אותו על ידי המשתמש.
2. תכונות אחרות שייכות לקטגוריה הראשונה ומשתמשות ישירות בערכי ברירת המחדל שנקבעו בעורך ממשק המשתמש.
אינטראקציה עם הנהג UI:
❖ תצוגת הפקד מסופקת על ידי מנהל התקן ה- ui * _private_t ליישום, המשמש להעברת הסוגים השני והשלישי של הפקד
תכונה, הנהג ui ואז מנתח ומציג את כל ערכי התכונות בהתאם למנגנון תצוגת הבקרה.
❖ בכדי להציג את הפקד בצורה יעילה יותר, אנו נספק מצבי רענון מרובים לתצוגת הבקרה, כגון ListBox
פקדים, יהיה החלק הכל, החלק רשימת, החלק פריטים פעילים וכו '.
❖ לכן ממשק תצוגת הבקרה הוא בערך כדלקמן:
ui_show_xxx (style_infor_t *, * _private_t *, מצב uint8);
קח דוגמה את PicBox:

עמוד 155
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 155
1. מנהל ההתקן של ה- ui מספק את המבנה picbox_private_t ליישום שמשמש להעברת התכונות מהסוג השני והשלישי של הפקד.
המבנה הוא כדלקמן:
2. יש רק תצוגה אחת לתצוגת התמונה, ללא פרמטר המצב.
לפיכך, צורת ממשק התצוגה של PicBox היא:
ui_show_picbox (style_infor_t *, picbox_private_t *);
5.6.5.3 הסבר מפורט על התפתחות תקשורת ההודעות
US212A הוא פיתרון ריבוי משימות, בנוסף להודעות קלט מפתח והודעות מערכת כמו AS211A, עליו להיות גם
הודעות המועברות בין משימות המתנה.
בתוכן הקודם אמרנו ש- AP מחולק למנהל AP, AP חזית ומנוע רקע AP, ואז המקביל
כן, על מנת להשיג את דרישות התקשורת בין המשימות, על המערכת לספק 3 תורי הודעות פרטיים ליישום.
לכן, US212A מכיל 5 תורי הודעות:
● תור להודעות GUI, שאליו ניתן לגשת רק דרך ה- AP בחזית, ומשמש להשגת הודעות קלט כגון קלט מפתח של המשתמש.
● תור להודעות מערכת המשמש את המערכת לשליחת הודעות מערכת, כגון חיבור USB, חיבור כרטיסים, הגדרת ALARM
הגיע הזמן, סוללה חלשה וכו '.
● 3 תורי הודעות פרטיות ליישום, המוקדשים לאחסון יישומים אחרים (יישומים יכולים לשלוח לעצמם הודעות אסינכרוניות, באמצעות
(תקשורת בין מודולים שונים) הנשלחים להודעות שלהם, המשמשים לתקשורת בין יישומים.
נקודות מפתח בפיתוח תקשורת הודעות:
● הודעת מפתח
✧ תור ההודעות של ה- GUI מוקדש למנהל התקן לשליחת הודעות מפתח, או לנהג מסך המגע לשליחת הודעות מגע;
הודעות המפתח כוללות DOWN, LONG, HOLD, SHORT UP.
✧ כאשר מנהל ההתקן שולח הודעות SHORT UP, אם נשפט כי יותר מ- 8 הודעות נשלחו בעבר
(עומק תור של הודעת GUI) הודעת HOLD תקבל קודם כל הודעה אחת כדי להבטיח שתור ההודעות יגיע

עמוד 156
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 156
יש לפחות משבצת אחת, והודעות SHORT UP מובטחות שיישלחו לתור ההודעות.
✧ בשלב האתחול של ה- AP הקידמי, התקשר ל- applib_message_init כדי לאתחל, הממשק יהיה
תור ההודעות של ה- GUI מנוקה.
✧ כאשר ה- AP הקידמי מקבל הודעת GUI, הוא יתקשר com_gui_msg_hook לצורך עיבוד מוקדם, כולל
פילטר מקשים, צליל מקשים, נעילת מקשים, בקרת תאורה אחורית, בקרת שומר מסך וכו '.
● הודעות מערכת
Que תור ההודעות למערכת מוקדש לאחסון הודעות מערכת ומתקבל על ידי ה- AP הקדמי לפני קבלת הודעות פרטיות ביישום
ושודר לתור ההודעות של AP הקדמה ומנוע הרקע AP.
✧ תור ההודעות למערכת לא ינוקה כאשר האתחול applib_message_init שנקרא בשלב האתחול של ה- AP מאתחל.
ריק כדי להבטיח שההודעות שנשלחו לתור ההודעות במערכת לא יאבדו; תכונה זו צודקת
משמש למטמון כמה הודעות שנוצרו במהלך החלפת היישום.
● הודעה פרטית של יישום
Que תור הודעות פרטיות של יישומים משמש בעיקר לתקשורת בין משימות. תקשורת בין משימות כוללת בעיקר את הקטגוריות הבאות:
◆ צור והרג הודעות אפליקציה הקיימות באינטראקציה עם AP המנהל.
◆ ה- AP הקדמי שולט בהודעות של מנוע הרקע המתאים AP.
✧ בשלב האתחול של AP הקדמה ומנוע הרקע AP, התקשר ל- applib_message_init כדי לאתחל,
ממשק זה ינקה את תור ההודעות הפרטיות של היישום.
✧ כאשר ה- AP מקבל את ההודעה APP_MSG_QUIT, עליו לצאת מייד ללא תנאי.
✧ כאשר ה- AP הקדמי מקבל הודעה, הוא יתקשר תחילה com_app_msg_hook לצורך עיבוד מוקדם, כולל שומר המסך
ניהול, החלפת מצב כרטיס וכו '.
נקודות המפתח בשימוש במחזור עיבוד ההודעות:
מדוע להציג פיתוח מונחה אירועי GUI: us212a מפריד בין זרימת הבקרה לזרימת התצוגה ולמעשה GUI הוצג
מושג המודול מוגבל למשאבי זיכרון ואינו יכול להפריד בין מודול הגוי. אך אנו ממשיכים לשמור על אירוע הגוי
הרעיון של זה נועד גם לתמוך טוב יותר במכשירי קלט פיזיים שונים (מקשים, מסכי מגע, חיישן g וכו ')
מְחוֹשָׁב.
המפתח לניהול אירועים gui הוא מיפוי הודעות המפתח, המבוסס על המפתח שהוגדר על ידי המשתמש בתרחיש מסוים.
מפה בטבלת המיפוי כדי לקבל את אירוע הגוי.
טבלת מיפוי המפתחות מחולקת לשני חלקים, האחד הוא טבלת המיפוי המוגדרת על ידי המשתמש והשני הוא מיפוי מקשי הקיצור שהוגדר על ידי הסכימה.
טבלה, לראשון יש עדיפות גבוהה יותר מזו האחרונה.
לדוגמה: טבלת מיפוי המקשים בתיבת הדו-שיח של חיבור USB מגן על פריטי מיפוי בטבלת המיפוי של מקשי קיצור הדרך

עמוד 157
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 157
המבנה האופייני של לולאת עיבוד ההודעות הוא כדלקמן:

עמוד 158
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 158
יש לשים לב לולאה לעיבוד ההודעות:
1. קליטה ועיבוד של הודעות gui עוברת עדיפות על פני הודעות מערכת והודעות פרטיות ביישום, רק כאשר לא מתקבלות הודעות gui.
יקבלו ולעבד הודעות מערכת והודעות פרטיות על יישומים.
2. עבור האירועים הממופים מההודעה gui, האירועים שהסצינה דואגת להם מטופלים בדרך כלל במפורש בתוך הלולאה, ודברים אחרים
הקובץ קורא לממשק com_message_box לעיבוד. אם לא תעשה את הצעד הזה, יתכן שתפספס כמה חשובים
אירוע מקשי קיצור.
3. בפונקציית הפצת ההודעות הפרטיות של היישום, היישום יעבד במפורש את ההודעות שאכפת לה, וכן נדרשות הודעות אחרות
התקשר לממשק com_message_box לעיבוד הפצה. אם שלב זה לא יבוצע, יתכן שפספסו כמה נקודות חשובות
הודעות מערכת חובה וכו '.
4. בלולאת עיבוד ההודעות, יש לקרוא לפונקציה sys_os_time_dly כדי לשחרר את זכות הבקרה בזמן, כך שהעדיפות גבוהה יותר.
תזמון משימות נמוך פועל.
לבסוף, הוסף עוד שתי נקודות:
1. עיבוד ההודעות של היישום צריך להיות מארז כפונקציית חלוקת הודעות ומועבר ל- COMMON
השתמש בפונקציית הפצת ההודעות הזו כדי לעבד הודעות פרטיות ביישום.
2. לאחר סיום עיבוד ההודעות, יש לעבד את התוצאה המוחזרת, ומפתח היישום צריך לקרוא את COMMON
תיאור הממשק, עיבוד מדויק של התוצאה, למשל לאחר קבלת COMMON והחזרת RESULT_APP_QUIT, היישום

עמוד 159
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 159
עליו לצאת מייד ללא תנאי.
5.6.5.4 הסבר מפורט על פיתוח טיימר ברמת היישום
באמצעות טיימרי חומרה, ISR בדרך כלל חייב להיות ממוקם בקוד תושב, כך שהוא לא יופרע זמן רב מדי; ועיתוי חומרה
המכשיר זקוק לניהול מערכות ומשתמש במשאבי מערכת. אז הצגנו טיימר ברמת היישום כדי להזיז את ניהול הטיימר
ליישום, ומשאבים המשמשים מיושמים גם כן.
לטיימרים ברמת היישום יש את המאפיינים הבאים:
● ניתן למקם טיימר ISR ברמת היישום בקטע קוד הבנק, אנו לא צריכים לדאוג לזמן הביצוע הארוך של ISR
קצר.
● טיימרים ברמת היישום קשורים לסצנה, כלומר הטיימר שנוצר בסצינה מסוימת, ה- ISR שלה בלבד
יפעל בתרחיש זה.
● הפונקציה של טיימר ברמת היישום חזקה בהרבה מזו של טיימר החומרה. ניתן ליצור, להשהות, להפעיל מחדש, למחוק, צילום בודד,
ניתן לשלוח אותו מדי פעם.
● טיימרים ברמת היישום צורכים רק את מרחב הנתונים התושב של ה- AP עצמו, ומספר הטיימרים מוגבל רק על ידי שטח הנתונים.
● בנוסף, הידית של הטיימר ברמת היישום אינה יכולה להעביר פרמטרים, אלא יכולה להעביר פרמטרים רק באמצעות משתנים גלובליים.
● הטיימר ברמת היישום מבוצע בעת קבלת הודעות פרטיות ליישום, כך שהוא יעכב את זמן קבלת ההודעות הפרטיות של היישום
בֵּין.
5.6.5.5 הסבר מפורט על פיתוח התפריט הניתן להגדרה
ראה תפריטים הניתנים להגדרה  .
5.6.6 כתיבת סקריפט makefile ו- xn של יישומים
5.6.6.1 סקריפט makefile ליישום
מה זה קובץ מקיף?
כאשר ביצוע הפקודה מבצעת, יש צורך ב- Makefile כדי לומר לפקודה make כיצד לערוך ולקשר
תכנית. Makefile הוא קובץ סקריפט שמציין כללי אוסף וקישור.
במהלך פיתוח יישומים ופיתוח מנהלי התקנים, המערכת תספק תבניות הגדרת יישום ומנהלי התקנים כדי לציין את שרשרת אוסף היישומים והנהגים
כללי בסיס בסיסיים נפוצים שצריך להקפיד עליהם בעת ההתחברות.
כאשר תוכנית יישום כותבת את קובץ ה- makefile של המודול שלה, היא רק צריכה לשנות את תבנית ה- makefile המסופקת על ידי המערכת.
המידע על נתיב קובץ המקור של המודול המתאים, שם קובץ היעד שנוצר, נתיב האריזה של קובץ היעד, שם קובץ סקריפט הקישור וכו '.
ריבית.

עמוד 160
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 160
תבנית Makefile ושינויה
קח את יישום המוסיקה כדוגמה, עליך לשנות את קובץ ה- fil כדלקמן:
# שם היישום מפתח צריך לשנות (1)
IMAGENAME = מוזיקה
# מיקום האחסון של קובץ המקור שיוקם, היזם צריך לשנות את המקום (2)
SRC = $ (CASE) / ap
SRCDIR_16 = $ (SRC) / ap_music
SRCDIR_16_O2 = $ (SRC) / ap_music / O2
SRCDIR_32 =
# נתיב התיקיות שאליו נשלח קובץ היעד, היזם צריך לשנות אותו (3)
OBJECT_BIN_PATH = $ (CASE) / fwpkg / ap
# ציין את נתיב החיפוש של הקובץ התלוי בתהליך וכתב את הנתיב של קובץ המקור
VPATH = $ (SRCDIR_16) $ (SRCDIR_16_O2) $ (SRCDIR_32) $ (OBJ_DIR)
# ציין את שם סקריפט הקישור המותאם אישית
LD_SCRIPT = ap_music.xn $ (ENHANCED_XN) /music_link.xn
./../common/common_front.xn
# קבל את קוד המקור של סיומת .c
SRC_C_16_O2 = $ ( בחירה ישירה , $ (SRCDIR_16_O2) , $ (תו כללי $ (dir) / *. C))
# המרה לתבנית .o שם קובץ ללא מידע על הנתיב
OBJ_C_16_O2 = $ (notdir $ (patsubst% .c,% .o , $ (SRC_C_16_O2) ))
# קבל את כל שמות הקבצים .o
OBJ = $ (OBJ_C_16) $ (OBJ_C_16_O2) $ (OBJ_S_16) $ (OBJ_C_32) $ (OBJ_S_32)
$ (OBJ_C_16_O2) :% .o :% .c
$ (CC) $ (CC_OPTS_O2_16) -o $ (OBJ_DIR) / $ @ $ <
@הֵד
תיאור:
1. IMAGENAME מייצג את שם האפליקציה, את השם המלא של היישום לדוגמה למעלה: music.ap
2. כברירת מחדל, כל קבצי המקור ממוקמים בספריית היישומים הנוכחית, באמצעות מערך הוראות MIPS 16e, עריכה אופטימלית O0
תרגום, אם יש תיקונים מיוחדים, כמו הדוגמה לעיל, יש ספריית משנה של O2 בספרייה הנוכחית, ואת
קובץ המקור מורכב עם אופטימיזציה O2. אז אתה צריך להוסיף נתיבי קובץ מקור נוספים, כללי אוסף וכו '.
3. LD_SCRIPT מציין את סקריפט הקישור, מציין כיצד לקשר כל קטע במנהל ההתקן, הסקריפט נארז גם כ * .ap
קובץ סקריפט בפורמט קובץ. ניתן לחלק את הקישור של קובץ התמונה של היישום לשלושה חלקים, גוף הראשי של היישום,
המודול המשופר והמודול המשותף, 3 המודולים הללו מקושרים עם סקריפט קישור בהתאמה, זה
גישה זו יכולה להפוך את ההרכבה והקשר של מודולים משופרים ומודולים משותפים שקופים יותר ומתוחזקים טוב יותר.
5.6.6.2 סקריפט xn של יישום

עמוד 161
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 161
מהו קובץ סקריפט מקשר ?
תאר כיצד למפות קטעים בקובץ הקלט לקובץ הפלט ולשלוט במערך האחסון של קובץ הפלט
קובץ סקריפט.
במהלך פיתוח אפליקציות ופיתוח מנהלי התקנים, המערכת תתאגד לפי בנקים ותספק קישורים לכל קטע בנק של היישום והמנהל.
תבנית, ציין את תבנית הקישור שיש לעקוב אחריה כאשר היישום והמנהל התקנים נערכים ומקושרים.
תוכנית היישום מבוססת על תבנית סקריפט הקישור, על פי התפלגות קוד תוכנית היישום ומרחב הנתונים, כותבים את שלהם
קובץ סקריפט הקישור של התבנית.
קח את יישום המוסיקה כדוגמה, הפורמט של קובץ ה- XN הוא כדלקמן:
*************************************************** ******************* /
/ * ----------------------- מפת זיכרון ----------------------- ---------------------------------- *
* ap_code
כתובת
אורך *
* rcode
0xbfc1ee00-0xbfc1f5ff
0x800 (2k) *
* בקרה קדמית (0x40 ** 0000 + 0x1fe00) - (0x40 ** 0000 + 0x205ff) 0x800 (2k) *
* ממשק משתמש קדמי
(0x48 ** 0000 + 0x1f600) - (0x48 ** 0000 + 0x1fdff) 0x800 (2k) *
* שפר קדמי 1 (0x78 ** 0000 + 0x27000) - (0x78 ** 0000 + 0x277ff) 0x800 (2k) *
* שפר קדמי 2 (0x71 ** 0000 + 0x27800) - (0x71 ** 0000 + 0x27fff) 0x800 (2k) *
* ------------------------------------------------- -------------------------------------------------- - *
* ap_data
כתובת
אורך *
* נתונים
0x9fc1d200-0x9fc1d9ff
0x800 (2k) *
* נתוני חיץ lcd 0x9fc18000-0x9fc183ff
0x400 (1k) *
* applib (נתונים גלובליים) 0x9fc19f80-0x9fc19fff
0x80 *
* ------------------------------------------------- -------------------------------------------------- * /
/ * הגדירו את אינדקס הבנקים הקבוצתי ומשתני כתובת אחרים * /
INPUT (link_base.xn)
/*1.AP אינדקס * /
AP_INDEX = FRONT_AP; → מציין שמדובר ביישום חזית, אם מדובר ביישום רקע, עליו להיות BACK_AP
/ * 2. השג את הכתובת הפיזית של קטע הקוד לתושב במודול הכרטיס ממפת הכתובות, פשוט כתוב את 14 הסיביות התחתונות והמפתח צריך למלא
כתוב, שנה רק על ידי האינטגרטור לאחר התחלת האינטגרציה, הנהג אינו רשאי לשנות * /
SRAM_TEXT_ADDR = SRAM_AP_FRONT_RCODE_ADDR; → שטח קוד של יישום חזית
SRAM_DATA_ADDR = SRAM_AP_FRONT_DATA_ADDR; → מרחב ה- rdata של היישום הקדמי
/ * 3. המרה לכתובת קישור, לא ניתן לשנות * /
RCODE_TEXT_ADDR = RCODE_ADDR_BASE + SRAM_TEXT_ADDR;
RDATA_DATA_ADDR = RDATA_ADDR_BASE + SRAM_DATA_ADDR;

עמוד 162
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 162
/ * כתובת ההתחלה מוצעת רק וניתן לקזז אותה לאחור. לדוגמה, בקרה_2 בדרך כלל אינה מהכתובת הזו, אם ברצונך לתת דין וחשבון לכל
שטח, השתמש ב- control_1 * / → תיאור מרחב הכתובת של BANK, ציין את מספר קבוצת BANK ואת הכתובת הפיזית
BANK_CONTROL_1_ADDR_BASE = (AP_BANK_FRONT_CONTROL_1 << 24) +
SRAM_AP_BANK_FRONT_CONTROL_ADDR;
BANK_UI_1_ADDR_BASE
=
(AP_BANK_FRONT_UI_1
<<
עשרים וארבע)
+
SRAM_AP_BANK_FRONT_UI_ADDR;
/ * שימוש קבוע בחלל הבסיס או ה- Codec אינו ניתן לשימוש על פני חללים, שונה משליטה 1 ובקרה 2 * /
BANK_ENHANCED_1_ADDR_BASE = (AP_BANK_FRONT_ENHANCED_1 << 24) +
SRAM_AP_BANK_FRONT_ENHANCED_1_ADDR;
BANK_ENHANCED_2_ADDR_BASE = (AP_BANK_FRONT_ENHANCED_2 << 24) +
SRAM_AP_BANK_FRONT_ENHANCED_1_ADDR;
/ * לא ניתן לשנות את גודל השטח בפועל של הבנק * / → ציין את גודל מקטע BANK
BANK_CONTROL_SIZE = SRAM_AP_BANK_FRONT_CONTROL_SIZE;
BANK_UI_SIZE = SRAM_AP_BANK_FRONT_UI_SIZE;
BANK_ENHANCED1_SIZE = SRAM_AP_BANK_FRONT_ENHANCED_1_SIZE;
BANK_ENHANCED2_SIZE = SRAM_AP_BANK_FRONT_ENHANCED_2_SIZE;
/ * לא ניתן לשנות את שטח הבנק המרבי שמותר על ידי המערכת * /
AP_BANK_SPACE = BANK_SPACE;
OUTPUT_ARCH (mips)
כניסה (התחלה __) → התחל פונקציה לאחר טעינת היישום
EXTERN (base_op_entry) → מכיוון שספריות מקושרות לפי הסדר, ייתכן שספריות מסוימות לא מקושרות בהן, כגון
עבור ספריות api מסוימות, אתה יכול להוסיף ENTERN בסקריפט ה- xn כדי להכריז שהסמלים בספריה יהיו מקושרים ב
מקטעים
{
/ * נתונים גלובליים על מקרה, משותפים על ידי כל AP * /
. = 0x9fc19f80;
APP_GLOBE_DATA:
{
/ * נתוני גלובוס נפוצים * /
applib_globe_data.o (.bss)
. = 0x80;
}
. = 0x9fc18000;
LCD_BUFFER_DATA:
{

עמוד 163
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 163
music_playing_show_lyric.o (.lcdbuffer)
. = 0x400;
}
/ * קוד תושב * /
.text RCODE_TEXT_ADDR:
{
/ * 4. מלא את קטע הזנת ה- rcode * /
api.a (.text)
music_control.o (.text .rodata)
app_timer_rcode.o (.text)
message_rcode.o (.text)
}
/ * פלח נתונים גלובלי מאותחל * /
.data RDATA_DATA_ADDR: AT (ADDR (.text) + SIZEOF (.text))
{
/ * 5. מלא את קטע הזנת rdata, כך שהנתונים שנוצרו על ידי הקובץ יקושרו כאן * /
music_main.o (.data)
eh_rdata.o (.data)
eh_fsel_rdata.o (. נתונים)
eh_bs_rdata.o (. נתונים)
eh_id3_rdata.o (. נתונים)
eh_lrc_get_rdata.o (. נתונים)
}
/ * פלח הנתונים הגלובלי הבלתי מאושר, המערכת לא תנקה אותו * /
.bss:
{
music_main.o (.bss)
music_setmenu_soundset_param.o (.bss)
music_playing_show_lyric.o (.bss)
music_setmenu_playmode_abset.o (.bss)
music_setmenu_show_bookmark.o (.bss)
applib_app_data.o (.bss)
common_ui_data.o (.bss)
common_func_data.o (.bss)
eh_rdata.o (.bss)
eh_fsel_rdata.o (.bss)
eh_bs_rdata.o (.bss)

עמוד 164
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 164
eh_id3_rdata.o (.bss)
eh_lrc_get_rdata.o (. נתונים)
* (. sbss)
*(.מְשׁוּתָף)
*(מְשׁוּתָף)
}
/ * 6. קישור בקרת בנק 0 בקוד * /
. = BANK_CONTROL_1_ADDR_BASE;
→ בתחילת קבוצת CONTROL BANK, קבע את הכתובת לתחילת קטע הבנק הראשון
OFFSET =. & 0x3ffff;
BANK_CONTROL_1_0: → ctor.o דורש קישור לבנק 1 בקבוצת CONTROL
→ שם החלק של BANK חייב להתחיל עם BANK
{
ctor.o (.text .rodata)
}
/ * בקרת בנקים 1 * /
. = ((. + AP_BANK_SPACE) ו- (~ (AP_BANK_SPACE-1))) + OFFSET;
→ הגדר את הכתובת לתחילת קטע הבנק הבא
BANK_CONTROL_1_1:
{
music_main.o (.text .rodata)
. = BANK_CONTROL_SIZE;
}
. . .
}
5.6.7 כיצד להוסיף יישום חזית
קח את יישום user1 השמור על ידי המערכת כדוגמה כדי להמחיש כיצד להוסיף יישום חזית.
5.6.7.1 תיאור ספריית הדגמה של User1 User1
יישום קדימה: user1
נתיב קוד מקור: ./ap_sample/ap_user1

עמוד 165
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 165
תיאור ספרייה של User1
קובץ מקור / קובץ נתונים
תיאור
User1_main.c
התוכנית הראשית של היישום, כולל אתחול יישומים, יציאת אפליקציה, פונקציה ראשית של היישום (סצנה
לולאה), יישום של עיבוד הודעות פרטיות והגדרות משתנות גלובליות וכו '.
User1_scene_play.c
הפעל את התוכנית הראשית של הסצנה
User1_scene_menu.c
התוכנית הראשית של סצינת התפריט
User1_menu_cfg.c
ניתן להגדיר נתוני תצורת תפריט
User1.h
קבצי כותרת של יישומים, כולל user1_res.h ו- user1_sty.h
User1_res.h
קבצי כותרת של משמשי מחרוזת של תמונת יישום, שנוצרים אוטומטית על ידי הכלי לעורך ממשק משתמש
User1_sty.h
קובץ כותרת ממשק משתמש שניתן להגדיר יישומים, שנוצר אוטומטית על ידי הכלי לעורך ממשק משתמש
User1.mcg
קובץ תצורה הניתן להגדרה
User1.ui ו- user1.sty
סקריפטים וקובצי תצורה לתצורת UI הניתנים להגדרה
User1.xls ו- ./pic
קבצי משאבי מחרוזת לתמונות יישום
makefile
הנדסת יישומים יוצרים סקריפט תצורה
User1.xn
יישום סקריפט תצורת קישור לפרוייקט, ארוז גם כסקריפט תצורת קובץ .AP
טבלה 5.4.4-1 ./ap_sample/ap_user1 תיאור הספריה
5.6.7.2 תכנון מתאר יישומים של User1
במבוא למבנה הקומפוזיציה של יישום החזית בסעיף 5.4.1, אנו יודעים כי יישום החזית נבנה על ידי לולאת תזמון הסצנה.
כל סצנה (למעט סצינות בקרה כמו סצינות תפריט וסצנות גלישה בספריות) נשלטת על ידי לולאת עיבוד הודעות (gui
לולאה לעיבוד הודעות ויישומים פרטיים, מורכבת בעיקר מלולאת עיבוד הודעות gui. אז, בשלב עיצוב האפליקציות,
השלב הראשון הוא לקבוע מאילו סצינות האפליקציה מורכבת ומחזור תזמון הסצנות, כיצד לעצב את ממשק המשתמש של כל סצנה (עבור
סצנת התפריט היא כיצד להגדיר את עץ התפריט) וכיצד לתקשר עם המשתמש.
בהנחה שמשתמש 1 מעוצב כשתי סצינות, סצנת ההפעלה וסצנת התפריט, לולאת תזמון הסצנה מתוארת כך:
1. שחקו סצנה:
א) אירועים שנכנסים לסצנת ההפעלה:
אני.
תחילה נכנס הבקשה ונמצאת במצב מושעה.
ii.
חזור לסצנת ההפעלה מסצינת התפריט.
ב) אירוע ליציאת סצנת המשחק:
אני.
לחץ על לחצן התפריט כדי להיכנס לסצנת התפריט.
ii.
לחץ על מקש היציאה כדי לצאת מלולאת הסצינה ואז צא מהיישום.

עמוד 166
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 166
2. סצנת תפריט:
א) אירועים שנכנסים לסצנת התפריט:
אני.
לחץ על לחצן התפריט בסצינת ההפעלה.
ב) אירוע ליציאת סצנת התפריט:
אני.
לחץ על מקש היציאה בתפריט העליון.
ii.
בחר את פריט התפריט עלה, בצע את פונקציית התפריט וחזור לסצינת ההפעלה.
3. חלק מעבד ציבורי:
א) לאחר קבלת הודעת יציאת היישום, צא מלולאת הסצינה ואז צא מהיישום.
נניח שדרישות ממשק המשתמש ותיאור העיצוב של סצנת ההפעלה הן כדלקמן: (כמובן שבמהלך פיתוח הפרוייקט, מעצב ממשק המשתמש יפיק בסופו של דבר
לתמונות וביצועים של משאבים)
1. רקע ליישום.
2. אזור משחק אחד, משחק לולאה 0-9, מחזור ההפעלה הוא שנייה אחת.
3. תווית סטטית המציגה את הסלוגן "הפגנת אפליקציית חזית"; תווית סטטוס המציגה "משחק כעת" או
"השהה הפעלה".
נניח שתצורת עץ התפריט של סצנת התפריט היא כדלקמן:
איור 5.4.4-1 עץ התפריט של סצנת התפריט
לאחר בירור נקודות העיצוב לעיל והשלמת העיצוב המפורט (היישום הקדמי של הדגמה זו הוא פשוט יחסית, התעלם ממנו בשלב זה), אני
נוכל להתחיל ליישם את יישום החזית.
5.6.7.3 שלב 1: בנה את ארכיטקטורת היישומים הבסיסית
בחר את התבנית המתאימה, כלומר את יישום החזית במקרה ההצעות, או הדגימה של אפליקציית החזית, שנה את התבנית כדי לבנות במהירות את יישום החזית

עמוד 167
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 167
השתמש בארכיטקטורה בסיסית. יישום התבנית שנבחר על ידי יישום החזית של הדגמה זו הוא ap_picture.
שלב 1.1 : כתוב user1_main.c
צור ספריית משנה חדשה של ap_user1 מתחת לספריית case / ap, העתק את pic_main.c לספריה זו ושנה אותה ל user1_main.c.
שינוי User1.c, השלבים הספציפיים הם כדלקמן:
1. שנה את תיאור הקובץ.
2. שנה את קובץ הכותרת לכלול.
3. שנה את ההגדרה של משתנים גלובליים, ושמור רק על משתנים גלובליים בסיסיים. ראה בטבלה שלהלן לפרטים.
משתנה גלובלי
תיאור
g_user1_var
משתני סביבת יישום
g_comval
משתנה בסביבת מקרה
פטוס ופריו
חוט ראשי של יישום (משימה) לערום כתובת ועדיפות
g_user1_scene_next
משתנה בקרת לולאות תזמון של יישום משתנה ומצביע על תרחיש יעד התזמון הבא
מערך טיימר ברמת היישום User1_app_timer_vector, צריכת שטח הנתונים הגלובלית של טיימרים ברמת היישום נקבעת על ידי היישום
מסופק מעצמו
טבלה 5.4.4-2 תיאור משתנה גלובלי בסיסי ליישום
.4 שנה את הממשק ואת יישומו ושמר רק על הממשק הבסיסי. ראה בטבלה שלהלן לפרטים. (פרמטרי יישום מפורטים של כל ממשק
ראה קוד מקור. )
5. העתק את יישום ממשק pic_msg_callback מ- pic_comfunc.c ל- user1_main.c ושנה את שמו
user1_msg_callback, רק MSG_APP_QUIT ואת ברירת המחדל סניפים שמורות .
משתנה גלובלי
תיאור
_user1_read_var
עם
_user1_save_var
הקודם טוען משתני סביבת יישומים ומשתני סביבת מקרים כדי לשחזר את הסצנה; האחרונה
שמור משתני סביבת יישומים ומשתני סביבת מקרה כאשר היישום יוצא
_user1_app_init
אתחול טעינת האפליקציה, יש להקצות את מזהה היישום, כלומר ב-
הוסף במקרה / inc / case_type.h, APP_ID_USER1 שומר על דלפק הקבלה של המערכת
יישום, אין צורך להוסיף
_user1_app_deinit
עיבוד יציאת היישום הוא התהליך ההפוך של אתחול טעינת היישומים
_user1_select_next_scene לאחר סיום הסצנה, החליטו איזו סצנה צריכה להיות מתוזמנת הבאה
_deal_user1_result
לפני יישום היישום, החליט איזה יישום חזית צריך להיווצר הבא
user1_msg_callback
יישום ממשק עיבוד הפצת הודעות פרטיות, נפוץ וכל לולאה לעיבוד הודעות סצנה
התקשר לממשק באופן אחיד
רָאשִׁי
הפונקציה העיקרית של היישום
טבלה 5.4.4-3 תיאור ממשק בסיסי של היישום

עמוד 168
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 168
שלב 1.2 : כתוב user1.h
העתק את picture.h לספריה זו ושנה אותה ל- user1.h.
שינוי User1.h, כולל תיאור קבצים, הכללת קובץ כותרת, הגדרת מאקרו, הגדרת סוג, הצהרת משתנה גלובלית, ממשק
הצהרה וכו '.
5.6.7.4 שלב 2: פיתוח סצינת ההפעלה
שלב 2.1 : כתוב לולאת עיבוד ההודעות User1_scene_play.c
העתק את pic_play.c לספריית ap_user1 ושנה אותו ל- user1_scnen_play.c.
שנה את User1_scene_play.c כדי ליישם תחילה את לולאת עיבוד ההודעות. הצעדים הספציפיים הם כדלקמן:
1. שנה את תיאור הקובץ.
2. שנה את קובץ הכותרת לכלול.
3. שנה את מערך מפת ההודעות gui, כלומר user1_play_keymap_list, הקובע את תגובת סצנת ההפעלה
אילו הודעות גוי. בנוסף, יש להוסיף את אירוע המיפוי לסוג המניין של מקרה / inc / app_msg.h
msg_apps_type_e. לדוגמה, יישום הדגמה זה מוסיף 2 אירועי מיפוי,
EVENT_USER1_PLAYING_PAUSE ו- EVENT_USER1_MENU.
4. שנה את יישום הממשק, ושמור רק על ממשקי לולאת עיבוד ההודעות הדרושים user1_play_msg_deal, user1_play
לַחֲכוֹת.
שלב 2.2 : עיצוב ממשק משתמש הניתן להגדרה
צור ספריית משנה חדשה למשתמש1 תחת ספריית המקרים / המשאבים, והעתק את ספריות user1.xls ותמונות לתיקיית המשנה הזו.
הורד והעתק אצווה של copyfile.bat ממקרה / משאב / תמונה לספריית המשנה user1, באמצעות עורך טקסטים.
פתח את קובץ האצווה ושנה את ap_picture ל- ap_user1.
איור 5.4.4-2 ספריית פרוייקטים ממשק המשתמש הניתנים להגדרה
פתח את הכלי של עורך ממשק המשתמש, בחר את המקרה / המשאב של ספריות העבודה, היכנס לממשק הראשי של הכלי ובחר בפרויקט AP
צפה ואז בחר בפרויקט user1. בתיבת הדו-שיח המוקפצת (או על ידי בחירת התפריט "עריכה-> הגדר משאבים ..."
צא מתיבת הדו-שיח), ייבא משאבי תמונות ומשאבי מחרוזת ואז ערוך את הפרויקט ואת בקרותיו.

עמוד 169
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 169
איור 5.4.4-3 המשתמש1 הגדיר תמונה להוסיף משאבים לפרויקט

עמוד 170
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 170
איור 5.4.4-4 user1 קבע מחרוזת להוסיף משאב לפרויקט
על הפרויקט לבחור את סוג השפה שלו כסינית מפושטת (סביבות שפה אחרות יכולות לבחור את סוג השפה המתאים).

עמוד 171
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 171
איור 5.4.4-5 הגדרת הפרויקט של user1 שפת התצוגה הנוכחית היא סינית פשוטה
ערוך את הפקדים הבאים עבור ממשק המשתמש של סצנת ההפעלה:
1. פיקבוקס רקע גדול בשם picbox_bg.
2. פיקבוקס רב-מסגרת לספירה, בשם picbox_playcount.
3. תיבת טקסט סטטית של תווית, בשם מחרוזת טקסט תיבת טקסט; שם תיבת טקסט של תווית סטטוס
טקסט תיבת טקסט.

עמוד 172
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 172
איור 5.4.4-6 User1 ערוך ממשק המשתמש של סצנת ההפעלה
הערה: תמונת הרקע של שליטת textbox_state מופעלת אוטומטית על ידי לחיצה ימנית על התפריט המוקפץ "יירט את תמונת הרקע של פקד זה".
יירט ואחסן אותו כמקרה / משאב / user1 / BgPicDoc / TextBox_state / TextBox_state_bg.bmp.
לאחר העריכה בחר בתפריט "קובץ-> צור קובץ משאבים ..." כדי ליצור קובץ נתונים user1.sty וטקסט כותרת
הקובץ user1_res.h ו- user1_sty.h, הפעל את קובץ העתק של קובץ האצווה והעתק את קבצי התוצאה האלה ליעד המתאים.
תחת הספרייה הרגילה.
איור 5.4.4-7 User1 מייצר קבצי משאבים

עמוד 173
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 173
בשלב הבא תוכלו לכתוב את קוד העיבוד של ממשק המשתמש עבור סצינת ההפעלה.
שלב 2.3 : המשך לשפר את חלק העיבוד של ממשק המשתמש של User1_scene_play.c
פתח את "us212a_lcd_driver ממשק manual.chm", עיין בקוד המדגם של הבקרה, כתוב עיבוד תצוגת בקרה
קוד.
שלב 2.5 : המשך לשפר את משחק משחק העיתוי של User1_scene_play.c
פתח את "us212a_common interface manual.chm", עיין בקוד המדגם של הטיימר וכתב את עיבוד ספירת הטיימר
קוד.
5.6.7.5 שלב 3: הוסף AP חדש למקרה
שלב 3.1 : שנה את ap_manager
הוסף שם AP ל- app_name_ram של manager_get_name.c ב- ap_manager, מכיוון user1.ap
זהו שם AP מורחב ושמור ונוסף עליו, אז דלג על שלב זה.
שלב 3.2 : שנה ap_mainmenu
הוסף את ערך הסמל של user1 AP ב- ap_mainmenu, אתה צריך לערוך את פרוייקט ממשק המשתמש שניתן להגדיר אותו, לשנות
מערך המשאב ב mainmenu_display_init.c. לפרטים, עיין בתיאור הפרק המקביל ליישום ap_mainmenu.

עמוד 174
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 174
שלב 3.3 : שנה את config.txt
שנה את הרשומה MAINMENU_AP_ID_ARRAY בסקריפט config.txt תחת מקרה / fwpkg כדי להוסיף AP
הוסף את המספר הסידורי למיקום המספר הסידורי שצוין, והפעל תיק עיבוד אצווה / כלים / Gen_config / genconfig.bat כדי לעדכן את התצורה
קובץ הנתונים config.bin.
הערה: לאחר שתשנה רק config.txt ולעדכן config.bin, עליך למחוק אותו לפני ניפוי באגים בסימולטור ממשק המשתמש.
case_simulator / bin / debug / VMdata.bin, כך שיישום ap_mainmenu יטען מחדש את היישום התקף
רשימת תעודות זהות. בנוסף, ההפעלה הראשונה לאחר מחיקת VMdata.bin עשויה להתרסק והיא תהיה רגילה לאחר הפעלה מחדש.
איור 5.4.4-8 config.txt מוסיף AP חזיתית
5.6.7.6 שלב 4: ניפוי באגים בסצינת ההפעלה בסימולטור ממשק המשתמש
שלב 4.1 : צור פרויקט סימולטור ממשק משתמש
צור ספריית פרויקטים חדשה של ap_user1 תחת תיקיית case_simulator / Apps, העתק ap_picture.dsp,
ap_picture.dsw ו- SMcommval.c הם שלושה קבצים, לשניים הראשונים שמם שם ap_user1.dsp ו- ap_user1.dsw,
פתח את שני הקבצים האלה בעורך טקסטים כמו UE, והחלף את כל ap_pictures ב- ap_user1. ואז לפתוח
קובץ הפרויקט ap_mainmenu.dsw תחת case_simulator / Apps / ap_mainmenu, הכנס את פרויקט ap_user1,
החלף את קובצי המקור בפרויקט בקובצי המקור בתיקייה case / ap / ap_user1. ואז פתח את תיבת הדו-שיח של הגדרות הפרויקט, הגדר

עמוד 175
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 175
שם יעד טוב הוא user1.ap.
איור 5.4.4-8 הגדרות אפשרות ניקוי באגים בפרויקט User1

עמוד 176
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 176
איור 5.4.4-8 הגדרות אפשרות פלט פרוייקט User1 של User1
שלב 4.2 : בנה , ניפוי באגים
בנה מחדש את הפרויקט ap_manager, ap_mainmenu, ap_user1 (חסום _user1_app_init ו-
_user1_app_deinit שורות קוד הקשורות לתפריט), שגיאה ברורה ואזהרה. ניפוי באגים לאחר בנייה מוצלחת
הפעל, בחר בסמל AP1 user1 בממשק הראשי של היישום ap_mainmenu כדי להזין ap_user1 כדי להתחיל באגים.
איור 5.4.4-9 תמונת מסך של פרויקט user1 פועל

עמוד 177
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 177
5.6.7.7 שלב 5: פיתוח סצנת התפריט
שלב 5.1 : כתוב user1_scene_menu.c
העתק את pic_menu.c לספריית ap_user1 ושנה אותו ל- user1_scnen_menu.c.
שנה את פונקציית הזנת הסצנה בתפריט
user1_menu, כתוב את פונקציית התגובה של כל פריט בתפריט
menu_func_count_clear
, Menu_func_count_sitch
, Menu_func_count_start
,
menu_func_count_stop.
שלב 5.2 : כתוב את קובץ תצורת התפריט user1_menu_conf.c
העתק את pic_menu_cfg.c לספריית ap_user1 ושנה אותו ל- user1_menu_cfg.c.
שנה את user1_entrymenu, user1_entry, item_head, פריט וכו '.
שלב 5.3 : ערוך את התפריט הניתן להגדרה
הוסף את שני קבצי המקור לעיל לפרויקט סימולטור ה- ui ולחשב מחדש.
העתק את קובץ case_simulator / bin / debug / user1.ap לתיקייה case / fwpkg / ap, וודא
הקובץ user1.sty קיים בספרייה זו (לאחר שפרויקט עורך UI מייצר את קובץ המשאב, הפעל את copyfile.bat כדי להעתיק אוטומטית
עבור לספריה זו), פתח את הכלי TreeLayer.exe בספריית המקרים / כלים, לחץ על כפתור הבחירה באפליקציה ובחר
קובץ user1.ap, הכלי מפרט את תפריט הכניסה ואת רשימת פריטי התפריט, ערוך את עץ התפריט, לחץ על לחצן Gen mcg,
לקובץ user1.mcg.
איור 5.4.4-10 עריכת עץ תפריט הניתנת להגדרה על ידי User1

עמוד 178
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 178
5.6.7.8 שלב 6: ניפוי באגים בסצנת התפריטים בסימולטור ממשק המשתמש
פתח את שורות הקוד הקשורות לתפריט בממשקים _user1_app_init ו- _user1_app_deinit שנחסמו לפני כן, ובצע מחדש
בנה מחדש את פרויקט ap_user1, נקה את השגיאה וההתרעה, לאחר שהבנייה הצליחה, באגים והפעל ואז באגים בסצנת התפריט.
איור 5.4.4-11 תרשים אפקט של סצנת התפריט User1
5.6.7.9 שלב 7: ניפוי באגים 1 AP בלוח
העתק את ה- makefile ו- ap_picture.xn לספרייה ap_user1, וזה האחרון שונה שם ל- user1.xn.
שלב 7.1 : שנה את קובץ ה- makefile
לפרטים, עיין בסעיף המדריך לשינוי תבנית Makefile.
שלב 7.2 : שנה user1.xn
לפרטים, עיין בסעיף מדריך לשינוי תבנית xn.
שלב 7.3 : איפור
בצע את פרויקט ap_user1 ב- cygwin, נקה את שגיאת קישור ההדרכה וצור את קובץ user1.ap.
שלב 7.4 : אריזת קושחה
הוסף ap_user1.ap, user1.mcg, לתסריט האריזות הקושחה fwimage.cfg בתיקייה case / fwpkg
חבילה של פריטים כמו user1.sty, ערוך מחדש את כל פרויקטים של תיקים, הרץ את תיק קובץ האצווה / build_sty.bat כדי לעדכן את mcg
קובץ, הפעל את קובץ האצווה buildfw.bat כדי ליצור קושחה US212A_EVB.fw ו- US212A_DEMO.fw.
שלב 7.5 : הורד את הקושחה למחשב המיקרו כדי לוודא אם התוצאה נכונה.
5.7 פיתוח ופיתוח יישומים אחוריים
רקע AP: ידוע גם בשם AP AP, זהו היישום הפונקציונאלי בפועל ברקע. כעת ישנם שני מנועים בתכנית, כלומר מוסיקה

עמוד 179
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 179
מנוע ומנוע FM, מנוע ה- AP צריך להיות נשלט על ידי AP הקדמי המקושר, במצב פסיבי.
AP הרקע שייך ל- PSP, ומבנה התמונה שלו זהה ל- AP הקדמי. כמובן, השימוש ברקע
ממשקים ציבוריים applib וממשקים ציבוריים common_func, אלה הוצגו בפרק היישום הקדמי
שאו, אני לא אחזור על זה כאן.
5.7.1 הרכב ומבנה יישומי רקע
יישום הרקע מבוסס על מחזור עיבוד ההודעות. ההרכב הכולל של היישום הוא מחזור הודעה.
קבל ועבד הודעות בקשה. בנוסף, ביישום הרקע יהיו כמה אירועי עיבוד תזמון, כגון רכישת תזמון מפענחים
מצב, אלה מושלים על ידי טיימר ברמת היישום.
5.7.1.1 רכיבי יישום
יישום הרקע מורכב בעיקר מהחלקים הבאים:
Subject נושא היישום, כלומר חלק עסקי
Module מודול נפוץ, כלומר ספריית ממשק פונקציות בסיסית של יישומים
Library ספריית תיווך ופונקציות, כולל דפדפן קבצים, בורר קבצים, מתורגמן מילים, מתורגמן ID3, USB
ספריית פונקציות וכו '.
Library ספריית זמן ריצה, ctor.o, כאשר האפליקציה מתוזמנת, פונקציית התחלה __ בספריה תפעל תחילה ותיקרא על ידי פונקציה זו
הפונקציה העיקרית של היישום
Library ספריית ממשק API, api.a, גרעין וכניסת גישה של כל דרייבר
❖ צור סקריפט, * .makeefile
Script סקריפט קישור xn, * .xn, באופן כללי, יישום הרקע כולל 3 סקריפטים של xn, שהם הקישור של ה- AP עצמו.
סקריפט קישור, חלק משופר מסקריפט הקישור וחלק משותף של סקריפט הקישור; סקריפט הקישור פועל גם כ- AP
קובץ תצורת חבילה
Script סקריפט תצורת קושחה config.bin
5.7.1.2 מבוא לנושא היישום
הגוף העיקרי של יישום הרקע הוא קוד המקור המאוחסן בספריית המשנה של היישום, וניתן לחלק אותו לבסיסי יישומים מבחינת פונקציית הקוד.
ארכיטקטורה ויישומי פונקציות עסקיות אלה:
Architecture אדריכלות בסיסית AP
✧ אתחול, כולל רישום applib, אתחול מנהל ההודעות, רישום טיימר ברמת היישום, קריאת יישום
משתני סביבת vm וכו '.
✧ יציאה, כולל שמירת משתני סביבת vm של יישומים, יציאת applib וכו '.
Loop לולאת עיבוד הודעות, (באופן פסיבי) קבלת בקרת יישומי חזית ואינטראקציה עם המערכת.

עמוד 180
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 180
Functions פונקציות עסקיות של AP
✧ השתמש בביצוע מחזור טיימר ברמת היישום.
Processing עיבוד של הודעות פרטיות ביישום בלולאת ההודעות.
5.7.2 שטח זיכרון של יישומי רקע
5.7.2.1 שטח קוד תושב
קטע קוד תושב של יישום רקע: 0xbfc1e800-0xbfc1edff, סך הכל 1.5KB, המשמש לאחסון AP, מודולים נפוצים,
ממשק התושבים של המודול המשופר ונתוני const ונתוני בנק קשורים.
5.7.2.2 שטח נתונים לתושבים
שטח נתונים ליישומי רקע
0x9fc1da00-0x9fc1dfff כולל 1.5KB, שטח הנתונים הגלובלי הוא AP, מודול משותף ומשופר
משותף על ידי המודולים.
מרחב נתונים גלובלי במקרה
0x9fc19f80-0x9fc19fff כולל 128B. שטח הנתונים הגלובלי הזה משותף לכלל מכשירי ה- AP, רק ב- ap_manager
זה מאותחל פעם אחת, משמש בעיקר לאחסון נתונים גלובליים של כמה מקרים של המודול Common.
5.7.2.3 קוד BANK ומרחב נתונים BANK
קבוצת בנק בקרת גב : (0x60 ** 0000 + 0x1e000) - (0x60 ** 0000 + 0x1e7ff) 2KB בסך הכל, בעיקר בשימוש
לאחסון ממשקי AP לא תושבים, ממשקים נפוצים שאינם תושבים וכו '. המודול המשותף מעסיק את קבוצת בנק הבקרה
בנק 40 ~ בנק 63 הם 24 מספרי בנק.
קבוצת BANK 1 משופרת בחזרה : (0x7a ** 0000 + 0x28800) - (0x7a ** 0000 + 0x28fff) = 2KB, השתמש
לאחסון ממשק מודול התווך, אם אינך זקוק לתמיכת תווך, אתה יכול להכניס קוד ונתונים.
חזור BANK משופר 2 קבוצות: (0x7b ** 0000 + 0x2a000) - (0x7b ** 0000 + 0x2afff) = 4KB, השתמש
לאחסון ממשקים אחרים של מודולי תווך, אם אין צורך בתמיכה של אמצעי תווך, ניתן למקם קוד ונתונים כלשהם.
5.7.2.4 הפעל שטח ערימה
יישומי רקע עשויים ליצור חוטי משנה, וחוטי משנה זקוקים לערימות הפעלה עצמאיות, כך שהמערכת מוקצה ליישום הרקע.
יש לטפל בנפרד בערימת המחסנית בה נעשה שימוש, בהתאם לשאלה האם ישנם חוטי ילדים:
● כשאין חוט ילדים: 0x9fc265c0 ~ 0x9fc25b00 = 0xac0 B
● כשיש חוטי ילדים:

עמוד 181
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 181
✧ פתיל ראשי: 0x9fc265c0 ~ 0x9fc26000 = 0x5c0 B
✧ חוט משנה: 0x9fc26000 ~ 0x9fc25b00 = 0x500 B
כאשר האפליקציה פועלת, שיחות פונקציות צורכות מקום רב בערימה, וכל שיחת פונקציה צורכת לפחות 24 בתים.
לכן, בתרחישים מסוימים עם פונקציות מורכבות, יש לשטח את הפונקציות ככל האפשר כדי לצמצם את השימוש בחלל הערימה.
בנוסף, חלוקת שטח המחסנית לעיל איננה מגבלה מתה, המשתמשים יכולים להיות גמישים בהתאם למצב בפועל של היישומים שלהם.
התאמה חיה, כלומר, החוט הראשי יכול להקצות גמישות ערכים בעת הגדרת OS_STK * ptos, בעוד שאשרי הילד גמישים בעת יצירת חוטים
מלא את הערך של חבר ה- pthread_param_t-> ptos.
5.7.2.5 שטח ערימה
המערכת מספקת 512 בתים של שטח ערימה, המשותף לכלל המערכת, והמרחב מוגבל יחסית. יישום
התוכנית יכולה להגיש בקשה זמנית לכמות זיכרון קטנה.
ערמת יישום: sys_malloc (& menu_history_addr, path_size);
ערימת חינם: sys_free (& menu_history_addr);
5.7.2.6 שטח VRAM
VRAM הוא שטח זיכרון לא נדיף שמור מהדיסק הראשי הנוכחי, יש לו קיבולת גדולה, אך מהירות הקריאה והכתיבה איטית מאוד.
בתרחישים שבהם המהירות אינה גבוהה, ניתן להשתמש בה לאחסון משתני סביבת יישומים ומאגרי נתונים זמניים.
המערכת מקצה 512KB שטח VRAM למקרה, ו- 1KB לכל יישום כדי לחסוך משתני סביבת יישומים.
השטח שנותר משמש כמאגר נתונים זמני ליישום.
כדי להקצות שטח VRAM ולהשתמש בו, שימו לב לא לכסות את שטח ה- VM של מודולים אחרים, ושימו לב לתחילת 0x80000
המרחב מוקצה ל- PSP. באופן עקרוני לא ניתן להשתמש במקרה. אם אתה באמת צריך להשתמש בשטח לאחר 0x80000, בבקשה
צרו קשר עם המהנדסים שלנו לקבלת תמיכה.
5.7.3 זרימת עיבוד הרחקה הדדית של מנועים
כמודול הביצוע בפועל של הפונקציה, המנוע תופס בדרך כלל משאבים בלעדיים כמו משאבי חומרה של הפלטפורמה, כמו מוזיקה
המנוע צריך לתפוס את מודול החומרה של פענוח שמע DSP, ויישומי הווידיאו זקוקים גם למשאב חומרה זה כדי לפענח, כך
מנוע המוזיקה מתנגש עם אפליקציית הווידיאו. כאשר מוסיקה מתנגנת ברקע, הכנסו ליישום הווידיאו ופענחו את הווידיאו
חייב להרוג באופן פעיל את מנוע המוזיקה לפני כן.
כמובן שיש מצב נוסף של משאב זיכרון, כמו מנוע מוסיקה ומנוע fm, כך שהרקע מתנגן
כשאתה מנגן מוזיקה, הכנס את יישום הרדיו לפני שתתחיל את מנוע ה- fm, עליך להרוג את מנוע המוזיקה. לסוג זה

עמוד 182
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 182
הסכסוך, עלינו לשים לב גם למצב בו אפליקציית החזית משתמשת במשאבי הזיכרון של יישום המנוע "בלתי חוקי", וגם זקוקה לקדמת הבמה.
היישום לוקח יוזמה להרוג את יישום המנוע.
אנו קובעים כי קונפליקט המנוע נבדק ומבוצע על ידי אפליקציית החזית בכדי להרוג את המנוע באופן סינכרוני
engine_type_e get_engine_type (void) קבל את סוג המנוע ואת engine_state_e get_engine_state (void)
ממשקים כמו השגת מצב מנוע, משתמשים יכולים לשפוט בנוחות האם יש התנגשות עם יישום החזית הנוכחי לפי סוג המנוע ומצבו.
5.7.4 כיצד להוסיף יישום רקע
5.7.4.1 user1_engine ספריית הדגמה
יישום רקע: user1_engine
נתיב קוד המקור: ./ap_sample/user1_engine
תיאור ספריית user1_engine
קובץ מקור / קובץ נתונים
תיאור
User1engine_main.c
התוכנית הראשית של היישום, כולל אתחול יישומים, יציאת יישומים, פונקציה ראשית של יישומים, ו-
הגדרה משתנה גלובלית וכו '.
User1engine_control.c
מודול בקרת יישומים, כולל לולאת הודעות פרטיות ליישום וכו '.
User1engine.h
קובץ כותרת יישום
makefile
הנדסת יישומים יוצרים סקריפט תצורה
User1.xn
יישום סקריפט תצורת קישור לפרוייקט, ארוז גם כסקריפט תצורת קובץ .AP
5.7.4.2 user1_engine עיצוב מתאר יישום
יישום הרקע פשוט בהרבה מיישום החזית. אין לולאת סצנה, אין ממשק משתמש הניתן להגדרה ותצורה.
בתפריט, אין לולאת הודעות gui, נותרו רק לולאת הודעות פרטיות וטיימר ברמת היישום.
יישום רקע זה משתמש ב music_engine כתבנית.
5.7.4.3 שלב 1: בנה את ארכיטקטורת היישומים הבסיסית
צור ספריית משנה חדשה user1_engine תחת תיקיית ה- case / ap והעתק mengine_main.c ו- mengine_control.c
ו- app_mengine.h לספרייה, שם שמו user1engine_main.c, user1engine_control.c ו-
user1engine.h.
שנה User1engine_main.c, הצעדים הספציפיים הם כדלקמן:
1. שנה את תיאור הקובץ.

עמוד 183
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 183
2. שנה את קובץ הכותרת לכלול.
3. שנה את ההגדרות המשתנות הגלובליות, ושמור רק על g_u1engine_var, ptos, prio,
u1engine_app_timer_vector וכו '.
4. שנה את יישום הממשק, ושמור רק על _user1_read_var, _app_init, _app_deinit, main וכו 'הדרושים,
לשינוי מפורט של כל ממשק, עיין בקוד המקור.
שנה User1engine_control.c, הצעדים הספציפיים הם כדלקמן:
● שנה את תיאור הקובץ.
● שנה את הכללת קובץ הכותרת.
● שנה את יישום הממשק ושמור רק על חסימת u1engine_control_block, u1engine_reply_msg וכו '.
לשינוי מפורט של כל ממשק, עיין בקוד המקור.
שינוי User1engine.h, כולל תיאור קבצים, הכללת קובץ כותרת, הגדרת מאקרו, הגדרת סוג, הצהרת משתנה גלובלית,
הצהרת ממשק וכו '.
5.7.4.4 שלב 2: הוסף את user1_engine AP למקרה
הוסף את שם ה- AP u1engine.ap ל- app_name_ram של manager_get_name.c ב- ap_manager.
5.7.4.5 שלב 3: תקשורת הודעות באגים וכו 'בסימולטור ממשק המשתמש
צור ספריית פרוייקטים חדשה של user1_engine תחת תיקיית case_simulator / Apps, העתק music_engine.dsp,
music_engine.dsw ו- SMcommval.c הם שלושה קבצים, לשניים הראשונים יש שם שונה user1_engine.dsp ו-
user1_engine.dsw, השתמש בעורך טקסט כמו UE כדי לפתוח את שני הקבצים האלה, ולהחליף את כל music_engine ב-
user1_engine. ואז פתח את קובץ הפרויקט ap_mainmenu.dsw תחת case_simulator / Apps / ap_mainmenu
קובץ, הכנס את פרוייקט user1_engine והחלף את קובצי המקור בפרויקט בקבצי המקור בספריית case / ap / user1_engine.
ואז פתח את תיבת הדו-שיח של הגדרות הפרויקט והגדר את שם היעד ל- u1engine.ap.
בנה מחדש את הפרוייקט ap_manager, user1_engine, קבע נקודות הפסקה, ניפוי באגים והפעל, בחר במפת AP של user1
סמן, אתה יכול להזין ap_user1 כדי להתחיל באגים.
5.7.4.6 שלב 4: ניפוי באגים בלוח
העתק makefile ו- music_engine.xn לספרייה user1_engine, שם האחרון שונה
user1_engine.xn.
שלב 4.1: שנה את קובץ ה- file. לפרטים, עיין בסעיף המדריך לשינוי תבנית Makefile.
שלב 4.2: שנה את user1_engine.xn, עיין במדריך לשינוי תבנית xn לפרטים.
שלב 4.3: הפוך את user1_engine לפרויקט ב- cygwin, נקה את שגיאת קישור ההדרכה וצור קובץ u1engine.ap
חתיכות.
שלב 4.4: הוסף u1engine.ap לתסריט אריזת הקושחה fwimage.cfg בתיקייה case / fwpkg

עמוד 184
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 184
לארוז פריטים, להפוך מחדש את כל הפרויקטים, הרץ את קובץ האצווה buildfw.bat כדי ליצור קושחה US212A_EVB.fw
ו- US212A_DEMO.fw.
שלב 4.5: הורד את הקושחה למחשב היקר כדי לוודא אם התוצאה נכונה.
5.8 תכנון ופיתוח רב-הברגה
5.8.1 אדריכלות מרובת-שלילי
ישנן שתי דרכים לרוץ במקביל, האחת היא הקבלה של תהליכים (יישום) - והשנייה היא הקבלה ברמת חוט. תהליך דורש המון
משאבים ועצמאות חזקה. החוט (הילד) זקוק רק לערימת ריצה עצמאית והוא יכול להראות את אותה הקבלה.
לכן, אם פונקציה צריכה להיות בלתי תלויה בגוף הראשי של היישום, או להפעלה מקבילה (כמו חישוב סך העמודים ביישום ספר אלקטרוני)
נתונים), או לבקרה עצמאית (כגון פענוח bmp לטווח ארוך של תמונות, כך שמשתמשים יוכלו להפסיק את הפענוח בכל עת),
כדי ליצור חוט ילד לרוץ.
כמובן שחוט הילד זקוק לערימת ריצה עצמאית, בגלל שטח מוגבל, אנו מאפשרים רק ליצור ילד של אפליקציה מקדימה
פְּתִיל.
5.8.1.1 צור חוט ילדים
1) thread_para.start_rtn = thread_loop ;
2) thread_para.arg = (void *) arg_pointer;
3) thread_para.ptos = (void *) AP_FRONT_HIGH_STK_POS;
4) libc_pthread_create (& thread_para, AP_FRONT_HIGH_PRIO,
CREATE_NOT_MAIN_THREAD);
5.8.1.2 הרס את חוטי הילד
כמו שלא נהרוג בכוח את היישום, לא נשמיד בכוח את חוט הילד, אך חוט הילד מבצע
לאחר השלמתה, התקשר אל libc_pthread_exit () בסוף פונקציית חוט הילד start_rtn; הממשק יוצא באופן פעיל מחוט הילד.
יציאת חוט הילד נשלטת לפעמים על ידי תוכנית היישום, או שאתה יכול לקבוע בעצמך שכל המשימות של חוט הילד מבוצעות.
ואז צא.
5.8.1.3 תרחיש אופייני רב-הברגה
בתרחיש יישום כפול טיפוסי, כלומר השמעת מוסיקה ברקע וצפייה בתמונות בקדמת הבמה, המסגרת המרובת הברגה היא כדלקמן:

עמוד 185
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 185
אחורנית
1
גב אחורה
1
2
חזית_לאו
1
2
חזית_גובה
1
2
מנהל AP
1
AP
2
AP
3
כבה את ה- usb
5.8.2 פיתוח רב חוטי
5.9 תכנון ופיתוח דרייברים
הנהג של US212A הוא מנהל התקנים בהתאמה אישית עם הסיומת DRV.
בפתרון US212A, ארכיטקטורת הנהג וממשק הנהג השתנו מאוד מפתרון 9X הקודם:
● כל דרייבר מספק ממשק אחיד, וחוסך את השטח הקבוע שתפוס ממשק ה- API. השכבה העליונה קוראת לממשקים שונים

עמוד 186
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 186
הפונקציות נבדלות על ידי פקודות, בדומה לצורת ה- iotcl במנהל התקן הלינוקס.
● כאשר הטעינה של מנהל ההתקן ניתן לקבל את הכתובת של הממשק הכללי של הנהג, והמערכת מספקת את ה- API של הממשק הכללי הזה ל- AP. וגם
במילים אחרות, הנהג צריך להגדיר את טבלת הממשקים ולספק את הכתובת הראשונה של טבלת הממשקים למערכת.
● קוד תהליך קפיצת ההפצה שקורא לממשק הספציפי מיושם באופן אחיד על ידי החלק של ניהול כונן המערכת. יכול גם לשמור כל אחד
שטח התושב של הנהג.
● כדי להראות את שיחות הממשק כאשר שיחות היישום AP דומות לאלה של פלטפורמת 9X המקורית, הגדר כל אחת מהן
המאקרו שנקרא על ידי הממשק. כאשר AP מתקשר לממשק, הוא יכול להשתמש ישירות בהגדרת המאקרו המתאימה לממשק.
5.9.1 מבנה הנהג
5.9.1.1 פרויקט מנהל התקנים
פרויקט הנהג של US212A כולל את הרכיבים הבאים:
● קוד מקור
לאתחל את הממשק ולצאת מהממשק, והשתמש בהגדרת module_init ו- module_exit
Declaration ההכרזה והגדרת טבלת ממשקי הכונן תואמים את מספר הפקודה של הממשק החיצוני והגדרת המאקרו אחד לאחד
Code קוד מקור אחר
● קובץ כותרת ממשק חיצוני: הגדרת מספר פקודה של ממשק חיצוני, הגדרת מאקרו של ממשק חיצוני, הגדרת מבנה נתונים אחר
● Makefile: כונן את ה- script, הפוך כולל את כל תהליך ההרכבה והקישור
● xn: קישור כונן ותסריט חבילה
לפרטים, עיין בממשק הנהג של ממשק הכונן מפורט  .
Makefile וכתיבת סקריפט xn מתייחסים לכונן Makefile ו- script scripting xn  .
5.9.1.2 קובץ תמונת מנהל התקן
כותרת הקובץ של קובץ תמונת הנהג .drv של US212A היא כדלקמן:
שֵׁם
לְקַזֵז
(בתים)
אורך
(בתים)
מתאר
DRV_FileType
0
1
FILE_DRV
סיומת קובץ 'D': ".DRV"
DRV_Driver סוג
1
1
סוג הנהג:
Majo_version
2
1
מספר הגרסה העיקרית

עמוד 187
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 187
מינור_סורסיה
3
1
מספר גרסת קטין
קֶסֶם
4
4
לוגו קסם
טקסט_קזז
8
4
קטע קוד התושבים מתקזז בקובץ
אורך טקסט
12
4
אורך קטע קוד התושבים, 0 פירושו שלא קבוע
קטע קוד תושב
Text_addr
16
4
הכתובת של קטע הקוד התושב בזיכרון
Data_offset
20
4
פלח נתוני התושבים מתקזז בקובץ
אורך נתונים
עשרים וארבע
4
אורך קטע נתוני התושבים, 0 פירושו שלא קבוע
מגזר נתוני תושבים
Data_addr
28
4
כתובת פלח הנתונים התושבים בזיכרון
אורך Bss_
32
4
אורך קטע bss
Bss_addr
36
4
כתובת התחלה של מגזר Bss
DRV_init_func_addr
40
4
כתובת פונקציית האתחול
DRV_exit_func_addr
44
4
צא מכתובת הפונקציה
DRV_BankAFileAddr
48
4
בנק בנקים בתיק הנהג
כתובת התחלה
DRV_BankBFileAddr
52
4
בנק B בנקאות בתיק הנהג
כתובת התחלה
DRV_BankCFileAddr
56
4
בנקים בנק C בקובץ הנהג
כתובת התחלה
Drv_op_entry
60
4
כתובת טבלת ממשק כונן, טבלת הממשק חייבת
במגזר הנתונים לתושבים
כפי שניתן לראות מהטבלה לעיל, קובץ תמונת הנהג מורכב מהחלקים הבאים:
● קטע קוד תושב: יש קטע קוד תושב אחד ורק אם הנהג צריך לכלול מספר קודים תושבים לא רציפים
בקטע, שיטת היישום תהיה מעט יותר מסובכת.
● פלח נתוני תושבים: כולל קטע נתונים ופלח bss, הראשון הוא המשתנה הגלובלי שאתחל, והאחרון הוא האתחול.
המשתנים הגלובליים המאתחלים נוקשים על ידי מערכת ההפעלה בעת טעינת מנהל ההתקן.
● מקטע קוד a / b / c בנקאי: כל מודול דרייבר יכול להכיל 3 קבוצות בנק, דרך אזור מספר הכניסה של מנהל ההתקן
כל קבוצת בנק תומכת במקסימום 64 בנקים, וקבוצת הבנק c משמשת כיום רק על ידי מנהל ההתקן של ה- ui. נהיגה
מספר הכניסה לממשק ה- API לנייד מוגדר כך:
typedef enum
{
DRV_GROUP_STG_BASE = 0,
DRV_GROUP_STG_CARD,

עמוד 188
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 188
DRV_GROUP_STG_UHOST,
DRV_GROUP_FAT32,
DRV_GROUP_FAT16,
DRV_GROUP_EXFAT,
DRV_GROUP_UI,
DRV_GROUP_LCD,
DRV_GROUP_FM,
DRV_GROUP_KEY,
DRV_GROUP_I2C,
DRV_GROUP_AUDIO_DEVICE,
DRV_GROUP_SYS = 15,
} drv_type_t;
● שלוש כתובות חשובות: כתובת פונקציית האתחול, כתובת פונקצית יציאה וכתובת טבלת ממשק הכונן.
Address כתובת פונקציית האתחול: נקראת כאשר מנהל ההתקן מותקן, מוגדרת על ידי module_init (DRV_init_func).
Address כתובת פונקציית יציאה: נקראת כאשר מנהל ההתקן פורק, מוגדר על ידי module_exit (DRV_exit_func).
Address כתובת טבלת ממשק הכונן: מוגדרת על ידי ENTRY (Drv_op_entry) בסקריפט קישור הכונן xn .
5.9.2 שטח זיכרון של הנהג
מנקודת המבט של השימוש בזיכרון, ניתן לחלק את הנהגים לשני סוגים: האחד הוא תושב הזיכרון, כגון מנהל התקן KEY,
מנהל התקן LCD, מנהל התקן ממשק משתמש וכו ', השני נטען לפי דרישה, כגון מערכת קבצים, מנהל התקן כרטיסים וכו'.
עבור הסוג הראשון של הכונן, המערכת חייבת להקצות קוד תושב בלעדי ונתוני תושבים עבורו, ולסוג השני,
ניתן לחלק אותו לסצנות ולעשות בהן שימוש חוזר על פי סצינות השימוש.
איננו מדברים על שטח התושבים ומרחב הנתונים התושבים של הנהג ובודקים את תיאוריית השימוש בזיכרון של כל נהג.
ברור שנסביר את שטח BANK המשותף לכל נהג.
בתוכן הקודם הצגנו כי הנהג כולל 3 בנקים, כלומר BANK A, BANK B, BANK
C, שם BANK מוקדש לנהגי ממשק המשתמש כדי לשפר את יעילות הביצוע של נהגי ממשק המשתמש.
● בנק A: (0x1 * ** 0000 + 0x24c00) - (0x1 * ** 0000 + 0x24fff), בסך הכל 1KB
● בנק B: (0x2 * ** 0000 + 0x25000) - (0x2 * ** 0000 + 0x257ff), סך של 2KB
● בנק C: (0x3 * ** 0000 + 0x21a00) - (0x3 * ** 0000 + 0x21dff), סך של 1KB
האדום * הוא מזהה הכונן המוזכר בקובץ תמונת הנהג שלמעלה, המשמש להבחנה מהו הכונן BANK.

עמוד 189
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 189
6 ביט הגבוה יותר של המספר ** מאחור מייצג את מספר BANK בקבוצת BANK.
5.9.3 הפעלה ויציאה מהנהג
לפני שה- AP מתקשר לממשק הנהג, יש לטעון את מנהל ההתקן ולפרוק אותו כראוי.
טען ממשק נהג:
int sys_drv_install (uint8 drv_type, uint8 work_mode, const char * drv_name);
הסר את התקנת ממשק הנהג:
int sys_drv_uninstall (uint8 drv_type);
דוגמה: טעינת מנהל התקן ממשק משתמש
sys_drv_install (DRV_GROUP_UI, 0, "drv_ui.drv");
תהליך מנהל התקן טוען:
השתמש במערכת קבצי SD כדי לפתוח קבצי מנהל התקנים
קרא את ראש הכונן (drv_head)
ודא את תוקף הנהג (דגל קובץ)
קבע את סוג הכונן (דגל drv_type)
קרא את קטע ה- Rcode של מנהל ההתקן ל- RAM
קרא את קטע האתחול של Rdata של הנהג ל- RAM
התקשר לפונקציית האתחול של הנהג עצמו

עמוד 190
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 190
Format פורמט כתיבה של פונקציות טעינה ופריקה של מנהל התקנים
כדי לעמוד בדרישות של מנהלי טעינה ופריקה של מנהלי התקנים, ההגדרה של פונקציות טעינה ופריקה של מנהלי התקנים כוללת דרישות מסוימות, המונעות על ידי ממשק המשתמש
לדוגמה:
int ui_init (void * null0, void * null1, void * null2);
int ui_exit (void * null0, void * null1, void * null2);
module_init (ui_init)
module_exit (ui_exit)
פונקציית האתחול / יציאה של מנהל ההתקן נקראת באופן פעיל ומרומז כאשר המערכת מתקינה / מסירה את ההתקנה של מנהל ההתקן, ואינה חייבת להתקשר אליהם על ידי היישום.
5.9.4 ממשק נהג מפורט
מנגנון ה- API של מנהל התקן US212A שונה למדי מהתכנית שלפני 9X. כי UA212A מבוסס על 32
בליבת MIPS M4k, למערכת יש מספיק פיסות כתובת כדי לבטא וליישם את מנגנון בנק החומרה, כולל ap bank ו-
בנק a / b / c. לפיכך, ממשק ה- API של הנהג של US212A אינו צריך עוד לקחת בחשבון את המנגנון הבנקאי
ממשק ה- API שקוף לחלוטין.
ממשק ה- API של מנהל התקן US212A מורכב מארבעה חלקים:
● כונן כניסה מאוחדת המנוהלת על ידי הגלעין
● טבלת ממשק כונן
● הצהרת ממשק פנימית והגדרה
● מספר פקודת ממשק חיצוני והגדרת מאקרו
בוא ניקח את מנהל ההתקן של ממשק המשתמש כדוגמה לתיאור.
5.9.4.1 כניסה לכניסה מאוחדת
הממשק המאוחד של מנהל התקן ממשק המשתמש מוגדר כך:
void * ui_op_entry (void * param1, void * param2, void * param3, ui_cmd_e cmd);
● ui_op_entry: כלול ב- api.a, 4 בתים, צריך לארוז בקטע קוד התושבים.
li v1, API_UI_ENTRY
break 0 → היכנס לתהליך השיחה של ה- API
● תיאור פרמטר קלט:

עמוד 191
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 191
U ui_op_entry המסופק על ידי Kernel כולל 4 פרמטרים שאחד מהם שמור להעביר את מספר הפקודה, אז ui
הכונן יכול להשתמש רק בשלושה פרמטרי קלט תקפים.
✧ param1: פרמטר קלט 1. אם אין פרמטר כזה, אתה יכול להזין 0 או NULL.
✧ param2: פרמטר קלט 2. אם אין פרמטר כזה, אתה יכול להזין 0 או NULL.
✧ param3: קלט פרמטר 3. אם אין פרמטר כזה, אתה יכול להזין 0 או NULL.
✧ cmd: פקודת הכונן המועברת, הערך הוא הערך ב- ui_cmd_e. על פי פקודות שונות, התקשר אחרת
פונקציית ממשק הנהג.
● תיאור פרמטר פלט: מצביע מסוג void, כלומר ערך החזר 32 ביט, ההגדרה הספציפית מוגדרת על ידי הממשק.
5.9.4.2 טבלת ממשקי הנהג
טבלת הממשק של מנהל התקן ממשק המשתמש מוצהרת כדלקמן:
typedef void * (* ui_op_func) (void *, void *, void *); → ניתן להשתמש רק 3 פרמטרי קלט תקפים
typedef struct
{
ui_op_func res_open;
ui_op_func res_close;
ui_op_func show_picbox;
ui_op_func show_textbox;
ui_op_func show_timebox;
...
ui_op_func show_listbox;
ui_op_func show_dialogbox;
ui_op_func show_parambox;
...
ui_op_func גלילה_string_ext;
ui_op_func set_language;
...
} פעולות ui_driver_ ;
טבלת הממשק של מנהל ההתקן של ממשק המשתמש מוגדרת כך:
ui_driver_operations ui_driver_op =
{
(ui_op_func) פתיחה מחדש,
(ui_op_func) res_close,
(ui_op_func) show_picbox,
(ui_op_func) show_textbox,

עמוד 192
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 192
(ui_op_func) show_timebox,
...
(ui_op_func) show_listbox,
(ui_op_func) show_dialogbox,
(ui_op_func) show_parambox,
...
(ui_op_func) גלילה_מחרוזת טקסט,
(ui_op_func) set_language,
...
};
יש להכריז על טבלת הממשק של מנהל ההתקן של ממשק המשתמש כ- Drv_op_entry בקובץ XN , כלומר:
כניסה (ui_driver_op)
גרעין יטען את Drv_op_entry שהוא ui_driver_op בכניסה המאוחדת של ניהול הגרעינים בעת טעינת מנהל ההתקן של ממשק המשתמש.
口 表 中。 בפה.
5.9.4.3 הצהרת הגדרת ממשק פנימית
יש להוסיף לטבלת ממשקי הנהג, יש להכריז על הממשק הפנימי כממשק החיצוני כבלתי-תקין *
(* ui_op_func) (void *, void *, void *); טופס זה חייב להכיל 3 פרמטרי קלט, פחות משלושה פרמטרים
יש למלא את הממשק בפרמטרים null.
void clear_screen (region_t * clrregion, void * null2, void * null3);
bool set_language (uint8 lang_id, void * null2, void * null3);
ui_result_e show_listbox (style_infor_t * listbox_style, listbox_private_t * listbox_data,
מצב list_draw_mode_e);
5.9.4.4 מספר פקודת ממשק חיצוני והגדרת מאקרו
הערה: מספר הפקודה והגדרת המאקרו חייבים להתאים לממשק בטבלת הממשקים.
מספר הפקודה של ממשק מנהל ההתקן של ממשק המשתמש מוגדר באופן הבא:
typedef enum
{
UI_RES_OPEN = 0,
UI_RES_CLOSE,
UI_SHOW_PICBOX,
UI_SHOW_TEXTBOX,
UI_SHOW_TIMEBOX,

עמוד 193
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 193
...
UI_SHOW_LISTBOX,
UI_SHOW_DIALOG,
UI_SHOW_PARAMBOX,
...
UI_SCROLLSTRING_EXT,
UI_SET_LANGUAGE,
...
} ui_cmd_e ;
מאקרו ממשק הנהג של ממשק המשתמש מוגדר באופן הבא:
# הגדר ui_res_open (שם קובץ, סוג)
ui_op_entry ((void *) (שם קובץ), (void *) (type), (void *) (0), UI_RES_OPEN)
# הגדר ui_res_close (סוג)
ui_op_entry ((void *) (type), (void *) (0), (void *) (0), UI_RES_CLOSE)
# הגדר ui_show_picbox (סגנון, נתונים)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (0), UI_SHOW_PICBOX)
# הגדר ui_show_textbox (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_TEXTBOX)
# הגדר ui_show_timebox (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_TIMEBOX)
...
# הגדר ui_show_listbox (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_LISTBOX)
# הגדר ui_show_dialogbox (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_DIALOG)
# הגדר ui_show_parambox (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_PARAMBOX)
...
# הגדר ui_scroll_strring_ext (infor, param, style_infor)
ui_op_entry ((void *) (infor), (void *) (param), (void *) (style_infor),
UI_SCROLLSTRING_EXT)
# הגדר ui_set_language (lang_id)
ui_op_entry ((void *) (uint32) (lang_id), (void *) (0), (void *) (0), UI_SET_LANGUAGE)
...
5.9.4.5 תהליך שיחת ממשק חיצוני

עמוד 194
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 194
5.9.4.6 שנה את הממשק החיצוני של מנהל ההתקן
לאחר הוספה או מחיקה של פונקציה כממשק חיצוני במנהל ההתקן, צריך לעשות את שני הדברים הבאים:
● כדי לשנות את ההצהרה ואת ההגדרה של טבלת ממשקי הנהג, עליך לוודא שמרחב הנתונים הגלובלי של הנהג מספיק
● שנה את מספר הפקודה של הממשק החיצוני ואת הגדרת המאקרו כדי להבטיח התאמה בין אחד לאחד עם הממשק בטבלת ממשקי הכונן
5.9.5 כונן כתיבת תסריטים של קובץ מקיף ו- xn
5.9.5.1 כונן סקריפט makefile
מה זה קובץ מקיף?
כאשר ביצוע הפקודה מבצעת, יש צורך ב- Makefile כדי לומר לפקודה make כיצד לערוך ולקשר
תכנית. Makefile הוא קובץ סקריפט שמציין כללי אוסף וקישור.
במהלך פיתוח יישומים ופיתוח מנהלי התקנים, המערכת תספק תבניות הגדרת יישום ומנהלי התקנים כדי לציין את שרשרת אוסף היישומים והנהגים
כללי בסיס בסיסיים נפוצים שצריך להקפיד עליהם בעת ההתחברות.
כאשר מנהל ההתקן כותב את ה- makefile של המודול שלו, הוא רק צריך לשנות את המודול המתאים בתבנית ה- makefile המסופקת על ידי המערכת.
פרטי נתיב קובץ המקור של החסימה, שם קובץ היעד שנוצר, נתיב האריזה של קובץ היעד, שם קובץ סקריפט הקישור ומידע נוסף.
תבנית Makefile ושינויה
אם ניקח את מנהל ההתקן של ממשק המשתמש כדוגמה, יש לשנות את קובץ ה- makef באופן הבא:
# שם היישום (שינוי -1)
IMAGENAME = drv_ui
# מיקום האחסון של קובץ המקור שיוקם (modify-2)
SRC = $ (מקרה) / drv
SRCDIR_16 = $ (SRC) / ui
SRCDIR_16_ROM = $ (SRC) / ui / ui_drv_rom
# נתיב התיקיה שאליו נשלח קובץ היעד (modify-3)
OBJECT_BIN_PATH = $ (CASE) / fwpkg / drv
# ציין את נתיב החיפוש של הקובץ התלוי בתהליך וכתב את הנתיב של קובץ המקור
VPATH = $ (SRCDIR_16) $ (SRCDIR_16_ROM) $ (SRCDIR_32).

עמוד 195
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 195
# ציין את שם סקריפט הקישור המותאם אישית (modify-4)
LD_SCRIPT = ui_driver.xn
# קבל את קוד המקור של סיומת .c
SRC_C_16_ROM = $ ( בחירה ישירה , $ (SRCDIR_16_ROM) , $ (תו כללי $ (dir) / *. C))
# המרה לתבנית .o שם קובץ ללא מידע על הנתיב
OBJ_C_16_ROM = $ (notdir $ (patsubst% .c,% .o , $ (SRC_C_16_ROM) ))
# קבל את כל שמות הקבצים .o
OBJ = $ (OBJ_C_16) $ (OBJ_C_16_ROM) $ (OBJ_S_16) $ (OBJ_C_32) $ (OBJ_S_32)
$ (OBJ_C_16_ROM) :% .o :% .c
$ (CC) $ (CC_OPTS_O2_16) -o $ @ $ <
@הֵד
תיאור:
1. IMAGENAME מייצג את שם הנהג, את שם הנהג המלא בדוגמה שלמעלה: drv_ui.drv
2. כברירת מחדל, כל קבצי המקור ממוקמים בספריית הכונן הנוכחית, באמצעות מערך הוראות MIPS 16e, אוסף אופטימיזציה O0,
אם יש תיקונים מיוחדים, כמו הדוגמה לעיל, יש ספריית משנה של ui_drv_rom בספריה הנוכחית.
קבצי המקור נערכים במיטוב O2 ונארזים לפורמט .bin בצורה קוד מיוצק. אז אתה צריך להוסיף
נתיב קובץ מקור חיצוני, כללי אוסף וכו '.
3. LD_SCRIPT מציין את סקריפט הקישור, מציין כיצד לקשר כל קטע במנהל התקן. הסקריפט נארז גם כ * .drv
קובץ סקריפט בפורמט קובץ.
5.9.5.2 סקריפט xn של מנהל התקן
מהו קובץ סקריפט מקשר ?
תאר כיצד למפות קטעים בקובץ הקלט לקובץ הפלט ולשלוט במערך האחסון של קובץ הפלט
קובץ סקריפט.
במהלך פיתוח אפליקציות ופיתוח מנהלי התקנים, המערכת תתאגד לפי בנקים ותספק קישורים לכל קטע בנק של היישום והמנהל.
תבנית, ציין את תבנית הקישור שיש לעקוב אחריה כאשר היישום והמנהל התקנים נערכים ומקושרים.
על בסיס תבנית סקריפט הקישור, מנהל ההתקן כותב את התבנית בהתאמה על פי התפלגות קוד הנהג ומרחב הנתונים
קובץ סקריפט מקשר - -.
אם ניקח את מנהל ההתקן של ממשק המשתמש כדוגמה, הפורמט של קובץ ה- XN הוא כדלקמן:
הגדירו את אינדקס הקבוצה BANK ומשתני כתובת אחרים
INPUT (link_base.xn)
INPUT (sdk_link_base.xn)

עמוד 196
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 196
קבל את האינדקס הקבוצתי של מודול מנהל ההתקנים של ממשק המשתמש, על מפתח מנהל ההתקן לבחור
BANK_GROUP_INDEX = DRV_GROUP_UI;
השג את הכתובת הפיזית של קטע קוד התושבים ונתח התושבים במודול ממשק המשתמש ממפת הכתובות
SRAM_TEXT_ADDR = SRAM_UI_RCODE_ADDR;
SRAM_DATA_ADDR = SRAM_UI_DATA_ADDR;
לא ניתן לשנות את המרה לכתובת קישור
RCODE_TEXT_ADDR = RCODE_ADDR_BASE + SRAM_TEXT_ADDR;
ROM_TEXT_ADDR = RCODE_ADDR_BASE + SROM_UI_ADDR;
RDATA_DATA_ADDR = RDATA_ADDR_BASE + SRAM_DATA_ADDR;
KERNEL_BANK_A_ADDR_BASE
=
(KERNEL_BANK_A
<<
28)
+
(BANK_GROUP_INDEX << 24) + SRAM_BANK_A_ADDR;
KERNEL_BANK_B_ADDR_BASE
=
(KERNEL_BANK_B
<<
28)
+
(BANK_GROUP_INDEX << 24) + SRAM_BANK_B_ADDR;
KERNEL_BANK_C_ADDR_BASE
=
(KERNEL_BANK_C
<<
28)
+
(BANK_GROUP_INDEX << 24) + SRAM_BANK_C_ADDR;
לא ניתן לשנות את גודל השטח בפועל של הבנק
KERNEL_BANK_A_SIZE = SRAM_BANK_A_SIZE;
KERNEL_BANK_B_SIZE = SRAM_BANK_B_SIZE;
KERNEL_BANK_C_SIZE = SRAM_BANK_C_SIZE;
לא ניתן לשנות את שטח הבנק המרבי שמותר על ידי המערכת
KERNEL_BANK_SPACE = BANK_SPACE;
OUTPUT_ARCH (mips)
הצהרת טבלת ממשק כונן
כניסה (ui_driver_op)
הגדרת קטע הפלט
מקטעים
{
.text RCODE_TEXT_ADDR:
{
api.a (.text .rodata)
rcode_ui_op_entry.o (.text .rodata)
rcode_ui_functions.o (.text .rodata)

עמוד 197
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 197
}
.data RDATA_DATA_ADDR: AT (ADDR (.text) + sizeof (.text))
{
rcode_ui_op_entry.o (. נתונים)
}
.bss :
{
* (. bss)
* (. sbss)
*(.מְשׁוּתָף)
*(מְשׁוּתָף)
}
בנק פלח קוד → וודא ששם קטע הפלט של בנק a מתחיל ב- BANK_A
. = KERNEL_BANK_A_ADDR_BASE;
BANK_A _0:
{
* .o (.text .rodata)
. = KERNEL_BANK_A_SIZE;
}
/ * נניח שיש בנק אחר a, שם הקובץ הוא bank_a_ui_xx.c * /
. + = (KERNEL_BANK_SPACE-KERNEL_BANK_A_SIZE); → וודאו ש -18 הסיביות התחתונות של הכתובת הן כל ה- 0s
BANK_A _1:
{
bank_a_ui_xx.o (.text .rodata)
. = KERNEL_BANK_A_SIZE;
}
קטע קוד בנק ב 'וודא כי שם קטע הפלט של בנק ב' מתחיל ב- BANK_B
. = KERNEL_BANK_B_ADDR_BASE;
BANK_B _0:
{
* .o (. טקסט .rodata)
. = KERNEL_BANK_B_SIZE;
}
קטע קוד C של הבנק → וודא ששם קטע הפלט של בנק c מתחיל ב- BANK_C
. = KERNEL_BANK_C_ADDR_BASE;
BANK_C _0:

עמוד 198
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 198
{
* .o (. טקסט .rodata)
. = KERNEL_BANK_C_SIZE;
}
}
5.9.6 כיצד להוסיף מנהל התקן
מכיוון שהוספת מנהל התקן חדש מחייבת שטח נתונים תושב נוסף ומרחב קוד תושב, ומנהל התקן סרק
למען האמת, כל המשאבים הללו קשים יחסית להשגה.
לכן איננו ממליצים להוסיף מנהל התקן חדש, אך אנו ממליצים למזג את פונקציית מנהל ההתקן למנהל התקן הקיים
לדוגמה, פונקציית מנהל ההתקן בשלט רחוק אינפרא אדום ממוזגת למנהל התקן KEY.
5.10 הנחיות להתאמת הקצאת שטח זיכרון
5.10.1 תרשים להקצאת זיכרון מקרה
להלן תרשים הקצאת הזיכרון של פיתרון US212A. באיור נקבע רק ap_manager, יישומי חזית,
הקצאת הזיכרון של יישומי רקע, מנהל התקן KEY, מנהל התקן LCD, מנהל התקן ממשק משתמש ומודולים אחרים תחולק על ידי המערכת.
התאמה, מקרה לא יכול להפריע.

עמוד 199
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 199
יישום רקע [0x2a000 - 0x2afff]
מגזר BANK ENHANCED2 (4k)
יישום חזית [0x27000 - 0x277ff]
מגזר BANK ENHANCE1 (2k)
יישום רקע [0x28800 - 0x28fff]
מגזר BANK ENHANCED1 (2k)
יישום חזית [0x27800 - 0x27fff]
מגזר BANK ENHANCED2 (2k)
[0x21880 - 0x219ff] קוד תושב נהג LCD קטע 2 0.375K
[0x21a00 - 0x21dff] מנהל התקן BANK C (1k), מומלץ בלבד
מונע על ידי ממשק המשתמש כדי להאיץ את מהירות התצוגה של ממשק המשתמש
[0x20600 - 0x20eff] קטע קוד תושב נהג KEY (2.25K)
[0x20f00 - 0x2157f] קטע קוד תושב נהג LCD 1 1.625K
[0x25000 - 0x257ff] הנהג BANK B (2K)
[0x24c00 - 0x24fff] הנהג BANK A (1K)
[0x25800 - 0x25aff] שטח מחסנית ap_manager (0.75K)
[0x26ac0 - 0x26eaf] שטח מחסנית יישום קדמי (1K)
[0x265c0 - 0x26abf] שטח מחסנית חוטים קדמי לילד (1.25K)
[0x26000 - 0x265bf] שטח מחסנית ליישומי רקע (1.5K)
[0x25b00 - 0x25fff] שטח מחסנית תת-חוט רקע (1.25K)
[0x21580 - 0x2187f] קטע קוד תושב נהג ממשק משתמש (0.75K)
[0x21e00 - 0x24bff] שימוש במערכת
[0x26eb0 - 0x26fff] שימוש במערכת
[0x28000 - 0x287ff] שימוש במערכת
[0x29000 - 0x29fff] שימוש במערכת
[0x2b000 - 0x31fff] עיסוק מערכת
[0x32000 - 0x33fff] חיץ מנהל התקן ממשק משתמש (8k), עריכת רשומות
קוד, העברת נתוני דיסק U, פענוח תמונות תפוס על ידי המערכת
[0x34000 –∞] כיבוש מערכת
[0x1ab80-0x1acff] אזור נתונים של כונן מפתח (0.375 K)
[0x1ce00 - 0x1d1ff] אזור נתוני מנהל התקן של ממשק המשתמש (1K)
[0x1da00 - 0x1dfff] נתוני יישומי רקע
(AP + COMMON + ENHANCED)
1.5K
[0x1d200 --- 0x1d9ff] אזור נתוני היישום בחזית
(AP + COMMON + ENHANCED) (2K)
[0x18000-0x183ff] חיץ מנהל התקן ממשק משתמש (1 K)
[0x1ae00 - 0x1afff] קטע בנק מנהל (0.5K)
[0x19e80-0x19eff] אזור נתונים של כונן LCD (0.125 K)
[0x19f80-0x19fff] אזור נתונים גלובלי של יישומים (0.125K)
[0x1ad00-0x1adff] קוד ותושב מנהל מגזר 0.25k
[0x00000-0x15fff] שימוש במערכת
[0x18400-0x19e7f] שימוש במערכת
[0x19f00-0x19f7f] שימוש במערכת
[0x1a000-0x1ab7f] שימוש במערכת
[0x1b000 - 0x1cdff] שימוש במערכת
הקלטה ווידאו
השתמש במרחב הזה כדי להיות
המערכת תופסת 1.5K
[0x1ee00 - 0x1f5ff] אזור קוד תושב של יישום חזית (2K)
[0x1f600 - 0x1fdff] קטע UI BANK של יישום החזית (2K)
[0x1fe00 - 0x205ff] קטע הבקרה לבקרת חזית היישום
(2K)
יישום רקע [0x1e000 - 0x1e7ff]
קטע CONTRL BANK (2K)
[0x1e800 - 0x1edff] יישום רקע קבוע
אזור קוד (1.5K)
רשום החל אותו
שטח תפוס על ידי המערכת
שימוש (3.5K)
Ap_manager
מַפְתֵחַ
LCD
ממשק משתמש
כאשר התמונה מפוענחת
כיבוש מערכת
כאשר מפענח שמע
כיבוש מערכת
כאשר מפענח שמע
כיבוש מערכת
תיאור:
● חלק מהמרחב המשופר ומשימוש חוזר במערכת נפוצים, לכן מומלץ לא להתאים את הקטע המשופר
גודל וגבול. אם אתה מאשר כי אין להשתמש בשימוש משופר בתרחיש מסוים, אתה יכול להשתמש בו ישירות למטרות אחרות
דרך, אבל אתה חייב לומר למערכת שהקטע המשופר המשופר תופס, כלומר, נקה את הקטע המשופר.
לפרטי TLB, אנא התייעץ עם המהנדסים שלנו לקבלת פרטים.

עמוד 200
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 200
5.10.2 הוראות הקצאה
כפתרון כולל, US212A מקצה שטח זיכרון מוגבל על סמך תרחישים של פונקציות מערכת.
מערך הקצאה אופטימלי תחת תיאום קפדני של כל חלקי המערכת, כך שלשכבת המקרים ניתן להקצות שטח זיכרון
הגמישות בביצוע התאמות נמוכה יחסית, ליציבות המערכת הכוללת אנו ממליצים למשתמשים להשתמש בהתאמות המתוארות בסעיף הבא.
שיטת התאמה, נסה להימנע מביצוע התאמות גדולות יותר, במידת הצורך, אנא התייעץ עם המהנדסים שלנו.
בתוכן הקודם הסברנו את הקצאת שטח הזיכרון של יישומים ומנהלי התקנים, כמו גם את הקשר בין שטח זיכרון
פרטי השימוש בסקריפטים קשורים * .xn וקובצי קבצים מופצים ביניהם. כאן אנו מוסיפים קצת הקצאת שטח זיכרון
קצת תוכן.
● הקישור מצוין ב- Makefile כדי ליצור קובץ * .map, המכיל תמונות כגון יישומים או מנהלי התקנים
ניתן להשתמש במידע על הקצאת הזיכרון של הקובץ כדי להבין את כתובת הקישור וגודל כל ממשק ומשתנה, ומשקפים
מידע על קטעי פלט שונים כמו קבצים, כולל כתובת קישור, גודל קטע, בין אם זה מחוץ לתחום והקוד המופיע בסעיף
ונתונים וכו '.
● שטח זיכרון פיזי הוא בלעדי בחלל, כלומר, לא ניתן להקצות את אותו שטח זיכרון פיזי לשונה
אותו מודול; מרחב הזיכרון הפיזי באותו מודול הוא גם בלעדי הדדי; ובתרחישים שונים בזמנים שונים,
ניתן לעשות שימוש חוזר במרחב הניהול.
● קטע קוד התושבים וקטע נתוני התושבים מועברים לזיכרון הפיזי המתאים בעת טעינת היישום או מנהל ההתקן.
יכול להיות רק קטע קוד תושב אחד ומקטע נתוני תושבים של היישום והנהג לשעבר, אשר עשוי להביא
בעיה אחת, אם פלח קוד התושב או שטח פלח נתוני התושבים הזמין ליישום או לנהג מפוזר על מספר רב
במרחב זיכרון פיזי לא רצוף, אי אפשר להעביר את כל קטעי הקוד התושבים או קטעי הנתונים של התושבים אל
מרחב הזיכרון הפיזי נעלם. השיטה לפיתרון הבעיה מורכבת יותר, אנא התייעץ עם המהנדסים שלנו ליישום ספציפי.
5.10.3 הנחיות התאמה
מדריך ההתאמה של מסמך זה מוגבל ליישום ולנהג, ושימוש בשטח זיכרון פנוי להתאמה.
אנא התייעץ עם המהנדסים שלנו לקבלת התאמות אחרות של שטח זיכרון.
שיטת התאמת שטח הזיכרון היא בעיקר לעבור בין בלוקי זיכרון סמוכים, למצוא מקום פנוי אחר וכן הלאה. שטח זיכרון
ההתאמה צריכה להתממש על ידי שינוי קובץ * .xn, בעיקר כדי לשנות את כתובת ההתחלה וגודל גוש הזיכרון, כמו לפני התאמה.
קטע ה- CONTROL BANK באפליקציית טייוואן מועבר מקטע UI BANK ל- 0x100 B, אותו ניתן לשנות באופן הבא:
BANK_CONTROL_1_ADDR_BASE = (AP_BANK_FRONT_CONTROL_1 << 24) +

עמוד 201
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 201
SRAM_AP_BANK_FRONT_CONTROL_ADDR; → אל תשנה את כתובת ההתחלה, פשוט הוסף 0x100 לגודל
BANK_UI_1_ADDR_BASE
=
(AP_BANK_FRONT_UI_1
<<
עשרים וארבע)
+
SRAM_AP_BANK_FRONT_UI_ADDR + 0x100 ; → להזיז את כתובת ההתחלה לאחור ב- 0x100
BANK_CONTROL_SIZE = SRAM_AP_BANK_FRONT_CONTROL_SIZE + 0x100 ;
גודל פלוס 0x100
BANK_UI_SIZE = SRAM_AP_BANK_FRONT_UI_SIZE - 0x100 ; → גודל מינוס 0x100
שימו לב לשינוי שקיים בעת שינוי. לדוגמה, שנה את יישום החזית, יתכן שתצטרך לשנות לקבצי 3x .xn בו זמנית.
כולל שני קבצי ה- xn הנפוצים והמשופרים, ושינוי יישום אחד בלבד, עליך
העתק את שני קבצי ה- xn הנפוצים והמשופרים לספריית היישומים הנוכחית ושנו את קובץ ה- xn של ה- makefile
רשימת, הצבעה על שני קבצי xn אלה.
בנוסף, כדאי לשים לב לנקודות הבאות בעת התאמת שטח הזיכרון:
● המערכת קיימת רק ותפעיל יישום חזית ויישום רקע בו זמנית, כך שזיכרון היישום ריק
התאמת זמן רק צריכה להתמודד עם הקצאת שטח משלה, ואינה צריכה לדאוג ליישומים אחרים. אבל אם היישום כרוך בכך
והתאמות נפוצות יהיו מעט יותר בעייתיות, מכיוון שכל הקוד של המודול המשותף משותף לכל היישומים.
כן, התאמת הקוד שלה דורשת בחינה מדוקדקת של כל היישומים האחרים. כך שתוכלו לבצע גם שכיחות
התאמה אישית, כלומר העתק עותק של הקוד וסקריפט ה- xn, ובצע באופן עצמאי התאמות בהתאמה ליישום.
● קיימים דרייברים מרובים ופועלים במערכת בו זמנית, כך שתיקון BANK A ו- BANK B של הנהג
השינוי ישפיע על מספר מנהלי התקנים ולא ניתן להתאים אותם. עבור BANK C, מכיוון שהוא מונע בלעדית על ידי ממשק המשתמש,
כך שניתן להתאים אותו בתנאים מסוימים.
● מצא שטח זמין אחר: שיטה זו היא הבטוחה ביותר, אך השטח הפנוי של התוכנית הספציפית תלוי בלקוח.
המקרה הסופי של משק הבית תלוי בנסיבות הספציפיות.
● שימוש חוזר מרחבי: שיטה זו לעיתים יעילה מאוד, אך ניתן להתקין אותה רק כאשר יש לך הבנה טובה יותר של המערכת.
שימוש מלא, הוא צריך לתפוס בבירור את כל הקצאת הזיכרון של המערכת במצב שימוש מסוים, וצריך לטפל בה היטב
הפרטים החתוכים והחתוכים של הסצינה. שיטה זו מסובכת יותר, אנא התייעץ עם המהנדסים שלנו ליישום ספציפי.
הסבר מפורט על מנהל התקן 6
מנהל התקנים כולל מנהל התקן KEY, מנהל התקן LCD, מנהל התקן ממשק משתמש, מנהל ברוכים הבאים, מנהל התקן FM וכו '.
מנהלי התקנים הקשורים למקרה, מקרה KEY ספציפי, מודול LCD, מודול FM עשויים להיות שונים ואפילו
השימוש באותה חומרה, מפרטי פונקציות התוכנה עשויים להיות שונים גם כן, ולכן הכנסנו מנהלי התקנים אלה למקרה

עמוד 202
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 202
לעצב וליישם.
ביניהם, מנהל התקן KEY, מנהל התקן LCD ומנהל ממשק משתמש הם המודולים הבסיסיים ליצירת אינטראקציה עם משתמשים, כלומר אלה האחראים על יישומי חזית.
משימות קלט / פלט ממלאות תפקיד חיוני בבניית מקרה אנושי. מנהל התקן ה- FM מיועד רק ליישום הרדיו
למודול הבסיסי אין השפעה מיוחדת על כל המקרה. אז להלן אנו מציגים רק את 3 הנהגים הראשונים,
השאר את מנהל התקן ה- FM בפרק היישום והציג אותו עם יישום הרדיו.
בנוסף, מנהל התקן ברוך הבא קשור קשר הדוק למנהל התקן LCD וזה הכרחי גם במקרה
רכיב, כך שהוא יובא גם להלן.
6.1 תכנון כונן מפתח
בדרך כלל אנו תומכים בשני סוגים של לחצנים: כפתור GPIO וכפתור LRADC מבוקר חוט, אם כי עקרון החומרה שונה במקצת.
ההבדל, אך עיבוד הודעות המפתח הוא בעצם זהה.
בנוסף, הוספנו לחצן IR שלט רחוק אינפרא אדום למנהל התקן KEY, וללחצן ה- IR יש תמיכה נוספת למקלט אינפרא אדום.
האות שמתקבל על ידי ראש קבלת האינפרא אדום מנותח ומעובד על ידי מודול ה- IR ב- IC בכדי לקבל ישירות את סוג הכפתור הפיזי.
6.1.1 סקירת דרישות ועקרונות תכנון
מנהל התקן KEY מספק בעיקר סריקת KEY ושליחת הודעות מפתח, בנוסף, טעינת סוללות, איתור כרטיסים, איתור אוזניות וכו '.
מודול הפונקציה שאינו תלוי ביישום מיושם גם במנהל התקן KEY.
במקרים רבים, אנו יכולים לראות בכונן KEY כארכיטקטורת כונן פשוטה עם מחזור של 20ms כאשר הוא מותקן
הפסקת טיימר חומרה. לכן מנהל ההתקן של KEY מתאים מאוד להשלמת כמה משימות סריקה רגילות.
כנהג אתה יכול להשתמש BANK A, BANK B, כך שכל פונקציה שאינה תלויה ביישום
ניתן לארוז את כל הממשקים כממשקי BANK A ו- BANK B המונעים על ידי KEY.
6.1.2 עקרון לוח המקשים
6.1.2.1 עקרון כפתור ADC
כפתור ADC, העיקרון הוא שכאשר לוחצים על הכפתור נלחצים על כפתורים שונים, המתח מ- AVCC ל- GND

עמוד 203
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 203
ערכי ההתנגדות שונים, וכתוצאה מכך מחלק מתח שונה מ- LRADC1 לקרקע התוכנה תקרא את LRADC1
ערך, לחצנים שונים מייצרים ערכי ADC שונים כדי לקבוע איזה כפתור הוא ספציפי. ADCs המתאימים לערכי התנגדות שונים
שיטת החישוב של הערך היא כדלקמן: (קח את דיאגרמת עקרון הכפתור הבאה של US212A כדוגמה להמחשת שיטת החישוב)
1. מדדו ישירות את המתח של LRADC1 באמצעות מד מתח. אם ניקח את המפתח הבא כדוגמה, המתח שנמדד ב- LRADC1 הוא 0.35 וולט,
החל את הנוסחה הבאה. AVCC הוא 2.8v, והערך המתקבל הוא:
7
1
2
איקס
AVCC
V lradc
2. חשב על בסיס ערך ההתנגדות. קח דוגמה NEXT, הכפיל את יחס מחלק הנגד ב 128 וקבל ערך של 0.25:
7
2
20
1
20
איקס
+ K
M
ק
7 בשתי הנוסחאות לעיל
2 פירושו של LRADC1 הוא ADC עם 7 סיביות. שימו לב למספר הסיביות בעת השימוש ב- ADCs שונים.
שימו לב: בהתבסס על העיקרון שלעיל, אי אפשר להשיג את הפונקציה של לחיצה על שני כפתורים בו זמנית דרך כפתור ה- ADC.
6.1.2.2 עיקרון לחצן GPIO
בדרך כלל ישנן שתי דרכים לעצב כפתורי GPIO: כל GPIO תואם כפתור ומטריצת ה- GPIO
הפניה לעיצוב היא כדלקמן:
שימו לב: בהתבסס על העיקרון שלמעלה, תוכלו להשתמש בלחצן GPIO כדי לאתר מספר כפתורים שנלחצים בו זמנית.
6.1.2.3 עיקרון העיצוב של כפתור ה- IR
בסביבת מערכת Ucos היא מבינה בעיקר אתחול הגדרות המפתח, רכישה ושמירה של ערכי מפתח וכו ', שהוא המפלס העליון
היישום מספק את המידע הנדרש.
6.1.3 מודול פונקצית כונן מפתח
מודול פונקציית הכונן KEY הוא כדלקמן:
חלוקת מודולי פונקציה
תקציר מודול
key_rcode_scan.c
key_rcode_scan_O2.c
סריקת כפתורים ושליחת הודעות, איתור אוזניות
key_rcode_charge.c
key_banka0_charge.c
מודול בקרת טעינה

עמוד 204
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 204
key_bankb0_init.c
אתחול מנהל התקן מפתח
key_bankb1_exit.c
הסרת התקנת כפתור
key_banka1_state.c
קבל את כתובת טבלת המיפוי המפתח ועיבוד המצב
key_rcode_op_entry.c
עיבוד פונקציות ממשק API של יישומים
בשלב הבא, כל מודול פונקציונלי יוצג בפירוט:
6.1.3.1 סריקת מקשים ושליחת הודעות
כפתורי GPIO וכפתורי LRADC מבוקרים באמצעות חוט משמשים ללכידת פעולות כפתורים בסריקה תקופתית של 20 מילימטרים
ומעובד. כאשר לוחצים על הכפתור, יתכן שהוא מרוצד בגלל מגע לא מלא של הכפתורים. אם שינוי המתח נתפס, הוא נקבע
על מנת להקיש על מקש, הודעת המקש עלולה להישלח בצורה שגויה, ולכן עליה לבצע עיבוד הסרת ריצוד. להסרת הריצוד, לחץ על
לאחר פעולת המפתח יציבה, תוכלו להתחיל לשלוח הודעות מפתח בהתאם למחזור חיי המפתח.
מחזור חיי המפתח הוא כדלקמן:
עיבוד הודעות הכפתורים מיושם באמצעות ממשק PutSysMsg, אשר יעבד את הכפתור על פי מחזור חיי הכפתור שהוזכר לעיל.
הודעת מפתח. הודעת המפתח נשלחת דרך ממשק post_key_msg, הודעת המפתח תידחס ל -4 מילים כאשר היא נשלחת
זרם בתים חלקי כדי לחסוך שטח נתוני מערכת יקר. בדרך זו, עליך להזין את הודעת המפתח ב- get_gui_msg.
פתח אותו. פורמט הדחיסה והפירוק הוא כדלקמן:
input_msg_type_e
1B
key_value_e
1B
key_type_e
2 ב
ביט 0
ביט 8
ביט 16
ביט 31
הערה: כפתור ההפעלה הוא כפתור מיוחד, ללא תלות בעיבוד LRADC. אז כפתור ההפעלה לא יכול להיות זהה לזה של אחרים
החלפת מפתחות, היא קבועה בראשון בטבלת מיפוי המפתחות.
6.1.3.2 בקרת טעינה
התחל לטעון
Set key_chargeset (CHARGE_START, ChargeCurrent250mA, BATFULL_LEVEL1); ואז
בעת טעינה, קבע את התצורה של זרם הטעינה וערך ההתייחסות למתח מלא.

עמוד 205
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 205
הפסק לטעון
באופן כללי, המשתמשים אינם צריכים להפסיק לטעון בעצמם, והמערכת תפסיק לטעון אוטומטית לאחר שגילתה שהטעינה מלאה. אם המשתמש צריך
הפסק טעינה בעצמך, התקשר להגדרת key_charges (CHARGE_STOP, 0, 0); ממשק להפסקת הטעינה.
תהליך טעינה
כאשר הטעינה מתחילה היא תטען עם זרם קטן במשך עשרות אלפיות השנייה, ואז תתחיל לטעון עם זרם הטעינה שצוין. טעון
במהלך התהליך, הבדיקה העצמית של הטעינה מתבצעת כל דקה, אם יתגלה כי הטעינה מלאה, הטעינה תיפסק.
טעינה מהירה
על מנת לאפשר למשתמשים לטעון למשך 5 דקות ולהפעיל מוסיקה למשך שעתיים, הצגנו טכנולוגיית טעינה מהירה. זה מהיר
משמעותה של טכנולוגיית טעינה מהירה היא שכאשר היא מגלה שערך התייחסות למתח נמוך כשמתחיל הטעינה, אנו מגדילים את זרם הטעינה באופן זמני
טען ב -350 ma למשך 5 דקות, לאחר 5 דקות, קבע את זרם הטעינה לזרם הטעינה שצוין על ידי המשתמש.
איתור חיובים
מנהל התקן הכפתור אינו מדווח באופן פעיל על מצב הטעינה לאפליקציה, ולכן היישום צריך להתקשר אליו מעת לעת
ממשק ה- key_chargeget (0) מקבל את מצב הטעינה הנוכחי, וקורא ישירות את פנקס BATADC_DATA כדי לקבל את הנוכחי
ערך ההתייחסות למתח הסוללה, ועל פי מצבים אלה וערך ההתייחסות למתח הסוללה, נשפט כי הסוללה נמוכה או טעונה במלואה.
6.1.3.3 אתחול ההתקנה והסרת ההתקנה של מנהל התקן
הדברים שהושלמו על ידי אתחול מנהל התקן של KEY כוללים:
● אפשר ל- LRADC ללכידת לחיצות מקשים.
● התחל את הפסקת טיימר החומרה של 20 מילימטר כדי לממש סריקת מחזור מפתח.
● מצב הטעינה הראשוני הוא הפסקת הטעינה.
● אתחול מודולים אחרים.
הסרת ההתקנה של מנהל התקן KEY צריכה להשלים את האירוע ההפוך של הדברים שלמעלה.
6.1.3.4 קבל את כתובת טבלת המיפוי של המפתח
הפיתרון שלנו תומך המשתמשים להגדיר את הכפתורים בעצמם, וזה מושג על ידי קביעת התצורה של טבלת מיפוי הכפתורים.
שיטת היישום שלנו היא שהאפליקציה משיגה את המפתחות במנהל התקן KEY דרך ממשק key_getkeytabaddress ()
מפה את הכתובת של מפת ה- key, ואז היישום יעתיק את טבלת מיפוי המפתחות המוגדרת על ידי המשתמש אל מפת ה- map.

עמוד 206
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 206
6.1.4 תכנון ממשק חיצוני מונע מפתחות
הפונקציה העיקרית של מנהל התקן ה- KEY היא לכידת קלט המפתח של המשתמש, אך בנוסף, אנו מציבים בדרך כלל אחרים
כמה פונקציות הקשורות לחומרה ממוקמות במנהל התקן KEY, כגון טעינה, איתור כרטיסים, איתור USB, איתור אוזניות וכו '.
חלקם צריכים להיות מותקנים בפונקציית כפתור הסריקה של 20 מס ', וחלקם נקראים על ידי ה- AP דרך ממשק חיצוני.
להלן רק מבוא קצר לנקודות המפתח של עיצוב הממשק החיצוני של מודול הכונן KEY. כיצד להשתמש בממשקים ספציפיים, אנא עיין ב
בדוק את "us212a_key_driver ממשק manual.chm".
הערה: הממשק ב- "us212a_key_driver interface specification.chm" הוא הממשק הפנימי של מנהל ההתקן והממשק נקרא
זה לא כמו שם המאקרו המשמש ביישום. אנא מצא את טבלת הממשק blk_op ב key_rcode_op_entry.c
הממשק המתאים למספר זיהוי הפקודה.
הממשק המאוחד המונע על ידי KEY מוגדר באופן הבא:
void * key_op_entry (void * param1, void * param2, void * param3, key_cmd_e cmd );
מספר הפקודה של ממשק חיצוני של כונן KEY מוגדר באופן הבא:
typedef enum
{
KEY_CHARGEGET = 0,
KEY_CHARGESET,
KEY_KEYTABADDR,
KEY_HOLDSTATE,
KEY_SPEAKCHECK,
} key_cmd_e;
מאקרו הממשק החיצוני של כונן KEY מוגדר באופן הבא:
# הגדר key_chargeget (א)
key_op_entry ((void *) (א), 0,0, KEY_CHARGEGET)
# הגדר key_chargeset (א, ב, ג)
key_op_entry ((void *) (a), (void *) (b), (void *) (c), KEY_CHARGESET)
# הגדר key_getkeytabad כתובת ()
key_op_entry ((void *) 0, (void *) 0, (void *) 0, KEY_KEYTABADDR)
# הגדר key_holdcheck ()
key_op_entry ((void *) 0, (void *) 0, (void *) 0, KEY_HOLDSTATE)

עמוד 207
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 207
# הגדר מפתח_דיבור (א)
key_op_entry ((void *) (א), 0,0, KEY_SPEAKCHECK)
6.1.5 הוראות להקצאת זיכרון עבור מנהל התקן KEY
הקצאת שטח הקוד של מודול הכונן KEY היא כדלקמן:
● שטח הקוד לתושב כולל: 0xbfc20600 ~ 0xbfc20eff = 0x900 בתים.
● בנק שטח A / b של בנק:
✧ בנק א: (0x19 ** 0000 + 0x24c00) ~ (0x19 ** 0000 + 0x24fff) = 0x400 בתים.
✧ בנק ב: (0x29 ** 0000 + 0x25000) ~ (0x29 ** 0000 + 0x257ff) = 0x800 בתים.
✧ הערה: ** 6bit הגבוה הוא מספר הבנק. לדוגמה, 6bit הגבוה של 0x06 ב- 0x19064c00 הוא 0x01, כך שהוא
בנק בנק BANK A1 המונע על ידי KEY.
שטח הנתונים התושב של מודול הכונן KEY הוא 0x9fc1ab80-0x9fc1acff = 0x180 בתים.
6.1.6 מדריך שינוי מנהל התקן KEY
6.1.6.1 שנה מפתחות פיזיים וטבלת מיפוי מפתחות
כאן מוסברים רק סוגי כפתורי LRADC, וסוגי כפתורי ה- GPIO דומים.
לאחר הוספת כפתור פיזית, עליכם לבצע את שני הדברים הבאים בתוכנה:
● שנה את ADC_KEY_NUM ואת רשימת הערכים של ADC Adc_data כך שניתן יהיה להבחין בין אובייקט נוסף
כפתור 理.
● שנה את מפת מפת המפתח של מפת המפתח והוסף מפתחות לוגיים חדשים למיקומים המתאימים של המפתחות הפיזיים החדשים שנוספו
ערך, כמובן, אם יש להקצות מחדש את כל ערך הכפתורים הלוגי, כמעט כל טבלת המיפוי של הכפתורים היא
צריך להיות מעודכן.
<gui_msg.h>
הוסף ערך מפתח לוגי לסוג הספירה key_value_e.
<config.txt>

עמוד 208
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 208
שנה את פריט התצורה CFG_KEY_ARRAY, בהתאם לטבלת מיפוי המפתחות המיועדת, שנה את ההיגיון ב- key_value_e
ערכי המפתח מלאים בערכי פריט התצורה בזה אחר זה.
אם אתה רוצה רק לשנות את מיפוי המפתחות, עליך לשנות את קובץ התצורה <config.txt> בלבד.
6.1.6.2 שינוי מחזור חיי הלחצן
ניתן לשנות את זה על ידי קביעת התצורה של המקרו מקרואים הבאים:
#define DOWN_KEY_TIMER 3 // זמן ההודעה של לחיצה על מקש הוא 60ms
#define LONG_KEY_TIMER 5 // לחץ לחיצה ארוכה על הכפתור וזמן ההודעה הוא 60ms +
(5-1) * HOLD_KEY_TIMER = 700 מס '
#define HOLD_KEY_TIMER 8 // לחץ על המקש כדי להחזיק את מרווח ההודעה הוא 160ms
6.2 תכנון נהג LCD
במערכת הסכימה US212A, כונן ה- LCD הוא רק הכונן הפיזי של מערכת התצוגה, ואילו הכונן הלוגי של מערכת התצוגה
זה מונע על ידי ממשק המשתמש. המטרה של זה היא להפריד בצורה ברורה יותר את ההיבטים הפיזיים והגיוניים של מערכת התצוגה כך שכל אחד מהם
יותר עצמאות ותחזוקה טובה יותר.
6.2.1 סקירת דרישות ועקרונות תכנון
מנהל התקן LCD מספק בעיקר פונקציות ממשק של שכבה פיזית של LCD, כולל אתחול חומרת המסך, הגדרת חלון והגדרת מצב תצוגה.
מצב, הגדרת ניגודיות, פתיחת מסך והמתנה, עדכון מסך, בקרת תאורה אחורית למסך, כתיבת מסך, קריאת מסך, לבן הפוך וכו '.
הנמל מכנה את מנהל ההתקן של ממשק המשתמש, AP ו- CODEC לפענוח תמונות ווידאו.
בעת תכנון מנהל התקן ה- LCD, הנקודות הבאות נחשבות בעיקר:
● לעטוף את פעולת שכבת החומרה הפיזית של LCD כך שהמשתמשים לא יצטרכו לדאוג לפרטי ה- LCD ככל האפשר, וכן
על ידי קריאה ישירה לפונקציות הממשק של שכבת מנהל ההתקן של ממשק המשתמש, ניתן לממש פונקציות שונות הקשורות לתצוגה.
● הפרד את השכבה הפיזית של ה- LCD מהשכבה ההגיונית של ה- LCD כדי להקל על התפתחות משנית. אין צורך לשנות את מנהל ההתקן של ממשק המשתמש, בלבד
יש צורך לשנות את הקבצים האישיים של מנהל ההתקן הפיזי של ה- LCD בכדי להבין את החלפת מסך ה- LCD.
● ממשק השכבה הפיזית של LCD המונע על ידי Welcome מוזג למנהל התקן LCD. שניהם משתמשים באותה קבוצת קודים.
התכנסות אחרת דרך המאקרו __WELCOME__, הנוח יותר לפיתוח ותחזוקה של מסך LCD.
לצורך חלוקת הקוד של ממשק הנהג LCD, יש לקחת בחשבון את הנקודות הבאות:

עמוד 209
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 209
● בהתאם ליחסי שיחות הפונקציה ולתדירות, שטח הקוד מקובץ באופן סביר כדי לצמצם ככל האפשר את הבנק.
מספר המתגים.
● מכיוון שמנהל התקן LCD הוא מנהל התקן פיזי, הממשק הקשור לתצוגה כמעט אפשרי לכל משימת תצוגה
ייקרא ולכן, על מנת למקסם את יעילות התצוגה, יש למקם את כל הממשקים הללו במעון הקבע.
בקטע הקוד. בעזרת תכנון זה, מנהל ההתקן של ממשק המשתמש יכול לבצע מונופוליסציה של בנק c ולחלק את קטע הקוד בצורה חופשית יותר
רק בשיתוף פעולה של כונן דינאמי וממשק משתמש, יכולה להופיע יעילות התצוגה המקסימאלית של ממשק המשתמש.
● כמה ממשקים עם תדירות שיחות נמוכה, כגון מסך בהיר ושחור, המתנה למסך, הגדרת ניגודיות למסך
ניתן למקם את הממשק בבנק a / b.
6.2.2 מודול פונקצית כונן LCD
נהגי LCD מחולקים על פי מודולים פונקציונליים כדי למזער את הצימוד בין המודולים. בהתבסס על העיקרון של שינויים מינימליים,
חלק את כל המודולים כדי להקל על ההתפתחות המשנית לאחר החלפת ה- LCD. התיאור של קבצי C הכלולים במנהל התקן הוא כדלקמן:
חלוקת מודולי פונקציה
תקציר מודול
bank_a_lcd_functions.c
פונקציות מודול LCD, כולל בקרת תאורה אחורית, הגדרת ניגודיות,
המתנה
bank_a_lcd_init.c
טעינה ופריקה של מנהל התקן LCD
lcd_hardware_init.c
אתחול חומרת LCD
rcode_lcd_functions.c
מצב אוטובוס הרחבה חיצוני לכתוב נתונים, לכתוב פקודות, לקרוא מסך, לחתוך CE
החלפה והתאוששות, בקר ה- LCD של IC השליטה הראשי מאתחל
rcode_lcd_functions_1.c
MFP בנושא LCD, בקרת מיתוג CLK
rcode_lcd_functions_2.c
בקרת העברת DMA LCD
rcode_lcd_functions_3.c
פונקציות LCD בסיסיות, כולל הגדרת חלון תצוגה, הגדרת רענון
דפוס וכו '.
rcode_lcd_op_entry.c
טבלת פונקציות ממשק LCD, הגדרת כניסה כללית
בשלב הבא, כל מודול פונקציונלי יוצג בפירוט:
6.2.2.1 פונקצית מודול LCD
פונקציות מודול LCD כוללות בקרת תאורה אחורית, הגדרת ניגודיות, המתנה:
בקרת תאורה אחורית
backlight_on_off בטל (bool blctl, void * null2, void * null3)
התאורה האחורית נשלטת על ידי יציאת GPIO עם פונקציית PWM. הפעלת התאורה האחורית היא להגדיר את תצורת מודול PWM, ואז להגדיר

עמוד 210
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 210
יציאת ה- GPIO מוגדרת למצב PWM; כיבוי התאורה האחורית הוא כיבוי מודול PWM ואז הגדרת יציאת ה- GPIO ל
מצב GPIO_OUT, ופלט מחוץ לרמה. הערה: אם רמת הכיבוי גבוהה או נמוכה תלויה בתכנון מעגלי החומרה.
הגדרת ניגודיות
void set_contrast (uint8 contrast_value, void * null2, void * null3)
לקביעת הניגודיות זה להגדיר את מחזור החובה של PWM. הערה: הקשר בין מחזור התפקיד והניגודיות תלוי בתכנון מעגלי החומרה.
המתנה
voby standby_screen (bool standby_flag, void * null2, void * null3)
דרך כניסת מודול ה- LCD למצב המתנה נקבעת על ידי מודול ה- LCD, ושיטה זו אינה מתוארת כאן. LCD
לפני כניסת ה- IC של המודול למצב המתנה, יש צורך להגדיר את הניגודיות ל 0 ואז לכבות את התאורה האחורית; מודול ה- LCD יוצא מההמתנה.
לאחר היציאה, אתה צריך להדליק את התאורה האחורית ואז להחזיר את הניגודיות.
6.2.2.2 אתחול חומרת LCD
void lcd_hardware_init (void)
אתחול חומרת LCD כולל הגדרת שעון LCD, איפוס מודול LCD IC, שליחת סדרת פקודות אתחול, סליקה
מָסָך. זה מוכן להציג תמונות ומחרוזות.
הערה: למרות שממשק זה מוגדר במנהל התקן LCD, הוא בדרך כלל נעשה שימוש חוזר ומוזמן בברכה.
מנהל התקן LCD הוא רק לניהול ותחזוקה נוח יותר.
6.2.2.3 פונקציות חומרה בסיסיות LCD
פונקציות חומרה בסיסיות של LCD כוללות כתיבת נתונים, כתיבת פקודות, מסך קריאה, מסך שליחת מצב אוטובוס הרחבה חיצוני, מסך שליחת מצב DMA ו-
ממשק DMA קשור, הגדרת חלון תצוגה, הגדרת מצב רענון וממשק תצורת חומרה של IC כלשהו של שליטה ראשית, כגון
אתחול בקר ה- LCD, בקרת מיתוג של MFP ו- CLK של ה- IC העיקרי לבקרה וכו '.
מכיוון שבקר ה- LCD של השליטה הראשית IC השתלט על הרבה פרטי תקשורת עם מודול ה- LCD, יש צורך לבצע רק את השליטה הראשית IC
ממשק תצורת החומרה ומימוש פונקציות אחרות פשוטים מאוד.
הגדרת חלון התצוגה והגדרת מצב הרענון הם שני ממשקים לוגיים של מערכת התצוגה, אנו מגדירים מספר יישומים של מערכת התצוגה.
עבור תרחישים של יישומים, מנהל התקן LCD צריך ליישם את שני הממשקים הללו בהתאם לדרישות של תרחישי היישום. להלן תיאור שדות היישום בהתאמה.
נוף:
● DRAW_MODE_H_DEF: יש עדיפות לכיוון האופקי, כלומר, השמאלית העליונה לימין התחתונה של המסך האנכי משמשת להצגת מיתרי תווים במסך האנכי
ותמונות משאב, מסך ברור, תמונת ברכה, JPEG, GIF

עמוד 211
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 211
● DRAW_MODE_V_DEF: יש עדיפות לכיוון האנכי, כלומר השמאלית העליונה לימין התחתונה של המסך האופקי, המשמשת להצגת מחרוזת התווים במסך האופקי.
ותמונות משאב, מסך ברור, JPEG, GIF, AVI
● DRAW_MODE_H_PIC_DEF: לכיוון האופקי יש עדיפות, כלומר המסך האנכי נמצא משמאל למטה לימין למעלה, משמש לתצוגת מסך אנכית
BMP
● DRAW_MODE_V_PIC_DEF: עדיפות לכיוון אנכי, כלומר, מסך אופקי משמאל למטה לימין למעלה, משמש לתצוגת מסך אופקית
BMP, AMV
● DRAW_MODE_H_SCROLL_DEF: עדיפות כיוון אנכי, כלומר מסך אנכי משמאל למעלה לימין למטה, משמש למסך אנכי
הצגת גלילת מחרוזות
● DRAW_MODE_V_SCROLL_DEF: יש עדיפות לכיוון האופקי, כלומר שמאל עליון לימין התחתון של המסך האופקי, המשמש למסך האופקי
הצגת גלילת מחרוזות
הערה: המסכים האופקיים והאנכיים המוזכרים כאן מבוססים על אב-הטיפוס. ניתן לראות את האב-טיפוס כמסך אנכי כשהוא מטוטלת, והאב-טיפוס מסתובב (זה יכול להיות
נגד כיוון השעון, זה יכול להיות גם עם כיוון השעון. העיצוב הספציפי כפוף לאב-טיפוס.) המסך האופקי ב -90 מעלות הוא מושג הגיוני פשוט.
זה לא קשור לרוחב והגובה הפיזיים של מסך LCD.
6.2.3 תכנון ממשק חיצוני של מנהל התקן LCD
להלן רק מבוא קצר לנקודות המפתח של עיצוב הממשק החיצוני של מודול הנהג LCD. כיצד להשתמש בממשק הספציפי, אנא עיינו ב
בדוק את "us212a_lcd_driver interface manual.chm".
הערה: הממשק ב- "us212a_lcd_driver interface specification.chm" הוא הממשק הפנימי של מנהל התקן lcd, והממשק נקרא
זה לא כמו שם המאקרו המשמש ביישום. אך שם המאקרו הכללי מתווסף מול שם הממשק הפנימי
קידומת lcd_, אם לא, אנא מצא את לוח הממשק המתאים lcd_driver_op ב- rcode_lcd_op_entry.c
הממשק של מספר מזהה הפקודה.
הממשק המאוחד של מנהל התקן LCD מוגדר באופן הבא:
void * lcd_op_entry (void * param1, void * param2, void * param3, lcd_cmd_e cmd );
מספר הפקודה של מנהל התקן החיצוני של מנהל התקן LCD מוגדר באופן הבא:
typedef enum
{
/ *! הגדר חלון * /
LCD_SET_WINDOW = 0,
/ *! הגדר את הניגודיות * /
LCD_SET_CONTRAST,

עמוד 212
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 212
/ *! הגדר מצב תצוגה * /
LCD_SET_DRAWMODE,
/ *! בקרת המתנה למסך * /
LCD_STANDBY_SCREEN,
/ *! החלפת בקרת תאורה אחורית * /
LCD_BACKLIGHT_ONOFF,
/ *! עדכן את אזור המסך שצוין * /
LCD_UPDATE_SCREEN,
/ *! שלח את הנתונים במאגר למסך * /
LCD_TRANS_BUFFDATA,
/ *! קבל את הנתונים על מסך LCD * /
LCD_GET_BUFFDATA,
/ *! הנתונים ב- BUFFER יוצגו בצבע הפוך * /
LCD_INVERT_BUFFDATA,
/ *! אתחול בקר LCD * /
LCD_CONTROLLER_INIT,
/ *! הגדר את רוחב הנתונים של העברת DMA * /
LCD_DMA_SET_COUNTER,
/ *! שלוט ב- DMA כדי להתחיל שידור * /
LCD_DMA_START_TRANS,
/ *! הגדר כתובת מקור של DMA * /
LCD_DMA_SET_SRC_ADDR,
/ *! הגדר את RAM8 CLK ל- MCU * /
LCD_SET_JRAM_CLK,
/ *! שחזר את CLK המקורי * /
LCD_RESTORE_JRAM_CLK
} lcd_cmd_e ;
מאקרו הממשק החיצוני של מנהל התקן LCD מוגדר באופן הבא:
/ *! הגדר חלון * /
# הגדר lcd_set_window (rgn)
lcd_op_entry ((void *) (rgn), (void *) (0), (void *) (0), LCD_SET_WINDOW)
/ *! הגדר את הניגודיות * /

עמוד 213
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 213
# הגדר lcd_set_contrast (ערך)
lcd_op_entry ((void *) (uint32) (ערך), (void *) (0), (void *) (0), LCD_SET_CONTRAST)
/ *! הגדר מצב תצוגה * /
# הגדר lcd_set_draw_mode (מצב)
lcd_op_entry ((void *) (uint32) (מצב), (void *) (0), (void *) (0), LCD_SET_DRAWMODE)
/ *! בקרת המתנה למסך * /
# הגדר lcd_standby_screen (דגל)
lcd_op_entry ((void *) (uint32) (דגל), (void *) (0), (void *) (0), LCD_STANDBY_SCREEN)
/ *! החלפת בקרת תאורה אחורית * /
# הגדר lcd_backlight_on_off (on_off)
lcd_op_entry ((void *) (uint32) (on_off), (void *) (0), (void *) (0), LCD_BACKLIGHT_ONOFF)
/ *! עדכן את אזור המסך שצוין * /
# הגדר lcd_update_screen (rgn)
lcd_op_entry ((void *) (rgn), (void *) (0), (void *) (0), LCD_UPDATE_SCREEN)
/ *! שלח את הנתונים במאגר למסך * /
# הגדר lcd_buff_data_trans (buff, pix_cnt)
lcd_op_entry ((void *) (buff), (void *) (uint32) (pix_cnt), (void *) (0),
LCD_TRANS_BUFFDATA)
/ *! קבל את הנתונים על מסך LCD * /
# הגדר lcd_get_buff_data (buff, pix_cnt)
lcd_op_entry ((void *) (buff), (void *) (uint32) (pix_cnt), (void *) (0), LCD_GET_BUFFDATA)
/ *! הנתונים ב- BUFFER יוצגו בצבע הפוך * /
# הגדר lcd_invert_buff_data_trans (buff, pix_cnt)
lcd_op_entry ((void *) (buff), (void *) (uint32) (pix_cnt), (void *) (0),
LCD_INVERT_BUFFDATA)
/ *! אתחול בקר LCD * /

עמוד 214
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 214
# הגדר lcd_controller_init (מצב)
lcd_op_entry ((void *) (uint32) (מצב), (void *) (0), (void *) (0), LCD_CONTROLLER_INIT)
/ *! הגדר את רוחב הנתונים של העברת DMA * /
# הגדר lcd_dma_set_counter (pix_cnt, נתונים_ רוחב)
lcd_op_entry ((void *) (uint32) (pix_cnt), (void *) (uint32) (data_width), (void *) (0),
LCD_DMA_SET_COUNTER)
/ *! שלוט ב- DMA כדי להתחיל שידור * /
# הגדר lcd_dma_start_trans (dma_ram)
lcd_op_entry ((void *) (uint32) (dma_ram), (void *) (0), (void *) (0),
LCD_DMA_START_TRANS)
/ *! הגדר כתובת מקור של DMA * /
# הגדר lcd_dma_set_src_addr (addr0, addr1, addr2)
lcd_op_entry ((void *) (uint32) (addr0), (void *) (uint32) (addr1), (void *) (uint32) (addr2),
LCD_DMA_SET_SRC_ADDR)
/ *! הגדר את RAM8 CLK ל- MCU * /
# הגדר lcd_mcu_set_JRAM_clk ()
lcd_op_entry ((void *) (0), (void *) (0), (void *) (0), LCD_SET_JRAM_CLK)
/ *! שחזר את CLK המקורי * /
# הגדר lcd_restore_JRAM_clk ()
lcd_op_entry ((void *) (0), (void *) (0), (void *) (0), LCD_RESTORE_JRAM_CLK)
6.2.4 הוראות להקצאת זיכרון עבור מנהל התקן LCD
הקצאת שטח הקוד של מודול הנהג LCD היא כדלקמן:
● שטח קוד תושב כולל: 0xbfc20f00 ~ 0xbfc2157f = 0x680 בתים, 0xbfc21880 ~ 0xbfc219ff
= 0x180 בתים, סך הכל 0x800 בתים, כלומר 2K בתים.
● בנק שטח A / b של בנק:
✧ בנק א: (0x17 ** 0000 + 0x24c00) ~ (0x17 ** 0000 + 0x24fff) = 0x400 בתים.

עמוד 215
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 215
✧ בנק ב: (0x27 ** 0000 + 0x25000) ~ (0x27 ** 0000 + 0x257ff) = 0x800 בתים.
✧ הערה: ** 6bit הגבוה הוא מספר הבנק, לדוגמה, 0x06 ב- 0x17064c00 הוא 0x01, כך שהוא LCD
כונן BANK קבוצה BANK A1.
שטח הנתונים התושב של מודול הנהג LCD הוא 0x9fc19e80 ~ 0x9fc19eff = 0x80 בתים.
6.2.5 מדריך שינוי עבור מנהל התקן LCD
6.2.5.1 החלף מסך LCD חדש
על בסיס הארכיטקטורה הנוכחית של מנהל התקן LCD, כיצד להחליף IC חדש של מנהל התקן LCD? איך זה יכול להיות יעיל
בהתבסס על שינוי קוד מינימלי, לגרום לנהג ה- LCD החדש של IC לפעול כראוי במהירות וביעילות? מונע כרגע
הארכיטקטורה בשכבות מספקת נוחות רבה ליישום זה.
החלפת מנהל התקן LCD של IC כרוכה רק בשינויים בשכבה הפיזית ואינה צריכה לשנות את מנהל ההתקן של ממשק המשתמש.
הקבצים שצריך לשנות הם
lcd_hardware_init.c,
rcode_lcd_functions.c,
rcode_lcd_functionsf_3.c שלושה קבצים. יש צורך לשכתב את הדיסק הקשיח של מסך ה- LCD לפי ה- SPEC של מסך ה- LCD שנבחר.
קוד אתחול תוכנה ופונקציות כמו הגדרת חלון, הגדרת מצב וקריאת מסך.
בנוסף, ההגדרה של כל פקודה של מסכי LCD שונים עשויה להיות שונה, לכן עליכם לשנות את lcd_driver.h
הגדרת פקודות הקשורות ל- LCD.
6.2.5.2 שינוי GPIO בנושא LCD
ישנן שתי יציאות GPIO המשמשות את מנהל התקן LCD: איפוס (איפוס) ותאורת תאורה אחורית (תאורה אחורית).
במנהל התקן LCD, GPIO נוצר לצורה של תחום להגדרת מאקרו. אם ברצונך להחליף אחד או כמה מהם,
צריך רק לשנות את הגדרת המאקרו הקשורה.
המאקרואים הקשורים מוגדרים ב- lcd_driver.h, כדלקמן:
# הגדר LCMRST_GIO_EN_REG
GPIO_AOUTEN // GPIO_A5 (פלט)
# הגדר LCMRST_GIO_DATA_REG GPIO_ADAT
# הגדר LCMRST_GIO_EN_BIT
(0x00000001 << 5)
# הגדר LCMRST_SET_BIT
(0x00000001 << 5)
# הגדר LCMRST_CLR_BIT
~ (0x00000001 << 5)
# הגדר LCMBL_GIO_EN_REG
GPIO_AOUTEN
// GPIO_A6 (פלט)
# הגדר LCMBL_GIO_DATA_REG GPIO_ADAT

עמוד 216
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 216
# הגדר LCMBL_GIO_EN_BIT
(0x00000001 << 6)
# הגדר LCMBL_SET_BIT
(0x00000001 << 6)
# הגדר LCMBL_CLR_BIT
~ (0x00000001 << 6)
לדוגמה: כדי להחליף את התאורה האחורית GPIO של המסך מ- GPIO_A6 ל- GPIO_B1
ואז ההגדרה לעיל של בקרת תאורה אחורית GPIO משתנה באופן הבא:
# הגדר LCMBL_GIO_EN_REG
GPIO_BOUTEN
// GPIO_B1 (פלט)
# הגדר LCMBL_GIO_DATA_REG GPIO_BDAT
# הגדר LCMBL_GIO_EN_BIT
(0x00000001 << 1)
# הגדר LCMBL_SET_BIT
(0x00000001 << 1)
# הגדר LCMBL_CLR_BIT
~ (0x00000001 << 1)
6.2.5.3 כיצד לשנות את גודל המסך
בעת הצגת תווים או הצגת תמונות במנהל התקן LCD, יש לשפוט את גודל המסך כדי למנוע הצגת תוכן לא שלמה. כמו
קיימים מצבי יישום הבאים: מנהל התקן מסך 128 * 160, כיצד להתאים את עצמו ליישום 128 * 64; מנהל התקן מסך 128 * 160, כגון
כיצד להסתגל ל -160 * 128 יישומים? במקרה של אותו IC של נהג LCD, כיצד לשנות את גודל המסך על פי תבניות שונות
מה?
ישנן גם פונקציות רבות הקשורות לגודל המסך, והפעולה בגודל המסך נעשית גם לצורת מאקרו. אם ברצונך לשנות את סרגל היישומים
באותו אופן, אתה רק צריך לשנות את הגדרת המקרו המתאימה.
ההגדרה של גודל המסך ב- lcd_driver.h היא כדלקמן:
#define DISPLAY_LENGTH 128
# הגדר DISPLAY_HEIGHT 160
#define LCD_WIDTH 132 / * האורך בפועל של הרזולוציה בפועל של מודול ה- LCD * /
# הגדר LCD_HEIGHT 162 / * הרוחב בפועל של רזולוציית מודול ה- LCD * /
#define LCD_WIDTH_OFFSET 2 / * כאשר LCD 132X162 מוצג במרכז, יחסית למודול ה- LCD
התחלת קיזוז אורך * /
# הגדר LCD_HEIGHT_OFFSET 1 / * כאשר LCD 132X162 במרכזו, הוא רחב יותר ממודול ה- LCD
התחל לקזז בתארים * /
לדוגמה: החל 128 * 160 כמו 160 * 128:
עליך לשנות את הגדרות המאקרו הקשורות:

עמוד 217
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 217
# הגדר DISPLAY_LENGTH 160
# הגדר DISPLAY_HEIGHT 128
# הגדר LCD_WIDTH 162 / * האורך בפועל של הרזולוציה בפועל של מודול ה- LCD * /
# הגדר LCD_HEIGHT 132 / * הרוחב בפועל של רזולוציית מודול ה- LCD * /
# הגדר LCD_WIDTH_OFFSET 1 / * כאשר LCD 132X162 מוצג במרכז, הוא יחסית למודול LCD
התחלת קיזוז אורך * /
# הגדר LCD_HEIGHT_OFFSET 2 / * כאשר LCD 132X162 במרכזו, הוא רחב יותר ממודול ה- LCD
התחל לקזז בתארים * /
6.2.6 תצורה פונקציונלית של מנהל התקן LCD
עליך להגדיר אם מסך הצבעים הקטן תומך בפונקציית קריאת המסך, והאם הוא תומך במנהל התקן ממשק המשתמש של קריאת המסך ירכיב קודים שונים.
<lcd_driver.h>
/ *! האם לתמוך בפונקציית קריאת המסך * /
# הגדר את SUPPORT_READ_CMD
בתרחישים מיוחדים, מנהל התקן LCD / UI מקצה רק 1KB למאגר תצוגה. אם הגופן של גופן בודד
מאגר התצוגה גדול מ- 1KB, ויש להציג את מחרוזת התו של הגופן בסצנה המיוחדת הזו, ואז יש להצביע עליה בנפרד
יש מספיק מקום.
תרחישים מיוחדים כוללים: כאשר ה- AP של אודיסק תפוס לאחר יצירת חיבור, כאשר ה- AP המקליט מקליט וכן הלאה.
נוסחת חישוב של גודל מאגר התצוגה (565 מסך צבעוני קטן): גובה הגופן בפועל * רוחב הגופן בפועל * 2 B
לכן, אם מדובר בגופן בפועל של 24 * 24, גודל המאגר הוא 24 * 24 * 2 = 1152 B, העולה על 1KB.
כאשר גודל המאגר עולה על 1KB, יש לשנות את שני המקרו הבאים, ויש לשנות את הפונקציה set_display_buf של מנהל ההתקן של ממשק המשתמש.
מספר:
<lcd_driver.h>
#define LCD_BUF_ADDR 0x18000 // אם מאגר תצוגת הגופנים עולה על 1KB, אנא ציין מספיק
מקום גדול למאגר, ושנה את הפונקציה set_display_buf
# הגדר LCD_BUF_LEN 0x400

עמוד 218
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 218
6.3 עיצוב מונע ממשק המשתמש
במערכת הסכימה US212A, מנהל ההתקן של ממשק המשתמש הוא רק הנהג ההגיוני של מערכת התצוגה, ואילו הנהג הפיזי של מערכת התצוגה הוא
מבוצע על ידי מנהל התקן LCD. המטרה של זה היא להפריד בצורה ברורה יותר את ההיבטים הפיזיים והגיוניים של מערכת התצוגה כך שכל אחד מהם
יותר עצמאות ותחזוקה טובה יותר.
6.3.1 סקירת דרישות ועקרונות תכנון
מנהל ההתקן של ממשק המשתמש של US212A צריך ליישם את הפונקציות הבאות:
● ספק ממשקי תצוגה שונים של בקרה, כולל תצוגת בקרת תמונות
● ספק ממשק לפתיחה וסגירה של משאבים
● ספק ממשק להגדרת מצב המסך (מסך אופקי או אנכי)
● ספק תצוגת מחרוזת תווים וממשק גלילה
● ספק ממשק לקבלת מידע כגון קואורדינטות מחרוזת ואורך
● תומך בגופן unicode
● תמיכה ב- unicode וקוד פנימי, utf8 להמרה unicode
● תומך בתצוגה ב 28 שפות (כולל עיבוד של שלוש שפות מיוחדות: ערבית, עברית ותאילנדית)
עקרונות התכנון המונעים על ידי ממשק המשתמש הם כדלקמן:
● בהתאם ליחסי שיחות הפונקציה ולתדירות, שטח הקוד מקובץ באופן סביר כדי לצמצם ככל האפשר את הבנק.
מספר המתגים.
● על מנת להשיג אפקט רענון שליטה טוב יותר, יש להוסיף פרמטר של מצב תצוגה לממשק תצוגת הבקרה.
הוא משמש להבחנה בין התצוגה המלאה הראשונה ורענון חלקי לפי הצורך בכדי להשיג את האפקט הטוב ביותר.
● מחולק על פי הפונקציה של פונקציית ממשק ה- API, כל פונקצית פונקציה לוגית נחשבת למודול קטן, כל אחד קטן
המודול מתאים לקובץ מקור.
● יציק כמה מהקוד שנקרא יותר והגיוני לחלוטין במנהל ההתקן של ממשק המשתמש כדי לשפר את היעילות של ביצוע קוד
ציון.
6.3.2 אופטימיזציה של מערכת התצוגה
ליבה של מערכת התצוגה הוא מנהל ההתקן של ממשק המשתמש, כולל כלים תומכים. מיטוב מערכת התצוגה כולל שיפור פונקציות, ביצועים
שדרוג ובניית אופטימיזציה וכו '.

עמוד 219
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 219
בפתרון הקודם, הפונקציות מונעות ממשק המשתמש כוללות בעיקר את הדברים הבאים:
● תצוגת תמונת מיתר ותמיכה
● תמונה: תומך בתמונות BMP צבעוניות, בדרך כלל עומק 24 סיביות ותמונות בשחור לבן
● מחרוזת: תמיכה ב- ANSI ובקידוד Unicode של Little-endian, תומכים במספר שפות
● תמיכה באריזה של כלי לבניית משאבים
● תומך בכמה ממשקי ציור גרפיים פשוטים, כגון מילוי שטח מלבני, רישום גבול תלת ממדי (קטעי קו ציור) והיפוך צבעים
תצוגה (מסך שחור לבן)
ברור שלנהג UI כזה יש את החסרונות הבאים:
● הפונקציה פשוטה מדי, היא לא מספקת ממשקים כמו גלילת מיתרים, תצוגת בקרה וכו '.
● על המשתמש לציין את פרטי ממשק המשתמש בקוד לעיבוד תצוגה, וזה בעייתי לשנות את עיצוב ממשק המשתמש של המוצר.
● AP צריך לדאוג לפרטים מסוימים של עיבוד מחרוזות, כגון סוג שפה, אם זה ערבית ועברית,
המשתמש זקוק לטיפול מיוחד
● התצוגה השקופה אינה מטופלת היטב, עיצוב ממשק המשתמש מגביל יותר, וקשה לעצב ממשק משתמש מדהים
לכן, בפתרון US212A, ייעלנו את מנהל ההתקן של ממשק המשתמש ומיטבנו את ההיבטים הבאים:
● הכניסו את תצוגת הגלילה והשליטה של ​​המחרוזת למנהל התקן ממשק המשתמש, וזרקו את כל משימות התצוגה למנהל ההתקן של ממשק המשתמש.
אפשר ל- AP להפריד את זרימת השליטה מזרימת התצוגה
● הציגו כלי עזר UI בצד מחשב חזק יותר לעורך ממשק המשתמש, ושנו את ממשק המשתמש שצריך לציין בקוד לפני
הפרטים מתממשים באמצעות תצורת כלים, והבנת מה שאתה רואה זה מה שאתה מקבל, מה שמשפר מאוד את עיצוב ופיתוח ממשק המשתמש של המשתמש.
יְעִילוּת
● ביטול כל פרטי עיבוד המחרוזות ב- AP, ומאפשר למשתמשים פשוט להתקשר למספר עיבוד מחרוזת ועיבוד
ממשק ניהול, אתה יכול בקלות ליישם את כל הפונקציות הקשורות למחרוזת
● בצע אופטימיזציה של עיבוד תצוגה שקוף, צמצם את תנאי ההגבלה של עיצוב ממשק משתמש ואפשר למשתמשים לעצב בצורה יפה
ממשק משתמש
● שקול לבסס חלק מקוד מנהל ההתקן של ממשק המשתמש כדי למקסם את יעילות ביצוע הקוד
מיטוב מערכת התצוגה US212A כולל את הנקודות הבאות:
● יש לקחת בחשבון את האינטראקציה עם השכבה הפיסית של LCD ושכבת היישום במהלך התכנון
✧ על מנת לתמוך טוב יותר במנהלי LCD שונים, מנהלי ה- UI הקודמים מחולקים למנהלי LCD פיזיים
ומנהל ההתקן ההיגיוני החדש, כל הממשקים הנפוצים של מנהל התקן LCD הם תושבים, ניתן למקם ממשקים אחרים
בנק א / ב
✧ על מנת להפריד בין זרימת הבקרה לזרימת התצוגה, קוד החלק התצוגה של הפקד וקוד החלק בתצוגת הגלילה.

עמוד 220
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 220
מנהל התקן ממשק משתמש קיבל
● עיבוד מחדש של תצוגת מחרוזות מונע ממשק UI שמרכזו "תווים" כדי לתמוך טוב יותר בקודי UNICODE,
קוד ANSI, קוד UTF-8
התרכזו בפונקציה אחת לטיפול בשלושת הקידודים הללו
Processing עיבוד מיוחד תאילנדי וערבי (עברית) ריכוזי
✧ התייחס לתצוגה של כל מחרוזת תווים כ: תו לא שלם מקדימה + מחרוזת תווים באמצע + סוף לא שלם
תווים שלמים, כך שמבנה ממשק המשתמש יהיה תמציתי יותר
● מנגנון תצוגה שקוף
Pictures תמונות צבעוניות שקופות פסאודו, אשר מונחות בשקיפות עם תמונת הרקע כשהן מוצגות
✧ בכדי להיות מסוגלים להשיג במדויק את תמונת הרקע לשכבת-על, אם תמונת הרקע אופקית, יש לאחסן אותה תחילה בעמודה
Display תצוגה שקופה תומכת בגלילה של סמלים שקופים ומחרוזות שקופות
השתמש במנגנון המאגר בתכנון כדי להפחית את הקריאה במשאבי SD ולהשתמש טוב יותר ב- DMA ב-
עדכן את ממשק המשתמש בזמן קצר יותר וצמצם את השהיית תצוגת ממשק המשתמש
✧ בעת הצגת מחרוזות תווים, חצץ קטע של מטריצת נקודות עם מחרוזת תווים ורקע
✧ בעת הצגת מחרוזות תווים, חצץ את מטריצת הנקודות של התווים האחרונה ביותר, וחפש תחילה את המאגר כשאתה משיג מטריצת נקודות תו.
אם ניתן למצוא אותו, הוא ייקרא ישירות מהמאגר, אחרת הוא יתקבל מאזור SD, והמילה שהתקבלה
חיץ למעלה
✧ אם אין שטח נתונים שנותר, תוכל גם לשקול לאגר את קוד UNICODE המתאים לקוד הפנימי כדי להשיג את הקוד הפנימי.
קוד UNICODE המתאים לקוד תחפש במאגר תחילה, ואם ניתן למצוא אותו, הוא יחפש ישירות מהמאגר
קראו, קראו אחרת מאזור SD והכינו את קוד UNICODE שהושג
● ריפוי ממשק עקרונות עיצוב
✧ אם ממשק הפונקציה הבסיסי של הממשק נקרא לעיתים קרובות, אם ההיגיון ברור ויציב, תוכלו לשקול ריפוי
✧ השאירו יותר ממשקי קרס במהלך הריפוי כדי להתאים את עצמם לצרכים עסקיים שונים ולהגדיל את הזמינות של קוד ריפוי
מִין
6.3.3 מודול פונקצית כונן ממשק משתמש
6.3.3.1 אדריכלות כוללת
מנהל התקן של ממשק המשתמש קשור כלפי מעלה ל- AP ול- COMMON, ולמטה קשור למנהל התקן הפיזי של ה- LCD. הקשר המתקשר הוא כדלקמן
מוצג:

עמוד 221
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 221
6.3.3.2 מודול פונקציה
מנהלי ממשק המשתמש מחולקים על פי מודולים פונקציונליים כדי למזער את הצימוד בין המודולים. בהתבסס על העיקרון של שינויים מינימליים,
כל מודול מחולק כדי להקל על פיתוח משני של לקוחות. התיאור של קבצי C הכלולים במנהל התקן הוא כדלקמן:
חלוקת מודולי פונקציה
תקציר מודול
bank_a_ui_res_open.c
פתח את קובץ הסגנון ואתחל, סגור את קובץ הסגנון
bank_b_ui_show_picbox.c
הצג שליטת PicBox
bank_b_ui_show_textbox.c
הצג שליטת TextBox
bank_a_ui_get_listbox_attrb.c
bank_a_ui_get_picbox_attrb.c
bank_a_ui_get_textbox_attrb.c
קבל מאפייני שליטה
bank_a_ui_load_attribute.c
קבל ערך תכונה AttributeBox
bank_a_ui_show_listbox.c
bank_a_ui_show_listbox_2.c
bank_b_ui_show_listbox_1.c
הצג שליטת ListBox
bank_a_ui_show_parambox.c
bank_a_ui_show_parambox_2.c
bank_b_ui_show_parambox_1.c
הצגת בקרת ParamBox
bank_a_ui_show_sliderbar.c
bank_a_ui_show_sliderbar_3.c
הצג שליטת SliderBar

עמוד 222
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 222
bank_b_ui_show_sliderbar_1.c
bank_b_ui_show_sliderbar_2.c
bank_b_ui_show_dialogbox.c
הצג שליטת DialogBox
bank_b_ui_show_progressbar.c
הצג שליטת ProgressBar
bank_a_ui_show_numbox_1.c
bank_b_ui_show_numbox.c
הצג שליטת NumberBox
bank_a_ui_show_timebox_3.c
bank_b_ui_show_timebox.c
bank_b_ui_show_timebox_1.c
bank_b_ui_show_timebox_2.c
הצג שליטת TimeBox
bank_c_ui_init.c
אתחול מנהל התקן של ממשק המשתמש; יציאת מנהל התקן של ממשק המשתמש
bank_c_ui_set_language.c
הגדר את סוג השפה ופתח מחדש את סביבת עיבוד המיתרים
bank_c_ui_char_to_unicode.c
bank_c_ui_unicode_to_char.c
bank_c_ui_utf8_to_unicode.c
המרת סוג תו קידוד, כולל ANSI ל- UNICODE,
UNICODE ל- ANSI, UTF-8 ל- UNICODE
bank_a_ui_draw_3Drect.c
bank_a_ui_draw_rect_frame.c
bank_a_ui_fill_rect_dump.c
ממשק עיבוד גרפי, כולל מילוי שטח, ציור גבולות תלת מימד וכו '.
rom_ui_image.c
bank_c_ui_show_transparent.c
bank_b_ui_show_picbox.c
תצוגת פונקצית תמונה, הראשונה היא רגילה ותצוגת תמונה ואזור
מלא את התחום בצבע טהור, האחרון הוא תצוגת תמונה שקופה
show_picbox_id3 ב- bank_b_ui_show_picbox.c
ממשק לגלילה אנכית של תמונות בגלישה אנכית של ID3
bank_a_fix_ui_string.c
bank_a_fix_ui_string_2.c
bank_a_ui_putstring_sub_2.c
bank_c_ui_putstring_sub.c
rom_ui_string.c
bank_b_ui_string_sdimage.c
bank_b_ui_putstring.c
bank_b_ui_scroll_string.c
bank_b_ui_scroll_string_ext.c
bank_c_ui_ellipsis_to_longstr.
ג
bank_b_ui_get_text_line.c
פונקצית מחרוזת תצוגה, כולל תצוגת מחרוזות רגילה, שקופה
נקה תצוגת מחרוזות, גלילה מחרוזת אופקית, גלילה מחרוזת אנכית
מסך, מחרוזת להוסיף אליפסה, עיבוד ענפי מחרוזות, וכל אחד מהם
פונקצית עיבוד מחרוזות

עמוד 223
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 223
bank_a_ui_thai_point.c
עיבוד שכבת-תאילנדי
bank_b_ui_arabic_ligature.c
bank_b_ui_arabic_nsm.c
bank_b_ui_copy_arabic.c
טיפול מיוחד בערבית ובעברית, כולל כתיבה ערבית רציפה,
עיבוד הפוך מצד שמאל וימין וכו '.
rom_data_and_common.c
bank_c_misc_functions.c
bank_a_ui_itoa.c
rcode_ui_functions.c
פעולות אחרות
rcode_ui_op_entry.c
הגדרת טבלת הממשק החיצוני מונע ממשק המשתמש
בשלב הבא, כל מודול פונקציונלי יוצג בפירוט:
6.3.3.3 פתיחה וסגירה של קובץ סגנון
בארכיטקטורת מערכות התצוגה של US212A, קובץ ה- Style הוא יחידת נתונים חשובה מאוד, הכוללת תמונות
תצוגה, תצוגת מחרוזת משאבים, פרמטרים שונים לתצוגת בקרה וכו '. כך שעיבוד תצוגת ממשק משתמש יקרא לעיתים קרובות את קובץ הסגנון
הנתונים.
כל יישום חזית צריך לפתוח את קובץ הסגנון ולאתחל את סביבת קריאת קובץ הסגנון בשלב האתחול
סגור את קובץ הסגנון.
פתח את קובץ ה- Style
bool res_open (char * שם קובץ, res_type_e type, void * null3)
פתח את קובץ הסגנון, בדוק את הלגיטימיות שלו ואז קרא את קיזוז טבלת אינדקס תמונות המשאבים, את המשאבים בסוג השפה הנוכחי.
קיזוז טבלת אינדקס מיתרים, קיזוז אזור פרמטרים לתצוגה.
סגור את קובץ ה- Style
void res_close (סוג res_type_e, void * null2, void * null3)
6.3.3.4 תצוגת בקרה וקבל מאפיינים
כל בקרה מספקת ממשק תצוגה, ואם המשתמש צריך לבצע קצת עיבוד בקרה בהתאם למאפייני הבקרה, הפקד
התוכנה צריכה גם לספק ממשק להשגת מאפייני בקרה.
הצורה של ממשק תצוגת הבקרה היא באופן הבא:
show_xxx (style_infor_t *, * _private_t *, מצב uint8);
המצב אינו הכרחי, אם לשליטה יש רק מצב תצוגה אחד, ניתן להסיר פרמטר זה, כגון

עמוד 224
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 224
לתצוגת הסרט יש מצב תצוגה אחד בלבד, אין צורך בפרמטר מצב. לפיכך, צורת ממשק התצוגה של PicBox היא:
ui_show_picbox (style_infor_t *, picbox_private_t *);
מודול תצוגת הבקרה של ממשק המשתמש מבוסס בעיקר על התכונות של כל בקרה שנערכה ב- ui_editor והמצביעים החלים על כל בקרה.
מנתח את מבנה הנתונים המתאים לבקרה המתאימה בקובץ הסגנון, התקשר לפונקציה של מודול מימוש פונקציית ההיגיון ואז
צייר ונתח כל בקרה (ניתן למצוא את ההגדרה של מבנה הנתונים של כל בקרה בכותרת ui_driver.h בפרויקט ui_driver)
חתיכות). תוכן מודול התצוגה של בקרת ממשק המשתמש כולל:
6.3.3.5 הגדר סוג שפה
bool set_language (uint8 lang_id, void * null2, void * null3)
הגדרת סוג השפה תקרא מחדש את טבלת האינדקס של מחרוזת המשאבים תחת סוג השפה הנוכחי ותסגור את סוג השפה הקודם
ANSI המרה לדף הקוד של UNICODE, פתח את סוג השפה הנוכחי ANSI שהומר לקודוד UNICODE.
מכיוון שהגופן של US212A הוא גופן של UNICODE, ANSI ממיר ל- UNICODE במהלך הצגת מחרוזת התווים
התדירות תהיה גבוהה יותר, כך שקובץ העמוד המתאים נפתח מראש בעת הגדרת סוג השפה.
6.3.3.6 המרה לקידוד תווים
US212A תומך בשלושה סוגי קידוד: ANSI, UNCODE ו- UTF-8 שיש להשתמש בהם במצבים שונים.
סוג קידוד.
ANSI: בתרחישים מסוימים עם דרישות שטח גבוהות, ANSI משמש לאחסון ועיבוד מחרוזות. כמו ליצור
רשימת השמעה, מכיוון שמספר ערכי השירים הנתמכים הוא גדול, ל- US212A יש 4000 שירים, כך שהשירים מאוחסנים בקידוד ANSI
מידע מפתח ID3 ומיון.
UNICODE: בעת הצגת, יש להשיג את מטריצת נקודות התווים ולהציג בקידוד UNICODE, אותו ניתן להציג בתו בודד
לשם הקובץ US212A דרוש קידוד UNICODE וכו '.
ANSI ל- UNICODE
bool char_to_unicode (uint8 * dest, uint8 * src, uint16 len)
UNICODE ל- ANSI
bool unicode_to_char (uint8 * str, uint16 len, uint8 lang_id)
UTF-8 ל- UNICODE
בטל utf8_to_unicode (uint8 * src, uint16 * dest, int16 * גודל)

עמוד 225
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 225
6.3.3.7 עיבוד גרפי
מערכת התצוגה של US212A מבוססת בעיקר על תמונות ומחרוזות תווים, עם ממשקי עיבוד גרפיים מעטים בלבד, כולל מילוי שטח.
מלא, צייר גבול שטח, צייר גבול תלת מימד וכו '.
מילוי שטח: מחולק למילוי בצבע אחיד ומילוי תמונות יחידה
ניתן להשתמש במילוי צבע טהור, כדי לצייר קטעי קו, כולל קטעי קו בפיקסלים בודדים
bool romf_fill_rect (region_t * fill_region, צבע uint16)
מילוי תמונות יחידה, שיטת מילוי זו יכולה להשיג את אפקט השיפוע האנכי של כיוון המילוי
bool fill_rect_dump (אזור_t * fill_region, uint16 pic_id, fill_dump_direction_e כיוון)
צייר גבול שטח
void draw_rect_frame (region_t * frame_region)
צייר גבולות תלת ממד , כולל אפקט תיבת סימון, אפקט הדגשה, אפקט שקוע וכו '.
void draw_3D_rect (אזור_t * D3 אזור, סוג uint8)
6.3.3.8 תצוגת תמונה
תצוגת תמונה מחולקת לתצוגת תמונות רגילה ותצוגת תמונה מיוחדת של אפקט שקוף, ניתן להשתמש באחרון להגשמת תמונות דיגיטליות וכו '.
תצוגה שקופה בכל מקום בתמונת הרקע הגדולה, אפקט גלילה אנכי וכו '.
תצוגת תמונה רגילה
bool romf_show_pic (מזהה uint16, uint16 x, uint16 y)
תצוגת תמונת האפקט השקופה היא חלק חשוב ממיטוב מערכת התצוגה US212A המשמש לפתרון התצוגה הדיגיטלית,
תצוגת הזמן, תצוגת סרגל ההתקדמות ופגמים אחרים שאינם יכולים להשתמש בשום תמונה כרקע מגדילים גם את יכולת התמונה לגלול אנכית.
לפתור את הפגמים בתצוגה דיגיטלית, תצוגת זמן, תצוגת סרגל התקדמות וכו 'שאי אפשר לבסס על תמונה כלשהי כרקע
void show_pic_transparent (שקוף_pic_t * p_trs_pic)

עמוד 226
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 226
נקודות מפתח באלגוריתם: זוהי תצוגת תמונות צבעונית שקופה בשם פסאודו, שמונחת בצורה שקופה עם תמונת הרקע כאשר היא מוצגת, כך שהיא נדרשת להיות מדויקת
כדי לקבל את החלק של תמונת הרקע של אזור תמונת הצבע השקוף הפסאודו שיוצג, זה דורש שאם תמונת הרקע אופקית, עליך ללחוץ
אחסון טור בעמודה. תצוגת התמונות הצבעונית שקופה למחוק דורשת שיתוף פעולה של הכלי לעורך ממשק המשתמש. שלושת הפקדים מתוארים להלן.
בָּהִיר.
NumberBox ו- TimeBox: כל התמונות והמפרידים הדיגיטליים חייבים להיות מעוצבים כתמונות שקופות פסאודו (בבקשה
ראה את ההסבר בקטע ממשק המשתמש שניתן להגדיר אותו), ושמור את תמונת הרקע תחילה בעמודה, כל עוד אתה משתמש בכלי עורך ממשק המשתמש.
"יירט את תמונת הרקע של פקד זה" פשוט יירט את תמונת הרקע.
ProgressBar: אם זה ProgressBar אופקי, תמונת הרקע נדרשת לאחסן תחילה בעמודה, פשוט השתמש
כלי עורך ממשק המשתמש "יירט את תמונת הרקע של פקד זה" יכול ליירט את תמונת הרקע.
תמונה אפקט גלילה אנכי
ui_result_e show_picbox_id3 (style_infor_t * picbox_style, picbox_private_t * picbox_data,
uint16 start_row)
ממשק זה מוקדש לגלילה אנכית של תמונות גלילה אנכיות של ID3.יש בסך הכל 4 אייקונים של ID3, אחד מהם הוא תמונת רקע.
הניחו אותה על מסגרת 0, קבעו אותה כתמונת רקע בלתי מוטמעת, והגדירו את 3 האחרים כסמלים שקופים פסאודו, מוגדרים כסמלים רגילים.
6.3.3.9 תצוגת מחרוזת

עמוד 227
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 227
תצוגת מחרוזת היא המיקוד והקושי של מנהל ההתקן של ממשק המשתמש, אנו נתמקד בו בחלק נפרד למטה.
6.3.4 תכנון ממשק חיצוני מונע ממשק המשתמש
להלן רק מבוא קצר לנקודות המפתח של עיצוב הממשק החיצוני של מודול מנהל ההתקנים של ממשק המשתמש. כיצד להשתמש בממשק הספציפי, אנא עיין ב
"ממשק us212a_ui_driver manual.chm".
הערה: הממשק ב- "us212a_ui_driver interface specification.chm" הוא הממשק הפנימי של מנהל התקן ה- UI. הממשק נקרא ו-
שמות המקרו המשמשים ביישום שונים. אבל שם המאקרו הכללי הוא להוסיף ui_ לפני שם הממשק הפנימי
אם לא, אנא מצא את מזהה הפקודה המתאים בטבלת הממשק ui_driver_op ב- rcode_ui_op_entry.c
מספר הממשק.
הממשק המאוחד מונע ממשק המשתמש מוגדר באופן הבא:
void * ui_op_entry (void * param1, void * param2, void * param3, ui_cmd_e cmd );
מספר פקודת הממשק החיצוני של מנהל ההתקן של ממשק המשתמש מוגדר באופן הבא:
typedef enum
{
/ *! פתח את קובץ המשאב * /
UI_RES_OPEN = 0,
/ *! סגור את קובץ המשאב * /
UI_RES_CLOSE,
/ *! הצג PicBox * /
UI_SHOW_PICBOX,
/ *! הצג טקסט טקסט * /
UI_SHOW_TEXTBOX,
/ *! הצג TimeBox * /
UI_SHOW_TIMEBOX,
/ *! הצג NumBox * /
UI_SHOW_NUMBOX,
/ *! הצג את ProgressBar * /
UI_SHOW_PROGRESSBAR,
/ *! טען נתוני AttributeBox * /
UI_LOAD_ATTRIBUTEBOX,

עמוד 228
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 228
/ *! הצג ListBox * /
UI_SHOW_LISTBOX,
/ *! הצג DialogBox * /
UI_SHOW_DIALOG,
/ *! הצג ParamBox * /
UI_SHOW_PARAMBOX,
/ *! קבל מאפייני תיבת טקסט * /
UI_GET_TEXTBOX_ATTRB,
/ *! קבל תכונות פיקבוקס * /
UI_GET_PICBOX_ATTRB,
/ *! קבל את תכונת listbox * /
UI_GET_LISTBOX_ATTRB,
/ *! ID3 גלילה פונקציה מיוחדת * /
UI_SCROLLSTRING_EXT,
/ *! הגדר סוג שפה * /
UI_SET_LANGUAGE,
/ *! קבל סטטוס DC * /
UI_GET_DC_STATUS,
/*! מסך נקי*/
UI_CLEARSCREEN,
/ *! הגדר את צבע המברשת * /
UI_SET_PEN_COLOR,
/ *! הגדר צבע רקע * /
UI_SET_BACKGD_COLOR,
/ *! מחרוזת תצוגה * /
UI_SHOW_STRING,
/ *! קבל את אורך המיתר * /
UI_GET_STRING_LENGTH,
/ *! מעברי קו פענוח טקסטים, כולל סינון תווים ריקים ותצוגת פילוח מילים וכו '. * /
UI_GET_TEXT_LINE,
/ *! הגדר את הכתובת והגודל של BUFFER * /
UI_SET_DISPLAYBUF,
/ *! Unicode מומרת לקוד פנימי * /
UI_UNICODE_TO_CHAR,

עמוד 229
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 229
/ *! המרת קוד פנימי ל- Unicode * /
UI_CHAR_TO_UNICODE,
קבל את קידוד UNICODE של מחרוזות מרובות שפות * /
UI_GET_MULTI_STRING_UNICODE,
/ *! המרת קידוד UTF8 ל- UNICODE * /
UI_UTF8_TO_UNICODE,
/ *! הגדר מצב נוף או דיוקן * /
UI_SET_SCREEN_DIRECTION
/ *! הצג תמונת משאבים * /
UI_SHOW_PIC,
/ *! קרא את תמונת המשאב למאגר * /
UI_READ_PIC_TO_BUFFER
} ui_cmd_e ;
מאקרו הממשק החיצוני מונע ממשק המשתמש מוגדר באופן הבא:
/ *! פתח את קובץ המשאב * /
# הגדר ui_res_open (שם קובץ, סוג)
ui_op_entry ((void *) (שם קובץ), (void *) (type), (void *) (0), UI_RES_OPEN)
/ *! סגור את קובץ המשאב * /
# הגדר ui_res_close (סוג)
ui_op_entry ((void *) (type), (void *) (0), (void *) (0), UI_RES_CLOSE)
/ *! ID3 גלילה פונקציה מיוחדת * /
# הגדר ui_scroll_string_ext (infor, param, region)
ui_op_entry ((void *) (infor), (void *) (param), (void *) (region), UI_SCROLLSTRING_EXT)
/ *! הצג PicBox * /
# הגדר ui_show_picbox (סגנון, נתונים)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (0), UI_SHOW_PICBOX)
/ *! הצג טקסט טקסט * /
# הגדר ui_show_textbox (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_TEXTBOX)

עמוד 230
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
230 עמודים
/ *! הצג TimeBox * /
# הגדר ui_show_timebox (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_TIMEBOX)
/ *! הצג NumBox * /
# הגדר ui_show_numbox (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_NUMBOX)
/ *! הצג את ProgressBar * /
# הגדר ui_show_progressbar (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_PROGRESSBAR)
/ *! טען נתוני AttributeBox * /
# הגדר ui_load_attributebox (סגנון, נתונים, ספירה)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (count), UI_LOAD_ATTRIBUTEBOX)
/ *! הצג ListBox * /
# הגדר ui_show_listbox (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_LISTBOX)
/ *! הצג DialogBox * /
# הגדר ui_show_dialogbox (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_DIALOG)
/ *! הצג ParamBox * /
# הגדר ui_show_parambox (סגנון, נתונים, מצב)
ui_op_entry ((void *) (סגנון), (void *) (נתונים), (void *) (uint32) (mode), UI_SHOW_PARAMBOX)
/ *! קבל את התכונות של תיבת הטקסט * /
# הגדר ui_get_textbox_attrb (סגנון, attrb, סוג)
ui_op_entry ((void *) (סגנון), (void *) (attrb), (void *) (type), UI_GET_TEXTBOX_ATTRB)
/ *! קבל את התכונות של picbox * /

עמוד 231
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 231
# הגדר ui_get_picbox_attrb (סגנון, attrb, סוג)
ui_op_entry ((void *) (סגנון), (void *) (attrb), (void *) (type), UI_GET_PICBOX_ATTRB)
/ *! קבל את התכונות של רשימת התיבות * /
# הגדר ui_get_listbox_attrb (סגנון, attrb, סוג)
ui_op_entry ((void *) (סגנון), (void *) (attrb), (void *) (type), UI_GET_LISTBOX_ATTRB)
/ *! הגדר סוג שפה * /
#defineui_set_language (lang_id)
ui_op_entry ((void *) (uint32) (lang_id), (void *) (0), (void *) (0), UI_SET_LANGUAGE)
/ *! קבל סטטוס DC * /
# הגדר ui_get_DC_status (pdc)
ui_op_entry ((void *) (pdc), (void *) (0), (void *) (0), UI_GET_DC_STATUS)
/*! מסך נקי*/
# הגדר ui_clear_screen (clrregion)
ui_op_entry ((void *) (clrregion), (void *) (0), (void *) (0), UI_CLEARSCREEN)
/ *! הגדר את צבע המברשת * /
# הגדר ui_set_pen_color (צבע)
ui_op_entry ((void *) (צבע), (void *) (0), (void *) (0), UI_SET_PEN_COLOR)
/ *! הגדר צבע רקע * /
# הגדר ui_set_backgd_color (צבע)
ui_op_entry ((void *) (צבע), (void *) (0), (void *) (0), UI_SET_BACKGD_COLOR)
/ *! מחרוזת תצוגה * /
# הגדר ui_show_strring (מידע, אזור, מצב)
ui_op_entry ((void *) (infor), (void *) (אזור), (void *) (uint32) (mode), UI_SHOW_STRING)
/ *! קבל את אורך המיתר * /
# הגדר ui_get_string_length (str, אורך, סוג)
ui_op_entry ((void *) (str), (void *) (אורך), (void *) (type), UI_GET_STRING_LENGTH)

עמוד 232
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 232
/ *! מעברי קו פענוח טקסטים, כולל סינון תווים ריקים ותצוגת פילוח מילים וכו '. * /
# הגדר ui_get_text_line (תיאור, מצב)
ui_op_entry ((void *) (desc), (void *) (mode), (void *) (0), UI_GET_TEXT_LINE)
/ *! הגדר את הכתובת והגודל של BUFFER * /
# הגדר ui_set_display_buf (מצב)
ui_op_entry ((void *) (מצב), (void *) (0), (void *) (0), UI_SET_DISPLAYBUF)
/ *! Unicode מומרת לקוד פנימי * /
# הגדר ui_unicode_to_char (str, len, lang_id)
ui_op_entry ((void *) (str), (void *) (len), (void *) (lang_id), UI_UNICODE_TO_CHAR)
/ *! המרת קוד פנימי ל- Unicode * /
# הגדר ui_char_to_unicode (dest, src, len)
ui_op_entry ((void *) (dest), (void *) (src), (void *) (len), UI_CHAR_TO_UNICODE)
קבל את קידוד UNICODE של מחרוזות מרובות שפות * /
# הגדר ui_get_multi_string_unicode (מזהה, סוג, מידע)
ui_op_entry ((void *) (id), (void *) (type), (void *) (infor), UI_GET_MULTI_STRING_UNICODE)
/ *! המרת קידוד UTF8 ל- UNICODE * /
# הגדר ui_utf8_to_unicode (src, dest, גודל)
ui_op_entry ((void *) (src), (void *) (dest), (void *) (גודל), UI_UTF8_TO_UNICODE)
/ *! הגדר מצב נוף או דיוקן * /
# הגדר ui_set_screen_direction (screen_mode)
ui_op_entry ((void *) (uint32) (screen_mode), (void *) (0), (void *) (0),
UI_SET_SCREEN_DIRECTION)
/ *! הצג משאבי תמונה * /
# הגדר ui_show_pic (מזהה, x, y)
ui_op_entry ((void *) (uint32) (id), (void *) (uint32) (x), (void *) (uint32) (y), UI_SHOW_PIC)

עמוד 233
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 233
/ *! קרא את נתוני משאב התמונה למאגר * /
# הגדר ui_read_pic_to_buffer (מזהה, מאגר, גודל גודל)
ui_op_entry ((void *) (uint32) (id), (void *) (buffer), (void *) (גודל גודל),
UI_READ_PIC_TO_BUFFER)
6.3.5 מבני נתונים עיקריים
// סוג המשאב, האם זה AP או COMMON
typedef enum
{
/ *! סוג המשאב הוא משאב AP * /
UI_AP = 0,
/ *! סוג המשאב הוא משאב משותף * /
UI_COM = 1
} res_type_e;
typedef struct
{
uint16 style_id; מזהה הפקד שיוצג בקובץ Style;
סוג res_type_e; // סוג המשאב הוא AP או COMMON
} style_infor_t;
/ *!
* \ תקציר
* ui_error_e: מנהל ההתקן של ui מטפל בסוג השגיאה
* /
typedef enum
{
/ *! אל תציג פקדים * /
UI_NO_DISPLAY
= 0x00,
/ *! תצוגה רגילה * /
UI_NO_ERR
= 0x01,
/ *! תצוגת מחרוזת דורשת גלילה * /
UI_NEED_SCROLL
= 0x02,
/ *! שגיאת פרמטר לא חוקית * /
UI_PARAM_ERR
= 0x03,

עמוד 234
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 234
/ *! המחרוזת מציגה את ציר ה- X מחוץ לטווח השגיאה * /
UI_PUTCHAR_X_ERR
= 0x04,
/ *! המחרוזת מציגה את ציר ה- Y מחוץ לטווח השגיאה * /
UI_PUTCHAR_Y_ERR
= 0x05,
/ *! המחרוזת מציגה שגיאות אחרות * /
UI_PUTCHAR_OTHER_ERR = 0x06,
/ *! הצגת התמונה האחרונה * /
UI_PICBOX_LAST_FRAME
= 0x07
} ui_result_e;
כשאתה צריך להתקשר לשליטה מסוימת ב- AP ונפוצה, אתה צריך להעביר פרמטרים לפונקציית ה- API של תצוגת הבקרה.
מבנה הנתונים הפרטי של הקובץ מוגדר כך:
6.3.5.1 הצגת הנתונים הפרטיים של PicBox
typedef struct
{
/ *! אם PicID אינו -1, PicID יוצג תחילה * /
uint16 pic_id;
/ *! מציין איזו תמונה להציג * /
uint8 frame_id;
/ *! להציג כיוון (רצף), אתה יכול לבחור קדימה (0) והפוך (1) * /
כיוון uint8;
} picbox_private_t;
// סדר תצוגה של פיקבוקס
#define DIRECTION_NORMAL 0 // הצגת רצף חיובי
# הגדר DIRECTION_REVERSE 1 // תצוגה בסדר הפוך
תיאור: הצגת סדר עדיפות:
(1) pic_id! = -1, התמונה שתצביע על ידי pic_id תוצג תחילה;
(2) pic_id = -1, frame_id! = -1, מוצגת תמונת המסגרת_הפיקבוקס שה StyleID מכוון אליה
(מסגרת אחת בתמונה מרובת מסגרות), הכיוון מוגדר לפי כיוון, בזמן זה יש להקצות כיוון;
(3) אם התמונה שמצביעה על ידי picbox.id מוצגת ישירות, ניתן להקצות ישירות את פרמטר מצביע המבנה ל- NULL
6.3.5.2 הצגת נתונים פרטיים של TextBox
/ *!

עמוד 235
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 235
* \ תקציר
*
textbox_draw_mode_e: סוג המינוי של מצב בקרת הרשימה ברשימה
* /
typedef enum
{
/ *! אין צורך לצייר * /
TEXTBOX_DRAW_NULL
= 0,
/ *! להציג טקסט טקסט על פי רגיל * /
TEXTBOX_DRAW_NORMAL = 1,
/ *! תצוגת גלילה * /
TEXTBOX_DRAW_SCROLL
= 2,
/ *! תצוגת גלילה * /
TEXTBOX_DRAW_SCROLL_ID3 = 3,
/ *! כותרת + תוכן * /
TEXTBOX_DRAW_ITEM
= 4,
/ *! תצוגת גלילה: כותרת + תוכן, רק תוכן גלילה * /
TEXTBOX_DRAW_ITEM_SCROLL = 5,
} textbox_draw_mode_e;
typedef struct
{
/ *! מזהה משאב מחרוזת * /
uint16 str_id;
/ *! סוג השפה של מחרוזת str_value * /
int8 lang_id;
/ *! בתים שמורים * /
שמורת uint8;
/ *! מצביע המחרוזת, אם הוא לא NULL, השתמש ב str_value כדי להציג * /
uint8 * str_value;
} textbox_private_t;
תיאור: הצגת סדר עדיפות:
(1) אם str_value! = NULL, התוכן אליו מראים str_value מוצג תחילה;
(2) str_value = NULL
א) str_id! = -1, המחרוזת שאליה str_id פונה אליו תוצג תחילה;
ב) str_id = -1, הציג את המחרוזת שצוינה ב- TextBox
(3) אם התמונה המופנית על ידי textbox.id מוצגת ישירות, ניתן להקצות ישירות את פרמטר מצביע המבנה NULL
6.3.5.3 הצגת הנתונים הפרטיים של TimeBox

עמוד 236
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 236
הגדרת מבנה הנתונים הפרטי של TimeBox
/ *!
* \ תקציר
* time_disp_mode_e: סוג ספירת מצב הצגת זמן
* /
typedef enum
{
/ *! תצוגת תאריך: YYMMDD * /
DATE_DISP_YYMMDD = 0,
/ *! תצוגת תאריך: MMDDYY * /
DATE_DISP_MMDDYY = 1,
/ *! תצוגת תאריך: YYMM * /
DATE_DISP_YYMM
= 2,
/ *! תצוגת תאריך: MMDD * /
DATE_DISP_MMDD
= 3,
/ *! תצוגת זמן: HHMMSS * /
TIME_DISP_HHMMSS = 4,
/ *! תצוגת זמן: HHMM * /
TIME_DISP_HHMM
= 5,
/ *! תצוגת זמן: MMSS * /
TIME_DISP_MMSS
= 6
} time_disp_mode_e;
/ *!
* \ תקציר
*
timebox_private_t: מבנה הנתונים הפרטי של תאי הזמן
* /
typedef struct
{
/ *! מבנה זמן מותאם אישית, הערך של שעה, דקה, שנייה או שנה, חודש ויום * /
מבנה
{
/ *! קונסורציום זמן * /
הִתאַחֲדוּת

עמוד 237
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 237
{
תאריך תאריך;
time_t זמן;
} union_time;
/ *! סוג זמן: 'D' פירושו תאריך, 'T' פירושו זמן, אחרים נאלצים להיות זמן * /
סוג זמן char
/ *! מפריד במצב תצוגת מחרוזות * /
מחיצת char;
/ *! מצב תצוגת זמן * /
time_disp_mode_e מצב;
} פעמים [2];
/// במצב מחרוזת, מפריד התאריך והשעה כברירת מחדל לחלל, ומפריד השעה והזמן כברירת מחדל הוא /
} timebox_private_t;
הגדרת מצב התצוגה של TimeBox
/ *!
* \ תקציר
*
timebox_draw_mode_e: סוג המנות של מצב ציור של בקרת זמן
* /
typedef enum
{
/ *! אין צורך לצייר * /
TIMEBOX_DRAW_NULL
= 0,
/ *! שרטט זמן או תאריך מחדש * /
TIMEBOX_DRAW_TIME
= 1,
/ *! צייר מחדש את כל * /
TIMEBOX_DRAW_ALL
= 2,
} timebox_draw_mode_e;
6.3.5.4 הצגת הנתונים הפרטיים של NumBox
הגדרת מבנה הנתונים הפרטי של NumBox
/ *!
* \ תקציר
*
numbox_private_t: מבנה הנתונים הפרטיים של numbox
* /

עמוד 238
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 238
typedef struct
{
/ *! מיקום הנקודה העשרונית של הערך שיוצג נקבע על ידי מידע התצורה * /
ערך uint16;
/ *! המספר הכולל לראות היכן הערך הנוכחי הוא * /
uint16 סה"כ;
} numbox_private_t;
הגדרת מצב תצוגה של NumBox
/ *!
* \ תקציר
*
numbox_draw_mode_e: סוג המנוי של מצב רישום שליטה דיגיטלית
* /
typedef enum
{
/ *! אין צורך לצייר * /
NUMBOX_DRAW_NULL
= 0,
/ *! צייר מספרים מחדש * /
NUMBOX_DRAW_NUMBER
= 1,
/ *! צייר מחדש את כל * /
NUMBOX_DRAW_ALL
= 2,
} numbox_draw_mode_e;
6.3.5.5 הצגת הנתונים הפרטיים של ProgressBar
הגדרת מבנה הנתונים הפרטי של Progressbar
/ *!
* \ תקציר
*
progressbar_private_t: מבנה הנתונים הפרטיים של סרגל ההתקדמות
* /
typedef struct
{
/ *! ההתקדמות הנוכחית של סרגל ההתקדמות (ערך, המרה למספר הצעדים באופן פנימי על ידי סרגל ההתקדמות) * /
ערך uint16;
/ *! ההתקדמות הכוללת של סרגל ההתקדמות * /
uint16 סה"כ;
} progressbar_private_t;

עמוד 239
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 239
הגדרת מצב התצוגה של סרגל ההתקדמות
/ *!
* \ תקציר
*
progress_draw_mode_e: סוג המינוי של מצב הציור של בקרת סרגל ההתקדמות
* /
typedef enum
{
/ *! אין צורך לצייר * /
PROGRESS_DRAW_NULL
= 0,
/ *! ציין מחדש את ההתקדמות * /
PROGRESS_DRAW_PROGRESS
= 1,
/ *! צייר מחדש את כל * /
PROGRESS_DRAW_ALL
= 2,
} progress_draw_mode_e;
6.3.5.6 הצגת הנתונים הפרטיים של ListBox
הגדרת מבנה הנתונים הפרטי של ListBox
/ *!
* \ תקציר
*
listbox_private_t: מבנה הנתונים הפרטי של listbox
* /
typedef struct
{
/ *! מחרוזת כותרות * /
כותרת textbox_private_t;
/ *! מערך מחרוזות פריט רשימה * /
textbox_private_t פריטים [LIST_NUM_ONE_PAGE_MAX];
/ *! הפריטים התקפים הראשונים בפריט הרשימה * /
uint8 item_valid;
/ *! הפריט הפעיל הנוכחי * /
uint16 פעיל;
/ *! פריט שהופעל בעבר * /
uint16 ישן;
/ *! המספר הכולל של כל הפריטים ביישום, המשמשים לסרגלי הזזה ויחס * /
uint16 list_total;
/ *! המיקום של כל הפריטים ביישום של הפריט הפעיל כרגע, המשמש לסרגל הזזה ויחס * /
uint16 list_no;

עמוד 240
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
240 עמודים
} listbox_private_t;
הגדרת מצב תצוגה של ListBox
*!
* \ תקציר
*
list_draw_mode_e: סוג ספירת מצב ציור של בקרת רשימה
* /
typedef enum
{
/ *! אין צורך לצייר * /
LIST_DRAW_NULL
= 0,
/ *! צייר מחדש את הפריט הפעיל * /
LIST_DRAW_ACTIVE = 1,
/ *! צייר מחדש את כל הרשימה * /
LIST_DRAW_LIST
= 2,
/ *! צייר מחדש את כל * /
LIST_DRAW_ALL
= 3,
} list_draw_mode_e;
6.3.5.7 הצגת הנתונים הפרטיים של DialogBox
הגדרת מצב תצוגה של DialogBox
/ *!
* \ תקציר
*
dialog_private_t: מבנה נתונים פרטי של דיאלוג
* /
typedef struct
{
/ *! מזהה אייקון דיאלוג * /
uint16 icon_id;
/ *! סוג השפה desc_info * /
int8 שפה;
שמורת uint8;
/ *! מחרוזת תיאור תיבת הדו-שיח * /
uint8 * desc_info;
מערך כפתורים, תומך בעד 3 כפתורים * /
כפתורי uint16 [3];
/ *! מספר הכפתורים, עד 3 * /
uint8 button_cnt;
/ *! מספר הכפתור הפעיל כרגע * /

עמוד 241
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 241
uint8 פעיל;
/ *! מספר הכפתור שהופעל בעבר * /
uint8 ישן;
} dialog_private_t;
הגדרת מצב תצוגה של DialogBox
/ *!
* \ תקציר
*
dialog_draw_mode_e: סוג המנות של מצב ציור של בקרת דיאלוג
* /
typedef enum
{
/ *! אין צורך לצייר * /
DIALOG_DRAW_NULL
= 0,
/ *! כפתור לצייר מחדש * /
DIALOG_DRAW_BUTTON
= 1,
/ *! צייר מחדש את תיבת הדו-שיח * /
DIALOG_DRAW_ALL
= 2,
} dialog_draw_mode_e;
6.3.5.8 הצגת הנתונים הפרטיים של ParamBox
הגדרת מבנה הנתונים הפרטי של ParamBox
/ *!
* \ תקציר
*
parambox_one_t: מבנה מתאר פרמטרים של parambox
* /
typedef struct parambox_one_struct
{
/ *! מזהה מחרוזת משאב יחידה של פרמטר אינו מוגבל ליחידה, זה יכול להיות כל מחרוזת תיאור עזר * /
uint16 unit_id;
/ *! ערך פרמטר מינימלי * /
uint16 דקות;
/ *! ערך פרמטר מרבי * /
uint16 מקסימום;
/ *! שלב ערך פרמטר * /
uint16 צעד;
/ *! הערך הנוכחי של הפרמטר * /
ערך uint16;
/ *! האם לאפשר הגדרה מחזורית, כלומר העלייה המקסימלית הופכת למינימלית והירידה המינימלית הופכת למקסימום * /

עמוד 242
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 242
מחזור uint8;
/ *! המספר המרבי של ספרות בערך הפרמטר * /
מספר מקסימלי uint8;
/ *! הערך הנוכחי של תצוגת מחרוזת הפרמטר, שניתן להמיר על ידי adjust_func * /
uint8 * value_str;
/ *! פונקציית התאמת ההתקשרות לזיהוי ערכי פרמטר, למשל להגבלת הגדרת תאריך וכו '.
bool (* להתאים_פונק) (struct parambox_one_struct * אחד);
/ *! הגדר פונקציות התקשרות מיידית, כגון הגדרות צליל וכו '. * /
bool (* התקשרות חוזרת) (ערך u16);
} parambox_one_t;
/ *!
* \ תקציר
*
parambox_private_t: מבנה הנתונים הפרטיים של parambox
* /
typedef struct
{
/ *! מזהה סמל לוגו * /
uint16 icon_id;
/ *! הגדר את מזהה מחרוזת משאב הכותרת * /
uint16 title_id;
/ *! הגדר את מספר הפרמטרים * /
uint8 param_cnt;
/ *! הפריט המופעל כעת משמש גם כפריט ההפעלה המוגדר כברירת מחדל בהגדרות מרובות פרמטרים * /
uint8 פעיל;
/ *! פריט שהופעל בעבר * /
uint8 ישן;
/ *! הגדר רשימת פרמטרים * /
parambox_one_t * פריטים;
} parambox_private_t;
הגדרת מצב התצוגה של ParamBox
/ *!
* \ תקציר
*
parambox_draw_mode_e: הגדרת הפרמטרים בקרת מצב ציור סוג ספירה
* /
typedef enum
{
/ *! אין צורך לצייר * /

עמוד 243
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 243
PARAMBOX_DRAW_NULL
= 0,
/ *! ציין מחדש את ערך הפרמטר * /
PARAMBOX_DRAW_VALUE
= 1,
/ *! צייר מחדש פרמטרים (שנה פרמטרים) * /
PARAMBOX_DRAW_PARAM
= 2,
/ *! צייר מחדש את תיבת הגדרת הפרמטר * /
PARAMBOX_DRAW_ALL
= 3,
} parambox_draw_mode_e;
6.3.5.9 הצגת מבנה נתוני מחרוזות
/ *!
* \ תקציר
*
string_desc_t: מבנה מתאר מחרוזות
* /
typedef struct
{
/ *! נתוני מחרוזת, או מזהה מחרוזת רב-שפתית, או קוד (קוד פנימי או Unicode) * /
הִתאַחֲדוּת
{
/ *! מצביע מאגר קוד * /
uint8 * str;
/ *! מזהה מחרוזת * /
מזהה uint16;
} נתונים;
/ *! סוג נתוני מחרוזת
* קטגוריה 1:
* UNICODELANGUAGE (0x7f) מייצג משאבים של Unicode;
* מזהה של שפת קוד פנימית (כגון אנגלית) פירושו נתוני קוד של Ansi;
* קטגוריה 2:
* UNICODEID (0x7e) פירושו מזהה Unicode;
* UNICODEDATA (0x7d) פירושו נתוני קוד Unicode;
* UTF_8DATA (0x7c) פירושו נתוני קוד utf-8;
* ANSIDATAAUTO (0x7b) פירושו נתוני קוד Ansi (מעובדים אוטומטית כשפה הנוכחית של מנהל ההתקן של ה- Ui);
* מזהה של שפת קוד פנימית (כגון אנגלית) פירושו נתוני קוד של Ansi;
* הערה: ניתן לבחור באופן חופשי בקטגוריה 1 וקטגוריה 2 על פי תרחיש השימוש, למשל ברור כי הנתונים הם str, ו
ורק יוניקוד
*
וקוד פנימי, אז אתה יכול לבחור את הראשון, והתוכנית צריכה להשתמש בסיווג זה בעת הפרשנות
להיתמודד עם;
* /

עמוד 244
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 244
int8 שפה;
שמורת uint8;
/ *! OUT: בתים יעילים; IN: גודל מאגר * /
אורך uint16;
/ *! כל פרמטר, משמעותו תלוי באירוע הספציפי; לדוגמה, ניתן לציין את רוחב הפיקסלים המקסימלי של הקו בהפסקת הקו; * /
uint16 argv;
/ *! משמש לאחסון התוצאה ומשמעותה נקבעת לפי המקרה הספציפי; לדוגמא, בנתיב הקו, הוא יכול לציין את מספר הבתים בשורת התצוגה; * /
תוצאה uint16;
} string_desc_t;
6.3.6 תהליך תצוגת בקרה
6.3.6.1 תהליך תצוגה של PicBox
6.3.6.2 תהליך תצוגה של ListBox
6.3.6.3 הצגת תהליך של TextBox
6.3.6.4 הצגת תצוגה של SliderBar
6.3.6.5 תהליך התצוגה של ProgressBar
6.3.6.6 תהליך תצוגה של TimeBox
6.3.6.7 תהליך תצוגה של DialogBox
6.3.6.8 תהליך תצוגה של NumBox
6.3.7 תצוגת מחרוזת
6.3.7.1 סקירה כללית של העיצוב

עמוד 245
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 245
מודול היישום של פונקציית ההיגיון מונע התצוגה של ממשק המשתמש מחולק בסופו של דבר לשני חלקים: עיבוד תצוגה של מחרוזות ותמונות.
לפיתרון US212A יש דרישות גבוהות לגבי ההשפעה והביצועים של צג ממשק המשתמש, ולכן יש לאמץ כמה עיצובים מיטוביים במנהל התקן של ממשק המשתמש.
כדי לשפר את ביצועי תצוגת ממשק המשתמש, כולל שימוש ב- DMA כדי לרענן את המסך, לנתח את השימוש בזיכרון של היישום ולעשות שימוש מלא ב-
השתמש במרחב הזיכרון הזמין בתרחישים שונים כמאגר התצוגה כדי לשפר את הביצועים של תצוגת תמונה ומחרוזת. בנוסף,
בפתרון US212A, זרימת עיבוד התצוגה של מיתרי תווים מורכבת יותר ויש לקחת בחשבון את עיבוד התצוגה במצבים שונים. לדוגמה,
כגון: שקוף, לא שקוף, רב קו תצוגה, שמאל, מרכז, ימין, גלול שמאלה וימינה, גלול למעלה ולמטה, אם לגלול
מסך, האם למחוק תווים לא שלמים וכו '. לכן הוא מציג את הגדרות הבחירה והתמונות של BUFFER בתרחישים שונים של יישומים.
העיצוב והמימוש של תצוגה, עיבוד מחרוזות תווים במצבי תצוגה שונים, עיבוד תצוגת מחרוזת תווים בשפה מיוחדת וכו 'הם
החלק העיקרי העיקרי במנהל התקן של ממשק המשתמש.
6.3.7.2 הצגת בחירת BUFFER
על פי תכנון שטח הזיכרון של ערכת US212A, RAM6 (0x2e000-0x32000), RAM7 (0x32000-
0x34000), RAM8 (0x34000 - 0x35800), JRAM5 (0x358000 - 0x36000) ארבעת האזורים הללו משמשים ל
מאגר לפענוח JPEG. על פי תרחישים שונים של יישומים, מנהל התקן של ממשק המשתמש יכול להשתמש ב- RAM8 ו- JRAM5 בהתאם לשיקול
שני חלקי החלל הללו (8KB) ​​משמשים כ- BUFFER לתצוגה, והמשתמש מציין את מצב התצוגה כדי לקבוע את זרימת הפעולה של ממשק התצוגה.
1. תרחישים שבהם JRAM5 ו- RAM8 אינם זמינים: Udisk, יישום הקלטה, דור PLAYLIST. במעטים האלה
בתרחיש זה, ארבעת החללים הללו כבר תפוסים ולא ניתן להשתמש בהם כמאגר לתצוגת ממשק משתמש. לתרחישים אלה תוכלו להשתמש
המרחב להצגת BUFFER הוא:
(1) Udisk, Record, MTP, יישומי רשימת השמעה: UI_LCD_BUF (1KB);
בשלב זה, מנהל התקן של ממשק המשתמש יכול לבחור רק את שטח הנתונים של 1KB של UI_LCD_BUF כמאגר. בתרחישים אלה
בשלב הבא, מנהל התצוגה של ממשק המשתמש ישתמש במאגר IK להצגת תמונות ומחרוזות. השיטה הספציפית היא כדלקמן:
כשנכנסים לסצינה:
ui_set_display_buf (LCD_RAM_INDEX);
// בחר חוצץ נתונים LCD כמו LCD חיץ
אזור סומק
ביציאה מהסצנה:
ui_set_display_buf (JPEG_RAM_INDEX); // בחר JRAM5 , RAM 8 כ- LCD איטי
אזור סומק
3. תרחישים זמינים עבור JRAM5 ו- RAM8: למעט כמה תרחישים לעיל, כל שאר התרחישים זמינים. בזה
בתרחישים מסוימים, מנהל התקן של ממשק המשתמש ישתמש במצב המהיר כדי להציג תמונות, ואם המשתמש מציין את מצב תצוגת המחרוזת כנקרא
במצב מסך מנהל התקן של ממשק המשתמש ישתמש גם ברווחים אלה כמאגר התצוגה כדי להאיץ את תצוגת המיתרים.
בתכנית US212A, JRAM5 ו- RAM8 יכולים לשמש בתור BUFFER לתצוגה ברוב הסצינות, כך
ברירת המחדל JRAM5 ו- RAM8 משמשים כ- BUFFER לתצוגה כאשר ממשק המשתמש מוצג, כלומר מהיר
התמונה מוצגת במצב מהיר, ומחרוזת התווים מוצגת במהירות כאשר מצב תצוגת מחרוזת התווים מוגדר למצב קריאת המסך.

עמוד 246
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 246
6.3.7.3 תכנון עיבוד תצוגת מחרוזות
א) לצורך עיבוד התצוגה של מחרוזות תווים, התוכנית תומכת בפלט ישיר של נקודה ורקע ונתוני מטריצת נקודות עם תווים.
בשתי השיטות ברירת המחדל היא להשתמש בכיסוי רקע. ראשית, הרקע של האזור בו צריך להציג את המחרוזת מתאים לכל תו
את superposition של פיקסלים, לאחר השלמת superposition, שלח אותו ל- LCM על ידי DMA, כך שניתן יהיה להשלים אותו תוך זמן קצר
רענון המחרוזת נמנע מעיכוב רענון המיתר. באופן זה, הצגת מיתרים עם רקע צבעוני אחיד (לא שקופים)
יש עלייה במהירות גבוהה יותר. לתצוגה של מחרוזות תווים שקופות, היעילות של שיטה זו גם מהירה יותר משיטת הנקודה.
ב) עבור מחרוזות שקופות, מכיוון שהרקע אינו צבע אחיד, כל פעם לפני רענון המחרוזת, מכיוון שהמאגר מוצג
(6K) מוגבלת, תחילה עליך לרענן את תמונת הרקע ל- LCM ואז לקרוא את נתוני הרקע מה- LCD
GRAM נקרא בחזרה, ואז מוחלף עם פיקסלים התווים, ואז פלט ל- LCM. מכיוון שמהירות הקריאה של המסך איטית,
באופן זה, עבור מחרוזות שצריך לרענן לעיתים קרובות (כגון גלילה), המסך יתבהב. כדי לפתור את מסך ההתזה
בתוכנית, עיבוד התצוגה של מחרוזות שגודל תמונת הרקע שלהם פחות מ- 6K מותאם, כלומר הרקע
נתוני התמונה נקראים מאזור SD ונשמרים בתצוגה BUFFER, ואז מונחים עם פיקסלי התווים, ולבסוף דרך DMA
הדרך פולטת ל- LCM. בדרך זו ניתן להשיג את אותה אפקט תצוגה כמו מחרוזת תווים שאינה שקופה. כמובן, בגודל
לתמונות שגדולות מ- 6K, לא ניתן להשתמש בשיטה זו.
ג) הצגת מיתרי הדמויות מופשטת כנטילת דמויות כגרעין, הבנת מיתרי הדמויות כרצפי תווים ועיבוד רצפי תווים,
הקוד הפנימי ו- unicode מעובדים יחד, וסוגי שפה מיוחדים כמו ערבית, עברית, תאילנדית וכו '.
עבד, ארז את פרטי היישום וספק ממשק שקוף אחיד ליישומים בשכבה העליונה. היישום העליון מוצג במחרוזת השיחה
במהלך הממשק אין צורך להבחין בין קוד פנימי ל- UNICODE, ואין צורך לעבד שפות מיוחדות.
המידע מועבר למנהל התקן ממשק המשתמש, והנהג מבצע באופן פנימי עיבוד שונה על סמך המידע.
ד) הוסף גופן תו מנגנון חציצה מטריצה ​​עיבוד מחרוזות תווים, השתמש שטח זיכרון JRAM5 2K, אתה יכול
מטריצת הגופן נשמרת במטמון, מה שמקטין את מספר הגופנים הקוראים מפלאש ויכול גם לשפר את מהירות הצגת מחרוזת התווים.
6.3.7.4 יישום גלילת מחרוזת כלפי מעלה
בתכנית US212A, יש צורך לממש את הפונקציה של גלילת מחרוזת התווים, ואפקט התצוגה חלק, ואין עצירה.
תְחוּשָׁה. לכן, עיבוד התצוגה לגלילה כלפי מעלה הוא גם פונקציה חשובה שמנהל התקן של ממשק המשתמש צריך ליישם.
כאשר מחרוזת התווים נווטת כלפי מעלה, זה שווה לשני מחרוזות תווים שגלולות ומוצגות בו זמנית. כאשר המחרוזת שלמעלה גוללת למעלה
במקביל, יש לגלול את המחרוזת הבאה כלפי מעלה בהתאם. היישום צריך לעבור בשתי מצביעי מחרוזות למנהל התקן של ממשק המשתמש
העבר כדי להשיג גלילה. יתרה מזאת, התוכן באותה מחרוזת מוקרן בו זמנית, כלומר התווים בכל מחרוזת
לאחר סיום העיבוד, הם יהיו מאוחדים לפלט ל- LCM. אחרת, אם תנקוט בשיטת עיבוד תווים יחידה, היא תפיק
עיכוב הסמלים המרעננים, אפקט התצוגה אינו חלק. לכן, כיצד לנצל באופן מלא את שטח הזיכרון הזמין כתצוגה BUFFER,
מיון המיתרים שצריך לגלול ולפלט אותם ל- LCM הוא שיקול חשוב לגלילה כלפי מעלה.

עמוד 247
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 247
א) בעת גלילה כלפי מעלה, הוציא את גופני מטריצת הנקודות של כל התווים של שני מיתרי התווים שצריך לגלול, בהתאם לגלילה הנוכחית.
מקם, המיר את החלק המתאים של הפיקסלים בשני המיתרים לרקע קדמי / רקע ושמור אותם ישירות כפיקסלים שייפלטו.
המידע על הנקודה מאוחסן במאגר, ואז מוצא ל- LCM על ידי DMA.
ב) עיבוד סוג שפה מיוחד: לערבית ועברית יבוצע תחילה תעתיק ומיפוי הפוך משמאל לימין
לאחר העיבוד מתבצעת גלילה.
ג) שטח המאגר הדרוש לגלילה כלפי מעלה: למסך צבעוני של 128 × 160 יש צורך במאגר שורה של מידע על פיקסל
הרווח הוא (גובה תו ברירת המחדל הוא 16): 16 × 128 × 2 = 4096 (4KB), לכן נדרש חיץ של 4K לגלילה כלפי מעלה
מֶרחָב.
6.3.7.5 טיפול מיוחד בתאילנד
לכתיבה של השפה התאילנדית יש את המאפיין של העלאת-על, היא מחולקת לדמויות ראשיות ותסריטים-על ותמונות-משנה.
הם צריכים להיות מונחים על גבי הקצה העליון או התחתון של הדמות הראשית.
דוגמה: " ", " ปั ", " สู ", " คุ้ " ארבע התווים האלה
ל- " " יש רק דמות ראשית אחת (0xE19)
" ปั " הוא שילוב של דמות ראשית לבין כתב-על (0xE1B, 0xE31)
" สู " הוא שילוב של תו ראשי ותסריט (0xE2A, 0xE39)
" คุ้ " הוא תו ראשי בתוספת מנוי ובעל-על (0xE04, 0xE38, 0xE49)
uint8 thai_point (uint8 * str, uint8 uni_flag, uint16 source_code, uint8 * char_buf)
פונקציה זו משמשת לניתוח תווים תאילנדים. אם התו הנוכחי כולל תסריט עליון ותכנית, הוא יוטמע ויוצא כראוי.
פונקציה זו נקראת על ידי fix_get_next_char_point_hook.
כללים: תווים תאילנדים מתחילים עם הדמות הראשית, ומסתיימים בכתב-על ותכנית-על (אם הם קיימים) הדמות הנוכחית היא הדמות הראשית.
עד לאיתור הדמות הראשית הבאה, הקידוד של הטקסט הנוכחי מסתיים.
6.3.7.6 טיפול מיוחד בערבים
ערבית ועברית שייכים למשפחת השפות השמיות, הרגלי הכתיבה והצפייה שלהם הם מימין לשמאל, וכיוון הגלילה של המיתר.
זה משמאל לימין, וזה הפוך לחלוטין להרגלי השפה הכלליים. ושתי השפות הללו נכונות בעת הצגת ספרות באנגלית וערבית.
מוצג לעתים קרובות.
לכתיבה הערבית יש גם את המאפיין של כתיבה מתמשכת: צורת הכתיבה של דמות היא דמות אחת מולה ושתי תווים מאחור.
הדמות קשורה, היא צריכה להיות מעוותת על פי הדמויות לפני ואחרי, סוג זה של עיבוד גורם לה להראות כמו שלם
יחד, וסוג זה של ligatures צריך להשתמש בגופנים unicode כדי להציג, אין כרגע ligatures של קודים פנימיים.
ישנם שלושה מקורות למחרוזות ערבית ועברית: מיתרי משאבים בקובצי xls, UNICODE ללא משאבים

עמוד 248
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 248
מחרוזת, מחרוזת ANSI. הערה: US212A אינו משרשר מיתרי משאבים בערבית.
מכיוון שאנו מציגים את המיתרים בצורה אחידה משמאל לימין, המחרוזות הערבית והעברית מוצגות סוף סוף.
יש צורך להפוך את תוכן המחרוזת באופן זמני משמאל לימין.
כדי להקל על מעקב אחר מחרוזות ערבית ועברית יש לנו
לי עיצב מכונה מדינה כדלקמן:
עיבוד מחרוזות ערבית ועברית ומעברי מדינה הם כדלקמן:
ARABIC_INIT : התקשר לממשק arabic_uni_join להמרה של UNICODE ועיבוד כתיבה רציף בערבית,
הממשק arabic_uni_join מיושם באופן הבא:
void arabic_uni_join (string_desc_t * desc)
{
// הקוד הפנימי מומר לקוד Unicode לכתיבה רציפה בערבית
if (desc-> שפה! = UNICODEDATA)
{
arabic_char_to_unicode (desc);
desc-> שפה = UNICODEDATA;
}
// עיבוד כתיבה רציף בערבית
אם (שפה_יד == ARABIC)
{
arabic_do_join (desc);

עמוד 249
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 249
}
}
לאחר סיום העיבוד, המדינה משתנה ל- ARABIC_UNI_JOIN.
ARABIC_UNI_JOIN : התקשר לממשק arabic_ascii_turn כדי לבצע את עיבוד ההיפוך המערבי, כך שהשפה המערבית תוצג סוף סוף
הכיוון הוא משמאל לימין. לאחר סיום העיבוד, המדינה משתנה ל- ARABIC_ASCII_TURN.
ARABIC_ASCII_TURN : מחרוזת התווים במצב זה משמשת להצגה מימין לשמאל, והשורה היחידה שלנו
עיבוד תצוגת מחרוזת התווים הוא: התו הלא שלם מקדימה + מחרוזת התווים האמצעית + התו הלא שלם בסוף, כך עבור כל שורה
מחרוזת תווים, החלק האמצעי של המחרוזת צריך להפוך באופן זמני משמאל לימין, ולהציג עם לוגיקת עיבוד מאוחדת משמאל לימין.
6.3.8 הוראות להקצאת זיכרון למנהלי ממשק משתמש
הקצאת שטח הקוד של מודול מנהל ההתקן של ממשק המשתמש הנה כדלקמן:
● שטח הקוד לתושב כולל: 0xbfc21580 ~ 0xbfc2187f = 0x300 בתים, כלומר 0.75K בתים.
● בנק שטח / b / c קוד בנק:
✧ בנק א ': (0x16 ** 0000 + 0x24c00) ~ (0x16 ** 0000 + 0x24fff) = 0x400 בתים.
✧ בנק ב: (0x26 ** 0000 + 0x25000) ~ (0x26 ** 0000 + 0x257ff) = 0x800 בתים.
✧ בנק c: (0x36 ** 0000 + 0x21a00) ~ (0x36 ** 0000 + 0x21dff) = 0x400 בתים.
✧ הערה: 6bit הגבוה ביותר הוא מספר הבנק, לדוגמה, 0x06 ב- 0x16064c00 הוא 0x01, כך שהוא ממשק משתמש
כונן BANK קבוצה BANK A1.
שטח הנתונים התושב במודול הנהג של ממשק המשתמש הוא 0x9fc1ce00-0x9fc1d1ff = 0x400 בתים. בנוסף, המערכת מתמחה גם
הקצה שטח חיץ UI_LCD_BUF 1KB עבור מנהל התקן ממשק משתמש.
6.3.9 תמיכה מרובת שפות
תוכנית US212A תומכת ב -28 שפות, המכסה שפות עיקריות ברחבי העולם.
שפה
שפה
משפחת שפה
צ'כית
צ'כית
שפות הודו-אירופיות (משפחה מערב סלאבית)
יווני
יווני
הודו-אירופית
אנגליש
שפה אנגלית
משפחת שפות הודו-אירופית (שפות גרמניות)

עמוד 250
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 250
דַנִי
דַנִי
משפחה בהודו-אירופית (קבוצת צפון גרמנית)
גֶרמָנִיָת
גֶרמָנִיָת
משפחה בהודו-אירופית (גרמנית)
ספרדית
ספרדית
הודו-אירופית
צָרְפָתִית
צָרְפָתִית
הודו-אירופית
אִיטַלְקִית
אִיטַלְקִית
הודו-אירופית
הוּנגָרִי
הוּנגָרִי
שפות הודו-אירופיות (משפחה מערב סלאבית)
הוֹלַנדִי
הוֹלַנדִי
משפחה בהודו-אירופית (גרמנית)
נורווגית
נורווגית
הודו-אירופית
פולני
פולני
שפות הודו-אירופיות (משפחה מערב סלאבית)
פורטוגזית_אירופה
פורטוגזית
הודו-אירופית
פורטוגזית_ברזילית
הודו-אירופית פורטוגזית ברזילאית
רוּסִי
רוּסִי
שפות סלאביות
סלובקית
סלובקית
שפות הודו-אירופיות (משפחה מערב סלאבית)
פִינִית
פִינִית
הודו-אירופית
שוודית
שוודית
משפחת שפות הודו-אירופית (שפות גרמניות)
טורקי
טורקי
משפחה בשפה האלטאית (משפחה בשפה הטורקית)
Schinese
סינית פשוטה
סין-טיבטית
צ'צ'יני
סינית מסורתית
סין-טיבטית
יַפָּנִית
יַפָּנִית
שפות אלטאיות
קוריאנית
קוריאנית
שפות אלטאיות
עִברִית
עִברִית
משפחה שמית
עֲרָבִית
עֲרָבִית
שפות שמיות
תאילנדי
תאילנדי
(קבוצה בשפה התאילנדית)
רומנית
רומנית
שפות הודו-אירופאיות ()
אינדונזית
אינדונזית
הודו-אירופית
6.3.9.1 קידוד תווים וספריית גופנים
על מנת להשתמש במחשב לעיבוד תווים, יש צורך לשייך תווים לקודים בינאריים, התכתבות זו היא המילה
קידוד תווים.
כדי לנסח קוד, קבע תחילה את ערכת התווים, מיין את התווים בערכת התווים ואז התכתב למספרים הבינאריים.

עמוד 251
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 251
על פי מספר התווים בערכת התווים, כמה בתים משמשים לקידוד.
כל קידוד מגדיר קבוצת תווים ברורה, הנקראת מערך התווים המקודד (ערכת תווים מקודדת),
זו משמעות נוספת של קבוצת תווים. וכל מערך תווים יכול להכיל קידודים מרובים.
קוד Unicode
קוד Unicode, הנקרא גם Unicode, הוא קידוד תווים המשמש במחשבים. לכל שפה
התווים קובעים קוד בינארי אחיד וייחודי. ב- unicode (או UCS-4) הוא מחולק ל 128 לפי הבייט הגבוה ביותר
קְבוּצָה. כל קבוצה מחולקת ל 256 מטוסים על פי הבייט הבא בגובהו. זמין כרגע הוא 0 ~ 16 בקבוצה 0, בסך הכל 17
מטוס, טווח הקידוד הוא 0 ~ 10FFFF, כ -1.1 מיליון נקודות קוד.
החשוב ביותר הוא plane0 (0 ~ FFFF), המכונה המטוס הבסיסי הרב לשוני, או BMP (Basic Multilingual לשונית)
מָטוֹס). BMP מכיל את כל התווים הנפוצים בכל מערכות הכתיבה המשמשות כיום בעולם, כמו גם כמה היסטורית
תווים נפוצים. BMP מסיר את שני הביטים הגבוהים של 0, שהם UCS-2.
בדרך כלל קוד unicode מתייחס ל- BMP מקודד דו-ביתי.
קוד פנימי
מערך התווים תואם לעתים קרובות לשפה ספציפית. כמו ערכת תווים באנגלית, ערכת תווים סינית מסורתית, ערכת תווים יפנית
לַחֲכוֹת. הקידוד המקומי של קבוצות תווים שונות נקרא קוד פנימי.
קוד פנימי נפוץ:
● ASCII
● קידוד סיני
✧ GB2312
✧ GBK
✧ Big5
✧ GB18030
עמוד קוד
Codepage הוא טבלת המיפוי בין קודי התווים של מדינות שונות ו- Unicode. לדוגמה, מיפוי של סינית מופשטת ויוניקוד
שולחן הצילום הוא CP936. להלן מספר דפי קוד נפוצים.
● עמוד קוד = 932 יפנים
● עמוד קוד = 936 GBK סיני פשוט
● עמוד קוד = 949 קוריאנית
● עמוד קוד = 950 BIG5 סיני מסורתי
גוֹפָן

עמוד 252
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 252
בסיס הנתונים של הגופנים מחולק ל:
● ספריית גופן של מטריקס נקודה
● ספריית גופנים וקטוריים
על פי פורמט הקידוד ניתן לחלק את ספריית הגופנים ל:
● ספריית גופני קוד פנימית
● גופן Unicode
הנתונים המאוחסנים בספריה של גופן מטריקס הם:
BIT7
BIT0
BIT7
BIT0
BYTE0
BYTE1
BYTE0E
BYTE0F
BYTE1E
BYTE1F
רשימת הנתונים ההקסדצימלית היא כדלקמן, כאשר 10 בשורה השלישית פירושם שרוחב התו הוא 16 פיקסלים:
00 00 7D FE 44 08 48 08 49 E8 51 28 49 28 49 28
45 28 45 28 45 E8 69 28 50 08 40 08 40 28 40 10
10
6.3.9.2 דרישות ונקודות תכנון
דרישות תמיכה מרובות שפות
● מחרוזת המשאב, הזנה בצורה של excel, הקוד שלה הוא UNICODE 16, אשר נערך באמצעות עורך ממשק המשתמש.
הכלים נארזים כקבצי sty
● מערכת קבצים, כולל שם קובץ, מידע ID3 וכו '. הקידוד יכול להיות UNICODE 16, ANSI ו- UTF-8
נקודות עיצוב
● US212A משתמש בספריית גופני מטריקס של נקודת Unicode, התווים / המחרוזות שיוצגו יומרו לבסוף ל- Unicode 16
ספריית גופן של אינדקס קוד לקבלת מטריצת נקודות ותצוגה
● US212A תומך בקידוד UNICODE 16, קידוד ANSI וקידוד UTF-8, ביניהם קידוד UTF-8

עמוד 253
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 253
קל להמיר לקידוד Unicode 16 באמצעות כללי המרה, וקידוד ANSI חייב לעבור את טבלת אינדקס השפה
המרת עמוד קוד, לכן US212A חייב לספק טבלאות עמוד קוד המתאימות לכל השפות הנתמכות
6.3.9.3 מחרוזת משאבים
US212A על מנת להפוך את תצוגת ממשק המשתמש של כל AP לא תלוי זה בזה, התמונות ומיתרי המשאבים של כל AP הם עצמאיים.
לכן לכל AP יש קובץ excel של מחרוזת משאבים, ול COMMON יש גם קובץ excel של מחרוזת משאבים.
אנו דורשים כי המיון של מספר שפות חייב להיות מבוסס על COMMON, ועל הפרויקט COMMON של עורך ממשק המשתמש
ייווצר קובץ lang_id.h, המגדיר את המזהים של שפות שונות.
פרויקט עורך ממשק משתמש יפיק קובץ כותרת מזהה של מחרוזת משאב * _res.h עבור Common וכל AP, להשתמש
מאקרו הזיהוי בקובץ הכותרת יכול לאינדקס את מחרוזת המשאב בקובץ ה- sty המתאים כדי להשיג את קוד ה- Unicode של המחרוזת.
זרמי קוד, זרמים מקודדים אלה מסתיימים במסוף '\ 0' '\ 0'.
6.3.9.4 תהליך תצוגה
תהליך הצגת מחרוזת משאבים תהליך תצוגת מחרוזת מקודד ANSI

עמוד 254
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 254
הַתחָלָה
מזהה מחרוזת ומזהה שפה
נתונים מקודדים
נתוני מטריקס נקודה
ממשק תצוגה
מחרוזת תצוגה
סוֹף
הַתחָלָה
מחרוזת ומזהה שפה
נתונים מקודדים
נתוני מטריקס נקודה
ממשק תצוגה
מחרוזת תצוגה
סוֹף
טבלת המרות לחיפוש כדי לקבל
קידוד unicode
6.3.9.5 הוסף שפה
שנה את מנהל ההתקן:
● הוסף את טבלת ההמרות היפנית במערך טבלת המרות רב-שפות של מנהל התקן UI MBtoUnicTabName;
● בפונקציית שפת הגדרת מנהל ההתקן של ממשק המשתמש, הוסף את סוג השפה ועיבוד טבלת ההמרות המתאימות
set_language (uint8 lang_id);
● הוסף קובץ טבלת המרות של unicode
לדוגמה: יפנית שזה עתה הוספה, עליך להוסיף לקובץ fwimage.cfg
FWIM = "V932JIS.TBL"; // הוסף טבלת המרות יפנית unicode
נוספו אפשרויות תפריט שפה חדשות בכלי עריכת התפריט
● שנה הגדרת ap_
● שנה את הגדרת המאקרו LANGUAGE_TOTAL ב- ap_setting.h
● הוסף שפה חדשה לטבלה_טקסט_טבלה ב menu_callback_language.c של ap_setting
מזהה משאב מחרוזת
● הוסיפו את פונקציית ההתקשרות לתגובת ההתקשרות של השפה החדשה בתפריט_השאלה_שפה.ק של ap_setting.

עמוד 255
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 255
שנה את קובץ התצורה של המקרה Config.txt
SETTING_AP_ID_LANGUAGE_ID = 19 [0 ~ 23 , 1]; // סוג השפה
שימו לב לשינוי של מזהה סוג השפה המקסימלי ומזהה סוג השפה המוגדר כברירת מחדל.
הוסף עמודת שפה חדשה לקובץ ה- Xls
טבלת המזהים של סוג השפה מבוססת על סדר השפות ב- xls של Common, ולכן סוג השפה החדש
המיקום חייב להיות תואם ל- AP ול Common.
6.3.10 תמיכה בספרייה / גופן רב-גופנית
מנהל ההתקן של ממשק המשתמש של US212A תומך בתכנית מרובת גופנים ויכול לתמוך בעד 3 גופנים / גופנים.
ספריית גופן גדולה / גופן UNICODEL.FON, ספריית גופן סינית / גופן UNICODE.FON וספריית גופן קטנה
UNICODES.FON, ומתכתב עם הגופן הקטן, הגופן הבינוני והגופן הגדול של כלי עורך ממשק המשתמש.
הערה: שמו של קובץ הגופן / גופן כתוב בקוד המקור של מנהל ההתקן של ממשק המשתמש, כך שלא ניתן לשנות את השם כרצונך. אם ברצונך לשנות אותו,
אנא הקפד לסנכרן את השינויים עם קוד המקור של מנהל ההתקן של ממשק המשתמש.
6.3.10.1 תבנית גופן
תבנית הגופן מוגדרת כך:
1. יש לשמור את הגופן בגובה * רוחב = H * 8 | H * 16 | H * 24 | H * 32 מטריצה, H> = גופן בפועל
גובה ו <= רוחב המטריצה.
2. כאשר H> = הגובה בפועל של הגופן, הגופן נשמר במרכז בכיוון האנכי. אם הגובה בפועל הוא מספר שווה,
לאחר מכן מלאו חצי מהצד העליון והתחתון: אם זה מספר אי זוגי, הצד התחתון הוא נקודה אחת יותר מהצד העליון.
3. מטריצת הגופן מאוחסנת מימין בכיוון האופקי ומאוחסנת מהסיביות הגבוהה ביותר של הבייט; אם הרוחב בפועל גדול מהרגע
מחצית מרוחב המטריצה ​​W, ואז כל שורה (W ביטים) מאחסנת שורה אחת של מטריצת נקודות גופן; אחרת, כל שורה מאחסנת 2 שורות של מטריצת נקודות גופן,
כלומר, השורות 2N ו- 2N + 1 (ממוספרות מ -0) מאוחסנות לצד מטריצת הגופן; מספר השורות במטריצת הגופן שווה לרגע
גובה המערך הכולל את שורות הריפוד.
הערה: גופן מטריצה ​​8 * 8 אינו תומך באחסון 2 שורות של מטריצת נקודות גופן בשורה, כלומר גם אם הרוחב בפועל פחות או שווה ל-
4. היא מאחסנת גם שורה אחת של מטריצת נקודות גופן בשורה.
4. הביתה הראשון אחרי נתוני מטריקס של גופן נקודה הוא הרוחב האמיתי של מטריצת הנקודות של הגופן, למשל, ספריית גופני מטריקס 16 * 16, המילה ה -32
הקטע (ממוספר מ -0) הוא הרוחב בפועל.
6.3.10.2 הוראות לתצורת גופן
תצורת ריבוי גופנים / גופנים
קבע את התצורה באמצעות המאקרו USE_MULTI_FONTLIB , המוגדר כך:
1. מוגדר כמספר שלם של 8 סיביות, כאשר bit0 פירושו גופן קטן, bit1 פירושו גופן בינוני, ו- bit2 פירושו גופן גדול

עמוד 256
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 256
2. אם הוא מוגדר כ- 0, פירושו להשתמש בגופן הסטנדרטי המוגדר כברירת מחדל, כלומר הגופן עם הרוחב והגובה בפועל של הגופן הוא 16 * 16.
במקרה זה, אתה יכול להתעלם מ"הגדרת תצורת ספריית הגופן השונים "ומ"גודל מאגר מטריקס הגופן".
<display.h>
// הגדרת גופן, המתאימה לגופן הקטן, הגופן הבינוני והגופן הגדול בכלי עורך ממשק המשתמש
// bit0 פירושו גופן קטן, שמו חייב להיות UNICODES.FON
// bit1 פירושו גופן בינוני, שמו חייב להיות UNICODE.FON
// ביט 2 פירושו פונט גדול, שמו חייב להיות UNICODEL.FON
// אם זה 0, פירושו הוא שמשמש את גופן ברירת המחדל, כלומר, הרוחב והגובה בפועל של הגופן הוא 16 * 16
// הערה: אם מסך LCD אינו תומך בקריאת מסך, גם אם אינך צריך להשתמש בגופנים מרובים, עליך לעשות זאת
USE_MULTI_FONTLIB מוגדר כ- 0x02
# הגדר את USE_MULTI_FONTLIB
0x06
תסריט אריזת קושחה לתצורה סינכרונית
לאחר הגדרת גופנים / גופנים מרובים, יש להגדיר את פריטי התצורה בסקריפט התצורה של חבילת הקושחה fwimage.cfg באופן סינכרוני:
<fwimage.cfg>
// גופן קטן
FWIM = "UNICODES.FON";
// גופן סיני
FWIM = "UNICODE.FON";
// גופן גדול
FWIM = "UNICODEL.FON";
קבע את התצורה של ספריית גופן / גודל גופן ספציפי
יש לקבוע את התצורה של כל סוג גופן באמצעות מידע זה: גובה מטריקס הגופן, גודל הגופן המרבי בפועל, רוחב מטריקס הגופן,
גודל מאגר מטריקס של גופן, לוקח דוגמא לגופן 2, ההגדרה היא כדלקמן:
<display.h>
// ספריית גופנים 2, המתאימה לגופן הבינוני בכלי עורך ממשק המשתמש, על ספריית הגופנים להיות בעלת
# הגדר FONTLIB_2_HEIGHT
16 // הגובה המרבי של מטריצת נקודות גופן שנוצרה
# הגדר FONTLIB_2_HEIGHT_ACTUAL 16 // הגובה המקסימאלי בפועל של מטריצת נקודות הגופן
# הגדר FONTLIB_2_WIDTH
16 // הרוחב המרבי של מטריצת נקודות הגופן שנוצרה, הדרישה היא 8
מרובות

עמוד 257
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 257
# הגדר FONTLIB_2_SIZE
(FONTLIB_2_HEIGHT *
FONTLIB_2_WIDTH / 8 + 1)
הגדר את גודל מאגר הגופן
<display.h>
// גודל מאגר הגופנים של ספריית הגופנים זהה לספריית הגופנים הגדולה, המשמשת להגדרת מאגר הגופנים; אם אין ספריית גופן גדולה,
השתמש בספריית גופנים סינית;
# הגדר MAX_CHARPOINTE_SIZE
FONTLIB_3_SIZE
6.4 עיצוב מנהל התקן ממשק משתמש שחור-לבן
פרק זה משמש כדי להנחות את פיתוח מנהל התקן המסך בשחור לבן של US212A, ומספק את מנהל התקן LCD הצבעוני שישתנה לתצוגת מסך שחור לבן.
שיטת שינוי.
6.4.1 סקירת דרישות ועקרונות תכנון
מנהל התקן צבעוני שונה מהמסך בשחור לבן כדלקמן:
● ממשקי חומרה שונים: מסכי צבע הם בדרך כלל ממשקי 8 ביט; מסכים בשחור לבן מחולקים לממשקים טוריים ומקבילים.
● פורמט נתוני הפיקסלים שונה: ביט אחד עבור מסך שחור לבן פירושו פיקסל אחד; למסך צבעוני, 2 בתים פירושו פיקסל.
● השיטה המרעננת שונה.
● שיטת העדכון שונה.
● אחר
עקרונות העיצוב של מנהל התקן המסך בשחור לבן הם כדלקמן:
● שמור על פורמט הנתונים של משאב ה-sty ללא שינוי, ושמור על כלי עורך ה- ui ללא שינוי.
● השתמש בפורמט תמונת מסך צבעונית (bmp מפת סיביות 24 סיביות, תכונה צבעונית).
הסיבה לעיצוב זה היא: לא רק לעמוד בתאימות של כלים ותבניות נתונים, כדי להפוך את העיצוב לפשוט ביותר, אלא גם לפגוש את השחור
צג תצוגה של מסך לבן.
השיטה היא גם מאוד פשוטה: מכיוון שתמונת הצבע היא בפורמט RGB565, כלומר 2Byte מייצג פיקסל אחד, ואילו המסך בשחור לבן מציג
מראה ש- פיקסל אחד הוא 1 ביט. לפיכך, נדרש עיבוד מיוחד בממשק מרענן התמונה. הקריאה בנתונים עדיין במצב תמונת צבע, אך 2 בתים
קח רק 1 ביט, וכן הלאה, לאחר ארגון מספיק עמוד 1, רענן את המסך בצורה אחידה.

עמוד 258
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 258
6.4.2 הנחיות שינוי
1. שינוי חומרה. שנה את התגובה GPIO בהתאם למצב הממשק של השימוש במסך שחור לבן.
נקודת השינוי היא הגדרת המאקרו ב- display.h, כדלקמן:
// בקרת איפוס lcd
# הגדר LCMRST_GIO_EN_REG
GPIOCOUTEN // GPIO_C0 (פלט)
# הגדר LCMRST_GIO_DATA_REG GPIOCDAT
# הגדר LCMRST_GIO_EN_BIT
0x01
# הגדר LCMRST_SET_BIT
0x01
# הגדר LCMRST_CLR_BIT
0xFE
// בקרת תאורה אחורית lcd
# הגדר LCMBL_GIO_EN_REG
GPIOCOUTEN
// GPIO_C1 (פלט)
# הגדר LCMBL_GIO_DATA_REG GPIOCDAT
# הגדר LCMBL_GIO_EN_BIT
0x02
# הגדר LCMBL_SET_BIT
0x02
# הגדר LCMBL_CLR_BIT
0xFD
// lcd בקרת קריאה וכתיבה
# הגדר LCMRS_GIO_EN_REG
GPIOBOUTEN
// GPIO_B4 (פלט)
# הגדר LCMRS_GIO_DATA_REG GPIOBDAT
# הגדר LCMRS_GIO_EN_BIT
0x10
# הגדר LCMRS_GIO_DN_BIT
0xEF
# הגדר LCMRS_SET_BIT
0x10
# הגדר LCMRS_CLR_BIT
0xEF
// בקרת בחירת שבב lcd
# הגדר CE_GIO_EN_REG
GPIOAOUTEN
// סיכת GPIO_A7 CS
# הגדר CE_GIO_DATA_REG
GPIOADAT
# הגדר CE_EN_BIT
0x80 // אפשרות להפעיל
# הגדר את CE_DN_BIT
0x7F
# הגדר CE_SET_BIT
0x80
# הגדר CE_CLR_BIT
0x7F
2. שנה את רזולוציית ה- LCD.
#define Display_Length 128
# הגדר תצוגה_גובה 160

עמוד 259
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 259
3. שנה את משאבי התמונה.
אם יש לך משאב תמונה בשחור לבן, עליך לערוך שוב את התמונה בשחור לבן ולשמור אותה כ- bmp מפת סיביות של 24 סיביות.
אם אתה משתמש במשאבי תמונות צבעוניים, אינך צריך להמיר את הפורמט, רק וודא שרזולוציית התמונה עומדת ברזולוציית LCD.
פחית.
לאחר מכן השתמש ב- UI-EDITOR לעריכת משאבים ליצירת קובץ ה- .sty הקובץ וה- H. (עיין ב- 7.2 ממשק משתמש
הוראות עורך. )
4. שנה ברוך הבא.
נקודת שינוי: מקרה \ drv \ ברוך הבא
חלוקת מודולי פונקציה
תקציר מודול
ברוך הבא
שנה את שיטת השיחה לרענון וכו '.
lcd_hardware_init.c
שנה אתחול חומרת LCD וכו '.
rcode_lcd_functions.c
שנה צגי LCD כגון כתוב_דאטה, כתוב_סמ"ד, נתונים_טרנס וכו '.
ממשק פעולה
ברוך הבא
ערוך קבצים חדשים שנוספו לאחרונה
אם ברכה מוצגת כרגיל, היא יכולה להוכיח שהחומרה תקינה ותוכלו לעבור לשלב הבא.
5. שנה את מנהל התקן LCD:
נקודת שינוי: מקרה \ drv \ lcd_ZD932
חלוקת מודולי פונקציה
תקציר מודול
rcode_lcd_functions_3.c
שנה או מחק את ממשק ה- LCD כגון "הגדרת חלון" ו"מצב רענון מסך "
bank_a_lcd_functions.c
שנה או מחק "הגדר ניגודיות" "שינה של המסך" "החלף תאורה אחורית"
המתן לממשק LCD
rcode_lcd_functions.c
שנה את הנתונים_כתוב, את הכתוב_cmd, את הנתונים_טרנס, קריאת מסך וכו '.
ממשק הפעלת LCD
rcode_lcd_functions_2.c
מחק את פעולת DMA ושנה למצב MCU
rcode_lcd_op_entry.c
הגדרות אחרות
הממשקים במנהל התקן LCD הופיעו בברכה, אך הם משמשים את מנהל ההתקן של ממשק המשתמש ושכבת ה- AP. חומרת LCD
האתחול אינו צריך להיעשות שוב.
שישית, שנה את מנהל ההתקן של ממשק המשתמש:
נקודת שינוי: מקרה \ drv \ ui \, לסיכום השינויים של מנהל ההתקן של Ui יש רק 2 נקודות:
1. הוסף את ממשק התצוגה u_put_sd_image () של המסך בשחור לבן (ממשק מסך הצבעים הוא rom_put_sd_image),
עיין בקובץ bank_b_ui_show_picbox_2.c.

עמוד 260
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 260
2. ארוז מחדש את ממשק תמונות המסך בשחור לבן u_show_pic () (romf_show_pic למסך צבעוני), קובץ הפניה
rcode_ui_functions.c. חפש בכל השיחה romf_show_pic של הממשק המרענן ושנה ל
u_show_pic.
3. שנה את fix_dma_buffer_data_hook בקובץ rcode_ui_functions.c כדי להציג את המאגר
הנתונים במסך נשלחים למסך דרך DMA ומשתנים לדרך של MCU.
שינוי יישום Ap, Seven, Ap:
עם הבסיס לעיל, שינוי היישום הוא פשוט מאוד. מכיוון שהכוונה המקורית של פיתרון us212a היא
כעת זרימת התצוגה מופרדת לחלוטין מזרימת הבקרה, מרבית התצוגה יושמה במנהל התקן ה- ui, ויש מעט פקודות ישירות ביישום.
ואז התקשר לממשק המרענן. קח דוגמה mainmenu_ap, ערוך ויצר את קובץ ה- sty וצור אותו מחדש על פי קובץ ה- h החדש
פשוט ערוך mainmenu_ap.
8. נקודות אחרות שלא גמרו
6.5 עיצוב כונן ברוכים הבאים
6.5.1 הגדרה ופונקציה של ברוך הבא
מנהל התקן הפתיחה, כפי שהשם מרמז, הוא מודול המשמש להצגת ממשק "ברוך הבא" בעת הפעלת ההתקן; מדויק יותר
ההגדרה המדויקת היא שמנהל התקן הפתיחה הוא מודול קוד משתמש הפועל ברגע שהמכשיר מופעל.
לעטוף בצורה של כונן. מודול קוד המשתמש שהוזכר כאן מתייחס למודל השונה מפלטפורמת המערכת, שהיא ה- PSP, למקרים ספציפיים
חתיכת קוד.
לפיכך, הפונקציות של מנהל התקן ברוך הבא קשורות כמעט כולן להפעלה, והפונקציות ביותר כוללות את הדברים הבאים:
● הצג את ממשק "ברוך הבא". כמובן, ראשית יש לאתחל את ה- LCD.
● אפשרויות הפעלה, כגון החזקת מקש להפעלת ADFU, או החזקת שילוב מקשים כדי להיכנס לתפריט ההתחלה
המתנה יחידה.
● איתור סביבת חומרת מערכת, כגון איתור סוללה חלשה, אם גילוי סביבת החומרה נכשל, באפשרותך לבחור להיכנס למצב שינה
טיפול בחריג כמו משוואות.
● אתחל את סביבת חומרת המערכת, כגון השבתת הרמקול.
6.5.2 ממשק חומרה ברוך הבא
ברוך הבא מאחר שצריך להציג ממשק "ברוך הבא", יש לכלול כמה פונקציות של מנהל התקן ה- LCD, כלומר את החומרה הראשונית.
אתחל והצג את התמונה. על מנת להקל על תחזוקת הפיתרון, אנו נותנים לנהג ברוכים הבאים לחלוק חלק מקוד הנהג LCD.

עמוד 261
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 261
השתמשו ב- makefile compile option -D __WELCOME__ לבחירת קוד מנהל התקן ברוך הבא, וקישור אפשרות -gc-section
בעת קישור, הממשק שלא נקרא מוסר אוטומטית בכדי לחסוך מקום בקוד.בדרך זו משתמשים במנהל התקן הנהג ו- LCD.
שתף את אותו קוד מנהל התקן LCD כדי להקל על התחזוקה הבאה של התוכנית.
void disp_starting (void (* adfu_launch) (void), void (* read_res) (uint8 *, uint16, uint16))
read_res (buffer_addr, 0, 40): קרא נתוני תמונת משאב ברוך הבא, 3 פרמטרים הם מאגר יעד בהתאמה;
ברוך הבא כתובת תמונה לקיזוז משאב, במגזר; קרא גודל נתוני משאבים, במגזר.
void lcd_hardware_init (void): אתחול חומרה של מודול LCD.
מכיוון שמודול הפתיחה ארוז כחלק ממודול ה- brec, הוא נטען לעבד בשלב ה- mbrec של ההפעלה.
בזיכרון 8KB שמתחיל ב- 0xbfc1e000, והוא נקרא ישירות בכתובת המוחלטת בשלב ה- brec, אז ברוך הבא לא
אין צורך להגדיר ממשקי כניסה ויציאה. (לאחר טעינת המערכת, מנהל ההתקן צריך להתקשר לממשק ההתקנה, אשר
זה טוען את החלק .text של הזיכרון הקבוע של הנהג לזיכרון ואז קורא לפונקציית ה- init של הנהג לאתחל. )
הערה: גודל מודול הפתיחה לא יכול לעלות על 8KB.
6.5.3 התחלת ברוכים הבאים ותהליך עסקי
מודול הפתיחה ארוז כחלק ממודול ה- brec ונטען מ- 0xbfc1e000 בשלב ה- mbrec של ההפעלה.
ב- 8KB הראשון של הזיכרון, הוא נקרא ישירות עם כתובת מוחלטת בשלב ה- brec. (אז הכניסה של ברוך הבא נדרשת
חייבים להיות מקושרים לכתובת המוחלטת המוסכמת 0xbfc1e001, כלומר בקובץ xn, קישור Welcome.o לפתיחת סעיף .text
רֹאשׁ. ) בשלב זה מוצג ממשק "ברוך הבא"; אם מבחן סביבת חומרת המערכת עובר, brec ימשיך לבצע את זרימת ההפעלה שלאחר מכן.
צ'נג.
להלן מתאר בקצרה את התהליך העסקי של מודול ברוך הבא, כפי שמוצג באיור הבא:

עמוד 262
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 262
6.5.4 כיצד לשנות את ממשק הפתיחה
הפקת תמונת הפתיחה מתבצעת באמצעות הכלי לעורך ממשק משתמש. תהליך הפעולה הוא כדלקמן:
1. פתח את כלי עורך ממשק המשתמש, בחר את נתיב העבודה והזן.

עמוד 263
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 263
2. בחר קובץ- > צור משאב תמונה ברוך הבא ... , חלון ליצירת תמונה ברוכים הבאים צץ.
3. בחרו את תמונת הפתיחה, על מפרט התמונה להתאים לגודל מסך LCD; בחרו בנתיב האחסון למילואים, אנא בחרו
בספריית המקרה / fwpkg נוצר Welcome.res.

עמוד 264
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 264
4. לחץ על כפתור התחל יצירת כדי ליצור את קובץ משאב הפתיחה.
5. ארוז מחדש את הקושחה ותראה את הממשק המעודכן "ברוך הבא".
7 תכנון ופיתוח ממשקים
הממשק כולל 2 חלקים: ממשק משתמש ותפריט.
7.1 הצגת שיטות הניתנות להגדרה
US212A מציג ממשק משתמש הניתן להגדרה וטכנולוגיית תפריט הניתנת להגדרה, ומפשיט פרטים רבים של ממשק המשתמש והתפריט מהקוד
צא, הכניס אותו לקובץ הנתונים, שנה את קובץ הנתונים באמצעות הכלי להדמיה כדי להשיג את מטרת הגדרת ממשק המשתמש והתפריט. אלה בסדר
החלק מתייחס בעיקר לתכונות שלא ישתנו במהלך השימוש לאחר קביעת התוכנית, כגון מיקום הקואורדינטות של ממשק המשתמש, רקע,
צבע, יישור, גודל גופן וכו ', מבנה עץ התפריט של התפריט וכו'.
ברור, בהשוואה לשיטת העיבוד הקודמת, שימוש בשיטה הניתנת להגדרה כדי לתכנן ולפתח ממשק משתמש ותפריטים כבר לא צריכים לעבור.
אכפתיות מהפרטים שאסור לטפל בהם מלכתחילה, מקטינה מאוד את הנטל של כתיבת קוד, ובשלב המאוחר של הפיתוח והפרויקט.
במהלך תקופת התחזוקה, אין צורך לשנות את פרטי ממשק המשתמש והתפריטים לקוד המקור, אלא להתאים אותם רק בכלי הדמיה.
עם זאת, הקושי במשימות אלה מצטמצם מאוד.
7.2 ממשק משתמש הניתן להגדרה
ממשק משתמש הניתן להגדרה השתמש בכלי עורך ממשק משתמש כדי להבין את "מה שאתה רואה זה מה שאתה מקבל" שיטת עיצוב ממשק משתמש הומנית, פעולה פשוטה
רווק, עוצמתי.

עמוד 265
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 265
7.2.1 סקירה של עורך ממשק משתמש
7.2.1.1 מושגי יסוד
עורך ממשק משתמש לוקח סצינות כיחידת הארגון של ממשק המשתמש ושולט כאלמנטים מכוננים; סצנה מורכבת מפקד אחד או יותר
שילוב מכונה.
התצוגה של ממשק המשתמש מבוססת על בקרות .הסצנה היא רק מושג הגיוני. היא צריכה להיות מוצגת בצורה מסודרת.
הצג את כל הפקדים בסצינה או חלקם.
עורך ממשק המשתמש מיישם את הפקדים הבסיסיים הבאים:
לִשְׁלוֹט
תיאור
PicBox
תיבת תצוגה לתמונה, המשמשת לתיאור אזור תמונה, יכולה להציג מסגרת אחת או יותר
מסגר תמונות, לכל מסגרת תמונה יש את אותן תכונות PicBox.
תיבת טקסט
תיבת תצוגת טקסט, המשמשת להצגת מחרוזת, המחרוזת כוללת את התווים שצוינו
מחרוזת ושינוי מחרוזת, המשתמש יכול לקבוע את גודל האזור המוצג, את המוצג
מצב רקע ופלט.
NumberBox
תיבת התצוגה הדיגיטלית מספקת בקרת תצוגה דיגיטלית מיוחדת שתומכת בתצוגת המספרים
ניתן להוסיף מפריד, שניתן להשתמש בו כדי להציג את הנקודה והיחס העשרוניים.
TimeBox
תיבת תצוגה לתאריך / שעה מספקת בקרה להצגת שעה / תאריך, משתמשים בלבד
צריך לקבוע את זמן התצוגה או תאריך התצוגה מבלי לדאוג לפרטי תצוגה אחרים, סתם
ניתן להשלים את הצגת השעה או התאריך.
ProgressBar
סרגל ההתקדמות מספק בקרת סרגל התקדמות למשתמש בכדי להציג את ההתקדמות.
קופסת רשימה
תיבת תצוגה לרשימה, המציגה משאבי מחרוזת פעילים ברשימה, כגון רשימת תפריטים,
רשימת ספריות וקבצים.
ParamBox
עם
סרגל המחוון
תיבת הגדרת הפרמטרים מספקת בקרת תצוגת פרמטר למשתמש לצפייה והגדרה
הגדר פרמטרים, כולל פרמטרים רציפים ופרמטרים נפרדים.
תיבת דיאלוג
תיבת הדו-שיח מספקת בקרת תיבת דו-שיח למשתמש לקבלת הודעות, אזהרות,
בקשת שגיאה או בירור וכו '.
AttributeBox
תיבת המאפיינים משמשת לתיאור המאפיינים של שליטה מסוימת או רישום קבועים מסוימים.
7.2.1.2 הרכב בסיסי של פקדים
הפקד מורכב מאלמנטים בסיסיים הבאים: (קח את בקרת הרשימה כדוגמה)
❖ תמונה (מסגרת כתומה)
❖ מחרוזת (קופסה סגולה)

עמוד 266
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 266
❖ מספר שיכול להיות מחרוזת או תמונה דיגיטלית (קופסה אדומה)
תכונות לתצוגת תמונות:
Content תוכן תמונה: מזהה תמונה של משאב, שניתן לציין בקוד, ותומך במספר מסגרות של תמונות.
Display באזור תצוגת התמונה, עליך רק לציין את הקואורדינטות של הפינה השמאלית העליונה של תצוגת התמונה. הרוחב והגובה נקבעים על ידי תמונת המשאב.
תכונות תצוגה של מחרוזת:
Content תוכן מחרוזת: מזהה מחרוזת משאב, זרם קידוד מחרוזת.
Area אזור תצוגה של מחרוזת תווים.
Color צבע תצוגת מחרוזת תווים.
Background רקע מחרוזת, מחולק לתמונת רקע, מילוי צבע רקע ושקוף.
❖ אם הרקע הוא תמונת רקע, עליך לציין את אזור התצוגה של תמונת הרקע.
Mode מצב תצוגת המחרוזת הוא כדלקמן: 16bit, ראה העמוד הבא
Mode מצב מילוי: מחולק למצב רגיל, מצב לא שקוף, מצב קריאה ישירה ומצב נקודה ישירה.
Ignment יישור: הוא מחולק ליישור שמאל, יישור מרכזי ויישור ימני.
Mode מצב תצוגה רב קו: מחולק להצגת תווים לא שלמים, השלכת תווים לא שלמים, תצוגה מרובת שורות, הוספת אליפסה
תצוגה, תצוגת גלילה.
✧ תכונות גלילה: מחולק לגלילה אופקית, גלילה כלפי מעלה וגלילה מעגלית.
Size גודל גופן: מחולק לגודל גופן גדול, גודל גופן בינוני וגודל גופן קטן. יש צורך בספריות גופן מרובות.
✧ תפריט רשימת שפות: מציין שהמחרוזת הנוכחית היא פריט בתפריט רשימת השפות וזקוקה לעיבוד מיוחד.
ביטול יישור ימין ערבי.
סקירה כללית של תצוגה דיגיטלית:
Number מספר הוא תו מיוחד, אותו ניתן להציג כמחרוזת או כתמונה דיגיטלית.

עמוד 267
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 267
❖ במקרים מסוימים אנו זקוקים למספרים וסמלים בגודל קטן יחסית, וספריית הגופנים אינה יכולה לספק גודל קטן
אם אתה רוצה ליצור תמונות של מספרים וסמלים כאלה. בנוסף תמונות של מספרים וסמלים
זה יכול להיות מתוכנן להיות מאוד אמנותי, וזה עוזר מאוד לייפוי ממשק המשתמש.
❖ באופן כללי, רוחב התמונות הדיגיטליות נדרש להיות עקבי, ותמונות הסמל יכולות להיות מעט קטנות יותר.
Generally בדרך כלל נדרש למיין את שמות התמונות הדיגיטליות במילון, כך שה- res_id שנוצר יגדל ברציפות לצורך גישה נוחה.
Numbers המספרים מוצגים על ידי תמונות דיגיטליות, עדיף שהמספרים יהיו בפורמט קבוע וניתן להציג אותם במצב קבוע.
עדכון התצוגה הוא פשוט מאוד.
תכונות תצוגה דיגיטלית:
❖ מספר, שצוין על ידי קוד.
Area אזור תצוגה דיגיטלי.
Background רקע לתצוגה דיגיטלית, המחולק לתמונת רקע, מילוי צבע רקע ושקוף.
❖ אם הרקע הוא תמונת רקע, עליך לציין את אזור התצוגה של תמונת הרקע.
Mode מצב תצוגה דיגיטלי, מחולק למצב מחרוזת ותמונה דיגיטלית.
Dig ספרות תצוגה דיגיטלית והאם להציג את ה- 0 (012) המוביל.
❖ אם להציג את השלט, כלומר אם להציג את סימן + עבור מספרים חיוביים.
❖ תכונות מיוחדות למצב מחרוזת
Color צבע תצוגה מחרוזת
❖ תכונות מיוחדות למצב תמונה דיגיטלית
ID תמונה דיגיטלית 0 מזהה ורוחבה
ID מזהה תמונה מפריד ורוחבו
כאשר האלמנטים הבסיסיים מרכיבים בקרה, המפתח טמון בבחירת מאפייני הבקרה:
❖ אילו מאפיינים מסוג 1 ניתן להגדיר כברירת מחדל בשליטה
❖ אילו מאפיינים של קטגוריה 2 חייבים להיות פתוחים למשתמשים, אותם יכולים להתאים אישית על ידי המשתמשים בהתאם לצרכים הספציפיים שלהם
❖ איזו קטגוריה 3 יכולה להשתמש בהגדרות ברירת המחדל ולאפשר למשתמשים להתאים אישית תחילה
להלן לוקח את שליטת ה- PicBox כדוגמה להסביר.

עמוד 268
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 268
תיאור:
1. במבנה נתונים זה, אם מדובר בפיקוד PicBox של מסגרת יחידה, ה- ID שייך לסוג התכונה השלישית, כלומר ברירת המחדל
השתמש במזהה התמונה שהוגדר, אך אם המשתמש צריך לציין תמונות אחרות בעצמו, ניתן לציין תחילה, אם זה PicBox עם מסגרות מרובות מסגרות.
לצורך הפקד, המשתמש צריך לציין את מספר המסגרת זה שייך לסוג המאפיין השני וצריך לציין אותו על ידי המשתמש.
2. תכונות אחרות שייכות לקטגוריה הראשונה ומשתמשות ישירות בערכי ברירת המחדל שנקבעו בעורך ממשק המשתמש.
אינטראקציה עם הנהג UI:
❖ תצוגת הפקד מסופקת על ידי מנהל התקן ה- ui * _private_t ליישום, המשמש להעברת הסוגים השני והשלישי של הפקד
תכונה, הנהג ui ואז מנתח ומציג את כל ערכי התכונות בהתאם למנגנון תצוגת הבקרה.
❖ בכדי להציג את הפקד בצורה יעילה יותר, אנו נספק מצבי רענון מרובים לתצוגת הבקרה, כגון ListBox
פקדים, יהיה החלק הכל, החלק רשימת, החלק פריטים פעילים וכו '.
❖ לכן ממשק תצוגת הבקרה הוא בערך כדלקמן:
ui_show_xxx (style_infor_t *, * _private_t *, מצב uint8);
קח דוגמה את PicBox:
1. מנהל ההתקן של ה- ui מספק את המבנה picbox_private_t ליישום שמשמש להעברת התכונות מהסוג השני והשלישי של הפקד.
המבנה הוא כדלקמן:

עמוד 269
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 269
2. יש רק תצוגה אחת לתצוגת התמונה, ללא פרמטר המצב.
לפיכך, צורת ממשק התצוגה של PicBox היא:
ui_show_picbox (style_infor_t *, picbox_private_t *);
7.2.1.3 פריסת כלי עורך ממשק משתמש

עמוד 270
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 270
7.2.1.4 תיאור תפריט כלים
תַפרִיט
תיאור
קוֹבֶץ
פרויקט AP חדש
צור פרויקט AP ריק
לכבות
סגור את פרויקט ה- AP או תבנית תת-סצנה שנערכה כעת
להציל
שמור את פרויקט ה- AP או התבנית המשנה שנערכה כעת
שמור כ
תקף רק לפרויקט משותף, שמור כתבנית תת סצינה
צור קבצי משאבים ...
צור תוצאות, כולל * קבצי .sty, * _res.h, * _sty.h וכו '.
צור תמונה מבורכת
מָקוֹר...
צור קובץ משאב תמונה ברוך הבא
תמונה למפת bitbits של 24 סיביות משמשת להמרת BMP שחור-לבן לתמונת BMP בצבע עמוק של 24 ביט
החלף סביבת עבודה
עבור לספריית המקור
לַעֲרוֹך
לְבַטֵל
בטל את הפעולה באזור העריכה של הממשק
לַעֲשׂוֹת שׁוּב
שחזר את הפעולה של אזור העריכה בממשק
חתוך והדבק
עותק
לְהַדבִּיק
הגדר משאבים ...
הגדר משאבי תמונה ומשאבי מחרוזת
ליירט את כל הפקדים
תמונת רקע
בחר בתפריט זה לאחר עדכון תמונת הרקע, והיירוט האוטומטי תלוי בתמונת הרקע
כל תמונות הרקע של, כדי להשיג את המטרה של שינוי מהיר של סגנון הרקע
נוף
להתעלם
בחר להציג או להסתיר חלקי תצוגה
בחר
שמור הגדרות אוטומטית ...
קבעו את זמן שמירת הפרויקט אוטומטית, ברירת המחדל היא 3 דקות לשמירה אוטומטית
עֶזרָה
מדריך עזרה
מדריך העזרה של גרסת WORD
אודות עורך ממשק משתמש ...
כלי למידע
7.2.1.5 פעולה בסיסית
1. הוסף שליטה: לחץ על סמל הבקרה, העביר את המצביע לאזור עריכת הממשק, האפקט הראשוני של הפקד יופיע, הזז
לחץ על העכבר למיקום מסוים, או השתמש בעכבר כדי לגרור את סמל הבקרה לאזור עריכת הממשק, האפקט הראשוני של הפקד יופיע.
אם התמונה מוצגת, הזז את העכבר למיקום מסוים ולחץ על העכבר שוב.
2. הגדרת תכונה: לחץ על תבנית תת-סצנה או על פרויקט בעץ מבנה הפרויקט, ואזור מידע התכונות יעבור לעמודה של תכונות הפרויקט.
טבלה, באפשרותך להציג ולהגדיר את שם קובץ התוצאה ושפת התצוגה הנוכחית וכו '; לחץ באופן דומה לבחירת סגנון, סצנה, שליטה,
אזור מידע התכונות עובר לרשימת התכונות המתאימה.

עמוד 271
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 271
3. לחץ באמצעות לחצן העכבר הימני על התפריט:
תפריט לחיצה ימנית
תיאור
טור פרויקט AP
פרויקטים בטבלה
פתח את הפרויקט הזה
פתח אותו לחיצה כפולה על הפרויקט
צפה בקובץ ממשק המשתמש
צפה בסקריפט ממשק המשתמש בפורמט xml
לִמְחוֹק
מחיקת פרויקט תמחק את כל תיקיות הפרוייקט
תבנית תת-סצינה
ילד ברשימה
תבנית סצינה
לַעֲרוֹך
פתח אותו לחיצה כפולה על תבנית תת-הסצנה
xxxxxxxxxxxxxxxxxxxxx
גלשן
שמור ישירות כתבנית תת סצנה ברשימת התבניות של תת סצינות
מחק את סצנת המשנה
מחק תבנית תת-סצנה
אזור עריכת הממשק
בקרת תחום
לִמְחוֹק
מחק את השליטה
סדר הערמה
אתה יכול לבחור למקם בשכבה העליונה, למקם בשכבה התחתונה, לזוז למעלה שכבה אחת, לעבור למטה בשכבה אחת
קוֹמָה
יירט את השליטה הזו
תמונת רקע
ללכוד ולעדכן אוטומטית כמה תמונות רקע של הפקד
עץ מבנה הנדסי
סִגְנוֹן
סצינה חדשה
סצינה ריקה חדשה
עץ מבנה הנדסי
סְצֵינָה
מחק סצנה
מחק סצנה
עץ מבנה הנדסי
בקרות
שכבה חדשה
תקף רק ל- PicBox, הוסף שכבה
מחק את השליטה
מחק את השליטה
סדר הערמה
אתה יכול לבחור למקם בשכבה העליונה, למקם בשכבה התחתונה, לזוז למעלה שכבה אחת, לעבור למטה בשכבה אחת
קוֹמָה
פעולות אחרות: לחץ על לחצן המחיקה כדי למחוק ישירות סצינות, פקדים, שכבות Pixbox וכו '.
7.2.1.6 הנדסה וסגנון
הפרויקט בעורך UI מחולק לפרויקט Common ולפרויקט AP, ביניהם משמש פרויקט Common לעיצוב תת-שדה
תבנית הסצנה היא הבסיס לכל ממשק המשתמש של התוכנית.
כל הפרויקטים של עורך ממשק המשתמש ממוקמים בספריית המשאבים, וכל פרויקט ממוקם בתיקיית משנה. שמור תחת תיקיית משנה
שים את תמונת המשאב ואת מחרוזת המשאבים * .xls המשמשים בפרויקט שלך, הפרויקט ייצור * .ui (*. Com_ui), * .sty, * _sty.h,
* _res.h, lang_id.h וקבצים אחרים.
תמיכה בסגנון רב דורשת מספר קבוצות של תמונות משאב עם שם זהה וסגנונות שונים, וכל קבוצה של תמונות משאב ממוקמת במרכז
תיקיית משנה אחת: כשאתה מייצר קובצי .sty * רב-סגנון, אתה רק צריך להחליף את תיקיית המשנה.

עמוד 272
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 272
שמות מוסכמות
לצורך שמות של קבצי משאב תמונה ומזהה משאב מחרוזות, מומלץ להקדים את קובץ משאב התמונה עם p_, מזהה משאב מחרוזת.
הוסף את הקידומת s_, כך שמאקרו של מזהה המשאב קל יותר להימנע משמות כפולים וקל יותר לזיהוי.
כל פרויקט AP יפיק קובצי כותרת * _res.h ו- * _sty.h המאוחסנים בספריית קוד המקור שלו, וכל אחד מהם
פרויקט ה- AP צריך לכלול גם את קבצי הכותרת common_res.h ו- common_sty.h של הפרויקט Common, כך שפרויקט ה- AP
שמות הסצינות ושליטה של ​​התוכנית, כמו גם קובץ משאב התמונה ותעודת מזהה של משאב המחרוזת לא צריכים להיות זהים לפרויקט Common.
לכן מומלץ כי אמנת שמות הסמל לפרויקטים של AP היא כדלקמן:
קובץ משאב תמונה: הוסף קידומת p_apname_.
מזהה משאב מחרוזת: בתוספת קידומת s_apname_.
תרחיש: הוסף קידומת apname_.
שליטה: הוסף קידומת apname_scenename_.
7.2.1.7 תבנית תת-סצנה
על מנת לפתח את ממשק המשתמש בצורה יעילה יותר, אנו נתכנן את הסצינות הציבוריות של כל אפליקציה כתבנית תת סצינה, וכל יישום יכול להשתמש ישירות
להשתמש. חלק מתבניות תת-סצינות מותאמות אישית על ידי בקרה בהתאם למצב השימוש, ולכן אנו הופכים את השליטה ללידה
לִשְׁלוֹט.
סיווג בקרת הילידים:
Controls בקרות אטומיות בסיסיות: בקרות בלתי ניתנות לחלוקה, כולל PicBox, TextBox, NumberBox, TmeBox,
ProgressBar, בקרה מסוג זה אינה צריכה לשלוט בזרימה, ניתן להציג אותה ישירות, היא יחידת השרטוט הבסיסית של גוי.
Controls בקרות מקיפות: בקרות הניתנות לחלוקה לחלקים משנה, כולל ListBox, ParamBox, DialogBox וכדומה.
פקדים צריכים לשלוט בזרימה וצריכים ליצור אינטראקציה עם המשתמש; חלקי המשנה שלו הם בקרות אטום בסיסיות והווריאציות שלהם; סוג זה של מציג מציג
התצוגה תופסת את כל המסך.
❖ אחר: AttributeBox, לא ניתן להשתמש בפקד זה להצגה, אלא משמש רק להעברת ערכי תכונה מסוימים למשתמש (שרירותי,
יתכן שזה לא שייך לתכונות של שאר הפקדים לעיל).
7.2.2 שלבי עבודה של עורך ממשק משתמש
השלבים של תכנון ופיתוח של עורך ממשק UI מוצגים באיור שלהלן:

עמוד 273
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 273
File קובץ הסקריפט * .ui תואם את מפרט הקבצים הרגיל של xml ומשמש לחיסכון יבוא המשתמש בכלי עורך ממשק המשתמש.
רשימת תמונות משאבים, רשימת מחרוזת משאבים והגדרת פרמטרים של ממשק המשתמש, כאשר פרמטרי ממשק המשתמש מבוססים על בקרת סצינה
לְאַרגֵן. כל פרויקט מתאים לקובץ * .ui.
File * .sty קובץ הוא קובץ בפורמט בינארי מותאם אישית, שהוא קובץ סיומת של קובץ * .res הקודם, למעט
בנוסף לתמונות המשאבים ומחרוזות המשאבים בפרויקט, הוא מכיל גם את ממשק המשתמש שנקבע בכלי עורך ממשק המשתמש
פָּרָמֶטֶר. כל פרויקט מתאים לקובץ * .sty.
השלבים הספציפיים מתוארים בפירוט באופן הבא:
7.2.2.1 שלב 1: צור פרויקט AP חדש
צור תיקיה עם אותו שם פרויקט ישירות בספריית המקרים / המשאבים, או פתח את הכלי של עורך ממשק המשתמש,
בחר File-> Project AP חדש כדי ליצור פרויקט AP ריק.

עמוד 274
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 274
7.2.2.2 שלב 2: הגדר משאבים
לאחר אישור פרויקט ה- AP החדש, חלון "הגדר משאבי פרויקט" יופיע אוטומטית, או לחץ לחיצה כפולה על הפרויקט, אם מדובר בפרויקט חדש
עבד, החלון שלמעלה יופיע אוטומטית, או שאתה יכול לבחור "ערוך -> הגדר משאבים ..." כדי להיכנס לחלון למעלה.
לאחר מכן בחר בתיקיית משאב התמונה וקובץ xls של משאב המחרוזת כדי להשלים את הגדרת המשאב.

עמוד 275
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 275

עמוד 276
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 276
7.2.2.3 שלב 3: ערוך את ממשק המשתמש של הסצנה
הוסף פקדים בזה אחר זה בהתאם לעיצוב ממשק המשתמש וקבע את התצורה של מאפייני הבקרה להשלמת פיתוח ממשק המשתמש של הסצנה.
שימו לב לפרטים הבאים בממשק המשתמש של זירת העריכה:
1. לכל בקרה שנוספה לזירה, ראשית עליך להגדיר את המלבן החיצוני x / y של הפקד למיקום מדויק.
2. שמות של סצינות ובקרות צריך להיות סטנדרטי וקל לזיהוי.

עמוד 277
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 277
7.2.2.4 שלב 4: צור תוצאות
לאחר העריכה בחר "File-> Generate File Resource ..." כדי ליצור את התוצאה.
לאחר הפקת התוצאה, בצע את תהליך האצווה copyfile.bat, או העתק ידנית והעתק את הקובץ .sty אל
במקרה של ספריות מקרה / fwpkg / sty ו- case / fwpkg / ap, העתק * _res.h ו- * _sty.h למקור המקביל בתיק / ap /
תיקיית קוד.
7.2.2.5 שלב 5: ממשק ניפוי באגים
ניתן ליישם בקלות את תצוגת ממשק המשתמש ותגובת ממשק המשתמש להודעות מקלט ולהודעות בין יישומים
ניפוי שורות.
כיצד אתה משתמש בכלי סימולטור ממשק משתמש, עיין בסימולטור ממשק המשתמש  .
7.2.3 תצורת בקרת עורך ממשק משתמש
השימוש בממשק הבקרה אינו מוצג כאן. לחלק זה, עיין ב"תיאור הממשק us212a_ui_driver ".
תיאור הממשק המתאים בספר "Book.chm".
הערה: הממשק ב- "us212a_ui_driver interface specification.chm" הוא הממשק הפנימי של מנהל התקן ה- UI. הממשק נקרא ו-
שמות המקרו המשמשים ביישום שונים. אבל שם המאקרו הכללי הוא להוסיף ui_ לפני שם הממשק הפנימי
אם לא, אנא מצא את מזהה הפקודה המתאים בטבלת הממשק ui_driver_op ב- rcode_ui_op_entry.c
מספר הממשק.
7.2.3.1 בקרת PicBox
הגדרת בקרה
בקרה המשמשת להצגת תמונות משאב באזור תצוגה ייעודי.

עמוד 278
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 278
מאפייני שליטה
● באזור התצוגה, עליך רק לציין את ערכי x, y. הרוחב והגובה נקבעים על ידי הרוחב והגובה של תמונת המשאב.
● זיהוי תמונת משאבים, תומך במסגרות תמונות מרובות.
● הנתיב של כל מסגרת תמונה.
● הסוג של כל תמונת מסגרת: אייקון רגיל, תמונת רקע לא משובצת, תמונת רקע משובצת.
Icon סמל נפוץ: הסמל שצוין על ידי המשתמש באמצעות תכונת הנתיב.
Image תמונת רקע לא משובצת: לאחר קביעת אזור PicBox דרך הסמל המשותף, תוכלו להוסיף או לשנות את הסוג
שינוי לתמונת רקע לא משובצת; תמונת רקע לא מוטמעת מתייחסת ליירוט האוטומטי ישירות מהרקע הגדול בהתאם לאזור
לאחר שינוי הקואורדינטות של ה- PicBox כך, בחר מחדש "יירט את תמונת הרקע של פקד זה"
ואז ניתן לעדכן את הסמל.
Image תמונת רקע משובצת: הצב את סמל הצבע השקוף הפסאודו שצוין על ידי ForegrPic על תמונת הרקע הלא מוטמעת,
כדי ליצור אייקון שקוף, באופן דומה, לאחר שינוי הקואורדינטות של ה- PicBox, בחר "Intercept
ניתן להשתמש בתמונת הרקע של פקד זה כדי לעדכן את הסמל.
Icon סמל צבע שקוף פסאודו: הסמל שחלק הרקע שלו הוא הצבע שצוין על ידי ForegrbkColor, מונח על הסמל
בעת חילוץ פיקסלים שאינם שווים ל- ForegrbkColor, יש להניח עליהם כיסוי על תמונת הרקע שצולמה אוטומטית.
שלוט על השימוש
שלב 1: הוסף את פקד ה- PicBox, שנה את שם הבקרה, קבע את קואורדינטות הבקרה, אם הפקד מוצג בגב מסוים "
"סצינה", ואז בחר screenshotBgPic כתמונת הרקע הגדולה של תמונת הרקע הלא מוטמעת ותמונת הרקע המוטמעת.
שלב 2: בעץ מבנה הפרוייקט, הרחב את הבקרה ובחר שכבה לעריכת השכבה; אם ברצונך להוסיף שכבה, לחץ באמצעות לחצן העכבר הימני.
לבקרה זו, בחר להוסיף שכבה; אם ברצונך למחוק שכבה, בחר בשכבה ולחץ על כפתור המחיקה כדי למחוק אותה.

עמוד 279
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 279
שלב 3: ערוך את השכבה, המוצגת בשלושה סוגים:
סמל רגיל: בחר את סוג הסמל כסמל רגיל, ואז בחר את נתיב התמונה
תמונת רקע לא משובצת: בחר את סוג הסמל כתמונת רקע לא מוטמעת ולחץ באמצעות לחצן העכבר הימני על הפקד באזור העריכה של הממשק,
בחר "יירט את תמונת הרקע של פקד זה" כדי ליירט אוטומטית סמל רקע מתמונת הרקע הגדולה ולהניח אותה תחת BgPicDoc
תחת תיקיית המשנה עם שם הבקרה כשם הספריה, שם התמונה הוא "שם הבקרה_bg0.bmp" וכן הלאה.
תמונת רקע משובצת: בחרו בסוג הסמל כתמונת רקע משובצת, בחרו בסמל החזית, כלומר הנתיב של סמל הצבע השקוף השקוף,
לאחר מכן ציין את הצבע השקוף הפסאודו ולחץ באמצעות לחצן העכבר הימני על הפקד באזור העריכה של הממשק, ובחר "יירט את תמונת הרקע של פקד זה", כלומר באופן אוטומטי
גזרו סמל רקע מתמונת הרקע הגדולה והכניסו אותו מחדש לסמל הצבע הפסאודו שקוף שנבחר, והניחו תחת BgPicDoc
מתחת לתיקיית המשנה שבה שם הבקרה הוא שם הספרייה, שם התמונה הוא "שם הבקרה_bg0.bmp" וכן הלאה.

עמוד 280
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 280
שלב 4: שנה את הרוחב והגובה של PicBox. לעת עתה אתה יכול לשנות רק ידנית * .ui (פרויקט נפוץ הוא
common.com_ui) רוחב וגובה הקובץ משתנים. כלומר, פתח את סקריפט * .ui, חפש את שם הבקרה ומצא את העתיד
שנה את הערכים של חברי הרוחב והגובה באופן אוטומטי.
7.2.3.2 בקרת TextBox
הגדרת בקרה
בקרה המשמשת להצגת מחרוזות תווים באזור תצוגה ייעודי.
מאפייני שליטה
● עבור אזור תצוגה, עליך לציין ערכי x, y, רוחב, גובה.
● מזהה מחרוזת המשאב שיכול להיות null.
● צבע תצוגת המחרוזת.
● מחרוזת רקע, תמונת רקע אופציונלית או צבע רקע. אם מדובר בתמונת רקע, ציין גם את מזהה תמונת הרקע
ואזור תצוגה.
● מצב תצוגה של מחרוזת, כולל יישור, מצב תצוגה של מחרוזת ארוכה, גופן, תכונה עם כוונון ימני לערבית וכו '.
שלוט על השימוש
שלב 1: הוסף שליטת TextBox, שנה את שם הבקרה, קבע את אזור הבקרה והגדר את קואורדינטות תמונת הרקע (בדרך כלל עם
קואורדינטות הבקרות זהות).

עמוד 281
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 281
שלב 2: בחר את מחרוזת המשאב, כלומר לחץ על כפתור הבחירה בצד ימין של תיבת מאפייני הטקסט, ומחרוזת המשאב תופיע.
בחר מהרשימה.
שלב 3: הגדר את מצב TextBox, יש 2 תכונות שמשפיעות על מצב TextBox, כלומר מצב מצב הרקע ו-
האם להשתמש בתמונת הרקע UseBgPic, 2 תכונות אלה משולבות ל -4 מצבים, המוצגים כדלקמן:
מצב מצב הרקע שקוף, כלומר מצב שקוף, והבחירה UseBgPic היא: מצב הבחירה שקוף + עשה
השתמשו בתמונת הרקע, בחרו את תמונת הרקע, קבעו את צבע החזית וקבעו מאפיינים אחרים.

עמוד 282
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 282
מצב רקע רקע בחר שקוף, כלומר מצב שקוף, UseBgPic בחר לא: בחר מצב כשקוף + לא
השתמשו בתמונת הרקע, קבעו את צבע החזית וקבעו מאפיינים אחרים.
מצב רקע רקע בחר רגיל, כלומר מצב רקע בצבע אחיד, UseBgPic לא ניתן לבחירה: בחר מצב כרקע בצבע אחיד

עמוד 283
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 283
מצב, קבע את צבע החזית ותכונות אחרות.
תיאור:
● למצב תמונת רקע + שקוף, תוכלו ללחוץ באמצעות לחצן העכבר הימני על הפקד באזור העריכה של הממשק ולבחור "יירט פקד זה
תמונת רקע ", כלומר גזור אוטומטית סמל רקע מתמונת הרקע הגדולה, והניח אותה תחת BgPicDoc כדי להשתמש בפקד
מתחת לתיקיית המשנה ששמה הוא שם הספריה, שם התמונה הוא "שם הבקרה_bg.bmp".
● תצוגה מקדימה של תוכן המחרוזת, סוג השפה המשמש לתצוגה מוגדר במאפייני הפרויקט.
7.2.3.3 בקרת NumBox
הגדרת בקרה

עמוד 284
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 284
פקד המשמש להצגת מספרים בפורמט שצוין באזור התצוגה שצוין.
מאפייני שליטה
● עבור אזור תצוגה, עליך לציין ערכי x, y, רוחב, גובה.
● מצב תצוגה דיגיטלית, בחר מחרוזת תווים או תמונה דיגיטלית.
● במצב תמונה דיגיטלית, ניתן לממש תצוגה שקופה, כלומר הרקע יכול להיות כל תמונה, כמובן שתכונה זו דורשת
לתמוך בתנאים מיוחדים.
● למצב תמונה דיגיטלית, עליכם לבחור תמונה דיגיטלית ותמונת המפרידה שלה, תמונת סמל; תמונה דיגיטלית,
יש לסדר את אייקון הרקע הקטן, את התמונה המדויקת ואת שם התמונה השלילית בסדר מילון עולה כדי להבטיח שהזיהוי שלהם יגדל.
ורוחב התמונה עקבי.
● הצגת מאפייני יישור.
● ראה אחרים: תכונות תצוגה דיגיטליות.
שלוט על השימוש
שלב 1: הוסף בקרת NumberBox, שנה את שם הבקרה, קבע אזור בקרה, קואורדינטות תמונת רקע (בדרך כלל ו-
קואורדינטות הבקרות זהות). באופן כללי, מספר רוחב הוא האורך המרבי של המספר, כך שהגדרת נכס היישור עובדת הכי טוב.
שלב 2: הגדר מצב NumberBox, יש 3 תכונות המשפיעות על מצב NumberBox, כלומר מצב תצוגה
DisplayMode, הרכב והאם להשתמש בתמונת הרקע UseBgPic, להלן כמה קבוצות
הסבר על המצב המשולב:
מצב התצוגה הוא תמונה דיגיטלית

עמוד 285
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 285
מצב תצוגה זה צריך להגדיר את התכונות של התמונה הדיגיטלית ואת תמונת המפריד שלה ואת תמונת הסמל. להלן תרחישים שונים
הסבירו בנפרד:
● הרקע הגדול של התצוגה הדיגיטלית הוא בצבע אחיד
✧ אם האורך הכולל של המספר תמיד זהה, אתה יכול לעצב את תמונת המספר ואת תמונת המפריד שלה ואת תמונת הסמל כ
צבע הרקע זהה לרקע הגדול, אל תשתמש בתמונת הרקע UseBgPic, אל תשתמש "ליירט את הפקד
לחץ על לחצן העכבר הימני על "תמונת רקע".
✧ אם האורך הכולל של המספר ישתנה, בנוסף לתיאור שלעיל, עליך לספק גיליון 1 כדי לצמצם את האורך הכולל
בעת הסרת עקבות, לתמונת צבע הרקע הטהורה יש רוחב וגובה זהים לתמונה הדיגיטלית.
● הרקע הגדול של התצוגה הדיגיטלית שקוף
✧ דרוש שתמונות דיגיטליות ותמונות המפריד שלהן ותמונות סמל יעוצבו כסמלים שקופים כפסאודו והשתמשו בתמונות רקע
השתמש ב- BGPic והשתמש ב"יירט את תמונת הרקע של פקד זה "כדי ליירט אוטומטית, כלומר ליירט אוטומטית מתמונת הרקע הגדולה.
הוציא סמל רקע והניח אותו בתיקיית משנה תחת BgPicDoc עם שם הבקרה כשם הספריה
שם התמונה הוא "שם הבקרה_bg.bmp".
● שיטת הקומפוזיציה מורכבת משני מספרים, עליכם לבחור בתמונת המפרידה, אם היא אמורה להציג מספר 1 בלבד
עשרונים בלבד צריכים לבחור בתמונת המפרידה.
● אם תכונת סמל התצוגה ShowSign היא כן, עליך לבחור תמונה חיובית ותמונה שלילית, אם היא לא, ו
המספר עשוי להיות שלילי, עליך לבחור תמונה שלילית.

עמוד 286
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 286
מצב תצוגה כמחרוזת
מצב זה הוא פשוט יחסית, אין צורך לקבוע תכונות כמו תמונות דיגיטליות, פשוט הגדר את הגובה, חזית המחרוזת והרקע
צבע, בחירת גופן וכו '.
● אם אתה משתמש בתמונת רקע, אתה יכול להשתמש ב"יירט את תמונת הרקע של פקד זה "כדי לצלם באופן אוטומטי
הדמות גוזרת סמל רקע ומכניסה לתיקיית משנה תחת BgPicDoc עם שם הבקרה כשם הספריה
שם התמונה הוא "control name_bg.bmp"; אתה יכול גם להתאים אישית את תמונת הרקע.

עמוד 287
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 287
7.2.3.4 בקרת TimeBox
הגדרת בקרה
פקד המשמש להצגת התאריך או השעה בתבנית שצוינה באזור התצוגה שצוין.
מאפייני שליטה
● עבור אזור תצוגה, עליך לציין ערכי x, y, רוחב, גובה.
● מצב תצוגה דיגיטלית, בחר מחרוזת תווים או תמונה דיגיטלית.
● במצב תמונה דיגיטלית, ניתן לממש תצוגה שקופה, כלומר הרקע יכול להיות כל תמונה, כמובן שתכונה זו דורשת
לתמוך בתנאים מיוחדים.
● למצב תמונה דיגיטלית, עליכם לבחור תמונה דיגיטלית ותמונת המפרידה שלה; דרוש תמונה דיגיטלית, תמונת רקע קטנה
יש למיין את שמות התוויות בסדר מילון עולה כדי להבטיח כי תעודת הזהות שלהם תגדל ורוחב התמונה יהיה עקבי.
● בחר להציג פעם אחת או פעמיים, כאשר השעה מתייחסת לתאריך או לשעה, הנקראים על ידי המשתמש
ציין את התאריך והשעה שבהם ui_show_timebox.
● בין אם המיקום הגבוה של שעה או דקה מסתיר אוטומטית את המיקום הגבוה 0.
● הצגת מאפייני יישור.

עמוד 288
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 288
● ראה אחרים: תכונות תצוגה דיגיטליות.
שלוט על השימוש
שלב 1: הוסף שליטת TimeBox, שנה את שם הבקרה והגדר אזור בקרה. באופן כללי, רוחב זמן
זהו האורך המרבי של המספר, כך שהגדרת נכס היישור היא הטובה ביותר.
שלב 2: הגדר מצב TimeBox, יש 3 תכונות המשפיעות על מצב TimeBox, כלומר מצב תצוגה
DisplayMode, הרכב והאם להשתמש בתמונת הרקע UseBgPic, להלן כמה קבוצות
הסבר על המצב המשולב:
מצב התצוגה הוא תמונה דיגיטלית
מצב תצוגה זה צריך להגדיר את התכונות של התמונה הדיגיטלית ואת תמונת התוחמת שלה. להלן תיאור של כל מצב בנפרד:
● הרקע הגדול של התצוגה הדיגיטלית הוא בצבע אחיד
✧ אם האורך הכולל של המספרים תמיד זהה, אתה יכול לעצב את התמונה הדיגיטלית ואת תמונת המפריד שלה כך שיהיה צבע רקע זהה
הרקע זהה, אל תשתמש בתמונת הרקע UseBgPic, אל תשתמש בצד ימין "יירט את תמונת הרקע של פקד זה"
תפריט מפתח.
✧ אם האורך הכולל של המספר ישתנה, בנוסף לתיאור שלעיל, עליך לספק גיליון 1 כדי לצמצם את האורך הכולל
בעת הסרת עקבות, לתמונת צבע הרקע הטהורה יש רוחב וגובה זהים לתמונה הדיגיטלית.
● הרקע הגדול של התצוגה הדיגיטלית שקוף

עמוד 289
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 289
✧ דרוש שתמונות דיגיטליות ותמונות המפריד שלהן ותמונות סמל יעוצבו כסמלים שקופים כפסאודו והשתמשו בתמונות רקע
השתמש ב- BGPic והשתמש ב"יירט את תמונת הרקע של פקד זה "כדי ליירט אוטומטית, כלומר ליירט אוטומטית מתמונת הרקע הגדולה.
הוציא סמל רקע והניח אותו בתיקיית משנה תחת BgPicDoc עם שם הבקרה כשם הספריה
שם התמונה הוא "שם הבקרה_bg.bmp".
● שיטת ההרכב היא להציג 2 קבוצות זמן, ויש להגדיר 3 מפרידים; אם זה כדי להציג קבוצת זמן אחת, רק
כדי להגדיר מפריד; הגדרת המפריד מחולקת לשני שלבים, בחר תחילה את תמונת המפריד באזור תמונת המפריד, ואז
בחר בסוג המפריד.

עמוד 290
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 290
תכונות אחרות זהות בעצם ל- NumberBox, כך שלא אחזור עליהן כאן.
מצב תצוגה כמחרוזת
המצב הזה הוא בעצם זהה ל- NumberBox, כך שלא אחזור עליו כאן.
7.2.3.5 בקרת סרגל התקדמות
הגדרת בקרה
משמש להצגת התקדמות ההפעלה הנוכחית של הפעלת הקובץ (או יחס הדמיה, כגון היחס בין שטח הדיסק המשמש לשטח הכולל)
בקרות.
מאפייני שליטה
● סגנון התצוגה של סרגל ההתקדמות, באפשרותך לבחור סוג מילוי, סוג סרגל השקופיות או שניהם.
● המזהה והקואורדינטות של תמונת הרקע של סרגל ההתקדמות.
● סרגל ההתקדמות מלא בתעודת הזהות ובקואורדינטות של התמונה המודגשת.
● סרגל ההתקדמות ממלא ומנקה את מזהה התמונה.

עמוד 291
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 291
● הסמן מדגיש את מזהה התמונה וקואורדינטות. (תמונה ברורה של הסמן מסופקת על ידי תמונת רקע המיירטת אוטומטית)
שלוט על השימוש
שלב 1: הוסף שליטת ProgressBar, שנה את שם הבקרה, קבע את אזור הבקרה, בחר את הכיוון של סרגל ההתקדמות,
ובחרו את תמונת הרקע של סרגל ההתקדמות (בחרו את תמונת הרקע האופקית או את תמונת הרקע האנכית בהתאם לכיוון סרגל ההתקדמות). ProgressBar
רוחב ובקרת השליטה נקבעים על ידי תמונת הרקע של סרגל ההתקדמות והמעטפה המלבנית הקטנה ביותר של הסמן. הפרטים מופיעים בשלב 2
הסבירו בפירוט.
שלב 2: הגדר את מצב ProgressBar, ישנם 2 מאפיינים המשפיעים על מצב ProgressBar, כלומר הכיוון של סרגל ההתקדמות
להלן תיאור של מספר מצבי שילוב: אופקי וסרגל התקדמות מסוג ProgressBarStyle.
הכיוון של סרגל ההתקדמות הוא אופקי, כלומר משמאל לימין
● מילוי: במצב זה, עליכם לבחור תמונות הדגשת מילוי ולמלא תמונות ברורות, ולהגדיר את קואורדינטת המילוי המתחילה של המילוי.
ומלאו את קואורדינטת Y ההתחלה, ואז השתמשו ב"יירט את תמונת הרקע של פקד זה "כדי ליירט אוטומטית, כלומר אוטומטית מהרקע הגדול
התמונה גוזרת תמונת רקע ומכניסה אותה לתיקיית משנה תחת BgPicDoc עם שם הבקרה כשם הספריה
שם התמונה הוא "שם הבקרה_bg.bmp".
נוסחת החישוב של אורך סרגל ההתקדמות היא:
אורך = תמונת רקע אורך- (מילוי התחלה X קואורדינטות תמונה רקע רקע קואורדינטת X) * 2

עמוד 292
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 292
● סוג המחוון: במצב זה, עליכם לבחור את הסמן כדי להדגיש את התמונה, להגדיר את קואורדינטת ההתחלה X של סרגל השקופיות ואת ההתחלה Y של סרגל השקופיות.
קואורדינטות ואז השתמש ב"יירט את תמונת הרקע של פקד זה "כדי ליירט אוטומטית, כלומר ליירט אוטומטית חבילה מתמונת הרקע הגדולה.
תמונת הרקע המכילה את תמונת הרקע והסמן ממוקמת בתת-קובץ תחת BgPicDoc עם שם הפקד כשם הספריה.
מתחת לתיקיה שם התמונה הוא "control name_bg.bmp".
נוסחת החישוב של אורך סרגל ההתקדמות היא:
אורך = תמונת רקע אורך סמן רוחב- (מילוי התחלת X קואורדינטת תמונה רקע רקע קואורדינטת X) * 2

עמוד 293
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 293
● שניהם: במצב זה, עליכם לבחור מילוי תמונות הדגשה, מילוי תמונות ברורות וסמן הדגשת תמונות בו זמנית.
קבעו את קואורדינטת ה- X המתחילה של סרגל המילוי והחלקה, את קואורדינטת Y ההתחלה של המילוי, ואת קואורדינטת Y ההתחלה של סרגל ההזזה, ואז השתמשו באפשרות "Cut
קח את תמונת הרקע של פקד זה "ליירט אוטומטית, כלומר ליירט אוטומטית תמונת רקע וסמן מתמונת הרקע הגדולה
תמונת הרקע, ממוקמת בתיקיית המשנה תחת BgPicDoc עם שם הבקרה כשם הספריה, שם התמונה
זהו "שליטת שם_בג.במפ".
נוסחת החישוב של אורך סרגל ההתקדמות היא:
אורך = תמונת רקע אורך סמן רוחב- (מילוי התחלת X קואורדינטת תמונה רקע רקע קואורדינטת X) * 2

עמוד 294
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 294
הכיוון של סרגל ההתקדמות הוא אנכי, כלומר מלמטה למעלה, וההבדל בין הכיוון של סרגל ההתקדמות הוא:
● לתמונת הרקע, בחרו את תמונת הרקע האנכית, מלאו את תמונת הדגש ומלאו את התמונה הברורה, ואת הסמן גם הדגישו את הסמן.
שנה כיוון
● קואורדינטות ההתחלה של סרגל המילוי והשקף
נוסחת חישוב אורך
7.2.3.6 בקרת ListBox
הגדרת בקרה
פקדים המציגים אפשרויות (פריטי ספריות קבצים או פריטי תפריט) בטופס רשימה, המשמש בדפדפני קבצים ורשימות תפריט וכו '.
מאפייני שליטה
● ListBox כולל גוף ראשי, סעיף משנה כותרת, קטע משנה ברשימה, קטע סרגל הזזה וחלק משנה של יחס.
● הגוף הראשי כולל את המזהה ואת הקואורדינטות של תמונת הרקע (בדרך כלל (0, 0)), מספר שורות הרשימה והמרחק בין פריטי רשימה.
● הכותרת כוללת את מזהה מחרוזת הכותרת ואזור התצוגה.
● הרשימה כוללת רקע פריט, סמל קדמי של הפריט, סמל אחורי של הפריט, מחרוזת פריט, כל פריט ממשיך להיות מחולק להפעלה ו-
לא פעיל, על כל פריט לציין את הקואורדינטה או האזור הראשון.
● המחוון כולל את המזהה ואת הקואורדינטות של תמונת הרקע של המחוון, ואת המזהה ואת הקואורדינטות של תמונה של סמן המחוון.
● יחס דומה ל- NumberBox.

עמוד 295
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 295
7.2.3.7 בקרת ParamBox
הגדרת בקרה
בקרה להגדרת פרמטרים עם תיבת כוונון דיגיטלית או סרגל הזזה.
מאפייני שליטה
● ParamBox כולל גוף ראשי, קטע משנה כותרת, קטע משנה פרמטר, קטע משנה יחידה וקטע בר הזזה.
● הגוף העיקרי כולל את מזהה תמונת הרקע וקואורדינטות (בדרך כלל (0, 0)), מזהה תמונת הפרמטר וסמל הקואורדינטות ומסמן את הפרמטרים.
● הכותרת כוללת את מזהה מחרוזת הכותרת ואזור התצוגה.
● הפרמטרים דומים ל- NumberBox.
● היחידה כוללת את מחרוזת היחידה ואת אזור התצוגה.
● סרגל ההזזה דומה לסרגל ההתקדמות.
7.2.3.8 בקרת סליידר
7.2.3.9 בקרת DialogBox
הגדרת בקרה
בקרה המשמשת להפניית הודעה או לשאול את המשתמש.
מאפייני שליטה
● ParamBox כולל את הגוף הראשי ואת החלק התחתון של רשימת האפשרויות.
● הגוף הראשי כולל את המזהה ואת הקואורדינטות של תמונת הרקע (בדרך כלל (0, 0)), המזהה והקואורדינטות של תמונת הלוגו של תיבת הדו-שיח, כך תיאור תיבת הדיאלוג אומר
מציין את המחרוזת, את מספר אפשרויות תיבת הדו-שיח.
● רשימת האפשרויות כוללת את מזהה התמונה הלא פעיל ברקע של הפריט וקואורדינטות, מזהה התמונה הפעיל, אזור התצוגה של מחרוזת הפריט (מילה
תוכן המחרוזת מועבר מבחוץ).
7.2.3.10 בקרת AttributeBox

עמוד 296
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 296
7.2.4 תיאור פרויקט נפוץ
הפרויקט המשותף הוא הבסיס לכל ממשק המשתמש המקרה, כמעט בכל יישום חזית ישתמש בשליטה בפרויקט Common.
תבניות תוכנה, ואפילו יישומים מסוימים פשוט משתמשים בתבניות הבקרה של הפרויקט Common ללא צורך בממשק המשתמש של הסצנה שלהם.
כדי להקל על ניהול ממשק המשתמש המקורי, שמנו את כל עיצוב ממשק המשתמש של הפקדים בפרויקט Common, שפירושו
במילים אחרות, כל שינוי בתבנית הבקרה צריך להיעשות בפרויקט Common.
ניתן לחלק את תבניות תת הסצינות בפרויקט Common לשתי קטגוריות:
● סצנת אירוע ציבורית של ממשק המשתמש, סצינה זו מוכנסת בדרך כלל לתצוגה של החזית הנוכחית
כגון התאמת עוצמת קול, סוללה נמוכה / טעינה מלאה, בקרת נעילת מקשים, שומר מסך, שיח חיבור USB, כיבוי
תיבת דיאלוג וכו '.
● ListBox, ParamBox, DialogBox הם התבניות הציבוריות של שלושת הפקדים המקיפים. תבניות בקרה אלה כוללות
מכסה מגוון של הזדמנויות שימוש שונות, כמו DialogBox, חייבות לכסות את המסך האופקי והאנכי, בין אם יש כפתור (שאל
זוהי בקשת הודעה טהורה).
7.3 ניתן להגדיר תפריט
התפריט הניתן להגדרה משתמש בכלי TreeLayer ו- Firmware פיתוח ערכות למימוש שיטות עיצוב חזותיות,
קל לשימוש.
לנוחיות התיאור, רשמו כמה מונחים או מושגים של תפריט הניתן להגדרה:
עץ תפריט: תפריט מבנה עץ.
תפריט עלה: אין פריטי תפריט של תפריטים ברמה נמוכה יותר, כגון אפשרויות EQ שונות של הגדרות EQ של מוסיקה.
תפריט שורש: ישנם פריטי תפריט של תפריטים ברמה נמוכה יותר, כגון הגדרות EQ של מוסיקה.
תפריט כניסה: תפריט שורש ללא תפריט מעולה, כמו תפריט נגן מוסיקה, תפריט כניסה הוא עץ תפריט
או שורש המשנה.
משאבי תפריט: כולל תפריטים של עלים, תפריטי שורש ותפריטי כניסה. עץ התפריט מורכב ממשאבי תפריט באמצעות כלי התצורה של התפריט
מוגדר. כל תפריטי העלים ותפריטי השורש יוצרים רשימת פריטי תפריט, וכל תפריטי הכניסה יוצרים רשימת תפריטי כניסה.
7.3.1 סקירת הדרישות
פירוש תצורת תפריט פירושו שמפתחי יישומים יכולים להשתמש בכלי התצורה של התפריט TreeLayer וקושחה

עמוד 297
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 297
DevelopKits יכולים לקבוע ולשנות את המבנה ההיררכי של עץ תפריט יישומים כרצונם, מבלי לשנות ולהרכיב את היישום.
7.3.2 נקודות תכנון וביצוע
כדי להשיג את הדרישות לעיל, עלינו לעשות דבר אחד: התגובה של תפריט העלים ומיקומו הספציפי בעץ התפריט
לא רלוונטי. אז אנו מכסים את התגובה של תפריט העלים כפונקציית התקשרות, ומשלבים אותה עם התוכן במבנה פריט התפריט של תפריט העלים.
חבר. בנוסף, בכדי שכלי תצורת התפריט יקרא ופרש את משאבי התפריט, עלינו לאפשר לכלי תצורת התפריט לקרוא
הוציא את תוכן קידוד המחרוזת שלו, ואנחנו יכולים להשתמש רק במזהה משאב המיתר ביישום, כך שהמפתח הוא לפתור
הבעיות כוללות:
1. זהה את משאב התפריט: עץ התפריט תלוי ביישום, היישום ייעשה בסופו של דבר כדי ליצור את קובץ ה- exe.
וארוז כקובץ * .ap, אנו יכולים לאחסן את משאב התפריט בקטע .rodata בשני קבצים אלה, ולהשתמש בפרט ספציפי
מחרוזת Const כסימן, כך שכלי תצורת התפריט יוכל למצוא את משאב התפריט דרך סימן זה. ביניהם,
סמל רשימת תפריט הכניסה הוא ENTRY MENU, וסמל רשימת פריטי התפריט הוא MENU ITEM.
2. הייחודיות של פריט משאב התפריט לכלי: לתפריט הכניסה ולפריט התפריט עשויים להיות שם זהה ביישום, כגון
פריט התפריט "פתוח", ברור שישנן שתי אפשרויות מתג ביישום, ובגלל הצגת התפריט הדינמי, עץ התפריט ו-
יתכנו "גרסאות" בתת-המשנה, כך שתפריט הכניסה עשוי להיות בעל אותו שם. כך שמשתמשים בפריט המשאב לתפריט שלנו בנוסף
בנוסף למזהה המחרוזת הראשי שמוצג על ידי מחשב המיקרו, הוא מכיל גם מזהה מחרוזת משני עבור הכלי לזיהוי כאשר מופיע אותו שם.
3. מהנקודה השנייה אנו יודעים שמה שהכלי מקבל מפריט משאב התפריט הוא רק מזהה המחרוזת ולא המילה
קידוד מחרוזת, לכן עלינו לציין את מקור הקידוד המתאים למזהה המחרוזת של הכלי, כלומר, כלי עורך ממשק המשתמש
* קובץ.
7.3.2.1 פריט משאב תפריט
מבנה הנתונים הקשור לפריט משאב התפריט הוא כדלקמן:

עמוד 298
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 298
להלן יישום ap_setting כדוגמה לרשימת ההגדרה של רשימת משאב התפריט:

עמוד 299
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 299
פורמט קובץ 7.3.2.2 מק"ג
מבנה הנתונים של קובץ התצורה הניתן להגדרה * .mcg הוא כדלקמן:

עמוד 300
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
300 עמודים
פורמט הקובץ * .mcg הוא כדלקמן:
שם קובץ תצורת תפריט (12bytes)
למשל "music.mcg"
תחילת כותרת רשימת התפריטים
קיזוז מיקום (2 בתים)
מספר הכותרות
ספירה (2 בתים)
menu_title_data_t MENULIST 0, sizeof (menu_title_data_t): היכן שקיזוז מצביע על
פריט ברשימה menu_item_data_t למטה מייצג את פריט התפריט הראשון בראש רשימת התפריטים.
וספירת פריטים רצופים מהווים את רשימת התפריטים.
menu_title_data_t MENULIST 1, sizeof (menu_title_data_t)
...
menu_title_data_t MENULIST N, sizeof (menu_title_data_t)
...
menu_item_data_t MENUITEM 1, sizeof (menu_item_data_t): אם זה תפריט השורש
פריט, child_index הוא ערך קטן יחסית, שמצביע על אחת מהרשימה menu_title_data_t שלמעלה
פריט, כך שתוכלו לאחזר את רשימת התפריטים ברמה הבאה.
menu_item_data_t MENUITEM 2, sizeof (menu_item_data_t)
...

עמוד 301
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 301
menu_item_data_t MENUITEM N, sizeof (menu_item_data_t)
7.3.3 תהליך פיתוח תפריט הניתן להגדרה
תהליך פיתוח התפריט שניתן להגדרה הוא כדלקמן:
צעדים ספציפיים הם כדלקמן:

עמוד 302
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 302
7.3.3.1 שלב 1: צור * .sty ו- * _res.h
צור את פרויקט עורך ממשק המשתמש של היישום, ייבא את קובץ משאב המחרוזת * .xls ותמונות, ערוך את ממשק המשתמש של הסצינה וייצר
* .sty, * _res.h וקבצי תוצאה אחרים.
ביניהם, קובץ * .sty הוא מקור קידוד המחרוזת של כלי תצורת התפריט, לכן עליכם לוודא ש * _res.h ו- * .sty
הקבצים תואמים.
7.3.3.2 שלב 2: בניית פריטי משאבי תפריט
ראשית תכנן את עץ התפריט של האפליקציה, קבע את תפריט הכניסה ואת התפריט הדינמי, וכל תפריט דינמי משמש כמנה
תת-כותרת יחידה מחייב פריט בתפריט כניסה. עבור כל פריט בתפריט, החשוב והקשה ביותר הוא לתכנן וליישם 3 מהם
פונקציית התקשרות חוזרת, פונקציית התקשרות חוזרת יכולה להיות ריקה.
לאחר השלמת השלבים לעיל, באפשרותך לכתוב רשימה של פריטי משאבי תפריט על פי הדוגמה של יישום ap_setting לעיל.
יש לשים לב לפרטים הבאים בעת כתיבת רשימת פריטי משאב התפריט:
● פתר את הבעיה של שמות משוכפלים של תפריטי כניסה ופריטים בתפריט: יתכן שיהיה צורך במשאבים נוספים להחלפת שפה מקומית.
בדרך זו עליכם לשנות תחילה את קובץ ה- * .xls של היישום, ולחדש את קובצי * .sty ו- * _res.h לפני שתוכלו
כדי להשתמש במזהה המחרוזת.
● על תפריט העלים לשים לב להבחנה בין סוגי פריטי התפריט, כלומר NORMAL_MENU_ITEM ו-
RAIDO_MENU_ITEM, האחרון משמש לרשימת תפריטים עם בחירה יחידה, בקרת רשימת התפריטים המתאימה תהיה בבחירה
סמל הבחירה מוצג במיקום הסמל האחורי של הפריט, כמו סימון, ופשוט כניסה לרשימת תפריט זו תשתנה
הפריט הנבחר הוא הפריט הפעיל.
● לכל פריט בתפריט יש פריט_יד חבר מיוחד מאוד, שמור במיוחד לכלי התצורה של התפריט
הפריט_יד של כל פריט בתפריט הוא ייחודי ברשימת פריטי התפריט.
7.3.3.3 שלב 3: הכנה ואריזה כ- *ap
לאחר בניית פריט משאב התפריט, באפשרותך ליצור את היישום, ליצור * .exe ולפתוח אותו עם הכלי ap_builder.
החבילה היא קובץ * .ap. הכלי לתצורת התפריט מחפש את משאב התפריט מסמן MENU ENTRY ו- MENU ENTRY בקובץ * .ap
פריט תפריט, אתה יכול לקרוא את פרטי כותרת תפריט הכניסה ואת רשימת תפריטי הכניסה, ואת פרטי הכותרת והתפריט של פריט התפריט
רשימת פריטים.
בנוסף, אם תפריט הבאגים מפותח בסימולטור ממשק המשתמש, הצעדים הספציפיים הם כדלקמן: בניית יישום
פרוייקט, צור * .exe, העתק ישירות עותק ושנה את הסיומת שלו ל- ap והשתמש בו כקובץ * .ap לתצורת התפריט.
מַעֲרֶכֶת.
7.3.3.4 שלב 4: קבע את תצורת עץ התפריט וייצר * .mcg

עמוד 303
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 303
פתח את הכלי TreeLayer, הממשק העיקרי של הכלי הוא כדלקמן:
בחר בקובץ * .ap, הכלי דורש שהתיקייה בה * .ap נמצאת חייבת להיות בעלת קובץ * .sty עם אותו שם ואז תוכל
לרשימת רשימת תפריט הכניסה של היישום (בצד ימין, כל תפריט כניסה מוגדר כעץ תפריט) ורשימת פריטי התפריט (משמאל
צַד).

עמוד 304
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 304
קבע את התצורה בהתאם לעיצוב עץ התפריט. פעולת התצורה מתוארת בקצרה כדלקמן:
● הוסף פריט בתפריט לרמה מסוימת של רשימת תפריטים: בחר פריט בעץ התפריט מימין, ואז בחר א
לחץ על הלחצן -> באמצע כדי להוסיף פריט בתפריט.
● מחק צומת בעץ התפריט: בחר פריט בעץ התפריט מימין, לחץ על לחצן מחק בגבול הימני,
ניתן למחוק את פריט התפריט.
● העבר למעלה ולמטה פריטי תפריט באותה רמה: בחר פריט מזן עץ התפריט מימין ולחץ על למעלה או
כפתור למטה, אתה יכול להזיז את פריטי התפריט למעלה ולמטה. לא ניתן להזיז את תפריט הכניסה למעלה ולמטה, פריט התפריט העליון
לא ניתן להזיז אותו למעלה ולא ניתן להזיז את פריט התפריט התחתון.
עץ התפריט המוגדר הוא כדלקמן:

עמוד 305
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 305
לבסוף, לחץ על לחצן Gen mcg בתחתית כדי ליצור את קובץ * .mcg.
הערה: אם קובץ * .ap המיובא על ידי תצורת התפריט מועתק ישירות מה * exe שנוצר על ידי סימולטור UI.
, אז הקובץ הסופי * .mcg יכול לשמש רק כתפריט הפיתוח והבאגים של סימולטור UI, ולא ניתן להשתמש בו לפתיחה
ארוז את הקושחה והשתמש בה במחשב קטן.
7.3.3.5 שלב 5: תפריט ניפוי באגים
הוסף את קובץ ה- .mcg שנוצר לקובץ התצורה של אריזת הקושחה fwimage.cfg, אריזת הקושחה,
עבור אל תפריט הבאגים.
כמובן שהיעילות בפיתוח וניפוי ניפוי של התפריט תהיה נמוכה יחסית. ואם תפריט הבאגים מפותח ב- UI Simulator, כי
על מנת לשמור את השלבים של יצירת * .ap קבצים, קושחת אריזה וכו ', ויכולים להשתמש בפונקציית הבאגים החזקה של VC ++,
זה יהיה הרבה יותר גבוה.
כאשר מתגלה בעיה באגים או משופרת פונקציית התפריט, בנוסף לשינוי פריט משאב התפריט, רשימת תפריט הכניסה ו-
יש לעדכן את רשימת פריטי התפריט בנוסף לקובץ * .mcg, כמו גם שינוי קוד ושינוי סקריפט makefile ו- xn.
* קובץ mcg, מכיוון שכתובת פונקציית ההתקשרות של פריט התפריט עשויה להשתנות. אם הוא לא מעודכן, זו תהיה שגיאה חמורה.
טעויות או אפילו חריגים.
כדי לפתור את הבעיה האחרונה ביצענו שני היבטים של עבודה:
● כלי התצורה של התפריט יכול לעדכן * .mcg, ולספק אצווה build_mcg.bat לכל יישומי החזית.

עמוד 306
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 306
* .Mcg מעודכן, כל עוד האצווה מבוצעת לפני האריזה של הקושחה, ניתן להימנע מבעיה זו.
● בסימולטור ממשק משתמש, התאם פריטי תפריט בזמן אמת וקבל פונקציות התקשרות חוזרות מרשימת פריטי התפריט בזמן אמת
מכיוון שרשימת פריטי התפריט היא חלק בלתי נפרד מהיישום, כתובת פונקציית ההתקשרות היא כמובן בזמן אמת
ההתאמה לפונקציית ההתקשרות האמיתית פותרת בעיה זו באופן בסיסי. אלא מכיוון שצריך לצרוך אותה
משאבי זיכרון מעבד רבים, כך שניתן ליישם פיתרון זה רק בסימולטור UI.
ראשית, בקובץ הגדרת משאב התפריט, הוסף את 3 הפונקציות הבאות התואמות לפריטים בתפריט בזמן אמת:
ואתה צריך להתקשר לממשק load_menulist_sumfunc כדי לרשום את 3 הפונקציות לעיל כאשר האתחול יישום
תן לשליטה בתפריט.

עמוד 307
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 307
7.3.4 מדריך לשינוי בתפריט הניתן להגדרה
7.3.4.1 הוסף / מחק תפריט כניסה
כדי להוסיף תפריט כניסה, הגדר תחילה מספר מזהה של תפריט כניסה, כלומר המשך עם מספר מזהה התפריט הגדול ביותר הנוכחי
פשוט ללכת ואז מלא את רשימת תפריט הכניסה, והוסף 1 למספר הכולל של פריטי תפריט הכניסה. שלב זה חשוב מאוד. אם שכחת
זכור, פריט תפריט הכניסה לא יובא לכלי התצורה של התפריט.
מחיקת תפריט הכניסה היא התהליך ההפוך של התהליך לעיל, כך שלא אחזור עליו כאן.
לאחר הוספה / מחיקה של תפריט הכניסה, הגדר מחדש את התפריט.
7.3.4.2 הוסף / מחק פריטי תפריט
כדי להוסיף פריט בתפריט, עליך לכתוב תחילה את פונקציית ההתקשרות של פריט התפריט ולאחר מכן למלא את רשימת פריטי התפריט. בעת מילוי, שימו לב לשלבים
שלב 2: בנו מספר פרטים המוזכרים בפריט משאב התפריט.
פעולת המחיקה לחלוטין של פריט התפריט היא התהליך ההפוך של התהליך לעיל, ולא יחזור על עצמו כאן. בנוסף, אנו יכולים פשוט
פשוט מחק את פריט התפריט שצוין בעץ התפריטים המתאים בכלי התצורה של התפריט.
לאחר הוספה / מחיקה של פריטי תפריט כניסה, הגדר מחדש את התפריט.
7.3.4.3 השתמש בכלי פיתוח קושחה
בשלב ההתאמה האישית של התוכנית תוכלו להשתמש ישירות בכלי פיתוח קושחה כדי להתאים את התפריט
כדי להמשיך, השלבים הם כדלקמן:
ראשית פתח את הכלי ובחר את הקושחה:

עמוד 308
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 308
לאחר מכן בחר ביישום שיש לשנות ולחץ לחיצה ישירה על פתיחת עץ התפריט המוגדר:

עמוד 309
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 309
לאחר השלמת השינויים, לחץ על לחצן Gen mcg כדי ליצור ולשמור אוטומטית את קובץ * .mcg המעודכן, וסגור
חלון תצורת תפריט, חזור לממשק הראשי.
לאחר מכן תוכלו לבחור לייצא את קובץ ה- * .mcg המעודכן, כך שניתן יהיה לארוז את קובץ ה- .mcg המעודכן בעתיד.
הקבצים ארוזים; אתה יכול גם לבחור לשמור את הקושחה, כך שהקושחה החדשה תעודכן את קובץ * .mcg.
יישום ap_music 8
אחת הדרישות התפקודיות של US212A היא להיות מסוגל לגלוש בתמונות, ספרים אלקטרוניים, או אחר ונטול אודיו
אתה יכול להמשיך להאזין למוזיקה במהלך פעולת הכיבוי, כלומר אתה צריך לממש את הפונקציה של השמעת מוסיקת רקע. על מנת להשיג זאת
פונקציה, מוזיקה מבינה את אפליקציית בקרת ההפעלה ואת אפליקציית התפעול והתצוגה, ביניהם יישום בקרת ההפעלה פועל ברקע,
אנו קוראים לזה מנוע המוזיקה, ואפליקציית התפעול והתצוגה משמשת כאפליקציית ממשק משתמש הפועלת בקדמת הבמה, אנו קוראים לזה ממשק המשתמש
יישום. בעת הפעלת יישום ה- UI למוזיקה בקדמת הבמה, המשתמש יכול לשלוט באופן פעיל בהפעלה ובמעבר של מוזיקה;
בעת הפעלת יישומי חזית אחרים, מנוע המוזיקה יעבור אוטומטית את השמעת המוסיקה בהתאם לרשימת ההשמעה הנוכחית ומצב החזרה.

עמוד 310
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
310 עמודים
שים מדינה.
לפיכך, מימוש אפליקציית המוסיקה כולל שני יישומי משנה: יישום מנוע המוזיקה ואפליקציית UI Music.
8.1 סקירת הדרישות
ui מוסיקה משמש למימוש הפונקציות של תצוגת מצב השמעת מוסיקה והגדרת פרמטר, השלמת הרשימה ואוסף קבצי המוסיקה,
והתצוגה של מילים, תמונות אלבום ותכנים אחרים, מממשת את פונקציית ה- ui של המוסיקה.
הדרישות התפקודיות הן כדלקמן:
פונקציית עיון: דפדף ברשימות ID3 כמו זמרים / אלבומים / ז'אנרים, רשימות נשמעות כמו ספרים / מחברים ורשימות קטלוג;
פונקצית המועדפים
פונקציית תווית: פונקצית הוספה / מחיקה;
פונקציות השמעה בסיסיות: תצוגה והגדרה של מידע על קבצים, פרמטרי השמעה ומצב השמעה בממשק ההפעלה;
פונקצית תצוגת LRC מילים;
פונקצית תצוגת אלבום;
פונקציית מחיקה: מחק ועדכן קבצי קטלוג וקבצי רשימה;
מנוע המוזיקה משמש להפעלת מוסיקת רקע. כאשר הממשק מיישם פונקציות אחרות, כגון: הפעלת ספרים אלקטרוניים, הפעלת תמונות,
בעת גלישה בקבצים, הגדרות פרמטר ופונקציות אחרות, הוא מבין את ההמרה האוטומטית של מצב השמעת המוסיקה ואת השינוי האוטומטי של קבצי המוסיקה.
הדרישות התפקודיות הן כדלקמן:
1. תוכל להשלים את השמעת קבצי המוסיקה. ישנם מקורות רבים למוזיקה שמנגן המנוע: רשימות השמעה, מועדפים, ספריות,
המנוע צריך לעבור קבצים בצורה נכונה דרך ממשק בורר הקבצים.
2. אפשרות להחלפה אוטומטית של מוזיקה
3. מימוש התקשורת עם ממשק המשתמש ui, השלם את התגובה לפקודה ui המוסיקה, כגון קבלת פקודת הבקרה של ממשק המשתמש של המוסיקה,
ספק את סטטוס ההפעלה הנוכחי ומידע ההפעלה הקשור ליישום UI Music. מנוע המוזיקה אינו שולח הודעות למוזיקה באופן פעיל
ui.
4. מסוגל להשלים את התגובה להודעות מערכת

עמוד 311
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 311
8.2 תכנון אדריכלות כולל
להלן תרשימי המבנה של שני היישומים של מוסיקה:
ממשק המשתמש של המוסיקה כולל שלושה חלקים עיקריים: רשימת סצינות, סצינות השמעה וסצינות הגדרה, תוך יישום מנוע המוזיקה
התמודד בעיקר עם משימות הנגינה ברקע של המוסיקה.
8.3 תכנון יישום ממשק משתמש
8.3.1 חלוקת מודולים פונקציונליים ליישום ממשק UI
US212A משתמש בקונספט עיצובי: על פי סיווג הממשק, היישום הוא עיצוב מודולרי. כל יישום,
כל מודולי הממשק הספציפיים המופשטים ומבצעים תכנון משאבים, תכנון לוגיקה עסקית, תכנון זרימת נתונים וצרכנים
תכנון זרימת מידע, לכל מודול ממשק יש מחזור הודעות עצמאי, משאבי סצינה עצמאיים והיגיון עסקי עצמאי. אלה

עמוד 312
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 312
מודול ממשק, אנו קוראים לזה סצנה כאן.
בהתייחס לתרשים האדריכלות של מוסיקה, יישום המוסיקה מחולק לשלושה תרחישים: תרחיש רשימה (SCENE_LSTMENU),
הפעל סצנה (SCENE_PLAYING), בחר סצנה (SCENE_SETMENU).
שם הסצינה
מאפיינים
פונקצית כניסה
קובץ מקור
רשימת פונקציות הגלישה ברשימת המוסיקה בסצינות,
רשימת המוזיקה היא בהתאם
אמן, אלבום, ז'אנר
לסווג ולספק
רשימת כל השירים.
ביניהם, בכל קטגוריה
ראש, בסדר אלפביתי עולה
סוג.
app_result_e
משחק_מוזיקה_תוכנה (app_param
_ enter_mode, file_path_info_t *
path_locat,
music_play_set_e
paly_set)
Music_scene_playing.c
הפעלת פונקציית השמעת מוסיקה בסצנה, כולל
כולל שליטה על הפעלה / עצירה,
השיר הקודם / השיר הבא, מהיר
קדימה / אחורה, AB חוזר,
תצוגת אומנות אלבום, ID3
תצוגת מידע, מצב הפעלה
תצוגה, התקדמות ההפעלה מוצגת
תצוגה, תצוגה חוזרת AB
לַחֲכוֹת.
app_result_e
תפריט music_scene_list (bool
רשימת תפריטים,
file_path_info_t *
דפדפן_נתיב)
Music_scene_listmenu.c
קבע את פונקציית ההגדרה של השמעת מוסיקת סצינה
כן, קבע את מצב החזרה,
EQ
app_result_e
תפריט music_scene_set (bool
music_audible)
Music_scene_setmenu.c
על פי חלוקת הסצנות וארכיטקטורת ה- ap של יישום ui מוסיקה, ניתן לחלק את היישום ui למוסיקה למודולים הבאים:
שם המודול
פונקציה קצרה
מודול האתחול
לאתחל פונקציות יישום
מודול תזמון סצנה
תזמון ועיבוד מערכות יחסים להעברת סצינות
סצנת תפריט רשימה
ספק למשתמשים הגלישה בקבצי מוסיקה רשימת ID3 וממשק רשימת ספריות.
סצנת משחק
ספק ממשק השמעה, הגש תצוגת פרטי קבצים, החלפת קבצים בחלק העליון והתחתון, הפסקה
פעולות בסיסיות כגון השמעה, קדימה מהירה וקדימה מהירה, חזרה על AB.
קבע את הסצינה
לחץ על מקש התפריט במהלך ההפעלה כדי להיכנס לתפריט ההגדרות כדי לממש את הגדרת פרמטרי ההפעלה
הגדרות, הגדרות תווית, הגדרות מועדפות ופונקציות אחרות.
יציאה מהמודול
עיבוד יציאה מהיישום

עמוד 313
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 313
8.3.2 סנכרון ואינטראקציה עם מודולים אחרים
Ap_music, כאפליקציה מקדימה, תערוך תקשורת עם ap_manager במהלך הפעולה ותזמון משימות המערכת.
חדשות, תקשורת עם יישומי מנוע. התקשורת בין כל AP נועדה למטרות הבאות:
❖ השתמש בשירותי AP קשורים. לדוגמה, בעת שימוש בשירותים קשורים המסופקים על ידי מנוע הרקע, הוא נשלח גם למנוע הרקע.
שלח את ההודעה המתאימה.
❖ בתהליך תזמון המשימות, באמצעות תקשורת הודעות וסמפור, להשגת סנכרון והדרה הדדית בין משימות.
התקשורת בין המשימות נעשית באמצעות העברת מסרים. US212A מספק מידע כגון
ממשק מערכת:
# הגדר sys_mq_send (א, ב)
(int) sys_op_entry ((void *) (uint32) (a), (void *) (b), (void *) 0, MQ_SEND)
בממשק sys_mq_send (a, b), הפרמטר הראשון הוא מזהה סוג ההודעה, כולל הערכים של הסוגים המנויים הבאים:
MQ_ID_MNG = 0, / * תור הודעות יישום לניהול תהליכים * /
MQ_ID_DESK, / * ממשק משתמש UI (חזית קדמית) * /
MQ_ID_EGN, / * מנוע (רקע) הודעת יישומים בתור * /
MQ_ID_SYS, / * תור להודעות מערכת * /
MQ_ID_GUI, / * תור הודעות GUI * /
הפרמטר השני הוא תוכן ההודעה, שהיא בדרך כלל משתנה מסוג המבנה private_msg_t או מסוג msg_apps_t
סוג משתנה. בעת שליחת הודעות פרטיות או הודעות GUI, משתמשים במשתנה מסוג private_msg_t בעת השליחה
להודעות מערכת משתמשים במשתנים מהסוג msg_apps_t.
על מנת להקל על השימוש הידידותי במנגנון ההודעות להשלמת התקשורת בין המשימות, applib מספקת את הממשקים הבאים לשימוש
שימוש למשתמש:
ממשק הודעה לשליחה סינכרונית של תורי הודעות פרטיות
bool send_sync_msg (uint8 * app_name, msg_apps_t * msg, msg_reply_t * תשובה, uint16
פסק זמן) שם app_name מייצג את יישום היעד של ההודעה, msg מצביע על ההודעה שיש לשלוח, ושידור חוזר הוא תגובת ההודעה
מצביע מבנה תשובה, פסק זמן משמש לבקרת שליחת פסק זמן.
ממשק הודעה לשליחה אסינכרונית בתור הודעות פרטיות
bool send_async_msg (uint8 * app_name, msg_apps_t * msg)

עמוד 314
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 314
שם שם האפליקציה מציין את יישום היעד של ההודעה, ו- msg מצביע על ההודעה שישלח.
קבל תור להודעות GUI-GUI
uint16 get_gui_msg (input_msg_t * input_msg)
כאשר input_msg הוא מצביע המאגר לקבלת הודעות.
קבל תור הודעה פרטית-הודעה פרטית
uint16 get_app_msg (private_msg_t * private_msg)
כאשר private_msg הוא מצביע המאגר לקבלת הודעות.
לשימוש מפורט, עיין במסמכים הקשורים ל- applib.
8.3.3 ספריית ap_music תלויה ביישום ותיאור הממשק שלה
ממשק מערכת ו- libc api.a
ספריית זמן ריצה של יישום ctor.o
כל הפונקציות של Applib
תפריט ממשק משתמש נפוץ, סרגל ראש, אנימציה ומודולים אחרים הנפוצים לפקודה
גלישה בקבצים, רשימה ומועדפים, ID3, מילים ומודולים אחרים בספריה המשופרת
8.4 תהליך עסקי של יישום ap_music
8.4.1 התהליך הכולל של יישום ap_music
על פי הסצנות המחולקות של Ui המוזיקה, התהליך הכולל שלה מוצג באיור שלהלן:

עמוד 315
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 315
הַתחָלָה
אִתחוּל
האם זה לצאת מהזירה?
רשימת עיבוד סצינות
להיכנס לסצנת ההגדרה?
סוֹף
צא מעיבוד
להיכנס לסצנת הרשימה?
להיכנס לסצנת ההפעלה?
הפעל עיבוד סצינות
הגדר עיבוד סצינות
י
י
י
י
נ
נ
נ
נ
8.4.2 תהליך האתחול של המודול
מודול האתחול של Ap_music, כל הקודים שלו נכתבים בממשק _app_init (), המגדיר
בקובץ Music_main.c. תפקידיה העיקריים הם כדלקמן:
❖ טען את זיכרון נתוני התצורה המאוחסנים ב- VRAM, כולל נתוני התצורה הגלובלית VM_AP_SETTING,
ו ap_Music נתוני תצורה ייעודיים VM_AP_MUSIC. ביניהם, המאקרו VM_AP_SETTING ונתוני המאקרו
VM_AP_MUSIC מייצג בהתאמה את קיזוז הכתובת היחסי של VRAM. הממשק למימוש פונקציה זו הוא _load_cfg (),
ממשק זה מוגדר ב- Music_main.c.
❖ טען קבצי סגנון, כולל קובץ הסגנון music.sty המוקדש ל- ap_music ומשותף על ידי כל AP
קובץ סגנון נפוץ. music.sty ו Common.sty הם שניהם קבצים באזור המערכת, פתחו אותם
לאחר מכן, הידית מנוהלת על ידי מנהל ההתקן של ממשק המשתמש עצמו (מאוחסן במשתנה g_ap_res במנהל ההתקן של ממשק המשתמש).
Ad טען את קובץ עיצוב התפריט music.mcg, הממשק המתקשר הוא com_open_confmenu_file (), ממשק זה

עמוד 316
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 316
מוגדר במקרה של \ ap \ common \ common_func \ common_confmenu.c, הקובץ לאחר הטעינה
הידית מנוהלת על ידי המודול המשותף. music.mcg הוא קובץ באזור המערכת, המאחסן ap_music
נעשה שימוש במידע על תצורת תפריט.
לאתחל משתנים גלובליים שונים של ap_music, לאתחל את כלב השמירה הרך ולהגדיר את ידית העיבוד של הודעות מערכת.
applib_message_init (music_message_deal). הערה: US212A מיושם בכל AP
הפונקציה של כלב השמירה הרך, AP מגדירה טיימר להאכלת הכלב באופן קבוע, פעם אחת מכמה סיבות מיוחדות (כגון
עיבוד הפרעות לטווח הארוך או עיבוד IO), מה שגורם לטיימר שנקבע על ידי ה- AP לא להאכיל את הכלב, מה שיגרום למערכת
המערכת מופעלת מחדש.
❖ התעלה על תזמון מערכת טיימר רך, כגון תזמון מצב תאורה אחורית, תזמון המתנה, תזמון זמן שינה וכו ';
וטיימר העדכונים התקופתיים שמשמש את Headbar, כגון רענון זמן, רענון סוללה וכו '.
❖ בהתאם למצב המנוע, קבע את פרטי הנתיב של השיר שמושמע כעת ואת נתיב הגלישה בשיר.
המידע מאוחסן במשתנים הגלובליים g_file_path_info ו- g_browser_filepath בהתאמה. כשאין אחרי
כאשר מנוע המוזיקה פועל, g_file_path_info מלא בערך ברירת המחדל: כונן C ובחירת הקובץ.
מצב הבורר הוא מצב הספריה FSEL_TYPE_COMMONDIR: דפדף ונגן בהתאם לספרייה.
❖ בהתאם לדרך להזנת ap_music, אם זה נבחר מ- ap_browser או ap_record לשחק
למי שרץ ap_music, כאשר ap_browser ו- ap_record יוצאים, שם קובץ השיר ו-
מידע הנתיב מאוחסן ב- VRAM, כך שב- ap_music ניתן לקרוא את מידע הנתיב מ- VRAM, כמו
היכונו להפעלה הבאה.
❖ בדיקה
חשבון
טֶקסט
חתיכות
מעמד
סוּג
play_scene_checktype (g_file_path_info.file_path.dirlocation.filename),
על ידי הגדרת המשתנה הגלובלי g_audible_now, כדי לאשר אם זה השמעה של קבצי Audible או קבצי מוסיקה רגילים.
חתיכת משחק.
❖ ביוגרפיה
להיכנס
g_file_path_info
,
מוקדם
התחלה
שינוי צורה
טֶקסט
חתיכות
נבחר
בחר
התקן
music_file_init (& g_file_path_info). לתשומת לבך, במערכת US212A יש את הדברים הבאים
שתי שיטות הפעלה: (מוגדר בקובץ psp_rel \ include \ enhanced.h)
FSEL_TYPE_COMMONDIR = 0, // רשימת השמעה

עמוד 317
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 317
FSEL_TYPE_DISKSEQUNCE, // השמעת מספר רצף דיסק מלא
FSEL_TYPE_SDFILE, // קובץ אזור sd
FSEL_TYPE_M3ULIST, // m3u רשימת
FSEL_TYPE_PLAYLIST, // רשימת השמעה
FSEL_TYPE_LISTAUDIBLE, // פלייליסט השמיעי
FSEL_TYPE_LISTVIDEO, // רשימת וידאו
FSEL_TYPE_LISTPICTURE, // רשימת PICTURE
FSEL_TYPE_LISTEBOOK, // רשימת EBOOK
FSEL_TYPE_LIST_PIC2, ​​// טבלה 2 של PICTURE
FSEL_TYPE_LISTFAVOR1, // מועדף 1
FSEL_TYPE_LISTFAVOR2, // מועדף 2
FSEL_TYPE_LISTFAVOR3 // מועדף 3
עבור כל שיטות ההפעלה שלעיל, הנתונים מנוהלים על ידי קובץ רשימת ההשמעה והמיקום של קובץ רשימת ההשמעה
ממשק ניהול, כולל בורר קבצים, תווכה וחלקים אחרים.
❖ צור קובץ תווית MUSICBMK.BMK באזור המשתמש כדי לאחסן את תווית ההפעלה שנוצרה על ידי המשתמש.
8.4.3 תרשים זרימה כללי של תזמון הסצינות
החלק של היישום us212a SDK מורכב ממודולי ap המחולקים לפי הסצנה, מה שהופך את עיבוד המשימות ליותר
לשם הבהרה. לדוגמה, המוסיקה מחולקת לרשימה, לנגן ולהגדיר שלוש סצינות, התואמות את זמן הנגינה של המוסיקה.
שלוש פונקציות של גלישת קבצים, השמעת קבצים והגדרת פרמטרים. המפתח למודול תזמון הסצינות הוא שליטה במצב הסצנה
מכונת מדינה המשמשת למימוש המעבר והתזמון בין תרחישים שונים ובקרת תהליך הריצה של היישום. מודול זה מיישם את התרחיש
תזמון, בחר תרחישים שונים בהתאם למצב.
אחד הפיצוחים הפשוטים ביותר לתזמון המצב הקיים במכונה הוא כדלקמן (מוגדר ב-
case / ap / ap_music / music_main.c):
// לולאת תזמון סצינות
בזמן (g_music_scene! = SCENE_EXIT)
{
מתג (g_music_scene)
{
// היכנסו לסצנת התפריט

עמוד 318
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 318
מקרה SCENE_LSTMENU:
// רשימת פונקציות סצנה
scene_result = music_scene_listmenu (list_menu, & g_browser_filepath);
// עיבוד תוצאת ערך להחזרת סצינה
...
לשבור;
// היכנסו לסצנת ההפעלה
מקרה SCENE_PLAYING:
// הפעלת סצנת הפעלה
scene_result = music_scene_playing (g_enter_mode, & g_file_path_info, g_play_set);
// עיבוד תוצאת ערך להחזרת סצינה
...
לשבור;
// היכנסו לסצנת התפריט
מקרה SCENE_SETMENU:
// הגדר את פונקציית הסצינה
scene_result = music_scene_setmenu (music_audible);
// עיבוד תוצאת ערך להחזרת סצינה
...
לשבור;
בְּרִירַת מֶחדָל:
לשבור;
}
אם אתה צריך להוסיף סצנה, אתה צריך להוסיף סניף רק אם אתה צריך להגדיל את ערך ההחזרה של סצינה
בעיבוד, עליך להוסיף עיבוד סניף רק בעיבוד תוצאות התוצאה לאחר סיום פונקציית הסצינה. ידידותי למשתמש
שינויים ותוספים.
הזרימה המפורטת של תזמון סצנות המוזיקה מוצגת באיור שלהלן:

עמוד 319
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 319
הַתחָלָה
בהתאם לדרך הכניסה ליישום המוסיקה g_enter_mode, קבע את ערך הסצנה הנוכחי g_music_scene שנכנס ליישום
g_music_scene == SCENE_EXIT?
(האם לצאת מתזמון סצינות)
g_music_scene ==
SCENE_LSTMENU?
(האם להיכנס לסצינת הרשימה)
היכנסו לסצינת הרשימה
scene_result = music_scene_listmenu ()
לאחר החזרת סצנת הרשימה, על פי הערך החזר סצנה_תוצאות של סצינת הרשימה,
עבור לקבוע את ערך הסצנה הבא g_music_scene
g_music_scene ==
SCENE_PLAYING?
(האם להיכנס לסצנת ההפעלה)
היכנסו לסצינת ההפעלה
scene_result = music_scene_playing ()
לאחר סצנת ההפעלה חוזרת, בהתאם לערך ההחזרה של סצנת ההפעלה scene_result,
עבור לקבוע את ערך הסצנה הבא g_music_scene
g_music_scene ==
SCENE_SETMENU?
(האם להיכנס לסצנת ההגדרה)
היכנסו לסצנת ההגדרה
scene_result = music_scene_setmenu ()
לאחר סצנת ההגדרה חוזרת, על פי הערך החוזר סצנה_תוצאה של סצנת ההגדרה,
עבור לקבוע את ערך הסצנה הבא g_music_scene
תזמון סצנת סיום
י
נ
י
נ
י
י
נ
נ
בתזמון סצינות, המשתנה החשוב ביותר הוא g_music_scene. בתהליך תזמון הסצנה לעיל הוא מבוסס על

עמוד 320
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
320 עמודים
g_music_scene משתנה ואז נכנס לסצנות שונות. g_music_scene הוא שלם ב- ap_music
ניתן לגשת למשתנים המקומיים בכל מקום ב- ap_music. כשיוצאים מסצינות אחרות, קבעו
הערך של g_music_scene הוא לציין לאיזה סצנה להיכנס לאחר היציאה מהסצנה הנוכחית.
8.4.4 תרשים זרימה של תרחיש רשימה
סצנת התפריטים היא הסצנה העיקרית להיכנס לממשק המשתמש, האחראי על עיבוד התפריט ופונקציית תצוגת רשימת הקבצים. רשימת כלים
סצינה יחידה מורכבת משלוש סצינות שליטת תת-שליטה, כולל שליטת תפריט, בקרת רשימה ובקרת תמונות באלבום. שלוט בשלושה אלה
קריאת הקובץ היא למעשה תזמון סצנות פשוט. תרשים הזרימה לתת-סצנה של חלק זה מוצג באיור הבא:
הַתחָלָה
צא מסצנת תפריט הרשימה
עיבוד סצינת תפריט
להיכנס לסצנת תמונות האלבום?
סוֹף
להיכנס לסצנת התפריט?
להיכנס לסצנת הרשימה?
רשימת עיבוד סצינות
עיבוד סצנת תמונות באלבום
י
י
י
י
נ
נ
נ
מוגדר ליציאת סצינה
נ
ניתן לראות כי חלק זה של תהליך תזמון הסצנה דומה מאוד לתהליך תזמון הסצינה המוזיקלית. למעשה, תרשים הזרימה
אפשר לראות בכך פשט של תרשים הזרימה הקודם. מכיוון שסצנת תפריט הרשימה צריכה לטפל רק בכניסה ויציאה משלושת הפקדים האלה
מחוץ לעיבוד, ולכן ההליך פשוט יחסית. התוכנית מגדירה שלושה מספרי מכונות מצבים המשנה בתת-סצינה ב- App_music.h:
// הגדר את מכונת מצב הבקרה הכלולה בתת-סצינה של רשימת המוסיקה
# הגדר MUSIC_LISTSCENE_LIST
0x0
# הגדר MUSIC_LISTSCENE_MENU
0x1
# הגדר MUSIC_LISTSCENE_ALBUMLIST 0x2
# הגדר MUSIC_LISTSCENE_EXIT
0x3
לולאת מכונות המדינה מיושמת ב- music_scene_listmenu.c, וקוד הלולאה הוא כדלקמן:
// לולאת סצינה
בעוד (sub_scene_cur! = MUSIC_LISTSCENE_EXIT)

עמוד 321
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 321
{
// בחר סצנת שליטת משנה
מתג (sub_scene_cur)
{
מקרה MUSIC_LISTSCENE_LIST:
// סצנת רשימה
ret_vals = music_scene_listmenu_list (list_browser_mode, root_layer, browser_path);
לשבור;
מקרה MUSIC_LISTSCENE_MENU:
// סצנת תפריט
ret_vals = music_scene_listmenu_menu (menu_browser_mode, browser_path);
לשבור;
מקרה MUSIC_LISTSCENE_ALBUMLIST:
// סצנת תמונות אלבום
ret_vals = music_scene_listmenu_albumlist (albumlist_browser_mode, browser_path);
לשבור;
בְּרִירַת מֶחדָל:
לשבור;
}
לעבור (ret_vals)
{
// עיבוד ערך ההחזרה של כל בקרת ילדים
}
}
עיצוב זה מאפשר למשתמשים להוסיף שליטת משנה שהם צריכים ליישם בסצנת תפריט הרשימה, כמו זו
שליטת תת האלבום בו הופכת לקלה מאוד. מחזור תזמון הסצינות של כל AP הוא מאוד דומה, ואני מכיר AP
זה פשוט מאוד להבין את זרימת העיבוד של מכשירי AP אחרים.
מבנה רשימת התפריטים של סצינת התפריטים של רשימת המוסיקה מוצג באיור שלהלן:

עמוד 322
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 322
תפריט ברמה הראשונה
תפריט ברמה השנייה
תפריט ברמה השלישית
רשימת השמעה
רשימת השמעה
רשימת השמעה
רשימת השמעה
1
תפריט ברמה הרביעית
2
3
רשימת מועדפים
רשימת מועדפים
רשימת מועדפים
רשימת ספרים
רשימת ספרים
רשימת השמעה
m3u
m3u_list
סצינת רשימת התפריטים מממשת בעיקר את הגלישה בקטלוג ואת רשימת ID3 תחת אפליקציית המוזיקה (רשימת זמר / אלבום / ז'אנר וכו ')
דפדף לפי קטגוריה. סצנה זו מציגה רק את כל קבצי האודיו בדיסק האפקטיבי של הנגן, ומחזירה את פעולת המשתמש בסצנה זו.
תביא תוצאות.
מודול זה דורש שלוש בקרות נפוצות: בקרת תפריט, בקרת רשימת קבצים ושליטה ברשימת תמונות אלבומים.
תחת הארכיטקטורה הנוכחית התפריט הוא מבנה הניתן להגדרה, ומבנה עץ התפריט מעוצב באמצעות כלים. המבנה של התפריטים השונים דומה,
ניתן לנתח אותו על ידי בקרה נפוצה (מנתח תפריט). מנתח התפריטים משמש לניתוח מבנה התפריט ולחזרה על ביצוע תפריט העלים
פונקצית פונקציית קו. מנתח התפריט הוא תת-סצנה עצמאית, כך שהוא יכול להתמודד עם הודעות gui והודעות מערכת. הפונקציה של תפריט העלים
זו יכולה להיות רשימת קבצים, רשימת הקבצים נותחת דרך דפדפן הקבצים, ודפדפן הקבצים הוא גם תת-סצנה עצמאית.
יכול להתמודד עם הודעות gui והודעות מערכת. שליטת רשימת האלבומים מפענחת למעשה את תמונות האלבום מסוג
בקרת תמונה המוצגת בצורה רשת. להלן תיאור תהליך היישום ופרטים הקשורים לשלושת הפקדים.
8.4.4.1 חלק לשליטה בתפריט
בקרת התפריט קוראת בעיקר את מבנה העץ של התפריט מקובץ התצורה, שואבת את ממשק התפריט וקוראת חזרה לתפריט העלים.
עיבוד התקשרות חוזרת. חלק הבקרה מממש בעיקר את ציור התפריט, עיבוד כפתורים והודעות מערכת. תרשים זרימה של חלק בקרת התפריט

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

עמוד 324
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 324
8.4.4.2 חלק שליטת הרשימה
תפריטי עלים מסוימים בסצנה זו דורשים גלישה בקבצים וצריכים להתקשר לבקרת הגלישה בקבצים, אך כל תפריט
הפרמטרים הבודדים שונים. הפונקציה של תפריט העלים היא שכאשר גולשים בקובץ, פונקציית עיבוד פונקציית העלים צריכה להתקשר לשליטה על גלישת הקבצים.
קבצים, גלישת קבצים ועיבוד הודעות gui.

עמוד 325
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 325
עיבוד בקרת הרשימה הוא פשוט יותר, ap צריך רק לאתחל את מבנה הנתונים הנדרש על ידי פקד ui_directory () ואז
התקשר לפקד זה כדי לגלוש בקבצים ולהיכנס לסצנת המשנה המתאימה בהתאם למבנה הגלישה. לא אכנס כאן לפרטים.
8.4.4.3 בקרת תמונות באלבום
בקרת תמונת האלבום משלבת את רשימת התמונות באלבום המוסיקה ואת מודול התממשות התמונות הממוזערות, המשלב את המוזיקה המיוחדת
על פי סוג האלבום, דפדף בקבצים בצורת תמונות ממוזערות של אלבום. לפענוח תמונות ויישום תמונה ממוזערת, אנא עיין ב
תיאור החלק הרלוונטי ביישום התמונה. להלן ניתוח התהליך של הצגת תמונות באלבום במסך אחד, הפונקציה המתאימה היא
prev_view_one_screen () (ממוקם ב- ap_music / music_listmenu_albumlist.c)
הַתחָלָה
התקשרו ל show_active_num () להצגת המספר הכולל של הקבצים
מספר ופריט הפעלה
האם אתה צריך להציג מחדש מסך נתונים
פעיל == old_active?
סוֹף
נקה את המסך, התקשר אל load_album_item_data () כדי לקבל
מידע על האלבום במסך הנוכחי
על פי האלבום הנוכחי
צלצול מציג מסך ממוזער
התקשר שוב ל- load_album_item_data ()
שחזור מידע
הצגת שם קובץ ההפעלה
י
נ

עמוד 326
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 326
ניתן לראות כי הצגת הקובץ כאן תלויה ברכישת פרטי קובץ תמונת האלבום, כך שפונקציית המפתח היא
load_album_item_data (), פונקציה זו תתקשר ל- fsel_browser_get_albums () כדי להשיג את הנוכחי
האם יש תמונות באלבום באלבום. הבסיס לשפוט תמונות אלבומים הוא האם יש קובץ בשם 1 בסדר האלבום הנוכחי
תמונת האלבום של Foldre.jpg. אם הוא קיים, קבל את פרטי המיקום של התמונה והגדר את סמל הדגל. מבנה קשור
האם album_brow_t מוגדר כך:
// מבנה הרשומה של תמונת האלבום
typedef struct
{
uint8 album_flag; // האם יש דגל תמונה של האלבום, 0-no 1-yes
uint8 name_len; // אורך השם, יחידה (בתים)
uint8 עתודה [2]; // יישור 4 בתים
uint8 * name_buf; // מאגר שם
uint32 cluster_no; // מספר אשכול פריט בספריית קבצי תמונה
uint32 dir_entry; // קיזוז כניסה לספריות קובץ תמונה
} album_brow_t;
קריאה fsel_browser_get_albums משופרת () תקבל את הקטגוריה הנוכחית בהתאם למספר הסידורי של האלבום שצריך להשיג
בין אם תמונות אלבום קיימות באלבום, אם הן קיימות, קבעו את הערכים של cluster_no ו- dir_entry, וגם הגדירו את דגל album_flag.
8.4.5 הפעל תרשים זרימה של סצינה
משחק סצינה (משחק סצינה) הוא סצנה חשובה של יישום מוסיקה, בעיקר למימוש השמעת קבצי שמע /
פונקציות בסיסיות כגון עצירה, אחורה מהירה וקדימה מהירה, מעבר בין החלק התחתון לתחתית, כמו גם הצגת ומימוש מידע הקבצים והסטטוס.
אינטראקציה.
יש בעיקר את הדרכים הבאות להיכנס לסצנת ההפעלה (דרך משתנה enum g_enter_mode מסוג app_param_e)
כדי לזהות, כל ערכי הספירה של app_param_e מוגדרים בקובץ case_type.h):
User המשתמש בוחר שיר מסצנת הרשימה להפעלה ובכך נכנס לסצנת הנגינה
User המשתמש בוחר קובץ מוזיקה להפעלת ap_browser או ap_record כדי להיכנס לסצנת ההפעלה
❖ כשמנגנים ברקע, המשתמש עובר מממשקים אחרים לסצנת המשחק (לדוגמה, מסצינת הרשימה או מסצנת ההגדרה).
עבור ידנית לסצינת ההפעלה)
❖ כשמשחקים ברקע, המשתמש אינו מבצע שום פעולה, זמן הגדרת ממשק המשתמש נגמר, המערכת חוזרת אוטומטית ל
סצנת משחק
היכנסו לסצנת המשחק, הממשק שנקרא הוא music_scene_playing (app_param_e enter_mode,

עמוד 327
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 327
file_path_info_t * path_locat, music_play_set_e paly_set), בין שלושת הפרמטרים של הממשק,
enter_mode מזהה את הדרך להיכנס לסצנת ההפעלה, נתיב_מיקום מזהה את מצב ההפעלה ומידע הנתיב, ו- play_set מזהה
הכירו את פעולת הכניסה לסצינת ההשמעה (התחל את ההפעלה / המשך הפעלה / שמירה על מצב). תרשים הזרימה של הממשק הוא כדלקמן:

עמוד 328
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 328
הַתחָלָה
אתחול סצנת ההפעלה
result = _scene_play_init (path_locat, paly_set);
הגדר דגל רענון ממשק (רענן את כל רכיבי הממשק)
SetFullInterface ()
אתחל את האזור המציג מידע על אלבומי האזור ואת האזור המציג מידע ID3
התחלת לולאת סצנת ההפעלה
האם זה מסך שחור?
get_screensave_state () == FALSE?
קבל את מצב ההפעלה הנוכחי של המנוע, וזהה אילו אלמנטים בממשק צריכים לרענן בהתאם למצב ההפעלה.
ret_vals = _ play_check_status (path_locat, & prev_status);
קבל מידע ID3 והגדר את דגל הרענון g_paint_flag
play_scene_getid3 (path_locat);
רענן את המסך בהתאם לדגל הרענון g_paint_flag ואילו אלמנטים בממשק התצוגה g_display_bitmap
play_scene_paint (& g_display_bitmap);
g_display_bitmap & up_lyricflag)! = 0
הצגת מילים
show_lyric ();
דגלים ברורים מציגים דגל
g_display_bitmap & = clr_lyricflag;
g_display_bitmap & up_musictimeinfo)! = 0
הצג זמן משחק
_show_time_progress (FALSE, & style, 0);
נקה את המחוון שמראה את זמן המשחק
g_display_bitmap & = clr_musictimeinfo;
קבל הודעות GUI
תוצאה = get_gui_msg (& gui_msg);
הפעל את סוף לולאת הסצנה
המשימה תלויה למשך 10 שניות
sys_os_time_dly (2);
לקבל הודעות GUI?
תוצאה == אמת?
טיפול בהודעות GUI
ret_vals = _scene_play_guimsg (& gui_msg);
עבד הודעות מערכת
ret_vals = _scene_play_sysmsg ();
לאחר סיום עיבוד ההודעה, האם עלי לרענן את הממשק?
ret_vals == RESULT_REDRAW
רענן ממשק
SetFullInterface ()
האם לאחר השלמת עיבוד ההודעות, האם מתקיימים התנאים ליציאה מהלולאה?
(ret_vals! = RESULT_IGNORE) && (ret_vals! = RESULT_NULL) &&
(ret_vals! = RESULT_REDRAW)
בצע את פעולת שחרור המשאבים לפני שתצא מהסצינה המנגנת
_scene_play_exit ();
סוֹף
נ
נ
י
נ
י
י
נ
י
נ
נ
י
י

עמוד 329
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 329
עבור התהליך שלעיל, השורה העיקרית מתוארת כך:
❖ השלב הראשון:
אתחול תחילה, הממשק הנקרא הוא bool _scene_play_init (file_path_info_t *
path_locat, music_play_set_e play_set) ו- SetFullInterface (). מעל שתיים
הפורט מבין את הפונקציות הבאות:
(1) הגדר את הערך ההתחלתי g_audible_now של כל משתנה גלובלי שיש להשתמש בו בסצנת ההפעלה,
g_setting_comval וכו ', להגדרת מצב ההפעלה, מצב החזרה, עוצמת הקול, EQ, מערכת הקבצים להפעלה
טור ומידע אחר;
(2) על פי כמה עקרונות של הרחקה הדדית של מנועי שמע, מנועי שמע אחרים נסגרים ויוצרים הקדמות מוסיקה.
Engine music_engine (אם music_engine פועל ברקע, אינך צריך ליצור אותה שוב);
בעת בניית music_engine, אתר את השיר הראשון שהושמע לממשק music_scene_playing ()
על השיר שצוין בפרמטר.
(3) אם בורר הקבצים אינו מאתחל, יש לאתחל את בורר הקבצים. בורר הקבצים אינו מאתחל
במקרה של ap_music, לרוב זה המקרה שנבחרת היישום ap_music כשאין מוזיקת ​​המנגינה פועלת ברקע.
(4) הגדר את כל האלמנטים שצריכים לרענן את הממשק (מכיוון שזו הפעם הראשונה לרענן את הממשק), כלומר להגדיר
הערכים של g_paint_flag ו- g_display_bitmap.
❖ השלב השני:
לאחר השלמת האתחול, הזן את לולאת ההודעות של סצינת ההפעלה. בכל סיבוב הלולאה, שם לולאת ההודעות
רצף העיבוד הוא כדלקמן:
(1) כאשר התאורה האחורית דולקת, התקשר לממשק _playing_check_status () כדי לעדכן את מצב הנגינה;
הגדר את הערך של g_paint_flag ו- g_display_bitmap בהתאם לשינוי מצב ההפעלה, ובכך להגדיר
אילו רכיבי ממשק צריכים לרענן;
(2) קבל מידע ID3, מידע על מילים, וכו ';
(3) רענן את הממשק לפי ההגדרות של g_paint_flag ו- g_display_bitmap, כגון השמעת שירים
זמן, התקדמות השמעת השירים, מידע ID3, אלבום גרפי, מצב השמעה, מצב חזרה, וכו ';

עמוד 330
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 330
(4) קרא את הודעת ה- GUI (בעיקר את הודעת הכפתור), אם קריאת הודעת ה- GUI התקשר לממשק
_scene_play_guimsg () לעיבוד, כגון מעבר בין שירים עליונים לתחתונים, הרצה קדימה ומהירה אחורה מהירה, יציאה ופעולות אחרות, עיבוד
במקביל, עדכן את דגל רענון הממשק g_paint_flag ו- g_display_bitmap; אם אין
אם קוראים הודעות GUI, התקשר לממשק _scene_play_sysmsg () כדי לקרוא הודעות מערכת ולעבד את המערכת
הודעות, כגון ניתוק USB, ניתוק כרטיס SD, יציאת יישומים והודעות אחרות.
(5) שופט על פי מצב ההפעלה שהתקבל ותוצאת העיבוד (ערך החזרה) של הודעות GUI או הודעות מערכת
כיצד לרענן אלמנטים של ממשק;
(6) שופט על פי מצב ההפעלה שהתקבל ותוצאת העיבוד (ערך החזרה) של הודעות GUI או הודעות מערכת
האם לצאת מלופ ההודעות של סצנת המשחק;
(7) בכל מחזור, יש לקרוא ל- sys_os_time_dly (2) כדי להשעות את היישום באופן פעיל לפרוסת זמן.
אחרת, לולאה זו בהכרח תפוס יותר מדי משאבי מעבד ותגרום לתזמון משימות אחר להיות בלתי אפשרי.
❖ השלב השלישי:
ביציאה מסצנת המשחק, משוחררים משאבי המערכת הקשורים.
עבור התהליך שלעיל התוכן שצריך להסביר הוא כדלקמן:
❖ בתהליך לעיל ישנם שני משתנים גלובליים המעורבים בלוגיקת המפתח: g_paint_flag ו-
g_display_bitmap. איפה g_paint_flag מזהה אם יש לרענן את רכיבי הממשק, ו
כל ביט של g_display_bitmap מייצג איזה אלמנט ממשק צריך לרענן.
❖ במהלך הפעלת לולאת ההודעות של סצינת ההפעלה, עדיין יש ליישום מספר טיימרים הפועלים בו זמנית, למשל, תוכנה
כלב שמירה, ספירת מצב תאורה אחורית, מונה המתנה, טיימר לגלילת תווים וכו '.
❖ במחזור ההודעות של סצנת ההשמעה, עליכם להתמודד עם מנוע הרקע music_engine, שנשלח על ידי
מיושמות הודעות סינכרוניות. הממשק שנקרא הוא music_send_msg (). מה שמכונה שליחת הודעות סינכרוניות מתייחס
לאחר שליחתו, עליו להמתין לתשובת המקלט לפני שיחזיר את ההודעה. לדוגמה, בהודעת ה- GUI
בעיבוד, כאשר מתקבלת הודעה כגון החלפת שירים, קדימה ומהירה אחורה, ההודעה המתאימה תישלח למנוע הרקע.
music_engine, מנוע הרקע ישיב לשולח לאחר קבלת ההודעה ועיבודו.
❖ בעיבוד הודעות המערכת, בעת קבלת ההודעה MSG_APP_QUIT המבקשת מ- AP להיגמל, עליה להיות ללא תנאי

עמוד 331
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 331
החזר ערך מתאים ונתן ל- AP לצאת, אחרת יתעוררו בעיות בתזמון משימות.
❖ שיחת sys_os_time_dly (2) בתוך הלולאה כדי להשעות את היישום לפרק זמן היא פעולת מקשים.
8.4.6 הגדרת תרשים זרימה של הסצנה
סצנת ההגדרה דומה לסצינת הרשימה, שניהם מודולים לעיבוד תפריט. ההבדל ביניהם הוא שניתן לקבוע את סצנת ההגדרה רק מסצנת ההפעלה.
להיכנס. סצנת ההגדרה עוסקת בעיקר בהגדרת מצב השמעת המוסיקה, פרמטרים, סטטוס וכו 'במהלך ההפעלה, וכן
הפעל אוסף מוסיקה, הגדר סימניות ופעולות אחרות. רשימת הסצנות הנה כדלקמן:

עמוד 332
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 332
ה
תרשים הזרימה של עיבוד הסצנה הוא כדלקמן:

עמוד 333
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 333
הַתחָלָה
אתחל את בקרת התפריט
הזעק את בקרת ניתוח התפריט
מעבד את ערך ההחזרה של מנתח התפריט
שמור את פרטי המיקום כאשר התפריט הנוכחי יוצא
סוֹף
8.4.7 זרימת עיבוד מודול הסימניות
מודול הסימניה משמש להקלטת נקודת השבר של ההשמעה של שיר המוזיקה הנוכחי או השיר הקולי. מודול הסימניות מספק
הוסף, מחק, עיין בפעולות. הוספת סימניה תכתוב את המידע הנוכחי על נקודת הפסקה לפריט הסימניה המתאים, תמחק סימנייה
פריט הסימניה המקביל נמחק, וסימנית הגלישה מוגדרת להפעלה בזמן ספציפי בהתאם למידע על נקודת הפסקה המוקלטת. מודול הסימניה הוא למעשה
תת-סצנה, זרימת העיבוד שלה מוצגת באיור הבא:

עמוד 334
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 334
הַתחָלָה
סוֹף
י
נ
האם קיים קובץ הסימניה
קבל הודעת GUI
י
נ
י
קרא את הסימניה המתאימה לקובץ הנוכחי
תוכן הפריט
קבל הודעת מערכת
עיבוד הודעות GUI
עיבוד הודעות מערכת
צריך לצאת מהלולאה הנוכחית
התקשר לבקרת התיבה כדי להציג סימניות
האם להציג מחדש סימניות
י
נ
נ
המבנה הארגוני של מודול הסימניות מחולק לשלושה חלקים, כולל מידע הרשומה של הכותרת, אזור אינדקס הקבצים ואזור נתוני הקבצים.
כפי שמוצג מטה:
אזור אינדקס
(12 בתים לפריט)
אזור נתונים
(256 בתים לקובץ)
מידע על כותרות סימניות
(10 בתים)
כותרת הסימניה רושמת את המספר הכולל של סימניות יעילות, כמו גם את פריט הסימניה הראשון ואת פריט הסימניה האחרון שנרשם ברשימה מקושרת כפליים.
מספר האינדקס והמספר הכולל של הסימניות שנמחקו, המבנה מוגדר כך:
typedef struct
{
קסם uint16; // מספר קסמים
uint16 total_index; // המספר הכולל של סימניות

עמוד 335
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 335
uint16 first_index;
uint16 last_index;
uint16 del_total; // המספר הכולל של סימניות עם פעולות מחיקה
} music_bm_head;
מספר הקסם משמש כדי לשפוט האם קובץ הסימניות הנוכחי תקף. אם הקובץ אינו תקין, קובץ הסימנייה משוחזר. סה"כ סימניה
המספר רושם את המספר הכולל של סימניות יעילות. אם נוספו פריטי סימניה של 3 קבצים אך שניים נמחקו, total_index
הוא 1, del_total הוא 2. del_total משמש להחזרת פריטי האינדקס שנמחקו לאחר הקצאת הנתונים באזור האינדקס. first_index
ו- last_index משמש לאיתור הראש והזנב של הרשימה המקושרת כפליים באזור האינדקס. מבנה הנתונים של אזור אינדקס הקבצים הוא כדלקמן:
typedef struct
{
uint32 bmk_clus_no; // 4bytes
uint32 bmk_dir_eny; // 4bytes
uint16 prev;
// 2 ביטים
uint16 הבא;
// 2 ביטים
} מבנה נתוני פריט אינדקס mbmk_index_t; //
לכל קובץ סימניות יש ערך אינדקס כזה באזור האינדקס. מבנה פריט המדד מוצג באיור שלהלן:
האיור מציג את מבנה הארגון של קובץ הסימניות, מספר המיקום של פריט האינדקס באזור האינדקס מייצג את מיקום אזור האינדקס.
המספר הסידורי של הנתונים של אזור הנתונים. הסימניה של כל קובץ מוסיקה תופסת 256 סיביות שטח אחסון. אזור נתונים
המבנה הוא כדלקמן:
typedef struct
{
music_bm_item mfile_bmk_items [MAX_BOOKMARKS]; // 160bytes
uint8 mfile_name [64]; // 64bytes

עמוד 336
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 336
uint8 שמור [32];
} mfile_bm_items_t; // 224byte
בסך הכל 10 פריטי סימניה נרשמים באזור הנתונים, ושם הקובץ של קובץ הסימנייה (שם קובץ ID3) כלול. שם הקובץ כאן
משמש להתאמה בין אם פריט הנתונים הנוכחי הוא פריט הנתונים של קובץ המוסיקה המתאים. מכיוון שהוא מבוסס לחלוטין על אשכול_נו של אזור האינדקס
ו- dir_entry אינו מייצג לחלוטין את פרטי המיקום של הקובץ. מבנה הנתונים של פריט הסימניה הוא כדלקמן:
typedef struct
{
mmm_mp_bp_info_t break_param; // מידע על מיקום נקודת הפסקה 12bytes
time_t break_time; // information time time break 3bytes
uint8 שמור;
} music_bm_item; // 16byt
קח חיפוש פריטי אינדקס סימניות כדוגמה לניתוח עקרון העבודה של מודול הסימניות. לחיפוש אחר פריטי אינדקס סימניות יש את העקרונות הבאים:
(1) אם קובץ הסימניות הנוכחי נמצא במצב האתחול, כל הנתונים הם 0xff, המוקצים בהתאם לאתחול.
אין צורך למצוא
(2) אם המספר הכולל של קבצי הסימניות תקף, ישנם שני מצבי חיפוש: האחד הוא להוסיף פריטי סימניה.
אם היא נכשלה, יש להקצות ערך אינדקס חדש, אם נתקל בקובץ שנמחק במהלך תהליך החיפוש, הקובץ שנמחק משוחזר.
בנוסף לערך האינדקס של הקובץ. השני הוא לנקות את קובץ הסימניות המתאים בעת מחיקת הקובץ, צריך רק למצוא את התקף
ערך האינדקס של הסימניה.
במקרה הראשון, בפונקציה get_bookmark_index, התוכנית שופטת כדלקמן
(music_setmenu_bookmark_deal.c):
אם (bm_head_ptr-> total_index! = 0xffff)
{
// צריך לחצות את אזור נתוני פריט המדד
אינדקס = find_index (cluster_no, dir_entry, bm_fp, 1);
}
אַחֵר
{
// פריט הרשומה הוא 0
bm_head.total_index = 0;
bm_head.del_total = 0;
אינדקס = 0xffff;
is_write_bmk = TRUE;
}
במקרה השני התוכנית נמצאת בפונקציה find_index (), התוכנית היא כדלקמן:
נסה שוב: read_sector (0, bm_fp); // מעבר מגזר האינדקס הראשון
bmk_index_item + = 2; // כל פריט אינדקס תופס 12 בתים, אך 24 הביטים הראשונים מוקצים לכותרת הסימניה, אז הוסף 2
loop_cnt = bm_head.total_index + bm_head.del_total; // חישוב המספר הכולל של הסימניות

עמוד 337
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 337
// קרא כל פריט אינדקס בלולאה כדי לקבוע אם הוא תקף
עבור (i = 2; i <(loop_cnt + 2); i ++)
{
אם (search_mode == 0) // search_mode = 0 חפש רק פריטי סימניה תקפים, דלג על פריטי סימניה שנמחקו
{
אם ((cluster_no == bmk_index_item-> bmk_clus_no) && (dir_entry ==
bmk_index_item-> bmk_dir_eny))
{
// קבל את כתובת הפריט של אינדקס אזור הנתונים
file_index = i-2;
לשבור;
}
}
אַחֵר
{
אם ((0xffffffff == bmk_index_item-> bmk_clus_no) && (0xffffffff ==
bmk_index_item-> bmk_dir_eny))
{
// הפריט הנוכחי במצב שנמחק ואז הפריט סרק ממוחזר
file_index = i-2;
bm_head.del_total--;
לשבור;
}
}
bmk_index_item ++;
אם ((i% BM_SECTOR_PER_SORT_INDEX) == 0) // אם חיפוש הנתונים המגזר הנוכחי הושלם, חפש את הסקטור הבא
{
file_read (bm_buf, SEC_SIZE_USE, bm_fp);
bmk_index_item = (mbmk_index_t *) (bm_buf);
bmk_cache_sector ++;
}
}
אם נמצא פריט האינדקס של הסימניה, פריט הנתונים המתאים ייכתב לנתונים. הפונקציה לכתיבת פריטי סימניה היא
handle_bookmark (), ממוקם ב music_setmenu_bookmark_deal_sub.c. קח את הוספת פריט סימניה כדוגמה:
// קבל את זמן ההפעלה הנוכחי
music_get_playinfo (& play_info);
// זמן ההפעלה מומר לשניות

עמוד 338
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 338
time = (play_info.cur_time / 1000);
// ארגן את פרטי השעה של פריטי סימניה
bm_item.break_time.hour = (uint8) (זמן / 3600);
bm_item.break_time.minute = (uint8) ((זמן% 3600) / 60);
bm_item.break_time.second = (uint8) (זמן% 60);
// קבל את פרטי מיקום נקודת הפסקה של פריט הסימניה
music_get_bkinfo (& bm_item.break_param);
התוכנית שלמעלה תקבל את התוכן של פריט הסימנייה להוסיף, התוכנית הבאה היא לכתוב את פריט הסימנייה לקובץ:
libc_memcpy (& (bm_data_ptr-> mfile_bmk_items [פעיל]), & bm_item, sizeof (music_bm_item));
מגזר הכתיבה (cur_index / 2 + BM_HEADER_SECTOR_NUM, g_bookmark_fp);
מחיקת פריטי הסימניה דומה לתוספת של פריטי סימניה, ההבדל היחיד הוא שתוכן הקובץ להוסיף הוא כל נתוני ה- 0xff.
אלה נתונים לא חוקיים, ולכן מושגת מטרת המחיקה.
לגבי מחיקת פריט הסימניה ומחיקתו של קובץ הסימניות המתאים בעת מחיקת קובץ המוסיקה, תוכנית הניתוח של הקורא עצמה היא כמו
איך להשיג.
8.4.8 תרשים זרימה של מודול יציאת היישום
צא לאחר קבלת הודעת היציאה MSG_APP_QUIT. מודול זה שומר בעיקר הגדרות פרמטרים ומידע על נקודות השבר
וכמה פונקציות כמו שחרור משאבים.
כאשר מאתחל בורר קבצי ה- UI למוסיקה, אות הכונן מתקבלת דרך מנוע הרקע או מאנשי AP אחרים, מוסיקה Ui
זה לא משנן את מכתב הכונן עצמו. אם אתה יוצא ממוזיקה ap כדי ליצור רשימת השמעה וחוזר למוזיקה ap, עליך לקרוא את הדיסק הקודם
לכן, לפני יצירת רשימת ההשמעה, כתוב את נתיב הקובץ הנוכחי ל- VM של הדפדפן ap.
כשיוצאים מרשימת ההשמעה ap וחוזרים למוזיקה ap, אתה יכול לקבל את אות הכונן הקודמת.
8.5 סדרת שיחות ממשק ותיאור רצף להפעלת קובץ שמע
האיור הבא מתאר את בחירת השיר מממשק הרשימה להפעלה ליציאת אפליקציית המוזיקה, אפליקציית ה- UI למוזיקה והצעת המחיר למוזיקה
יישום מנוע ותהליך האינטראקציה של חוט הפענוח.

עמוד 339
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 339
התחל את חוט הפענוח
הגדר קובץ הפעלה
הפעל את הפקודה התחל
גילוי לולאה של מצב ההפעלה
גזירה
שינוי
תַחַת
אחד
שִׁיר
סגור את חוט הפענוח
משחק שלם
חִיצוֹנִי
יחידה
חַיִים
עשה
צוּרָה
מדינה
חשבון
מדידה
קשר
חבילה
לִפְתוֹחַ
התחלה
הפעל את המנוע
בחר קובץ להפעלה
תתחיל לשחק
גילוי לולאה של מצב ההפעלה,
האם להחליף שירים
כבה את המנוע
בקשה להפסיק
MMM_MP_OPEN
MMM_MP_SET_FILE
MMM_MP_PLAY
MMM_MP_GET_STA
TUS
MMM_MP_CLOSE
מוסיקה ui
מנוע מוסיקה
פקודות Middleware
ניתן לראות את המאפיינים הבאים מהאיור:
✧ יוזם הפקודה הוא ui מוסיקה, כלומר יישום החזית שולט על פעולת מנוע הרקע. לדוגמה, התחל את חוט הפענוח,
התחל הפעלת קובץ, קבל סטטוס השמעה וכו '.
Three שלושת היישומים (האשכולות) הם למעשה יחידות תזמון נפרדות, וסדר העדיפות הוא: פענוח עדיפות פתיל> מוסיקה
מנוע> מוסיקה ui. הדבר מבטיח שלמשימות בעלות עדיפות גבוהה יש מספיק זמן להגיב לבקשות ממשימות בעלות עדיפות נמוכה.
פְּשִׁיטַת יָד
✧ החזית והרקע מממשים תקשורת בין משימות בצורה של שליחת הודעות, ואילו חוטי הרקע והפענוח עוברים דרך ממשק המערכת
mmm_mp_cmd, קרא מילות פקודות ממשק שונות כדי להשיג פונקציות מתאימות. כשאתה צריך להוסיף פקודה חדשה,
צריך להוסיף סוג הודעה בין החזית לרקע, אם חוט הפענוח נדרש להשתתף, יש להוסיף אחד חדש בו זמנית
מילת פקודת ממשק
על פי הנתון לעיל, התהליך הספציפי למימוש השמעת קבצים הוא כדלקמן:
✧ ראשית, חזית המוזיקה שולחת הודעה לתהליך המנהל לבקש יצירת מנוע מוסיקה, ומנוע המוזיקה צריך
הפרמטרים מועברים למנהל
✧ המנהל מעביר פרמטרים למנוע המוזיקה בעת יצירת מנוע המוזיקה
✧ מנוע המוזיקה משתמש במילת הפקודה MMM_MP_OPEN כדי לפתוח את חוט הפענוח של המוזיקה מיד לאחר יצירתו.

עמוד 340
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 340
למעשה, נוצר כלי תוכנה לפענוח מוזיקה, חוט הפענוח של המוסיקה הנו יחידת תזמון עצמאית.
היא משימה
Thread לחוט הפענוח של המוסיקה יש עדיפות גבוהה ביותר לאחר יצירתו, כך שהוא מתוזמן מיידית לביצוע. אבל שום קובץ לא מנוגן כרגע,
אז המתן להפעלת הקובץ
✧ אם UI של מוסיקה בוחר קובץ להפעלה ברגע זה, UI של המוסיקה שולח הודעת SET_FILEPATH למנוע המוזיקה
✧ לאחר שמנוע המוזיקה יקבל את ההודעה, הוא מנתח את נתיב הקובץ ומגדיר את הקובץ להפעלה דרך MMM_MP_SET_FILE
Receiving לאחר קבלת הפקודה, חוט הפענוח פותח את הקובץ מייד ומבצע ניתוח פורמט (פורמט
בדוק), קבל פורמט קובץ, מידע על זמן וכו '.
✧ ui מוסיקה שולח הודעת PLAY למנוע המוזיקה, ומנוע המוזיקה מנגן את הקובץ דרך MMM_MP_PLAY
✧ לאחר קבלת MMM_MP_PLAY, מנוע הפענוח טוען את ספריית הפענוח, מגדיר את תדירות העבודה המתאימה ומתחיל את הפענוח.
קוד, אתה יכול לשמוע את הקובץ מתנגן
✧ בתהליך הנגינה, רכישת זמן המשחק ומצב המנוע מתבצעת על ידי דלפק הקבלה ושולחת באופן פעיל הודעות לשאילתה. מנוע
לאחר קבלת ההודעה הוא יקבל את מצב חוט הפענוח דרך MMM_MP_GET_STATUS, ויקבע את מצב המנוע בהתאם.
סטָטוּס. תרשים זרימת המעבר של המנוע מוצג באיור הבא:
אם אתה צריך לצאת מאפליקציית המוסיקה במהלך ההפעלה או אחריה, תשלח הודעה לרקע דרך הקדמה,
לאחר קבלת ההודעה ברקע, סגור את חוט הפענוח ואז צא. המנהל ישיב להודעה בדלפק הקבלה לאחר בירור על יציאת הרקע,
אז דלפק הקבלה יוצא מעצמו ויוצר יישום דלפק חדש.
בואו למנות את רצף השיחות של הפונקציה להפעלת השירים מחוט הפענוח של המוזיקה, מנוע המוזיקה ו- ap הקדמי.
משתמשים יכולים לממש את הצרכים האישיים שלהם בהתאם.

עמוד 341
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 341
תוכנית השורות 11-30 לעיל היא פונקציית האתחול של ספריית הפענוח, והתכנית המתאימה ממוקמת ב- _app_init () ב- mengine_main.c, תוכנית
טען תחילה את חוט הפענוח, ואז פתח את חוט הפענוח דרך מילת הפקודה MMM_MP_OPEN וקבל את מילות הפתיל
ידית. לאחר מכן, האינטראקציה עם החוט נעשית דרך הידית. לבסוף, הפעל את פלט הקול, פעולה זו אינה הכרחית
הפעולה, מכיוון שמשמיעים קובץ, EQ, עוצמת הקול ופרמטרים אחרים עדיין יוגדרו בהתאם לסוג ההפעלה של הקובץ.
32-35 הגדרת התנהגות קובץ הפעל, התוכנית לדוגמא שניתנה כאן היא להפעיל קובץ אזור SD, אז הגדר ישירות את קובץ ההפעלה
זהו זה. עבור קבצי מוסיקה רגילים, יש לאתחל את בורר הקבצים ולפחות יש לטעון את מערכת הקבצים וההגדרות המתאימות.

עמוד 342
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 342
备 כונן. פונקציה זו מיושמת במנוע המוזיקה, mengine_set_filepath () (ממוקם ב mengine_event.c), לפני
לאחר שהתחנה מעבירה את נתיב הקבצים אל מנוע הרקע דרך ההודעה, המנוע קובע אם היא צריכה לאתחל את בחירת הקבצים בהתאם לפסק הדין המתאים.
בוחר. הנה, פעולה זו מושמטת. לאחר הגדרת הקובץ להפעלה, קו 41-43 קבל את פרטי הקובץ והשתמש ב- PLAY
פקודה להפעלת הקובץ. הפונקציות המתאימות במנוע המוזיקה הן _set_file () ו- _play () (הממוקמות ב mengine_play_deal.c).
49-64 לולאת המצב כאשר ההתנהגות משחקת, כאן תמיד שואלים את מצב חוט הפענוח, אם חוט הפענוח שגוי או נעצר
עצור מצב (נגינת השיר מסתיימת), ואז סיים את לולאת המצב. יש לולאת מצב דומה במנוע המוזיקה, הפונקציה היא
mengine_status_deal () (mengine_control.c), פונקציה זו שואלת את מצב חוט הפענוח ומבצעת פעולות לפי סטטוס שונה
הרציונל. ניתן לראות בפונקציה זו הרחבה ושיפור של הפונקציה לעיל.
66-84 הוא שגיאה או עיבוד יציאה רגיל. סגור את חוט הפענוח ופרק את ספריית הפענוח.
על פי התיאור לעיל, אם מדובר במנוע מוסיקה, רצף הקריאה לממשק להפעלת קובץ שמע הוא:

עמוד 343
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 343
תוכנית זו היא רק תוכנית לדוגמה, שנוחה למשתמשים להבין טוב יותר את רעיונות ההגשמה של מוזיקה ap. ניתן לראות כי התוכנית ו-
פונקציות הקריאה של חוטי הפענוח לעיל דומות מאוד, למעט שהממשקים כולם מכוסים בפונקציות המתאימות.
עבור ui מוסיקה, הדרך היחידה לממש השמעת מוסיקה היא לספק את הפונקציות לעיל בצורה של העברת הודעות בקדמת הבמה. קבלה
אינך צריך לדאוג לאופן בו הרקע מממש את פרטי ההשמעה, פשוט העביר את הפרמטרים המתאימים בהתאם לדרישות ההודעה. תַחַת
דוגמה ניתנת להמחשה כיצד דלפק הקבלה מיישם את השמעת קובצי המוסיקה.
כיצד ליישם קבלת פנים עם צליל האתחול? מסך האתחול הרגיל מיושם על ידי קריאת פונקצית draw_logo () ביישום config
(ממוקם ב- config_main_sub.c), draw_logo () קורא לפונקצית השליטה הנפוצה gui_logo () כדי להציג את לוגו האתחול. כמו
אם לוגו האתחול נדרש להפלטת צליל בעת הצגת תמונות, עליך להפעיל השמעת מוסיקה. תוכנית המדגם המתאימה היא
תַחַת:
void draw_logo (uint8 param)
{
animation_com_data_t temp_animation;
style_infor_t temp_sty;
temp_animation.direction = 0;
temp_animation.interval = 200;
אם (param == SWITCH_ON)
{
temp_sty.style_id = STY_POWER_ON;

עמוד 344
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 344
}
אַחֵר
{
temp_sty.style_id = STY_POWER_OFF;
}
temp_sty.type = UI_AP;
ui_res_open ("config.sty", UI_AP);
music_playing_init ();
gui_logo (& temp_sty, & temp_animation);
music_close_engine ();
ui_res_close (UI_AP);
}
התמקד ביישום של music_playing_init (). הקובץ שמושמע כאן ממוקם באזור SD, כך שהעיבוד הוא פשוט מאוד. הקוד הוא כדלקמן
תַחַת:
void music_playing_init (void)
{
uint8 cur_mode;
music_open_engine (ENTER_ALARM);
g_file_path.file_source = FSEL_TYPE_SDFILE;
libc_memcpy (g_file_path.file_path.dirlocation.filename, g_sd_filename, 12);
if (music_set_filepath (& g_file_path) == FALSE) // הגדר נתיב קובץ
{
לַחֲזוֹר;
}
set_current_volume (g_setting_comval.g_comval.volume_current);
// הגדר את מצב הלולאה
cur_mode = FSEL_MODE_LOOPONE;
music_set_playmode (cur_mode);
play_play ();
}
פונקציות אלה מיושמות ב- ap, כך שהן אינן מופיעות ברשימה. ניתן לראות כי דרך אריזה מלמטה למעלה שכבה אחר שכבה, אנו מספקים
לספק למשתמשים דרך מאוד מהירה להפעלת קבצי מוסיקה. משתמשים יכולים להשיג יותר ויותר צרכים מותאמים אישית בהתאם
פְּשִׁיטַת יָד.

עמוד 345
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 345
8.6 כיצד להפחית את התמיכה בפורמט שמע
הגדרת המאקרו MUSIC_BITMAP של סוגי הקבצים הנתמכים על ידי מוסיקה מוגדרת במקרה / inc / case_type.h, שנה
שינוי מפת הסיביות יכול להפחית את התמיכה בפורמט השמע. שנה הגדרות מאקרו אחרות כדי לשנות את תבנית הקובץ הנתמכת על ידי היישום המתאים.
# הגדר MUSIC_BITMAP
0x7e010e00
# הגדר AUDIBLE_BITMAP 0x00003000
# הגדר את VIDEO_BITMAP
0x01004000
# הגדר PICTURE_BITMAP 0x00780000
# הגדר TEXT_BITMAP
0x00800000
# הגדר את RECORD_BITMAP
0x50000000
8.7 כיצד לממש ניתוח ותצוגה של מילים
ניתוח הזרימה והעיבוד של מודול המילים בערך כדלקמן:
מנוע המוזיקה מכנה את ממשק ניתוח המילים המשופר לניתוח המילים. אם מילות המילים קיימות, הגדר את הדגל
קצת. הקוד ממוקם ב _set_file () (mengine_play_deal.c):
g_eg_playinfo_p-> cur_lyric = 0;
אם (g_is_audible == FALSE)
{
vfs_get_name (file_sys_id, g_file_name, 32);
g_eg_playinfo_p-> cur_lyric = lyric_open (g_file_name);
}
תוצאה = _get_file_info (TRUE);
כאשר Ui המוסיקה ימצא את הדגל הזה, הוא יתקשר לממשק רכישת המילים בכל שנייה כדי לנסות להשיג
המילים בזמן הנוכחי.
הקוד ממוקם ב _playing_check_status () (music_playing_playdeal.c):
// קבל מידע על השמעה
music_get_playinfo (& playinfo);
...
אם (g_music_config.lrc_support == TRUE)
{
g_lyric_flag = playinfo.cur_lyric;
}
אם השעה הנוכחית היא בדיוק בין שני תגי מילות מילים, יש לנתח ולהציג את המילים הנוכחיות
הקוד הוא ב- show_lyric () (music_playing_playdeal.c):
אם (lyric_check_query_time (g_cur_time)! = 0)
{

עמוד 346
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 346
אם (lyric_seek_for (lrc_buf, LRC_BUF_LEN, g_cur_time) == TRUE)
{
lyric_param_init ();
libc_memset (display_buf, 0, LRC_BUF_LEN);
parse_lyric (& g_lyric_decode);
display_lrc_str (g_lyric_decode.output_buffer);
}
}
ניתן לראות כי ניתוח המילים כאן מחולק לשני שלבים: ראשית, משופר משופר קורא את קובץ המילים, ובהתאם למילים
תג הזמן מסודר בכמה מידע על מילים. Ui המוזיקה מכנה את הממשק המשופר כדי להשיג את המילים בנקודת זמן מסוימת.
נכון לעכשיו, יש לארגן שוב את המילים לטקסטים מרובי שורות או אפילו למסכים מרובי-מסכים שניתן להציג על גבי LCD. בחר מנוע מוסיקה כדי
מנתח את המילים במקום את המוסיקה ui, מכיוון שמנוע המוזיקה יכול לדעת בדיוק מתי נעצרת ומושמעת המוזיקה.
על מנת לנתח את המילים לפני הנגינה. בגלל עימותי שטח, לא ניתן להתאים את ממשק ה- UI לפני השמעת השיר.
השתמש בפונקציה של ניתוח מילים. אז סדר את הפונקציה של ניתוח המילים ליישום במנוע המוזיקה. דבר לאחר קבלת המילים במוסיקה ui
כאשר המילים ממוינות למחרוזות פלט, תצורת התוכנית נתמכת.על פי ערך התצורה, מילות השיר תומכות בעיבוד רב-קו, רב-מסך ושבירת מילים. שִׁיר
מודול המילה תומך בתצורות הפונקציונליות הבאות:
האם לסנן מעברי קו ומרווחים בתחילת מילות השיר
האם לתמוך בפונקציית פילוח המילים של מילים (כלומר, עבור תווים באנגלית, בחר מילים כמושא הניתוח)
האם לתמוך בתצוגה רב-מסכי של מילים
ניתן לשלוט על מצב התצוגה של המילים על ידי הגדרת מצב התצוגה של המילים. המבנה מוגדר כך:
typedef struct
{
/ *! הצגת מספר השורות בעמוד * /
uint8 line_count_one_ דף;
/ *! הצגת הרוחב של שורת פיקסלים * /
uint8 max_width_one_line;
/ *! מצב תצוגה, כולל סינון קווים ריקים, הצגת פילוח מילים וכו '. * /
מצב uint8;
/ *! סוג השפה * /
int8 שפה;
} lyric_show_param_t;
התצורה הרלוונטית למילות התוכנית נמצאת ב- Lyric_param_init () (music_playing_show_lyric.c), השתמש
אם המשתמש צריך לשנות את מצב התצוגה של מילות השיר, הוא יכול לשנות את פריטי התצורה המתאימים בהתאם להערות.
void lyric_param_init (void)
{
g_lyric_decode.input_buffer = lrc_buf;
g_lyric_decode.output_buffer = display_buf;
g_lyric_decode.input_length = 0;

עמוד 347
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 347
g_lyric_decode.input_remain = (uint16) libc_strlen (lrc_buf);
g_lyric_decode.output_length = 0;
g_lyric_decode.param.line_count_one_page = LYRIC_LINE_COUNT_ONE_PAGE;
g_lyric_decode.param.max_width_one_line = LYRIC_MAX_WIDTH_ONE_LINE;
g_lyric_decode.param.mode = (LRC_FILTER_BLANK_ENABLE | LRC_DIVIDE_WORD_ENABLE |
LRC_DIVIDE_SCREEN_ENABLE);
g_lyric_decode.param.language = (int8) g_setting_comval.g_comval.language_id;
}
מודול ניתוח ליריקה מבין שבירת מילים, הצגת מסך מפוצל ופונקציות אחרות, הפונקציה היא parse_lyric (), הפונקציה המתאימה
התהליך מוצג באיור שלהלן:
8.8 כיצד מוסיקה משיגה ומציגה תמונות אלבומים
פיתרון us212a תומך בתצוגה של תמונות אלבומי מוסיקה ותמונות משובצות נשמעות. . לקבצי מוסיקה רגילים, אלבומים
התמונה מתקבלת על ידי UI מוסיקה על ידי קריאה לתווך משופר, ותמונת האלבום הנשמעת, תמונת הרזולוציה מתקבלת גם על ידי
זה מתקבל על ידי תווכה, ותמונות משובצות אחרות בקובץ aax מנותחות על ידי תווך שמע. קיים במוזיקה_היינה

עמוד 348
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
348 עמודים
המשתנים הבאים:
audible_para_t * g_audible_info_p = (audible_para_t *) 0x9fc2f000;
ביניהם מבנה audible_para_t מכיל את המידע הרשומה של המספר, המיקום והגודל של התמונות המוטבעות. יישום מנוע מוסיקה אחד
טיימר 1s משמש לשאילתה האם תמונות אלבום קיימות בנקודת הזמן הנוכחית, והפונקציה המתאימה היא
_check_audible_image () (mengine_event.c). אם הוא קיים, קבע את הדגל המתאים וקרא את פרטי מיקום התמונה
ריבית. לאחר שממשק המשתמש ui ימצא את הגדרת הדגל, הוא יפענח את התמונה בהתאם למידע הנוכחי. ביט פונקציה מקביל
ב- _playing_check_status () (music_playing_playdeal.c):
// למידע על תמונה נשמעת
אם (g_audible_now == TRUE)
{
// עבור קבצים נשמעים חייבת להיות תמונת אלבום, אך רק תמונה אחת לקבצי AA
// יתכנו מספר קבצי AAX, ו- get_playinfo יכול רק לציין את קובץ ה- AAX הנוכחי
// האם יש תמונת אלבום, לא ניתן לנקות את דגל g_album_art
אם ((playinfo.cur_imag_flag! = 0) && (g_music_config.album_art_support == TRUE))
{
// קיזוז תמונת האלבום בקובץ
album_art_info.offset = playinfo.cur_imag_pos;
album_art_info.apic_type = 0;
g_display_bitmap | = up_musicalbumart;
g_paint_flag = TRUE; // Draw
g_album_art = TRUE;
}
אם (g_music_config.section_mode == SWITCH_SECTION)
{
אם ((playinfo.cur_file_switch & 0x02)! = 0)
{
music_get_section_info (& g_file);
// החלף שירים
g_display_bitmap | = up_musictracks;
g_paint_flag = TRUE; // Draw
}
}
}
לאחר ששבר התוכנית מגלה ש cur_img_flag הוא TRUE, הוא מגדיר את סמל הדגל לרענון תמונת האלבום, ובסצינת ההפעלה

עמוד 349
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 349
בלופ הראשי, תמונות האלבום מוצגות על פי דגל זה. הפונקציה ממוקמת ב- play_scene_paint () וההליך הוא כדלקמן:
// תמונת אלבום
אם ((* display_flag & up_musical albumart!! = 0)
{
אם (g_album_art == TRUE)
{
play_paint_albumart (& album_art_info); // אם יש כרגע מילים, קבע את דגל תצוגת המילים
}
אַחֵר
{
// הצג את סמל הדיסק
style.style_id = ALBUM_ART_PICBOX;
ui_show_picbox (& סגנון, NULL);
}
// נקה את הדגל
* display_flag & = clr_musicalbumart;
}
תרשים זרימת הפונקציה של חלק תצוגת הפענוח הוא כדלקמן:
8.9 תצוגה ID3 של סוגי הקבצים הנתמכים על ידי יישום המוזיקה
יישום המוזיקה תומך בניתוח ID3 והצגה של קבצי MP3 / WMA / APE / FLAC / OGG / AAC / AAX / AA.

עמוד 350
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
350 עמודים
ב- mp1 / mp2 / mp3, ה- id3 מנותח בהתאם למפרט ה- mp3, וקובץ m4a הוא גם id3 לפי פורמט ה- aac.
א. לתוכן ID3 המתקבל מתווך משופר יש שלושה פורמטים: קוד פנימי, unicode, UTF8, ו- UTF8
פורמט ID3 יומר ל- unicode, כך שליישום, ל- ID3 המתקבל יש רק קוד פנימי ויוניקוד
שתי צורות. משופר מספק את הממשק get_id3_info () כדי להשיג את ID3 של סוג השיר הנוכחי:
bool get_id3_info (id3_info_t * id3_info, const char * שם קובץ, id3_type_e file_type)
לאחר השגת ID3 דרך ממשק זה, עליך להגדיר את מזהה השפה המתאים בהתאם למחרוזת התווים המתקבלת. פסק הדין המרה הוא כדלקמן:
1. אם ID3 אינו מקודד, הגדר את מזהה השפה ל- UNICODEDATA
2. אם ID3 הוא UTF8, התקשר תחילה לפונקציית ממשק מנהל התקן UI ui_utf8_to_unicode () כדי לשנות את סוג UTF8
המירו את ID3 ל- unicode, ואז קבעו את מזהה השפה ל- UNICODEDATA
3. אם ID3 הוא קוד פנימי, הגדר את מזהה השפה ל- ANSIDATAAUTO
הפונקציה המתאימה היא deal_id3_sub (), הממוקמת ב music_playing_getid3.c, המשתמשים יכולים להתייחס לפונקציה זו ליישום עצמי
פונקצית תצוגה ID3 משלו.
8.10 כיצד לממש השמעה של נקודת הפסקה של המוסיקה לאחר האתחול במחשב הקטן
חידוש נקודת השבירה צריך לממש שתי פונקציות, הראשונה היא זיכרון ושחזור נקודות הפסקה והשנייה היא הפעלה אוטומטית של קבצי מוסיקה לאחר האתחול.
הראשון קל יותר לטפל בו. מנוע המוזיקה חוסך נקודות מעבר לפני כיבוי וקורא את נקודות הפסקה שנשמרו ב- VRAM לאחר האתחול.
שלח את הפקודה לחידוש נקודת הפסקה כדי לממש את הפעלת נקודת הפסקה. האחרון אחראי יותר ודורש ממשק וידיאו ומוזיקה של תצורת ap
האינטראקציה בין המנוע משלימה את ההפעלה האוטומטית של שיר האתחול. כאן יש לפתור שתי בעיות:
❖ כיצד לאתחל ישירות ליישום המוזיקה
❖ כיצד לממש השמעה אוטומטית של שירים
הסתכל ראשית על הפיתרון לבעיה הראשונה. ה- ap ap יתבצע כאשר המחשב הקטן מופעל ומכבה, כך לאיזה ap להיכנס כאשר הוא מופעל נקבע על ידי
config ap החליט. לפני כיבוי, לאחר שהמנהל-הורג הורג את ה- AP והחזית ap-רקע בחזית הנוכחית, לפי הזרם
הגדרת מצב המנוע של הפרמטר המועבר ל- config ap, הפרמטר מורכב משני חלקים, last_app_id ו- last_engine_state,
הראשון תופס 16 סיביות נמוכות יותר, המייצג את מזהה היישום בחזית בעת הכיבוי, והאחרון תופס 16 סיביות גבוהות יותר, המייצג את מצב מנוע הרקע. config ap
לפי זה, ה- ap שנוצר לאחר האתחול ופרמטרי ה- ap המתאימים משוכנים.
לדוגמה, אם השיר מושמע ברקע בשלב זה, הפרמטר שהועבר על ידי מנהל ap ל- config ap הוא last_app_id =
APP_ID_MUSIC, last_engine_state מנגן או מושהה. config ap שומר פרמטרים אלה לפני הכיבוי. שוב
ה- AP הראשון של החזית שנוצר לאחר קריאת הפרמטרים באתחול השני הוא ממשק ה- UI של המוסיקה, ומועבר ל- UI המוסיקה בהתאם לפרמטרים של המנוע.
פרמטרים שונים. זה משלים את פונקציית האתחול ישירות ליישום המוזיקה.
לשאלה השנייה, לאחר הפעלת ממשק המשתמש, הוא נכנס לסצנות שונות לפי הפרמטרים שהועברו. מוזיקה Ui בשימוש זמני
מתוארים מצבי הכניסה הבאים, והמשמעות ותרחישי הכניסה של כל מצב מתוארים להלן:
שֵׁם
מַשְׁמָעוּת
סצנת הכניסה

עמוד 351
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 351
PARAM_FROM_MAINMENU בחרו בסמל המוזיקה מהממשק הראשי להיכנס
סצנת רשימת תפריטים
PARAM_FROM_BROWSER
בחר את סצנת ההפעלה של קובץ המוסיקה מדפדפן הקבצים
PARAM_FROM_RECORD
בחר רשומה מתוך ספריית רשומות או רשומת FM
הזנת קובץ שמע
סצנת משחק
PARAM_BACKTO_PLAYING בחרו בסמל הנגינה או שלו
זה לבחור בתפריט שמנגן כעת כדי להיכנס
סצנת משחק
PARAM_BACKTO_PLAYED
בחר בסמל ההפעלה האחרון מהממשק הראשי או
AP אחר בחר בתפריט ההפעלה האחרון להיכנס
סצנת משחק
PARAM_FROM_PLAYLIST
לאחר יצירת פלייליסט מרשימת ההשמעה AP, חזור
בחזרה למוסיקה ui
סצנת רשימת תפריטים
לפרמטר PARAM_BACKTO_PLAYING או PARAM_BACKTO_PLAYED, אם המנוע הנוכחי לא נפתח, אז
מציין שהוא שייך למצב המתנה לנגינת שירים, כך שהוא יבצע לפתיחת המנוע. מנוע המוזיקה יבצע הפעלה אוטומטית לאחר הטעינה.
זרימת שירים. לכן כאשר config ap יוצר מוסיקה, הפרמטר שהועבר הוא PARAM_BACKTO_PLAYING או
PARAM_BACKTO_PLAYED.
תרשים הזרימה של כל התהליך מוצג באיור הבא:

עמוד 352
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
352 עמודים
8.11 music כיצד לבחור אלבום מסוים ולהשמיע את כל האלבומים של אמן מסוים
עבור אלבום מסוים הבחירה בשיר של זמר מסוים דומה לבחירת ספרייה להפעלה. אם הפריט הפעיל הנוכחי הוא list_no, אז
פשוט התקשר אל fsel_browser_select (list_no) כדי לבחור את האלבום כולו או את רשימת האמנים כולה. ותחת הזמרת
תהיה רשימה של כל השירים ברמה. הבחירה בתפריט זה היא למעשה סכום כל האלבומים של הזמר. אם תגדיר את list_no
אם זה 0xffff, משופר יכול לבחור את כל האלבומים של אמן מסוים. תוכנית המדגם הרלוונטית היא כדלקמן:
fsel_browser_enter_dir (CUR_DIR, 0, ודפדפן);
אם ((פעיל == 0) && (browser.dir_total! = 0))
{
// בחר את כל האלבומים מאותו סוג להפעלה
פעיל = 0xffff;
}
אַחֵר
{
אם (browser.dir_total! = 0)
{
// בחר סגנון מסוים, זמר, אלבום שישחק
}
אַחֵר
{
אם (פעיל == 0)
{
// התפריטים המקוננים של allsong כולם מנוגנים באופן אקראי
פעיל = 1;
}
}
}
fsel_browser_select (פעיל);
fsel_browser_get_location (plist_locatp, מיקום-> file_source);
הפונקציה היא _music_listmenu_play_file (), הממוקמת ב music_listmenu_listoption.c.
8.12 כיצד לאתר אלבומים, זמרים ופלייליסטים אחרים
אמנים, אלבומים, ז'אנרים ושירים שייכים לרשימת המשנה העליונה של רשימת ההשמעה, ולכן סוג המיקום הוא plist_location,
המבנה מוגדר כך:
// פרטי הקבצים תחת רשימת ההשמעה
typedef struct
{

עמוד 353
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 353
uint8 דיסק;
// DISK_C; DISK_H; DISK_U
uint8 list_layer;
// שכבות רשימה
uint16 list_type;
// סוג תת-טבלה plist_type_e
שם קובץ uint8 [4];
// הסיומת של הקובץ, הכול מלא ב- 0 פירושו שמידע הקובץ ריק
uint32 cluster_no;
// מספר האשכול של ערך הספרייה של הקובץ
uint32 dir_entry;
// קיזוז ערך ספריית הקובץ בתוך מספר האשכול
pdir_layer_t dir_layer_info; // מידע ברמת המדריך
uint8 res_3byte [3];
// שמור על יישור
uint16 file_total;
// המספר הכולל של הקבצים הנוכחיים (המספר הכולל של שכבות הקבצים ברשימה הנוכחית)
uint16 file_num;
// המספר הסידורי של הקובץ הנוכחי (המספר הסידורי של שכבת הקובץ מתחת לרשימה הנוכחית)
uint16 file_index;
// מספר אינדקס קבצים נוכחי (המספר הסידורי באזור הנתונים)
uint16 שמור;
// שמור על יישור
uint16 list_layer_no [4]; // רשמו את המיקום בכל שכבה ברשימה בה נמצא הקובץ (מוקלט בנפרד במיקום הממוין של כל שכבה)
uint16 layer_list_offset; // מיקום קיזוז רשימה
שמורת uint16;
// שמור על יישור
} plist_location_t;
ביניהם list_layer מציין כי הנתיב הנוכחי הוא ברמה של רשימת ההשמעה, לדוגמה, עבור רשימת האמנים המשנה, אם list_layer הוא 1,
מציין שזה ברמת האלבום. ו- type_type משמש לתיאור סוג הסובליסט הנוכחי. להשתמש
מיקום fsel_browser_set_location () משמש לאיתור טבלת משנה מסוימת. לדוגמה, בחר את האלבום ב music_scene_listmenu.c
הזן את תפריט המשנה וההליך הוא כדלקמן:
browser_path-> file_source = FSEL_TYPE_PLAYLIST;
browser_path-> file_path.plist_location.list_type = PLIST_ALBUM;
// אתר את טבלת המשנה
fsel_browser_set_location (& (browser_path-> file_path), browser_path-> file_source);
הפונקציה היא music_scene_listmenu_menu (), הממוקמת ב music_scene_listmenu.c, המשתמשים יכולים להתייחס לפונקציה זו כדי להשיג
הפונקציה של איתור רשימת ההשמעה המתאימה.
8.13 כיצד להתמודד עם קבצים שאינם תומכים בתבנית המוזיקה
קבצים לא חוקיים שנתקלו במהלך השמעת מוסיקה יעובדו בצורה שונה על פי סצינות שונות. אם החזית היא מוסיקה UI והיא נמצאת ב
שחק את הסצינה, ממשק המשתמש של המוזיקה ישאל את מצב המנוע הנוכחי, כך שהמנוע יכול לתת משוב על מצב השגיאה הנוכחי לקדמת הבמה
כמו כן, הוא מודיע כי הפורמט אינו נכון. בשלב זה המנוע אחראי רק לעיבוד הסטטוס וחותך את השיר הבא או הקודם בהתאם להודעה שנשלחה על ידי הקדמה. כמו
אם החזית נמצאת בסצינות אחרות, לאף חזית לא יהיה אכפת אם השיר הנוכחי שגוי, ולכן המנוע מסיים באופן פעיל את תהליך מיתוג השיר.
בחר את השיר הבא שתנגן. פונקצית העיבוד של המנוע לשגיאות פורמט היא
mengine_status_deal () (mengine_control.c), הקוד הוא כדלקמן:
מקרה MMM_MP_ENGINE_ERROR: // שגיאה
// הקדמה אינה ממשק משתמש מוסיקלי או שהקדימה נכנסת למצב שומר המסך, ושגיאה מתרחשת ישירות בכריתת השיר הבא
אם ((g_app_info_state.app_state! = APP_STATE_PLAYING) || (g_app_info_state.screensave_state == TRUE))

עמוד 354
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 354
{
// אם דלפק הקבלה אינו מוסיקה ui, חתוך ישירות את השיר הבא
_error_timeout_handle ();
}
אַחֵר
{
// אחרת, המתן עד שהקדמה תגיב למצב ממשק המשתמש
bret = _ עצירה (STOP_NORMAL); // הפסק לשחק
// המצב בו מדווחים על שגיאה לפני המשחק
אם ((g_eg_status_p-> play_status == StopSta) || (g_eg_status_p-> play_status == PauseSta))
{
// סגור את הקובץ
mmm_mp_cmd (mp_handle, MMM_MP_CLEAR_FILE, (לא חתום) NULL);
}
// שחזר למצב ברירת המחדל כדי למנוע קדימה והרצה אחורה בעת המפגש עם קובץ שגיאת פורמט
g_eg_status_p-> play_status = StopSta;
g_eg_status_p-> fast_status = FBPlay_Null;
g_eg_status_p-> ab_status = PlayAB_Null;
mengine_save_errno_no ();
}
לשבור;
8.14 מהן אמצעי הזהירות לקריאה וכתיבה של VRAM לפני ואחרי מוזיקה
בפתרון זה, יישום המוזיקה מחולק לשני אפליקציות, הקדמי והאחורי, כך שהקדמי והן האחורי ינגשו ל- VRAM של comval.
על פי ההיגיון הכללי, האפליקציה תקרא VRAM בעת הכניסה, ותכתוב ל- VRAM ביציאה.
אבל יש בעיה כרגע, כלומר, הערך החדש יותר של VRAM עשוי להיות מוחלף. כפי שמוצג מטה:

עמוד 355
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 355
כפי שמוצג באיור, מאחר שהמוסיקה UI אולי יצאה לפני מנוע המוזיקה, כאשר מנוע המוזיקה
ביציאה, התוכן שנשמר ישן, וגורם להחלפת ערך ה- VRAM המעודכן של ממשק ה- UI.
לכן, מנוע המוזיקה צריך לשים לב במיוחד לאחסון VRAM של comval, רק לשמור את מנוע המוזיקה בהופעה
עבור החברים שישמשו ושונו, כל שאר החברים ייקראו מ- VRAM לפני שיישמרו.
8.15 מה שצריך לציין בתהליך הכיבוי על ידי לחיצה ארוכה על כפתור ההפעלה בזמן שהמוזיקה מתנגנת
כאשר המוזיקה מתנגנת, דלפק הקבלה ישלח ברציפות הודעות לרקע השואלות על מצב ההפעלה הנוכחי, זמן ההפעלה ומידע אחר.
לחץ לחיצה ארוכה על כפתור ההפעלה כדי לכבות או להתחבר לכבל ה- USB, אתה צריך להיכנס לדיסק U, אתה צריך קודם לסגור את יישום המוזיקה ואז להיכנס לתצורת
כבה את התהליך או צור יישום udisk.
בעת סגירת אפליקציית המוזיקה, עליכם לשים לב לרצף היציאה של הקצה הקדמי והאחורי. מכיוון ששליחת ההודעות יוזמת בקדמת הבמה, הרקע
מקבל עיבוד, אז עליכם לצאת ראשית מקדימה, ואז לסגור את הרקע, אחרת הוא יילכד מכיוון שהקדמה לא יכולה לחכות לתשובת ההודעה.
הכנס למצב החסימה.
כאשר אפליקציית המנהל מקבלת הודעה דומה, היא משדרת תחילה את ההודעה ליישום החזית ומחכה שהיציאה מהחזית לפני שתשחרר את המשאבים;
לאחר יציאת התחנה היא שולחת הודעה לרקע לאחר שהרקע יוצא, יישום המנהל יוצר את היישום המתאים.
הפונקציה המתאימה ממוקמת ב- manager_msg_callback_sub () (manager_msg_handle2.c), המשתמש יכול לעקוב אחר ההסבר לעיל
על ידי השוואה בין יישום הקוד, הבנה טובה יותר של עקרונות האינטראקציה של AP בתרחישים רבים של יישומים.
8.16 מהן אמצעי הזהירות לקריאה וכתיבה של VRAM במהלך השמעת השירים
הסצינות בהן VRAM קורא וכותב במהלך השמעת השירים הם כדלקמן:
5) הפעלת המועדפים והסימניות בדיסק הראשי
6) שמור נקודות הפסקה נשמעות במהלך השמעה נשמעת
7) משתני VRAM ומשתני VRAM גלובליים של היישום הנוכחי יישמרו בעת החלפת יישום החזית
מכיוון שהמאגר המשמש לקריאה וכתיבה של VRAM והמאגר המשמש למיתוג בנקאי הם אותו מאגר, השניים

עמוד 356
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 356
היחסים הם בלעדיים הדדית. כדי להבטיח עקביות נתונים, המערכת מכבה את ההפרעה כשקוראים וכתובים את VRAM. לצמצם
בשל בעיית התגובה בטרם עת שנגרמה כתוצאה מהפסקת הכיבוי, יש לשים לב להיבטים הבאים בעת קריאה וכתיבה של VRAM במהלך נגינת השירים:
צמצם את מספר הקריאות והכתיבות של VRAM כדי להפחית את העיכוב של הפרעות המתגים ואת מספר הכתובות ל- nandflash
בעת קריאה וכתיבה של VRAM, השתמש ב 512 בתים כגודל המאגר כדי למנוע כתיבת קבוצות נתונים גדולות
בצע אופטימיזציה של התוכנית למניעת מעבר בנקאי במהלך קריאה וכתיבה של VRAM
8.17 כיצד עוברים נשמע בין תמונות אלבום לפרקים?
בקשה לשני טיימרים של ממשק משתמש במנוע המוזיקה המשמשים ספציפית לשאילתה אם התרחש אלבום במהלך ההפעלה הקולית הנוכחית.
החלפת תמונה או החלפת פרק. הקודק הנשמע מספק מאגר לקריאת הקובץ השמע הנוכחי
מספר תמונות האלבום והשעה, המיקום, המספר הכולל של הפרקים וזמן המעבר לפרק של כל תמונה באלבום. יחס מעבר טיימר
נקודת השעה הנוכחית ונקודת הזמן המסופקת על ידי ה- Codec קובעים האם מתג תמונת האלבום או מתג הפרק התרחשו. פַּעַם
כאשר מתרחש מתג, מוגדר סמל הדגל המתאים. דלפק הקבלה ישאל ברציפות מידע זה. לאחר הגדרת הדגל,
הגרפיקה המתאימה או מספר הפרק המתאים יוצגו. מידע ההפעלה שמספק המנוע מוגדר באופן הבא:
/ *!
* \ תקציר
* מידע על קבצים נוכחיים
* /
typedef struct
{
/*! זמן נוכחי*/
uint32 cur_time;
/ *! קצב הסיביות * /
uint32 cur_bitrate;
/ *! מיקום תמונה נשמעת * /
uint32 cur_imag_pos;
/ *! לתמונה נשמעת לוגו (תמונה שלא נפתרה) * /
uint8 cur_imag_flag;
/ *! מילים קיימות דגל * /
uint8 cur_lyric;
/ *! החלפת קובץ דגל 0: האם להחליף את השיר bit1: האם להחליף את הפרק השמע * /
uint8 cur_file_switch;
} mengine_playinfo_t;
דלפק הקבלה יכול לדעת אם יש מתג לפרק על ידי שאילתת ביט הדגל המתאים של cur_file_switch. שאילתה cur_image_flag
בין אם זה נכון, תוכלו לדעת האם יש להציג את תמונת האלבום המתאימה.

עמוד 357
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
357 עמודים
8.18 כיצד ניתן להשמיע את פונקצית קורות החיים של נקודת השבר
ה- SDK הנוכחי תומך בשינון נקודת משך הזמן של הקובץ השמע האחרון שהושמע. לאחר שהשיר הנשמע הושמע,
נקודת הפסק זמן תירשם. דלפק הקבלה g_music_config משתמש בדגל כדי להקליט אם יש שירים נשמעים שמושמעים.
סמל הדגל יימחק רק לאחר יצירת רשימת ההשמעה. מבנה נקודת השבירה הקולית מוגדר כך:
/ *!
* \ תקציר
* הגדרת מבנה פונקציה נשמעת
* /
typedef struct
{
קסם uint16;
// uint8 כותרת [30];
/ *! מידע על נקודות מעבר * /
mmm_mp_bp_info_t bk_infor;
/ *! מידע על הנתיב * /
file_path_info_t locat_info;
} audible_resume_info_t;
ביניהם משתמשים בקסמים כדי לשפוט האם נקודת השבירה הקולית הנוכחית תקפה. כאשר נוצר רשימת ההשמעה, הקסם יוגדר כלא תקף
סטָטוּס. הקלטת נקודת הפסקה האמיתית צריכה לתעד את המידע על נקודת הפסקה ומידע הנתיב של הקול הנשמע כעת. תכנים אלה הם
זה למעשה כתוב על ידי המנוע. על מנת לצמצם את מספר נקודות הניתוק ל- VRAM, הכללים לכתיבת נקודות הפסקה כרגע הם כדלקמן:
כאשר דלפק הקבלה נכנס מתוך ספר השמע, אם אין השמעה נשמעת וסימן נקודת הפסקה קיים, נקודת המתח תוקרא מ- VRAM
לחץ על התוכן כדי להציג את חידוש נקודת הפסקה, אחרת קבל ישירות את המידע על נקודת הפסקה הנוכחית
מנוע הרקע אחראי על כתיבת נקודות הפסקה אמיתיות, ישנם רק שני מצבים בהם נכתבים נקודות הפסקה נשמעות, מנוע מוסיקה
אם מדובר בהשמעה נשמעת לפני היציאה, ייכתב נקודת שבירה; מנוע המוזיקה יעבור מהשמעה נשמעת למוזיקה
הפעל יחסוך גם את נקודת השבר הנוכחית. במקרים אחרים, נקודות הניתוק לא נכתבות. לרגש הראשון
צורה, הקוד ממוקם ב mengine_control_block (), הקוד הוא כדלקמן:
אם (g_mengine_result == RESULT_APP_QUIT)
{
אם (g_is_audible == TRUE)
{
mengine_save_audible_breakinfo ();
}
_ עצירה (STOP_NORMAL);
לשבור;
}
במקרה השני, הקוד ממוקם ב mengine_set_filepath (), הקוד הוא כדלקמן:
אם (loop_cnt == 2)
{

עמוד 358
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 358
// האם לעבור משמע להשמעת מוסיקה
אם (g_is_audible == TRUE)
{
mengine_save_audible_breakinfo ();
g_is_audible = FALSE;
need_fsel_init = אמת;
}
}
8.19 כיצד לשמור ולקרוא קובץ קופה נשמע
audible מגלה אם יש קובץ pos בשיר השמע הנוכחי לפני הנגינה, אם הקובץ לא קיים, הוא יוצר קובץ
אחרת, קרא את המידע שקיים מהקובץ הנוכחי והעביר את המידע שקיים לספריית הפענוח הקולית לפני השמעה. בתוך
לאחר הפעלת השיר, נקודת הפסקת השעה הנוכחית תתקבל מספריית הפענוח, ונקודת הפסקה תיכתב לקובץ ה- pos. כל פוזה
גודל הקובץ הוא 512 בתים. הקוד המקביל נמצא בפונקציה _deal_audible_posfile ()
(mengine_audible_deal.c).
8.20 כיצד קריאה ושמירה של קבצי ההפעלה נשמעת
קובץ ההפעלה הקולי נשמע מהאינטרנט דרך כלי הניהול השמיעתי. עבור תרחישים שונים, קובץ ההפעלה
מיקום אחסון הקבצים ושם הקובץ שונים. כאשר Ui מוסיקה מנגן שיר נשמע בפעם הראשונה, הוא יקרא אותו בספרייה שצוינה
קח את התוכן של קובץ sys (קובץ ההפעלה) ושמור אותו ב- VRAM. הקריאה שלאחר מכן של קובץ ההפעלה מתבצעת דרך
מבוצע על ידי קריאת התכנים של VRAM. באופן כללי, קובץ ההפעלה הוא 560 בתים בגודל. ב- VRAM, 560 הבתים הראשונים הם
תוכן קובץ חי, שני הבתים האחרונים של הסקטור השני משמשים לאחסון סמל הדגל, המציין אם ה- VRAM הנוכחי נשמר
שמור את קובץ ההפעלה.
שמור את קובץ ההפעלה ב- VRAM במקום לקרוא ישירות את קובץ ההפעלה, הימנע מקובץ
פעולת מיתוג האחסון מפשטת את תהליך ההפעלה הקולית.
תוכנית קובץ ההפעלה שמירת UI שמירה ממוקמת ב- music_load_sysfile () (music_audible_sys.c), המשתמשים יכולים
שנה את הנתיב של קבצי ההפעלה הקשורים למימוש ההשמעה של קבצי צליל DRM.
8.21 כיצד לקנן פריטי תפריט בבקרות הרשימה
בקרת הרשימה הנוכחית תומכת בקינון תפריט אחד או כמה ברמה מסוימת של ui_direcotry (), וכרגע תומכת רק בערך אחד
תפריט פה, אך תפריט הכניסה יכול להכיל תפריטי עלים מרובים. לדוגמה, רשימת כל השירים במוזיקה מכילה "הכל עם
זה מאוד פשוט ליישם תפריט מקונן ברשימה זו. קוד הדגימה הוא כדלקמן:
menu_item_insert.app_id = APP_ID_MUSIC; // האם התפריט המקונן שייך ל- AP או נפוץ
menu_item_insert.layer = 0;
// רמת תפריט מקוננת

עמוד 359
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 359
menu_item_insert.list_menu = SHUFFLE_PLAY; // מזהה תפריט כניסה
list_param.menulist = & menu_item_insert; // הגדר חברים פרטיים
list_param.menulist_cnt = 1;
יש לציין כי גם אם יש יותר מתפריט מקונן אחד, התפריטים הללו שייכים לאותו תפריט כניסה, ולכן menulist_cnt
זה עדיין 1.
8.22 כיצד מחושב פריט הפעלת התפריט המקונן של בקרת הרשימה?
ספירת הפריטים המופעלים ברשימה רגילה מתחילה מ- 1. עבור פריטי תפריט מקוננים, אם יש רק תפריט עלה מקונן אחד, ההפעלה
מספר הפריט הפעיל הוא 0, אם יש יותר מאחד, מספר הפריט הפעיל הוא 1 - התפריט המקונן. לדוגמה, אם ישנם שלושה ירקות עלים
יחידה, מספרי פריטי ההפעלה הם -2, -1, 0 בהתאמה.
ההתקשרות של התפריט המקונן מושלמת גם על ידי פונקציית התקשרות חזרה של פקד ui_directory (), הנשלט על ידי שכבת ה- ap
לבצע. לכן, מפתחי אפליקציות יכולים לקבוע אם פריט ההפעלה שנבחר הוא רשימה או תפריט בהתאם למספר הסידורי של פריט ההפעלה, והאם הוא
התפריטים הראשונים.
לתוכניות מדגם קשורות, עיין בפונקציה m3ulist_option_result_proc () (ממוקם ב- music_listmenu_listoption.c).
המספר הוא למעשה פונקציית ההתקשרות של ui_direcotry (). שלושת התפריטים הראשונים תואמים את פונקציית ההתקשרות של המועדפים 1/2/3, והדברים הבאים
בהתאמה לפונקציית ההתקשרות של רשימת ההשמעה m3u. להלן הבחנה בין פריטי הרשימה המתאימים לפי פריטי ההפעלה.
8.23 כיצד שולט ברשימה ותפריט מימוש זיכרון הנתיב
רשימה ותפריט שולטת בזיכרון הקריאה דרך com_get_history_item () ומוגדרים באמצעות com_set_history_item ()
זיכרון נתיב. תוכן זיכרון הנתיב מכוסה על ידי history_item_t המבנה, והחברים בו הם כדלקמן:
/ *!
* \ תקציר
* history_item_t מבנה פריט זיכרון
* /
typedef struct
{
/ *! מספר הפריט הראשון ברשימת התצוגה הנוכחית, 0xffff פירושו לא חוקי * /
uint16 למעלה;
/ *! מיקום הפריט הפעיל ברשימת התצוגה הנוכחית, 0xffff פירושו לא חוקי * /
uint16 list_no;
} history_item_t;
קל יותר לטפל בזיכרון הנתיב של התפריט, לאחר אישור התפריט, גם אישור זיכרון הנתיב. שליטת התפריט הנוכחית של ap
תומך עד 8 זיכרונות נתיבי בקרת תפריט שונים. יש לציין כי בקרת ui_menulist () צריכה לעבור באחת

עמוד 360
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
עמוד 360
path_id מציין באיזה זיכרון נתיבים משתמשים. ו- ui_menulist_simple אינו כולל זיכרון נתיבים. לפשוטים בלבד
בתרחיש התפריטים ברמה הראשונה, שימוש ב ui_menulist_simple () יכול להפחית את זיכרון הנתיב ולהגדיל את הגמישות של התוכנית.
זיכרון הנתיב של הרשימה צריך לשפוט אם הנתיב הנוכחי תקף לפני הקריאה. אם זיכרון הנתיב הנוכחי הוא נתיב לא חוקי,
צריך להגדיר את תוכן ברירת המחדל של זיכרון הנתיב. לדוגמה, כדי לעבור בין רשימות מוסיקה שונות, עליך לנקות את זיכרון הרשימה הנוכחי, אך
ואז הכנס לרשימה החדשה כדי לגלוש.
זיכרון נתיב רשימה נפוץ צריך לכתוב את זיכרון הנתיב הנוכחי ל- VRAM, על מנת להפחית את הקריאה והכתיבה בעת גלישה ברמות העליונות והתחתונות.
מספר VRAM, שליטת ui_direcotry () בסצנת המשנה כותב למעשה את זיכרון הנתיב לחלל הזיכרון המבוקש מערמת המערכת.
עם הזמן, זיכרון הנתיב נכתב למעשה ל- VRAM לפני יציאת השליטה. לכן, אם המשתמש מיישם את הפקד צריך גם לזכור
זכרו את הנתיב, תוכלו לחקות את שיטת היישום של בקרת הרשימה. לדוגמה, הקוד לשמירת זיכרון נתיב בעת יציאת תמונת האלבום הוא כדלקמן (bit
ב music_listmenu_alnumlist_sub.c):
חלל סטטי _pic_save_history (dir_control_t * p_dir_control)
{
אם (p_dir_control-> list_no <6)
{
p_dir_control-> למעלה = 1;
}
אַחֵר
{
p_dir_control-> top = p_dir_control-> list_no-5;
}
// זה רק כדי לכתוב את זיכרון הנתיב למטמון. שים לב שכשאתה יוצא, התקשר לממשק זה כדי לכתוב שוב, עיין בתיאור הממשק
write_history_item (g_dir_browser.layer_no, p_dir_control, FALSE);
לַחֲזוֹר;
}
8.24 מדוע יש להוסיף __FAR__ כאשר מוכרזת פונקציית המוסיקה בקובץ הכותרת?
הוראות הקפיצה במפלים היא הוראות מסוג J, וכתובת הקפיצה תופסת 26 סיביות. בהתחשב ביישור הארבעה בייט של הכתובת, היא תומכת בעד 28 ביטים, כלומר
קפיצת כתובת בטווח של 256 מגה בייט. אם זה עולה על טווח הכתובות, עליך להכניס את כתובת היעד לרשום, אך
ואז קפוץ אל הכתובת בה נמצא תוכן הקופה.

עמוד 361
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 361
להלן קוד ההרכבה שנערך ללא הצהרת __FAR__ והצהרת __FAR__:
ניתן לראות כי אם לא משתמשים ב __FAR__, קפיצת הפונקציה תשתמש ישירות בהוראות jal, וההוראות של סוג J של Jips יכולות לקפוץ
כתובת ההעברה מגבלת אורך מסוימת. לאחר השימוש בהצהרת __FAR__, הוראות הקפיצה משתנות מ- jal ל- jalrc, שם r
פירוש הדבר שכתובת הקפיצה היא הערך ברשום.
לפיכך, אם הבנק מתקשר לקוד התושב או שקוד התושב קורא לקוד הבנק, תתרחש שגיאה ונדרשת הצהרת __FAR__. זֶה
המהדר יטען תחילה את כתובת הקפיצה לפנקס ואז יישם את הקפיצה. לגבי פונקציות רגילות, אין
יש להוסיף __FAR__, מה שיגדיל את שטח אוסף הקוד.
באופן כללי, אם קוד בנק מתקשר לקוד קוד, או rcode קורא לקוד בנק, הצהרת הפונקציה נקראת
כולם צריכים להוסיף __FRA__.

עמוד 362
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 362
9 מנוע מוזיקלי
9.1 סקירת הדרישות
מנוע המוזיקה משמש להפעלת מוסיקת רקע. כאשר הממשק מיישם פונקציות אחרות, כגון: הפעלת ספרים אלקטרוניים, הפעלת תמונות,
בעת גלישה בקבצים, הגדרות פרמטר ופונקציות אחרות, הוא מבין את ההמרה האוטומטית של מצב השמעת המוסיקה ואת השינוי האוטומטי של קבצי המוסיקה.
הדרישות התפקודיות הכוללות הן כדלקמן:
Ble מסוגלים לנגן קבצי מוסיקה
❖ אפשרות להחלפה אוטומטית של מוזיקה
מימוש התקשורת עם UI מוסיקה והשלים את התגובה לפקודה Ui מוסיקה
❖ תוכל להשלים את התגובה להודעות מערכת
9.2 תכנון כולל
מנוע המוזיקה מורכב מארבעה מודולים פונקציונליים: מודול אתחול, מודול לעיבוד סטטוס, מודול לעיבוד הודעות, יציאת יישומים
מחוץ למודול. מודול האתחול מבין בעיקר רכישה של פרמטרים מסוימים של תצורה ורכישת מידע על נקודת הפסקה בעת הכניסה למנוע המוזיקה.
פונקציות כמו אתחול סטטוס ההפעלה. מודול עיבוד המדינה מממש בעיקר את בדיקת המצב של מפענח האודיו בתהליך נגינת המוסיקה.
מדידה ועיבוד, כגון רכישה ועיבוד סטטוס של נגינת מוסיקה עד הסוף, שגיאת נגינה וכו '. מודול עיבוד ההודעות מבין בעיקר
קבל את ההודעה ועבד את ההודעה המתאימה. לדוגמא, כאשר יישום ה- UI למוסיקה שולח את שם השיר המתג, המנוע צריך
החלף את השיר; דוגמא נוספת: יישום ה- UI למוסיקה שולח הודעת השמעה חוזרת, המנוע צריך לגרום למצב הפענוח להיכנס למצב ההפעלה. יישום
צא מהמודול, בעיקר כאשר המנוע מקבל את הודעת היציאה, שמור כמה הגדרות פרמטר ומידע על נקודות השבר וכמה משאבים
השחרור ופונקציות אחרות.
שם המודול
פונקציה קצרה
מודול האתחול
לאתחל פונקציות יישום
מודול עיבוד המדינה
הבינו את האיתור והעיבוד של מצב מפענח השמע במהלך השמעת מוסיקה
מודול לעיבוד הודעות
להבין לקבל את ההודעה ולעבד את ההודעה המתאימה

עמוד 363
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 363
מודול יציאת יישום
שמור כמה הגדרות פרמטר ומידע על נקודות השבר ושחרר כמה משאבים
9.3 תהליך עסקי של מנוע מוסיקה
התהליך העסקי של מנוע המוזיקה הוא פשוט יחסית, הוא מממש בעיקר את בקרת ההשמעה של שירים, כולל עיבוד מהיר וקדימה של עיבוד וחזרה.
ניהול, דיווח על שגיאות בפורמט, השמעת שירים וכו '. בנוסף, עבור קבצים נשמעים ייושם איתור תמונות אלבום נשמע.
קריאה ושמירה של קבצי pos.
9.3.1 התהליך הכולל של מנוע המוזיקה
התהליך הכולל של מנוע המוזיקה מוצג באיור הבא:

עמוד 364
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
364 עמודים
9.3.2 מצב זרימת העיבוד של מנוע המוזיקה
בלופ הראשי של מנוע המוזיקה, אין תזמון סצינות הדומה ל- AP הקדמי, מכיוון שמנוע המוזיקה אחראי רק לקבלת פתרונות.
סטטוס המקודד והסטטוס המתאים מעובד. במנוע המוזיקה בדרך כלל לא אכפת מנושאים הקשורים לתצוגה. לכן מוזכרת מוזיקה
המבנה העיקרי של המנוע הוא מודול לעיבוד מדינה.
מודול זה עוסק בעיקר במצבים מסוימים בתהליך פענוח המוסיקה. להלן מוגדרים במנוע המוזיקה
מצב הפעלה, דלפק הקבלה מיישם פונקציות שונות על פי מצבי משחק שונים, המוגדרים כך:
/ *!
* \ תקציר
* מצב מנוע
* /
typedef struct
{
/ *! סטטוס הפעלה * /
play_status_e play_status;
/ *! סטטוס חוזר של AB * /
ab_status_e ab_status;
/ *! סטטוס קדימה והרצה אחורה * /
fast_status_e fast_status;
/ *! מצב שגיאה, ברור לאחר הרכישה * /
eg_err_e err_status;
} mengine_status_t;
מצבי ההפעלה הבאים מוגדרים:
/ *!
* \ תקציר
* מצב השמעה נוכחי
* /
typedef enum
{
/*! תפסיק*/
StopSta = 0,
/*! פסק זמן*/
PauseSta,
/ *! הפעל * /
פלייסטה,
/ *! AB חוזר * /
PlayAB,
/ *! קדימה והרצה אחורה * /
PlayFast

עמוד 365
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
365 עמודים
} play_status_e;
באופן דומה, ישנם סטטוס קדימה והרצה אחורה ומצב חוזר על AB. אם סטטוס ההפעלה נחשב כקטגוריה כללית, מהיר קדימה
יציאה וחזרה על AB שייכים לקטגוריית משנה נפרדת של מצב ההפעלה. המנוע פועל בצורה שונה בהתאם למצב ההפעלה של חוט הפענוח
עבור מעברים במצב, חוט הפענוח מגדיר את הסוגים הבאים של מידע על מצב השמעה:
typedef enum
{
MMM_MP_ENGINE_STOPPED,
MMM_MP_ENGINE_PLAYING,
MMM_MP_ENGINE_PAUSED,
MMM_MP_ENGINE_ERROR,
} mmm_mp_engine_t;
ניתן לראות כי מידע סטטוס ההפעלה שהוגדר על ידי חוט הפענוח הוא פשוט בהרבה ממצב ההפעלה של המנוע, ולכן המנוע זקוק
על פי שלושת המצבים המופשטים הללו, מתווספת תמיכה בהמשך קדימה והרצה אחורה וחזרת AB. תרשים מחזור מצב ההפעלה של המנוע מוצג באיור שלהלן
הראה, הבין את המשמעות של הדמות, אתה יכול לתפוס את כל מעבר מצב ההפעלה של המנוע.
העיבוד הממלכתי של מנוע המוזיקה מעבד למעשה ענפים שונים על פי מצבי השמעה שונים, כגון עצירה
הסטטוס מטפל בהחלפת שירים, מצב ההפעלה שולט במימוש חוזר של AB, מצב השגיאה מממש את תצוגת מצב השגיאה וכו '. זרימה כוללת
תרשים התהליך מוצג להלן:

עמוד 366
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 366
הפעל עיבוד מדינה:
✧ האם ה- AB הנוכחי חוזר והאם ה- AB שחזר על עצמו סיים
✧ האם הוא גולש כרגע ומשחק? כשאתה גולש בזמן השמעה, עבור לשיר הבא
הפסק את עיבוד המדינה:
❖ הזרם הוא מהיר קדימה / הפעלה רגילה לעבור לשיר הבא
❖ כרגע זה מהיר לאחור כדי לעבור לשיר / עצירה הקודמים
❖ הוא נעצר כרגע, אין פעולה
עבודת מצב שגיאה:
❖ קבע את סוג השגיאה ושנה את מצב המנוע
❖ סגור את הקובץ שמנגן כעת
בנוסף להפעלת מוסיקה רגילה, מנוע המוזיקה תומך גם בהשמעת שירים נשמעים והפעלת מוזיקה מעורר. כי
מודול עיבוד מצב Dasein עשה עיבוד מיוחד לשני סוגים אלה של קבצים, דבר הבא לידי ביטוי:
❖ למוזיקת ​​אזעקה, לאחר השמעה (פנה למצב עצירה), השירים העליונים והתחתונים לא יועברו
❖ למוזיקה רגילה, למעט המצב המושהה, השעה הנוכחית מתקבלת באמצעות מודול זה. ונשמע כי
קובץ ה- pos מתעד את זמן נקודת השבירה, כך שרק במצב הנגינה ניתן להשיג את השעה הנוכחית דרך סניף זה
בֵּין

עמוד 367
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 367
Files קבצי מוזיקה רגילים תומכים במהירות קדימה עד הסוף כדי לעבור לשיר הבא וקדימה להתחלה כדי לעבור לשיר הקודם, אך קבצים נשמעים מועברים במהירות.
עד הסוף ונרתע עד הסוף פשוט סיים את המצב הקדימה והרץ אחורה. להעברה מהירה לסוף הקובץ, המידע על נקודת השבר הנוכחית יימחק ו
עבור לשיר הבא לנגינה; עבור הטיה מחדש להתחלה, הוא יופעל מחדש מתחילת הקובץ הנוכחי
❖ ישנם שני סניפים כאשר המנוע במצב שגיאה. אם החזית נמצאת בסצנת הנגינה של המוסיקה, המנוע יפסיק את הפעלת המוזיקה.
שים וסגור את הקובץ ואז חכה לעיבוד הקדמה; אם החזית נמצאת באפליקציה אחרת או בסצינה אחרת, המנוע יעבור אוטומטית
השיר הבא לנגן
9.3.3 זרימת עיבוד ההודעות של מנוע המוזיקה
הפונקציות החיצוניות שמספק מנוע המוזיקה משתקפות בעיקר באמצעות הודעות חיצוניות. עברו כשאפליקציית ממשק המשתמש מוזיקה
שלח הודעות שונות כדי לשלוט בהתנהגות המנוע, ויישומים אחרים יכולים גם לקבל / להגדיר מידע על השמעה על ידי שליחת הודעות. ה
המודול מבין בעיקר את רכישת ההודעות ומעבד את ההודעות המתאימות.
הודעות הפונקציה העיקריות הן:
❖ קבל מידע על מנוע (מידע על מצב, מידע על קבצים, מידע על תצורה וכו ')
❖ קבל מידע על נתיבי קבצים נוכחיים
❖ הגדר EQ
❖ הגדר מצב מחזור
❖ הגדר חזרה על AB
❖ הגדר עוצמת קול
❖ הגדר את מהירות ההפעלה
❖ התחל לנגן (משמש לבחירת התחלה / הפסקה של קובץ להתחלה)
❖ הפסק לשחק (נהג להשהות)
❖ הגדר קבצי הפעלה (המשמשים לבחירת שירים להפעלה: בחר רשימת / בחר ספרייה / בחר מועדפים, החזר את המספר הכולל והסדר
מספר?)
❖ קבל תווית זמן נוכחית
Et הגדר הפעלת סימניה (בחר אפשרות לסימנייה)
❖ הפעל את השיר הבא (לחץ על מקש לחיתוך השיר)
❖ הפעל את השיר הקודם (לחץ על מקש לחיתוך השיר)
❖ מהיר קדימה ומהירה אחורה במהירות
בטל מהר קדימה והנעה אחורה
❖ מחק את הקובץ הנוכחי (עדכן את הרשימה בו זמנית)
❖ שחק את נקודת השבירה האחרונה
תרשים הזרימה של עיבוד ההודעות הוא כדלקמן:

עמוד 368
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 368
הַתחָלָה
האם הודעת היציאה מהאפליקציה?
התקשר לתגובת פונקצית מידע מענה למענה
סוֹף
י
קבל את ההודעה (get_msg)
האם לקבל הודעות מידע על מנוע?
האם הודעת ה- eq מוגדרת?
התקשר לפונקציית eq שנקבעה
האם זה לעבור לשיר הבא?
התקשר למתג לפונקציית השיר הבאה
האם זה להגדיר הודעת מצב חוזרת?
התקשר לפונקציה של הגדרת מצב לולאה
האם לקבל את הודעת זמן המשחק הנוכחית?
התקשר לפונקציה של זמן משחק תשובה
………
…………
י
י
י
י
י
י
נ
נ
נ
נ
נ
נ
9.4 סנכרון ואינטראקציה עם מודולים אחרים
כשירות רקע, מנוע המוזיקה יתקשר עם מודולים הכוללים: ap_manager, ap_music ותוכנה.
ביניהם, תזמון המשימות מתממש באמצעות האינטראקציה עם ap_manager; האינטראקציה עם ap_music באה לידי ביטוי בעיקר בפאסיבי
קבל את הודעת הסנכרון שנשלחה על ידי אפליקציית ap_music ובצע את העיבוד המתאים.האינטראקציה עם תוכנת התווך היא בעיקר דרך ההתאמה
השתמש בממשק התווך כדי לממש פונקציות כמו הפעלת סדרות, איתור קבצים ועיבוד מידע ID3.
האינטראקציה בין מנוע המוזיקה לבין מכשירי AP אחרים מושגת באמצעות הודעות סינכרון, הנשלחות למנוע באמצעות UI מוסיקה
קח את ההודעה SET_FILEPATH כדוגמה כדי להמחיש את תהליך השליחה והעיבוד של הודעות סינכרון.
בעת שליחת הודעת סנכרון, השולח צריך לארגן את תוכן מבנה ההודעות הפרטי, המגדיר את ההודעה השולחת
תוכן ההודעה וקבלת ההודעה הנדרשת על ידי המקלט. ההגדרה שלה היא כדלקמן:
typedef struct

עמוד 369
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
369 עמודים
{
/ *! תוכן פרטי הודעה הודעה * /
msg_apps_t msg;
/ *! נפח אות סנכרון * /
os_event_t * sem;
/ *! מצביע קבלת הודעות סינכרוני * /
msg_reply_t * תשובה;
} private_msg_t;
חבר ה- msg הוא הישות השולחת את ההודעה ומוגדרת כך:
typedef struct
{
/ *! סוג הודעת היישום, ראה הגדרה של msg_apps_type_e * /
סוג uint32;
/ *! תוכן הודעת היישום * /
הִתאַחֲדוּת
{
/ *! הנתונים האמיתיים של תוכן ההודעה * /
נתוני uint8 [4];
/ *! מצביע חוצץ התוכן של ההודעה, המצביע על שטח הכתובת של שולח ההודעה * /
void * addr;
}תוֹכֶן;
} msg_apps_t;
השולח צריך לקבוע את סוג ההודעה שישלח ואת תוכן ההודעה שישלח. התוכן יכול להיות נתונים (4 בתים),
זה יכול גם להצביע על מרחב כתובות, המשמש להעברת תוכן בין השולח למקלט.
השולח צריך לדאוג לתוצאת העיבוד של ההודעה שהתקבלה על ידי המקלט. התוצאה נרשמת בחבר התשובה, המוגדר כך:
typedef struct
{
/ *! סוג המינוי של קבלת הודעות סינכרוני, עיין בהגדרה msg_reply_type_e * /
סוג uint8;
uint8 עתודה [3];
/ *! קבלת מצביע מאגר התוכן, המצביע על שטח הכתובת של שולח ההודעה * /
תוכן בטל *;
} msg_reply_t;
מקלט ההודעות יקבע את סוג הסוג ואת תוכן התוכן, לאחר שהשולח ידע שההודעה מעובדת, היא יכולה להיות מבוססת על הסוג
הסוג יודע את תוצאת העיבוד.

עמוד 370
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 370
תרשים הזרימה של ממשק ה- UI ומנוע המוזיקה המשתמש בהודעות סינכרוניות לתקשורת הודעות הוא כדלקמן:
9.5 ספרייה תלויה ביישום ותיאור הממשק שלה
ממשק מערכת ו- libc api.a
ספריית זמן ריצה של יישום ctor.o
כל הפונקציות של Applib
בחירת קבצים, מועדפים ומודולי פונקציות ברשימה בספריה המשופרת
9.6 כיצד להוסיף הודעת מנוע
סוג הספירה של msg_apps_type_e במקרה / inc / App_msg.h מגדיר מה צריך מנוע המוזיקה
סוג ההודעה הרצוי. אם ברצונך להוסיף הודעת מנוע, עליך להוסיף תחילה קטגוריית הודעות ואז במנוע המוזיקה
הוסף עיבוד של הודעה זו ב- ap. מכיוון שהעקרון העיצובי של מנוע המוזיקה הוא שהוא יכול לקבל הודעות בלבד ולא יכול לשלוח הודעות,
זה צריך להוסיף פונקציה לשליחת ההודעה ap בחזית. מנוע המוזיקה מקבל הודעות בשעה

עמוד 371
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 371
בפונקציה mengine_control_block (), עבור הודעות שצריך לעבד בתדירות גבוהה במיוחד, הם מעובדים ישירות בפונקציה זו.
זה מעובד בתפקוד המשנה mengine_message_done_bank ().
בקשה ל- 10 ap_record
10.1 סקירת הדרישות
הפונקציות העיקריות המיושמות על ידי יישום ה- Record כוללות:
1. תומך בקידוד PCM 512Kbps, 768Kbps, 1024Kbps, 1536Kbps הקלטת פורמט WAV; תמיכה
הקלטה בפורמט mp3 בקצב של 32kbps, 64kbps, 128kbps, 192kbps.
2. מקור הקול להקלטה יכול להיות קלט FM או קלט מיקרופון.
3. כל קבצי ההקלטה נשמרים בספריית ההקלטות.
4. ניתן לעיין בקבצי ההקלטה בתפריט, ואז להכנס ליישום המוסיקה להפעלה לאחר בחירת ההפעלה.
10.2 תכנון אדריכלות כולל
10.2.1 תרשים אדריכלות כולל
מודול כניסה
סצינת הקלטה (לולאת הודעה
מודול צלצול)
מודול לעיבוד הודעות
מודול בקרת הקלטה
מודול פעולת דיסק הקלטה
סצנת תפריט
מודול תצוגת ממשק

עמוד 372
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 372
10.2.2 חלוקת מודולים פונקציונליים
שם המודול
פונקציה קצרה
תיק מקביל
מודול כניסה
אחראי על אתחול ויציאת היישום, כולל קבצי משאבים, קבצי תצורת תפריט
טעינה ופריקה וניהול סצנות יישומים
record_main.c
מודול סצינת הקלטה
לספק תצוגת ממשק הקלטה, עיבוד הודעות GUI, עיבוד תהליכי הקלטה, שימוש
אינטראקציה עם לחצני משתמש ופונקציות אחרות
record_scene_recording.c
מודול לעיבוד הודעות
טיפול בהודעות פרטיות והודעות מערכת של אפליקציות
record_message.c
מודול תצוגת ממשק
להציג ולרענן את הממשק בהתאם לסימן התצוגה
record_paint.c
הקלטת מודול בקרת פקודה
הגדרת פרמטר הקלטה, התחל / השהה / סיום בקרת פקודה
record_control.c
מודול פעולת דיסק הקלטה
אתחול מערכת הקבצים של יישום ההקלטה, הקלטת wav הקלטת פונקצית כותרת חזרה לקובץ record_disk.c
הקלטת מודול פעולת קבצים
שם קובץ חדש של יישום הקלטה, יצירת קבצים, מצא שטח פנוי בדיסק
המתן לפעולה
record_file.c
מודול תפריט
התקשרו לבקרת התפריט ופונקציית הביצוע של פריט התפריט
record_menu.c
מודול תצורת פריט תפריט
נתוני תצורת תפריט
record_menu_config.c
10.3 סנכרון ואינטראקציה עם יישומים אחרים
לאחר כניסה להקלטה מהממשק הראשי ובחירת להתחיל בהקלטה, אם קיים מנוע הרקע, היא תשלח
ההודעה של MSG_KILL_APP_SYNC נשלחת למנהל להרוג את הרקע.
כשיוצאים מאפליקציית ההקלטה, שלחו את ההודעה של יצירת היישום למנהל ואז צאו מהיישום.
10.4 ספריות תלויות יישומים והממשקים שלהן
ממשק מערכת ו- libc api.a
ספריית זמן ריצה של יישום ctor.o
כל הפונקציות של Applib
תפריט ממשק UI נפוץ, סרגל ראש, התקדמות, תיבת טיימר ומודולים אחרים של הפקודה הציבורית
מודול הקידוד של Codec
בורר קבצים משופר
ממשק מערכת קבצים

עמוד 373
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 373

עמוד 374
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
374 עמודים
10.5 תהליך עסקי מיושם
10.5.1 התהליך הכולל של היישום ותהליך תזמון התרחיש
הַתחָלָה
המנהל יצר את הרשומה
יישום שמע
אתחול אפליקציות (רישום applib,
משתנה vram לקרוא, פתח את תצורת התפריט
קבצים וכו ')
הקלטת סצינה?
סצנת תפריט?
סצינת יציאה?
צא משחזור משאב היישום (applib
צא, כתוב בחזרה משתנה vram, סגור
קבצי תצורת תפריט וכו ')
סוֹף
צא מהיישום
התחל להקליט והזן את ההקלטה לבטל
מחזור עניין
כנסו למודול התפריט
נ
נ
י
י
י
נ
10.5.2 תרשים זרימת תרשים ראשי

עמוד 375
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 375
10.5.3 תרשים זרימה של סצנת ההקלטה
10.6 כיצד לממש את פונקציית ניטור ההקלטה
לפני שמתחילים להקליט, כלומר לפני שליחת הפקודה להקלטת התחלה MMM_MR_START לתוכנה, היישום מתקשר
Set_pa_val לפתיחת הניטור, אתה יכול לממש ניטור הקלטות. לאחר יציאת ההקלטה, התקשר ל clear_ls_reg כדי לסגור.
typedef נדיף uint32 * REG32;
void set_pa_val (Valint uint32 val) // ניטור פתוח

עמוד 376
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 376
{
int i;
/ *********************** init pa and fm in ********************* *** /
typedef נדיף לא חתום int * REG32;
// הגדר שעון dac
* ((REG32) (CLKENCTL)) | = (1 << CLKENCTL_DACCLKEN);
// לאפשר את מודול DAC, כך שניתן להגדיר dAC reg (ניתן להגדיר הרשמת הרשאה?)
* ((REG32) (MRCR)) | = (1 << MRCR_DACIIS הגדר מחדש);
// MIXEN, מערבל אנלוגי ו- PA מאפשרים
* ((REG32) (DAC_ANALOG1)) | = 1 << DAC_ANALOG1_PMP_PAEN;
/ * pavcc connect vcc * /
* ((REG32) (DAC_ANALOG1)) | = 1 << DAC_ANALOG1_PVCTV;
// מצב PMP השבת AA MUTE
* ((REG32) (DAC_ANALOG1)) | = 1 << DAC_ANALOG1_PMP_AAMUTE;
/ * 32 לרמת עוצמת הקול של הרשות הפלסטינית: 0-41 * /
* ((REG32) (DAC_ANALOG1)) | = (val << DAC_ANALOG1_Volume_SHIFT) &
DAC_ANALOG1_Volume_MASK;
/ * פלט שלב הרשת מאפשר, יכול לפלט עכשיו * /
* ((REG32) (DAC_ANALOG2)) | = 1 << DAC_ANALOG2_OSEN;
}
void clear_ls_reg (void) // ניטור סגור
{
int i;
/ *********************** init pa and fm in ********************* *** /
typedef נדיף לא חתום int * REG32;
// הגדר שעון dac
* ((REG32) (CLKENCTL)) & = ~ (1 << CLKENCTL_DACCLKEN);
// לאפשר את מודול DAC, כך שניתן להגדיר dAC reg (ניתן להגדיר הרשמת הרשאה?)
* ((REG32) (MRCR)) & = ~ (1 << MRCR_DACIIS הגדר מחדש);
// MIXEN, מערבל אנלוגי ו- PA מאפשרים
* ((REG32) (DAC_ANALOG1)) & = ~ (1 << DAC_ANALOG1_PMP_PAEN);

עמוד 377
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 377
/ * pavcc connect vcc * /
* ((REG32) (DAC_ANALOG1)) & = ~ (1 << DAC_ANALOG1_PVCTV);
// מצב PMP השבת AA MUTE
* ((REG32) (DAC_ANALOG1)) & = ~ (1 << DAC_ANALOG1_PMP_AAMUTE);
/ * 32 לרמת עוצמת הקול של הרשות הפלסטינית: 0-41 * /
* ((REG32) (DAC_ANALOG1)) & = ~ ((0 << DAC_ANALOG1_Volume_SHIFT) &
DAC_ANALOG1_Volume_MASK);
/ * פלט שלב הרשת מאפשר, יכול לפלט עכשיו * /
* ((REG32) (DAC_ANALOG2)) & = ~ (1 << DAC_ANALOG2_OSEN);
}
10.7 תיאור סדרת השיחות ורצף פקודות ההקלטה
רצף הפקודות להפעלת הקלטה וקריאה לתוכנת ההקלטה הוא כדלקמן:
MMM_MR_OPEN: פתח את תוכנת הקלטה
MMM_MR_AIN_OPEN: הגדר רווח הקלטה ופרמטרים אחרים
MMM_MR_SET_FILE: העבירו את ידית מערכת הקבצים, ידית הקובץ להקלטה ופרמטרים אחרים לתוכנת ההקלטה.
MMM_MR_AUDIO_PARAM: הגדר את סוג קובץ ההקלטה / קצב הדגימה / מספר הערוץ / קצב הסיביות וכו '.
MMM_MR_SET_DENOISE: הגדר את רמת הפחתת הרעש
MMM_MR_START: התחל להקליט
קבל פקודת סטטוס הקלטה:
MMM_MR_GET_STATUS, פקודה זו צריכה להישלח באופן מחזורי במהלך תהליך ההקלטה כדי לקבל את הקבצים המוקלטים
מגזר, היישום צריך לקבוע אם הקובץ חורג ממגבלת הקבצים הבודדת של מערכת הקבצים, האם הדיסק מלא,
האם אתה צריך למיין את השיר?
השהה פקודת הקלטה:
MMM_MR_PAUSE
המשך לפקודת הקלטה:
MMM_MR_RESUME
הפסק את הפקודה להקלטה:
MMM_MR_STOP

עמוד 378
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 378
רצף הפקודות לסגירת הקלטה וקריאה לתוכנת ההקלטה הוא כדלקמן:
MMM_MR_CLEAR_FILE
MMM_MR_AIN_CLOSE: סגור את ערוץ ההקלטה
MMM_MR_CLOSE: סגור את תוכנת הקלטה
הערה: היצירה והסגירה של קבצי ההקלטה מיושמים על ידי קורא vfs_file_create ו- vfs_file_close.
הבחירה במקור ההקלטה מוגדרת גם על ידי היישום הקורא enable_adc ו- enable_ain.
יישום ap_picture 11
11.1 סקירת הדרישות
יישום התמונות משלים את הגלישה, ההשמעה והגדרת התפריט של קבצי תמונות על ידי קריאה לממשק המערכת וספריית פענוח התמונות
מאפיינים. תמיכה בפענוח JPG / BMP / GIF, בקרת הפעלה אוטומטית / ידנית, תצוגה מקדימה של תמונות ממוזערות ותמיכה רב משימות ותמיכה בו זמנית
השתמש בכלי התצורה כדי להשלים את תצורת הפונקציה של יישום התמונה, הגדרות סיבוב תמונות וכו '.
11.2 תכנון אדריכלות כולל
11.2.1 תרשים אדריכלות כולל
ממשק משתמש משותף
יישום תמונה
משופר (קובץ
בוחר)
גרעין (תזמון OS,
ממשקי libc ו- sys)
applib
כלי תווך תמונה
(basal)
פענוח jpg
פענוח bmp
פענוח GIF

עמוד 379
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 379
11.2.2 חלוקת מודולים פונקציונליים
שם המודול
פונקציה קצרה
מודול האתחול
אחראי על אתחול ויציאת היישום, כולל טעינת קבצי משאבים וקבצי תצורת תפריט
והסרת ההתקנה, וניהול סצנות יישומים
מודול תזמון סצנה
תזמון ועיבוד מערכות יחסים להעברת סצינות
סצנת רשימה
התקשר למודול רשימת הקבצים כדי להציג את רשימת קבצי התמונות
סצנת תפריט אפשרות
התקשר למודול רשימת התפריטים כדי להציג את פריט תפריט אפשרות התמונה, השלם את יישום התמונה
הגדרת פונקציה
שחק סצנת מודול
מימוש הפעלה ידנית / אוטומטית של תמונות
סצנה ממוזערת
הציגו תמונות ממוזערות של 9 תמונות בצורה של רשת בעלת תשעה ריבועים
סצנת תפריט
הצג את ספריית הדיסק הראשית ואת ספריית הכרטיסים
יציאה מהמודול
מימוש עיבוד יציאה מהיישום
11.3 סנכרון ואינטראקציה עם יישומים אחרים
אם ברקע מוסיקה או FM מנגנים, בהתאם למצב הנגינה (הפעלה / הפסקה), כרגע יש נגינה בתפריט האפשרויות.
הצב / הפריט האחרון בתפריט הפעלה, בחר את פריט התפריט המתאים להעברה ליישום המתאים. אם מוסיקה מתנגנת ברקע, בחר
בחר bmp / ​​gif כדי לפענח, תינתן הודעה מהירה כדי לברר אם לכבות את המוזיקה ולעיין בתמונות.
11.4 ספריות תלויות יישומים והממשקים שלהן
ממשק מערכת ו- libc
ספריית זמן ריצה של יישום
כל הפונקציות של applib
תפריט ui נפוץ, רשימת קבצים, סרגל ראש ומודולים נפוצים אחרים
מודול בורר קבצי Middleware
כלי תווך תמונה
11.5 תהליך עסקי בקשה
תמונה צריכה לממש גלישה בקבצים, השמעת קבצים, תצוגה מקדימה של תמונה ממוזערת והגדרות פרמטרים של יישומים, כך שהמודולים מחולקים
מוצג למטה:

עמוד 380
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 380
(
/
)
שקול אינטראקציה עם יישומי AP אחרים, אפליקציית התמונות יכולה לבחור בשני מצבי כניסה, מסמל תמונת הממשק הראשי להיכנס ו
מיישום דפדפן הקבצים, בחר את קובץ התמונה להפעלה וכניסה, תרשים הזרימה המתאים הוא כדלקמן:
/
*
*
11.5.1 התהליך הכולל של היישום ותהליך תזמון התרחיש
המפתח של מודול תזמון הסצינות הוא מכונת מצב לבקרת מצב סצינה, המשמשת למימוש ההמרה והתזמון בין סצינות שונות.
שלוט בתהליך הריצה של היישום. מודול זה מממש את תזמון הסצנות ובוחר סצינות שונות בהתאם למדינה. יישומי us212a הם
מורכב מסצינות, סצינה עצמאית משלימה פונקציה עצמאית יחסית. המודול הראשי (הראשי) אחראי על הכניסה והיציאה של היישום
עיבוד ובחירת תזמון סצינות. התמונה מחולקת בעיקר לארבע סצינות, המתאימות לגלישת הקבצים שתוארה למעלה,
ישנם 4 מודולים פונקציונליים לתצוגה מקדימה של תמונות ממוזערות, השמעת קבצים והגדרת פרמטרים. מחזור תזמון הסצנה המקביל מוצג באיור הבא:

עמוד 381
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
381 עמודים
11.5.2 תרשים זרימה של תרשים רשימת קבצים
סצנת הרשימה מפרטת את קבצי התמונות המאוחסנים בתקשורת בצורה של רשימה. בניגוד ליישום דפדפן הקבצים (דפדפן), זה
ניתוח הקבצים על ידי המודול מבוסס על רשימת ההשמעה של התמונה. רשימת סצינות על ידי קריאה לממשק המשתמש הנפוץ
בקרת הגלישה בקבצים מתממשת.

עמוד 382
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
382 עמודים
11.5.3 תרשים זרימת תצוגה מקדימה של תמונה
תמונות ממוזערות מוצגות בצורה של תשעה רשתות מרובעות. המוט והמספר הסידורי של הקובץ מוצגים בחלקו העליון, שם הקובץ מוצג בתחתית וכל אחת
שטח התמונה הוא 42 * 42, וגודל כל חלון תמונות הוא 40 * 40. .
הפונקציה של מודול התמונות הממוזערות דומה לזו של מודול רשימת הקבצים, ומספקת תצוגה מקדימה של קבצי תמונות. לקבצי הפעלה, השתמש בלבן
גבול, שם הקובץ בתחתית כתזכורת. בתהליך היישום זה דומה גם לבקרת הגלישה בקבצי ה- UI הנפוצה.
ניתן לחלק את מודול התמונות הממוזערות למודולים הפונקציונליים הבאים בהתאם לפונקציית הפונקציה:
Calculation חישוב וציור של חלון תמונה של גבולות פריט פעילים ובלתי פעילים
✧ הצגת המספר הסידורי של הקובץ ושם הקובץ של הקובץ או הספרייה הפעילים
✧ פענוח תמונה ממוזערת של קבצי תמונות במסך אחד
Processing עיבוד תגובת מפתח
Brow גלישת קבצים, בחירה, זיכרון מסלול

עמוד 383
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 383
הַתחָלָה
אתחול פענוח
(טיימר יישום, אתחול קבצים)
אתחול סצנה
האם לצאת מהזירה
האם עליך לעדכן את היררכיית הספריות
צריך לצייר מחדש
ממשק תצוגה מקדימה
האם עליך לגלול כדי להציג הפעלה
שם קובץ הפריט
קבל הודעת GUI
קבל הודעת מערכת
לַחֲזוֹר
עדכן את נתיב הקריאה ברמת הספריה
זיכרון נתיב
על פי פריטים פעילים ולא פעילים
תצוגת עדכון ערך
גלול את שם הקובץ
עיבוד הודעות GUI
עיבוד הודעות מערכת
י
נ
י
י
י
י
י
נ
נ
נ
נ
נ
11.5.4 תרשים זרימת השמעה של סצנת תמונות
מודול ההפעלה של התמונות מממש פונקציות כמו השמעה אוטומטית / ידנית של תמונות, מעבר בין שירים עליונים לתחתונים, ותגובה על הקשות.

עמוד 384
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 384
הַתחָלָה
אתחול סצנה
(הזן הגדרות חלון, הפעל
הגדרות פרמטר)
האם לעבור קבצים
סוֹף
החלף עיבוד קבצים
נ
נ
י
לולאת סצינה
האם לפענח את הקובץ
אם הפענוח נגמר
אתחול פענוח הקבצים
סגור את חוט הפענוח ועיבוד אחר
קבל הודעת GUI
עיבוד הודעות GUI
קבל הודעת מערכת
עיבוד הודעות מערכת
האם לצאת מלופ הסצנה
נ
נ
נ
נ
י
י
י
י

עמוד 385
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
385 עמודים
11.5.5 תרשים זרימת תרשים קופץ
מודול התפריט משמש להגדרת בהירות, זמן הצגת שקופיות, מחיקת קבצים, העברה דינמית למוזיקה / FM, יצירת רשימת השמעה
והחלף את פונקציית אותיות הכונן. מכיוון שיש שלושה מצבים ברקע: אין רקע, משחק ברקע, הפסקה ברקע, פונקציית תמונה ממוזערת
ישנם שני סוגים: אין פונקציית תמונה ממוזערת ופונקציה ממוזערת, כך שיהיו 6 שילובים ליצירת ערך התפריט של תמונה.
בנוסף, מתווספות ספריית הכרטיסים ותפריט ספריות הדיסק הראשי המוצג על ידי הכרטיס, בסך הכל 7 רשומות בתפריט:
פונקציית התפריט תלויה בבקרת התפריט ui הנפוצה ובקובץ ה- mcg שנוצר על ידי כלי עריכת התפריט. על פי השלושה לעיל
פריט דינאמי קובע את תפריט הכניסה, מאתחל את מבנה בקרת התפריט וקורא לבקרת התפריט לממש את פונקציית המודול.
11.5.6 תרשים זרימה של תפריט תמונה
סצנת התפריט של התמונה אינה סצנה שתמיד קיימת. זה יופיע רק אם יתגלה הכרטיס
סצינות. תהליך היישום של סצנה זו דומה לסצנת תפריט האפשרויות, אך סצינה זו לא נעשית על ידי לחיצה על סצינות אחרות.

עמוד 386
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 386
מפתח האפשרות יוצא. על ידי בחירת פריטי תפריט שונים, אתה יכול להיכנס לרשימות תמונות שונות.
סצנת התפריט מיושמת גם על ידי קריאה לבקרת ui_menulist (), והתהליך שלה דומה לסצנת תפריט האפשרויות.
11.6 תרשים זרימת נתונים של פענוח תמונות
תהליך פענוח התמונות הוא כדלקמן:
(1) אתר את קובץ ההפעלה
(2) טען את מודול ספריית הפענוח, צור חוט פענוח וקבל ידית פענוח
(3) שלח את הפקודה set_file לספריית הפענוח כדי להתחיל לנתח את הקובץ
(4) הגדר את מצב הרענון ואת חלון תצוגת התמונה בהתאם למידע הפענוח המתקבל
(5) שלח את פקודת הפענוח לספריית הפענוח כדי לאפשר פענוח תמונות
(6) ממשק המשתמש הקדמי מבצע לולאת הודעות, משיג ומעבד הודעות GUI והודעות מערכת
(7) אם הושלמה הפענוח או שנדרש פענוח ליציאה, סגור את חוט הפענוח ושחרר את מודול ספריית הפענוח.
מכיוון שספריית הפענוח מיושמת כעת גם כחוט השני, לאחר שליחת פקודת הפענוח לפתיחת פענוח התמונות, הזן אותה בקדמת הבמה
ישנם שני פתילים בתהליך: החוט הראשי הוא חוט ממשק המשתמש, שמיישם רכישת הודעות ותגובה, והחוט המשני הוא חוט הפענוח, שמיישם את התמונה.
פִּעַנוּחַ. החוט המשני יתלה את החוט לאחר הפענוח, אך את המשאבים שנכבשו על ידי החוט צריך להנפיק על ידי היישום כדי לסגור את החוט.
ישוחרר בהמשך. כאשר התחנה הקדמית מגיבה על הכפתור כדי להחליף את המוזיקה העליונה והתחתונה, החוט הראשי שולח באופן פעיל את הפקודה הסגירה לסיום קו הפענוח
כאשר חוט הפענוח מוצא את תנאי היציאה הוא יסיים את החוט, לאחר מכן, החוט הראשי משחרר את המשאבים תפוסים על ידי החוט המשני ו-
התקשר לבורר הקבצים כדי לבחור את הקובץ שיושמע. תזרים לוגיקה מפתח / תרשים רצף

עמוד 387
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 387
הַתחָלָה
תוצאת החזרה
נקה את דלפק הקבלה המשופר 
פריט TLB בו נמצא הבנק
טען ספריית פענוח תמונות
mmm_id.al
פתח את ידית החוט
הידית אינה ריקה
טעון בהצלחה
שגיאה בטעינת ספריית הפענוח
DECODE_LOAD_ERR
פתח שגיאת פתיל
DECODE_OPEN_ERR
קבל מידע על קבצים
התוצאה היא אמת
שגיאה בפתיחת הקובץ
DECODE_FILE_ERR
הגדר את חלון תצוגת התמונה
שלח את פקודת הפענוח כדי להתחיל בפענוח
י
נ
י
י
נ
נ

עמוד 388
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
388 עמודים
11.7 כיצד לשנות את מספר השורות והעמודות בתצוגה המקדימה של התמונה
מספר השורות והעמודות של תצוגה מקדימה של תמונה מוגדר בקובץ הכותרת ap_picture / Picture_preview.h, שנה
PIC_PER_OW ו- PIC_PER_COLUME יכולים לשנות את מספר השורות והעמודות בתצוגה המקדימה של התמונה
יישום ap_video 12
12.1 סקירת הדרישות
יישום הווידיאו משלים הגדרות גלישה, השמעה ותפריט של קבצי וידיאו על ידי חיוג לממשק המערכת וספריית פענוח הווידאו
פחית. תמיכה בפענוח amv / avi, תמיכה בתצוגת סרגל התקדמות הווידאו.
12.2 תכנון אדריכלות כולל
12.2.1 תרשים אדריכלות כולל

עמוד 389
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 389
12.2.2 חלוקת מודולים פונקציונליים
שם המודול
פונקציה קצרה
מודול ראשי
אחראי על אתחול ויציאת האפליקציה, כולל טעינה ופריקה של קבצי משאבים, קבצי תצורת תפריט, ל-
וניהול זירת אפליקציות
מודול עיבוד הודעות מערכת
עבד את הודעת מערכת הווידיאו שהתקבלה
מודול רשימת קבצים
התקשר למודול רשימת הקבצים כדי להציג את רשימת קבצי הווידאו
מודול תפריט אפשרות
התקשר למודול רשימת התפריט כדי להציג את פריט התפריט של אפשרות הווידאו, השלם את הגדרת פונקציית יישום הווידאו
מודול נגן וידאו
מימוש בקרת הפעלת וידאו
מודול תצורת פריט תפריט
נתוני תצורת תפריט
מודול ציבורי וידאו
מימוש כמה פונקציות משנה ציבוריות, השלמת אתחול בחירת הקבצים ופונקציות מעבר אותיות כונן
12.3 סינכרון ואינטראקציה עם יישומים אחרים
הכנס את יישום הווידיאו מהממשק הראשי. לפני השמעת הווידאו, אם יש מוזיקה או FM שמנגנים ברקע,
מצב (הפעלה / הפסקה), יש כרגע פריטי תפריט הפעלה / הפעלה קודמים בתפריט תפריט האפשרויות, בחר את פריט התפריט המתאים להעברת אליו
היישום המקביל. לאחר בחירת הסרטון להפעלה, הווידיאו ישלח באופן פעיל הודעה לתהליך המנהל, בבקשת מנוע הרקע לצאת.
לפיכך הסרטון בלעדי הדדי עם תהליכי רקע אחרים במהלך הפעלת הווידאו.
12.4 ספריות תלויות יישומים והממשקים שלהן
ממשק מערכת ו- libc
ספריית זמן ריצה של יישום
כל הפונקציות של applib
תפריט ui נפוץ, רשימת קבצים, סרגל ראש ומודולים נפוצים אחרים
מודול בורר קבצי Middleware
תווך וידאו
12.5 תהליך עסקי מיושם
על הווידאו ליישם שתי פונקציות עיקריות, קרי: גלישה בקבצי וידיאו והפעלת קובצי וידיאו, בנוסף עליו לכלול גם משחק הגומלין.
הגדר את הפרמטרים, כך שהמודול הראשי יחולק כמוצג באיור למטה:

עמוד 390
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 390
שקול אינטראקציה עם aps אחרים, וידיאו יכול לבחור שני מצבי כניסה, כלומר להזין מסמל הווידיאו הראשי של הממשק ומהטקסט
יישום דפדפן התוכנה בוחר את קובץ הווידיאו להפעלה ונכנס, התהליך המקביל מוצג באיור הבא:
יישומי Us212a מורכבים מסצינות. סצנה עצמאית משלימה פונקציות עצמאיות יחסית. המודול הראשי אחראי על גישה ap.
כניסה ויציאה ובחירת תזמון סצינות. הווידיאו מחולק בעיקר לשלוש סצינות, המתאימות לגלישת קבצים ולהפעלת קבצים בהתאמה
ושלושה חלקים של הגדרת הפרמטרים.
12.5.1 התהליך הכולל של היישום ותהליך תזמון התרחיש
יישום הווידיאו שייך לתהליך ממשק המשתמש הקדמי. היישום קורא משתני VM דרך _video_read_var () בעת הכניסה, פנימה
הפונקציה _video_app_init () משלימה אתחול של applib, אתחול טיימר תוכנה, אתחול מודול ההודעות, מערכת
טיימר המערכת מאתחל, ההודעה מאתחלת, קובץ המשאב וקובץ תצורת התפריט נפתחים ובורר הקבצים נקרא סוף סוף.
מודול האתחול טוען מנהלי התקנים ומנהלי מערכת קבצים.
כאשר יישום הווידיאו ייצא, הוא יקבע לאיזה יישום להחזיר על סמך התוצאה של ערך ההחזרה ואופן הכניסה ליישום הווידיאו.
השתמש ואז שלח הודעה לתהליך המנהל כדי לבקש את יצירת היישום המתאים. ואז הפוך את רצף האתחול, ביציאה
שמור משתני VM, התקשר אל _video_app_deinit () להשלמת יציאת בורר הקבצים, יציאת טיימר מערכת, תצורת תפריט

עמוד 391
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 391
הקובץ וקובץ המשאבים נסגרים ולבסוף פעולת ההתנתקות של ספריית ה- applib מבוצעת ומחוזרת. התהליך הכולל של היישום מוצג באיור הבא:
12.5.2 תרשים זרימה של רשימת קבצים
מודול הגלישה של הקבצים מציג את קבצי התמונות המאוחסנים במדיום בטופס רשימה. שלא כמו יישום דפדפן הקבצים (דפדפן)
במקביל, ניתוח הקבצים במודול זה מבוסס על רשימת ההשמעה של הווידאו. מודול רשימת הקבצים נקרא על ידי
יישום בקרת הגלישה הנפוצה של קבצי ממשק המשתמש.
תרשים הזרימה של סצנת רשימת הקבצים מוצג באיור שלהלן:

עמוד 392
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 392
12.5.3 תרשים זרימת תרחיש של הפעלת וידיאו
מודול הפעלת הווידיאו מממש את ההפעלה של קבצי וידיאו בפורמט amv ו- avi, החלפתם של שלושת ממשקי התצוגה ותצוגת ממשק המשתמש.
תהליך היישום הוא כדלקמן:
(1) אתר את קובץ ההפעלה
(2) טען את מודול ספריית הפענוח כדי להשיג את ידית הפענוח
(3) שלח את הפקודה set_file לספריית הפענוח כדי להתחיל לנתח את הקובץ
(4) הגדר את פרמטרי הקואורדינטות של חלונות ה- AMV וה- AVI בהתאם למידע הפענוח המתקבל, והקודק יגדיר את החלון ואת מצב רענון המסך בהתאם
(5) ממשק המשתמש הקדמי מבצע לולאת הודעות, משיג ומעבד הודעות GUI והודעות מערכת
(6) קבע אם להמשיך לפענוח בהתאם לתוצאת העיבוד. אם יש צורך בפענוח, שלח פקודת פענוח לפענוח מסגרת וידאו או שמע.
מסגרת תדר, אם אתה זקוק להמשך קדימה והרצה אחורה, שלח פקודות קדימה והרצה אחורה
(7) במקרים אחרים, סיים את הפענוח הנוכחי, החלף את השירים העליונים והתחתונים או צא ממודול ההפעלה

עמוד 393
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
393 עמודים
12.5.4 תרשים זרימת תרשים קופץ
מודול התפריט משמש להגדרת בהירות, מחיקת קבצים, יצירת רשימות השמעה ומחליפת אותיות כונן. הווידאו מגדיר 4
כניסות התפריט תואמות את התפריט של בחירת אות הכונן כאשר יש קלף, והשלושה המתאימים לכך שלא מתנגנים / מנגנים / משחקים לאחרונה
סוג של תפריט דינמי.
פונקציית התפריט תלויה בבקרת התפריט ui הנפוצה ובקובץ ה- mcg שנוצר על ידי כלי עריכת התפריט. לפי הנחוש
היכנס לתפריט, אתחל את מבנה בקרת התפריט והתקשר לבקרת התפריט כדי לממש את הפונקציה של המודול.

עמוד 394
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
394 עמודים
12.5.5 תרשים זרימה של תפריט וידאו
סצנת התפריט של הווידיאו אינה סצנה שתמיד קיימת. זה יופיע רק אם יתגלה הכרטיס
סצינות. תהליך היישום של סצנה זו דומה לסצנת תפריט האפשרויות, אך סצינה זו לא נעשית על ידי לחיצה על וידיאו בסצינות אחרות.
מפתח. על ידי בחירת פריטי תפריט שונים, אתה יכול להיכנס לרשימות וידאו שונות.
סצנת התפריט מיושמת גם על ידי קריאה לבקרת ui_menulist (), והתהליך שלה דומה לסצנת תפריט האפשרויות.
12.6 תרשים זרימת נתונים של פענוח וידאו
יש דמיון לפענוח וידאו, לפענוח תמונות ופענוח מוסיקה. כדי לממש פענוח קבצים, טען תחילה את ספריית הפענוח
הזן את הזיכרון, ואז תן לקושחת הפענוח לנתח את קובץ הווידיאו על ידי שליחת הפקודה SET_FILE ולבסוף שלח את פקודת הפענוח בלולאה
מימוש פענוח וידאו. תרשים הזרימה של כל אתחול פענוח הווידאו הוא כדלקמן:

עמוד 395
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
395 עמודים
12.7 כיצד וידאו מציג את ממשק ממשק המשתמש, כגון סרגל ההתקדמות בזמן הצגת הווידאו
פענוח הווידיאו מתבצע בפועל באופן סדרתי.במהלך הפעלת וידיאו, בכל פעם שמפענח מסגרת וידאו, זה יקרה
במחזור ג'ינגדה, מגלים האם ישנם אלמנטים בממשק שצריך להציג, כגון תצוגת זמן ותצוגה של סרגל ההתקדמות. דורש תשומת לב
כן, כאשר הווידאו מפוענח וממשק ממשק המשתמש מתרענן, מצב המסך בו משתמשים השניים, פרמטר האתחול של בקר LCD אינו
אותו הדבר. לכן, שים לב שעליך לאתחל את בקר LCD למצב RGB לפני רענון הממשק ולהגדיר את הרענון
המצב הוא DRAW_MODE_V_DEF לאחר השלמת הרענון הוא יחזור למצב רענון ברירת המחדל של הווידיאו. פיתרון וידאו
תוכנת הקודי תתחל מחדש את הבקר למצב YUV לפני כל פענוח, כך שהיישום צריך רק לחדש את הרענון.
במצב, אין צורך לאתחל מחדש את בקר ה- lcd.

עמוד 396
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
396 עמודים
12.8 כיצד לבצע אופטימיזציה של ביצועי התצוגה במהלך הפעלת הווידאו
במהלך הפעלת הווידיאו, הוא תומך בהצגת מידע על התקדמות במהלך הפעלת הווידאו. מכיוון שההפעלה של הווידיאו עשויה להכיל זרם גדול, הווידיאו
הפענוח ותצוגת הממשק מבוצעים בפועל באופן סדרתי. אם ממשק התצוגה לוקח זמן רב מדי, הקול עלול להפריע.
המצב הקול. באופן כללי, יישום בקרות מונעות תצוגה מורכב יותר, וישנן דרגות פונקציה רבות.
התנגשויות פענוח וידאו, כך שהווידיאו מיישם שיטת ממשק תצוגה יעילה יותר בשכבת ה- ap.
במהלך הפעלת הווידיאו, עליכם ליישם בקרות כגון סרגל התקדמות, סרגל עוצמת הקול, תצוגת זמן ותצוגת שם קובץ. לשפר
יעילות, תמונות הקשורות במטמון ושמות קבצים ל- RAM. 15K החל מ- 0x3c000 משמש במהלך הפעלת וידאו
המאגר משמש כמאגר מטמון. מנהל התקן מספק את פונקציית הממשק ui_read_pic_to_buffer () להעברת המשאבים המתאימים
הקובץ נקרא למאגר שצוין.
12.9 כיצד לממש מסך מלא כדי להציג סרגל התקדמות וסרגל עוצמת קול במהלך הפעלת וידאו
מודול פענוח הווידיאו אינו הופך לחוט נפרד כמו פענוח תמונות, ולכן יש להשתמש בו בלולאה הראשית כדי לקרוא לפקודת הפענוח.
לממש את ההפעלה ללא הפרעה של הסרטון. ומכיוון שבסרטון יש שלוש מעברי מצב בממשק ההפעלה: חלון סרגל התקדמות, חלון נפח,
חלון מסך מלא. שלושה סוגי חלונות מוגדרים למטרה זו:
typedef enum
{
VIDEO_VOLUMEBAR = 0,
VIDEO_PROGRESSBAR,
VIDEO_FULLSCREEN
} video_window_e;
השתמש במשתנים g_video_prev_window ו- g_video_cur_window כדי לרשום את הסטטוס שלו.
חלון סרגל ההתקדמות זקוק לזמן רענון ותצוגת גלילת שם קובץ, לאחר 5 שניות, הוא צריך לעבור אוטומטית מחלון הנגינה לחלון המסך המלא.
לכן דרושים שלושה טיימרים לצורך רענון זמן, גלילת שם קובץ והמרת מסך מלא. תעודת הזהות שלה היא
timer_flush_progress, timer_flush_filename, timer_flush_fullscreen. על מנת לשלוט על פתיחת שלושת הטיימרים הללו
כדי להפעיל ולכבות, הגדר את המשתנה g_video_timer_flag באופן הבא:
# הגדר את up_video_fullscreen_timer 0x01
# הגדר את up_video_filename_timer 0x02
# הגדר את up_video_progress_timer 0x04
# הגדר clr_video_fullscreen_timer 0x08
# הגדר clr_video_filename_timer 0x10
# הגדר clr_video_progress_timer 0x20
השתמש ב -6 ביטים כדי לייצג את הפתיחה והסגירה של שלושת הטיימרים.
בסרטון יש שלוש מצבי חלון.אזור ההשמעה היעיל של קובץ הווידיאו בשלושת המצבים שונה.
ניתן לראות כי מודול הרענון לתצוגה ישלח פקודות חלונות שונות בהתאם לסיבית דגל הרענון, ופענוח הווידיאו יחשב את הצורך לשמור
האזור מיועד לתצוגת ממשק משתמש. תרשים המעבר של שלושת החלונות מציין כי הווידאו במצב הנגינה הוא כדלקמן:

עמוד 397
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
397 עמודים
כאשר הסרטון במצב מושהה, על פי תרשים המעבר לעיל, מצב חלון הווידיאו חייב להיות חלון ההתקדמות, והמצב מושהה.
חלון התקדמות המצב לא יהפוך לחלון במסך מלא לאחר 5 ש ', ולכן תרשים המעבר למצב ההשהיה הוא:
חלון מסך מלא
חלון התקדמות
חלון עוצמת הקול
הבא / קודם / לשחק /
לְהַחזִיק
vol + / vol-
הבא / קודם / לשחק /
החזק / 5s ללא פעולה
אם הוא פועל כרגיל, מצב ההתחלה הוא חלון סרגל ההתקדמות, ומודול הרענון לתצוגה נקרא להציג את ממשק הפעלת הווידיאו. לְהַצִיג
מודול הרענון משלים את התצוגה של ממשק ההפעלה, ושולח פקודות לתוכנת הפענוח כדי להציג את חלון סרגל ההתקדמות, חלון סרגל העוצמה וחלון המסך המלא.
כשמנגנים בפורמט amv, ישנו התנגשות בין מצב הרענון של הווידיאו למצב הרענון של רכיבי ממשק ממשק המשתמש, כך שהתצוגה מוצגת לאחר סיום השיחה.
לאחר מצב הרענון, יש לשחזר את מצב רענון הווידאו.
זרימת העיבוד של כל מודול רענון התצוגה היא כדלקמן:

עמוד 398
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
398 עמודים
יש לציין כי על מנת לשפר את היעילות של רענון ממשק המשתמש במהלך הצגת הווידיאו, הזמן, סרגל ההתקדמות, סרגל הראש, מסך ברור ופונקציות אחרות
הנתונים אינם משתמשים בפונקציות הקשורות למנהל התקן ממשק המשתמש, במקום זאת הם שומרים את התמונה ב- RAM ואז משתמשים ב- DMA כדי לרענן את המסך.
זה יכול למקסם את ביצועי תצוגת הווידאו.
12.10 מדוע יש לקובץ התצורה של תפריט הווידיאו מצבי אוסף שונים?
על מנת להפחית את המעבר בין הבנקים ולשפר את יעילות הפענוח ביישומי וידיאו, כל התוכניות מאמצות את מצב ההערכה של O2.
כמות הקוד קטנה יותר ויעילות הביצוע גבוהה יותר. אבל קובץ תצורת התפריט רושם את תוכן כותרת התפריט ותפריט העלים המתאימים, כגון
אם O2 משמש להרכבה, מיון זה יופרע וכלי תצורת התפריט לא יכול לנתח את תוכן הקובץ. אז התפריט מצויד
קובץ התצורה מורכב עם O0 בלבד. למעשה, קובץ זה משמש רק לכלי תצורת התפריט, ולא ממש משתמשים בו במחשב הקטן
קובץ זה אינו דורש את מגבלת הקוד של 2k.

עמוד 399
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
399 עמודים
יישום ap_radio 13
13.1 סקירת הדרישות
יישום הרדיו משמש למימוש הפונקציות של השמעה, חיפוש, שמירה ומחיקה של תחנות רדיו FM. המימוש העיקרי הוא להציג
פונקציות ופונקציות הקשורות לשכבה הקשורות למודולי חומרת FM מיושמות על ידי מנהל התקן FM המספק ממשקים בנפרד.
הדרישות התפקודיות הן כדלקמן:
1. תמיכה בהפעלה של תחנות רדיו מוגדרות מראש ותחנות רדיו מוגדרות על ידי המשתמש
2. תומך בתצוגה של תחנות רדיו מוגדרות מראש ורשימות תחנות רדיו מוגדרות על ידי המשתמש
3. תומך בשמירה ומחיקה של תחנות רדיו מוגדרות מראש, כולל מחיקת כל תחנות הרדיו שנקבעו מראש
4. תמיכה בכוונון ידני ותצוגת ממשק כוונון אוטומטי, שמור תחנות יעילות.
5. תומך בשלושה רצועות תדרים רדיו: פס תדר רגיל, פס תדרים יפני ופס תדרים אירופי
6. תפריט תמיכה קפיצה להקלטת רדיו FM או ליישום פונקציית השמעת קבצים.
דרישות הביצועים הן כדלקמן:
1. מסוגל למצוא תחנות יעילות ביציבות
2. לעמוד בדרישות מדד החומרה כגון משרעת פלט FM ורגישות חיפוש בערוצים.
13.2 תכנון אדריכלות כולל
מחולק לפי ממשק, ממשק יישומי הרדיו כולל סצינות תפריט ראשי, סצינות השמעת FM, סצינות רשימת תחנות רדיו (כולל קביעות מוגדרות מראש
הגדר את רשימת התחנות ואת רשימת תחנות המשתמש) ואת אפשרויות התפריטים המשנה בתפריט המשנה (כולל תפריט המשנה של רשימת ההגדרות מראש ותפריט המשנה של סצנת ההפעלה)
תפריט) יש ארבעה חלקים עיקריים. בנוסף, חיפוש ערוצים חצי אוטומטי וחיפוש ערוצים אוטומטי, כמודול עצמאי יחסית, הסצינה
הציור של מעובד על ידי מודול נפרד ואינו כלול בתזמון של מתזמן הסצנה.
13.2.1 תרשים אדריכלות כולל
התרשים הכולל של תכנון האדריכלות של היישום הוא כדלקמן:

עמוד 400
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
400 עמודים
איור 15-1 תרשים ארכיטקטורה כולל של יישומי רדיו
13.2.2 חלוקת מודולים פונקציונליים
מחולקים על ידי מודולים פונקציונליים, ניתן לחלק את המודולים העיקריים של יישומי רדיו ל: מודול ראשי (כולל מודול מתזמן סצינות), כולם מ
מודול חיפוש דינמי (כולל חיפוש אוטומטי לחומרה, חיפוש אוטומטי בתוכנה, ופונקציות משנה הקשורות לעיבוד), חיפוש אוטומטי למחצה
מודול תחנה, מודול רשימת תחנות, מודול פונקציית תפריט, מודול פונקציית השמעה, מודול ניתוח תחנות משתמש, מודול פקודת שכבת מנוע
חסימות, מודולי פונקציית קוד תושב ומודולי נתונים גלובליים.
הפונקציות הספציפיות הן כדלקמן:
לוח 13-1 לוח חלוקת מודולים פונקציונליים
שם המודול
פונקציה קצרה
תיק מקביל
מודול ראשי
בעיקר למימוש אתחול יישומים, שחזור פרמטרים, גיבוי, app_radio_main.c

עמוד 401
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
401 עמודים
מתג משאבים , תזמון סצנות רדיו וכו '.
app_radio_scene_dispatch.c
מודול חיפוש ערוצים אוטומטי
בעיקר לאתחול, יציאה וממשק
רענן, בהתאם למצב החיפוש, מימוש החיפוש האוטומטי בחומרה או בתוכנה
פונקצית טייוואן
app_radio_autoseek.c
app_radio_autoseek_bank.c
app_radio_softseek.c
מודול חיפוש ערוצים למחצה אוטומטי
מימוש פונקציית חיפוש ערוצים אוטומטית למחצה או תוכנה
app_radio_search.c
מודול רשימת הרדיו
מימוש בעיקר של הגלישה ברשימת התחנות המוגדרות מראש ורשימת תחנות המשתמש
ושמור ומחק פונקציות של תחנות מוגדרות מראש.
app_radio_saved_preset.c
app_radio_delete_preset.c
app_radio_list_bank.c
app_radio_list_common.c
app_radio_list_keydeal.c
מודול פונקציית תפריט
כלול בעיקר את התצוגה של התפריט הראשי של הרדיו ואת התפריט המשנה של סצנת השמעת הרדיו
הצגת תפריטים ורשימות מוגדרות מראש, תפריטי כניסה ומנות עלים
תצורה יחידה, מימוש פונקציות תפריט וכו '.
app_radio_mainmenu.c
app_radio_menu_config.c
app_radio_menu_process.c
app_radio_option.c
הפעל מודול פונקציה
מימוש בעיקר של התצוגה של סצנת השמעת הרדיו ולחץ על הכפתור בסצינת ההפעלה
עיבוד הודעות וכו '.
app_radio_playing.c
app_radio_playing_deal.c
app_radio_playing_user.c
מודול ניתוח רדיו למשתמש
מנתח בעיקר את קלט קובץ תחנת הרדיו על ידי המשתמש והמיר אותו לתצוגה
רשימת תחנות משתמש. תמיכה בקוד Ascill וקוד Unicode
ניתוח קובץ התחנה.
app_radio_userlist_parse.c
app_radio_userlist_parse_uni.c
מודול פיקוד שכבת מנוע
לעטוף בעיקר את הפונקציות הקשורות לשליחת הודעות למנוע הרדיו כ
מודול אחד.
app_radio_control.c
מודול פונקציית קוד תושב
אחסן בעיקר את הפונקציות המשמשות לעתים קרובות במרחב התושב
, צמצם את מיתוג הבנקים ושיפר את היעילות.
app_radio_rcode.c
מודול נתונים גלובלי
בעיקר לניהול אחיד של הנתונים הגלובליים המשמשים את יישום הרדיו
app_radio_global_data.c
13.3 סנכרון ואינטראקציה עם יישומים אחרים
מנהל:
1.
כשיש מוסיקה ברקע, אם אתה עובר להפעלת רדיו, עליך לשלוח הודעה כדי לסגור תחילה את מנוע הרקע.
שלח את המידע למנהל, סגור את תהליך מנוע המוזיקה ואז צור את תהליך מנוע הרדיו.
2.
כשאתה יוצא מאפליקציית הרדיו, עליך לשקול לאיזה AP להיכנס. צריך לשלוח למנהל כדי ליצור AP חדש
חֲדָשׁוֹת. לדוגמה, כדי להזין הקלטת FM מרדיו, עליך ליצור תהליך הקלטה; הזן קול מרדיו,
צריך ליצור תהליך דפדפן; מרדיו חזרה למוזיקה, צריך ליצור תהליך חזית מוסיקה; מרדיו
כדי לחזור ל- MainMenu, עליך ליצור תהליך MainMenu וכו '.
מנוע Fm:

עמוד 402
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
402 עמודים
1. כאשר מתחילים לנגן רדיו, תהליך ממשק המשתמש ברדיו צריך לשלוח תחילה הודעה למנהל כדי ליצור את תהליך מנוע הרדיו.
במהלך השמעת רדיו, אם יש פעולה להפעלת חומרת מודול ה- FM, תהליך ממשק המשתמש ברדיו צריך לשלוח פקודות ל- FM
תהליך מנוע ואז מנוע מתקשר לממשק כונן FM כדי לממש את פעולת פעולת החומרה. ממשק משתמש רדיו ומנוע Fm
פונקציות הקשורות לאינטראקציה הן בעצם במודול הפקודה של שכבת המנוע.
13.4 ספריות תלויות יישומים והממשקים שלהן
יישום הרדיו משתמש בספריות הבאות:
1. ממשק api.a בין מערכת ל- libc
2. ספריית זמן ריצה של יישום ctor.o
3. כל הפונקציות של אפלייב
4. תפריט UI נפוץ, סרגל ראש, אנימציה ומודולים אחרים הנפוצים לפקודה
איור 15-2 תרשים תלות ביישום
13.5 תהליך עסקי מיושם
13.5.1 התהליך הכולל של היישום ותהליך תזמון התרחיש
הפונקציות הממומנות על ידי המודול הראשי הן בעיקר הפעלת יישום נושא, יציאה מהיישום והחלפת סצינות; מודול זה תושב מאוד
קבצי קוד המקור המתאימים הם app_radio_main.c ו- app_radio_scene_dispatch.c.

עמוד 403
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
403 עמודים
איור 15-3 תרשים זרימה כללי של הרדיו
מתזמן הסצנות של יישום הרדיו מיישם בעיקר תזמון בארבעת התרחישים הבאים:
א) סצינת התפריט הראשי של RadioUI
ב) סצנת ההפעלה של RadioUI
ג) סצינות רשימת תחנות, כולל סצינות רשימת תחנות מוגדרות מראש וסצינות רשימת תחנות משתמש. שניהם עוברים פרמטרים
הבחנה של radio_listtype_e g_radio_listtype. בנוסף, בשל הדרך להיכנס לרשימת התחנות שנקבעו מראש
סוגים רבים, כגון גלישה רגילה, בוחרים לשמור להגדרה מוגדרת מראש, או למחוק קביעה מוגדרת מראש כדי להזין, כדי להבדיל, ליצור
השתמש במשתנה radio_list_entry_e g_stalist_entry
ד) אפשרות לסצינות בתפריט המשנה, כולל תפריטי המשנה ברשימת תחנות הרדיו שנקבעו מראש וסצינות השמעת הרדיו
תפריט משנה. השניים נבדלים על ידי הפרמטר radio_opt_subscene_e g_option_type.
App_radio_scene_dispatch.c משמש ליישום הפונקציה למשלוח הסצינות של RadioUI. תרשים הזרימה של שיגור הסצנה הוא כדלקמן:

עמוד 404
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
404 עמודים
איור 15-4 תרשים זרימה של תזמון סצינות רדיו
13.5.2 תרשים זרימת שידור רדיו משודר
בנוסף למצב ההפעלה הרגיל של סצינת השידור ברדיו, יש לקחת בחשבון גם את רענון הממשק במהלך חיפוש תחנות אוטומטיות למחצה.
והריענון של הממשק בעת הפעלת רדיו משתמשים. לפיכך משתמשים בתצוגה של פריטים הקשורים לתדר הנוכחי, כמו תדר ומספר תחנה
פונקציה נפרדת ניתנת בכדי להקל על השיחה במהלך חיפוש ערוצים חצי אוטומטי. כל אזור בממשק שצריך לרענן נבדל באמצעות מפת סיביות.

עמוד 405
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 405
בנוסף, מכיוון שהוא עשוי להיכנס לשידור הרדיו מסצינות שונות, הוא צריך לחזור לסצנה אחרת בעת החזרה, כך שהאפליקציה
משתנה גלובלי g_playwin_mode משמש בו כדי לזהות את הסצינה כשנכנסים להפעלה.
תרשים הזרימה של סצינת השידור ברדיו הוא כדלקמן:
איור 15-6 תרשים זרימת שידור רדיו משודר
הערה: בעיבוד ההודעות gui של סצנת ההפעלה, אם תקשיב ללחוץ על הקודם או הבא, היא תיכנס לסצנת החיפוש הערוץ למחצה.
הסצינה נכנסת על ידי שיחה ישירה scene_play_search בעיבוד ההודעות gui, והיא אינה מנוהלת על ידי מתזמן הסצנה.
בחיפוש האוטומטי למחצה הוא יחולק לנהלי עיבוד שונים בהתאם למצב החיפוש המוגדר (חיפוש חומרה או חיפוש תוכנה)
עיבוד נפרד כך שחיפוש תוכנה וחיפוש חומרה אינם תלויים לחלוטין, כדלקמן:

עמוד 406
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 406
אם (g_radio_config.seek_mode == HARDSEEK)
{// עיבוד חיפוש חומרה חצי אוטומטי
ret = deal_hard_search (בימוי);
}
אַחֵר
{// עיבוד תוכנה לחיפוש ערוצים חצי אוטומטי
ret = deal_soft_search (דיר);
}
13.6 כיצד להגדיל את מספר התחנות שנקבעו מראש
כדי להקל על שינוי מספר תחנות הרדיו השמורות הנתמכות, מאקרו משמש ביישום RadioUI להגדרת מספר תחנות הרדיו הנתמכות.
כדלהלן:
/ *
כדי להגדיר את מספר התחנות השמורות הנתמכות ברשימת התחנות שנקבעו מראש, עליך לפתוח את מאגר הגודל המתאים * /
# הגדר MAX_STATION_COUNT 30
נקודות לציון:
1. מאקרו זה מגדיר את מספר התחנות הנתמכות על ידי תחנות קבועות מוגדרות מראש ותחנות משתמש בו זמנית.
מספר התחנות הנתמכות על ידי תחנת המשתמש זהה כברירת מחדל.
2. אם תגדיל את מספר תחנות הרדיו שהוגדרו מראש, כמות שטח השימוש בנתונים תגדל בהתאם. אנא שימו לב האם חריגה מהשטח. לִכלוֹל
כדלהלן:

עמוד 407
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
407 עמודים
// פרמטרי תצורת UI של רדיו
typedef struct
{
/* מספר קסם*/
קסם uint16;
/ * רשימת קביעה מוגדרת מראש (פס תדרים רגיל) * /
uint16 fmstation_us [MAX_STATION_COUNT];
/ * רשימת קביעות מוגדרות מראש (להקה יפנית) * /
uint16 fmstation_jp [MAX_STATION_COUNT];
/ * רשימה מוגדרת מראש (להקה אירופאית) * /
uint16 fmstation_eu [MAX_STATION_COUNT];
/ * מידע על תחנות הרדיו המתנגן כרגע * /
fm_play_status_t FMStatus;
/ * הלהקה המנגנת כרגע, Band_MAX פירושו שהנגינה הנוכחית היא תחנת המשתמש * /
radio_band_e band_mode;
/ * היכנסו לכניסת ההפעלה, שקובעת את הכניסה לרדיו UI * /
enter_voice_mode_e enter_voice;
/ * מצב החיפוש המשמש את מודול התצורה (ניתן להגדיר את מצב ברירת המחדל באמצעות פריטי תצורה) * /
FM_SeekMode_e seek_mode;
} radio_config_t;
/ * מבנה תחנת משתמש רדיו * /
typedef struct
{
/ * נקודת תדר של רשימת תחנות משתמשים, תצורת המנויים של המערך היא מספר תחנה -1 * /
uint16 fmstation_user [MAX_STATION_COUNT];
/ * שם תחנת המשתמש המנגנת כעת * /
שם תחנת char [40];
} radio_userlist_t;
// מספר אינדקס של רשימת רדיו משתמשים וטבלת מיפוי מספר רדיו,
// מערך המשנה למערך הוא מספר אינדקס, ערך המערך הוא מספר התחנה
// המספר המרבי של עריכות הנתמכות על ידי תחנת משתמש MAX_STATION_COUNT
uint8 g_userlist_table [MAX_STATION_COUNT];
// חיץ זמני לשמירת תחנות יעילות בחיפוש אחר תחנות אוטומטיות
uint16 Auto_tab [MAX_STATION_COUNT];

עמוד 408
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 408
מנוע 14 fm_engine
14.1 סקירת הדרישות
כתהליך רקע, מנוע ה- Fm הוא שכבת החיבור לתהליך RadioUI לשליטה במודול ה- FM. דרך מנוע ה- FM,
ניתן להפריד בין חומרת ה- RadioUI ו- FM, במידת הצורך, תוכלו להשתמש בה כשיוצא תהליך RadioUI.
תהליכים אחרים שולחים הודעות בקרת מודולי רדיו למנוע Fm כדי לממש פונקציות כמו החלפת תחנות.
הדרישות התפקודיות של מנוע ה- Fm הן כדלקמן:
1. קבל נכונה הודעות מתהליך RadioUI או מתהליכים אחרים ועבד אותן.
2. קרא לממשקים השונים שמספק מנהל התקן ה- FM לשליטה במודול ה- Fm, לאתחל את המודול ולהגדיר את התדר
סדרת פונקציות כמו קצב, חיפוש תצורה, הגדרת פס תדרים, יציאה וכן הלאה.
3. יציאת יישום המנוע אינה נשלטת על ידי תהליך RadioUI, אלא על ידי התהליך הקשור (כגון מוסיקה, וידאו) למנהל.
שלח הודעה כדי לבקש מתהליך מנוע ה- Fm לצאת.
14.2 תכנון כולל
יישום מנוע ה- FM פשוט יחסית: ראשית, ההודעות שמנוע ה- Fm צריך לעבד מחולקות לשלוש קטגוריות: אתחול מודול FM
הסר התקנות של הודעות קשורות, הודעות הגדרת מודול FM, הודעות קריאת מצב מודול FM. ואז עקוב אחר שלושת סוגי ההודעות האלה
המודולים מחולקים באופן הבא:
טבלה 16-1 לוח חלוקת מודולים פונקציונליים
שם המודול
פונקציה קצרה
תיק מקביל
מודול ראשי
בעיקר כדי לממש אתחול יישומי המנוע, שחזור פרמטרים והכנה
העתקה, התקנת מנהל התקן fm וכו '.
Fmengine_main.c
מודול כניסה לעיבוד הודעות
הכניסה הראשית לעיבוד הודעות מנוע Fm, כאשר שופטים שיש למנוע הודעה פרטית
כאשר יש לעבד את ההודעה, התקשר אל fmengine_message_deal, לחץ על ההודעה
עיבוד סיווג.
Fmengine_control.c
מודול עיבוד הודעות 1
טיפול בהודעות אתחול, הסרת התקנה והגדרת מודול
Fmengine_message_deal.c
מודול עיבוד הודעות 2
עיבוד הודעות רכישת מצב Fm מודול
Fmengine_message_deal_2.c

עמוד 409
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 409
14.3 תהליך עסקי של מנוע FM
14.3.1 התהליך הכולל של מנוע ה- FM
על פי חלוקת המודולים שהוזכרו לעיל, תרשים הזרימה הכולל של מנוע ה- FM הוא כדלקמן:
איור 16-1 תרשים זרימה כולל של מנוע FM

עמוד 410
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
410 עמודים
14.3.2 זרימת עיבוד ההודעות של מנוע FM
הרעיון הכללי של עיבוד ההודעות של מנוע ה- FM הוא: כאשר יש למנוע הודעה פרטית שעובדת, ההודעה הפרטית מעובדת.
על פי סוג ההודעה, העיבוד מסתיים בשכבת המנוע, או שממשק הנהג FM נקרא להפעלת החומרה;
כאשר יש לעבד את המידע, תהליך מנוע ה- FM מושעה לתזמון משימות.
תרשים הזרימה של עיבוד ההודעות דומה לתרשים הזרימה הכולל של מנוע ה- FM באיור 16-1 ולא יחזור על עצמו.
14.4 סנכרון ואינטראקציה עם מודולים אחרים
האינטראקציה בין מנוע FM ל- ap_manager היא כדלקמן:
כל יישום חזית יכול לשלוח הודעת MSG_APP_QUIT למנהל כדי לבקש מתהליך מנוע ה- FM לצאת.
האינטראקציה בין מנוע FM ל ap_radio היא כדלקמן:
בתכנית הנוכחית, מכיוון שפעולות FM רגילות כגון קביעת תדירות וחיפוש אחר תחנות מתבצעות כולם ב- RadioUI, זה שונה מ- FM
האינטראקציה המנועית השכיחה ביותר היא יישום RadioUI. ברדיו UI, המודול מתממש על ידי שליחת הודעות לתהליך מנוע ה- FM
אתחול, הגדרת תדרים, חיפוש ערוצים, רכישת סטטוס וכו '. הפונקציות בקובץ app_radio_control.c ב- RadioUI,
זה אחראי לאינטראקציה עם מנוע ה- FM.
האינטראקציה בין מנוע FM לנהג FM היא כדלקמן:
מנוע ה- FM מכניס ממשקים שונים שמספק נהג ה- FM ליישום פעולות החומרה, האינטראקציה בינה לבין דרייבר ה- FM היא בכל אחד
בעיבוד ההודעות נקרא ממשק נהג ה- FM הנדרש לממש את פעולת החומרה.

עמוד 411
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 411
14.5 הספרייה התלויה ביישום ותיאור הממשק שלה
14.6 כיצד להוסיף הודעת מנוע
כדי להוסיף הודעות מנוע, עיין בשלבים הבאים:
1. ב- msg_apps_type_e של App_msg.h, הוסף הודעת מנוע FM, שימו לב למציין המיקום של מנוע ה- FM
מיקום הסמל.
2. בפונקציה fmengine_message_deal, הוסף עיבוד הודעות.
לאן שיש לשלוח את ההודעה, למשל ביישומי RadioUI, הוסף את שליחת ההודעה (סינכרוני או אסינכרוני).
15 נהג FM
15.1 סקירת דרישות ועקרונות תכנון
דרישות יישום מנהל התקן FM הן כדלקמן:
1. הבינו את האקפסולציה של ממשק פעולת החומרה FM, כך שהיישום העליון לא צריך לדאוג לפרטי פעולת החומרה של FM, פשוט התקשרו
ניתן לממש פונקציות מקבילות על ידי ממשקים קשורים.
2. הבינו את הרב-צדדיות של כמה קודים למודולי FM שונים
3. הבינו את התוספת והשינוי הקלים של ממשק הנהג FM והתצורה הקלה של פריטי חומרה FM (כגון I2C אנלוגי
תצורת סיכת GPIO וכו ').
בתגובה לדרישות העיצוב לעיל, עקרונות התכנון העיקריים לעיצוב מונע FM הם:
1. כל קבוצה של מנהלי התקנים FM מספקת ממשק אחיד לשכבה העליונה, כך שיישום השכבה העליונה לא צריך לדאוג למודול ה- FM הספציפי בו נעשה שימוש.
קְבוּצָה. כדלהלן:

עמוד 412
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 412
/ * פונקצית ממשק חיצוני של מנהל התקן FM * /
fm_driver_operations fm_drv_op =
{(fm_op_func) sFM_Init, (fm_op_func) sFM_Standby, (fm_op_func) sFM_SetFreq,
(fm_op_func) sFM_GetStatus, (fm_op_func) sFM_Mute, (fm_op_func)
sFM_Search,
(fm_op_func) sFM_HardSeek, (fm_op_func) sFM_SetBand,
(fm_op_func) sFM_SetThrod, (fm_op_func) sFM_BreakSeek,
(fm_op_func) sFM_GetHardSeekflag, (fm_op_func) sFM_GetBand,
(fm_op_func) sFM_GetFreq, (fm_op_func) sFM_GetIntsity,
(fm_op_func) sFM_GetAnten, (fm_op_func) sFM_GetStereo,
};
2. הפרד את הקודים הנפוצים של כל מודול FM והגש אותם באופן עצמאי. לדוגמה, rom_I2C.c הוא קוד הפעולה של I2C,
התמצה; rcode_fm_op_entry.c מגדיר את ממשק הנהג FM ותצורת IO; bank_a_fm_init.c הוא מנהל ההתקן
פונקציות אתחול ויציאה וכו '.
3. כל מודול מיושם בנפרד עבור ממשק הכונן. ושקול להכניס יישומי ממשק נפוצים יותר במרחב התושב.
4. מכיוון שהמערכת לא מקצה קוד ומרחב נתונים למנהל התקן FM, הקצאת קוד ומרחב הנתונים במנהל התקן הנה כדלקמן:
בנוסף לריפוי הקוד, קוד התושב ומרבב מרחבי codec, כך שיש מקרה שיש לקחת בחשבון: בעת ביצוע
לאחר הקלטת FM חזור ישירות ל- FM מכיוון שקוד ה- Codec כיסה את קוד התושב של נהג ה- FM במהלך ההקלטה
עליך להתקין מחדש את מנהל ההתקן fm .
מכיוון שמנוע ה- FM אינו זקוק לשטח נתונים רב ברקע, ניתן להקצות בלוק ממרחב נתוני הרקע כנהג FM.
שטח נתונים דינמי.
*-------------------------------קוד----------------- --------------------- *
* --- rcode
: 0xbfc29000-0xbfc29fff אורך: 0x1000
*
* כאשר קוד I2C משמש לריפוי, הוא יתפוס את החלל הבא של rom_I2C, אחרת, ניתן גם להציב אותו בחלל ה- Rcode לעיל.
*
* --- rom_I2C: 0xbfc08000-0xbfc087ff אורך: 0x800
*
* --- בנק בנקאות
: (0x18 ** 0000 + 0x24c00) - (0x18 ** 0000 + 0x24fff) אורך: 0x400 *
* --- בנק בנק
: (0x28 ** 0000 + 0x25000) - (0x28 ** 0000 + 0x257ff) אורך: 0x800 *
*-------------------------------נתונים----------------- --------------------- *
* - rdata: 0x9fc1dd00-0x9fc1dfff אורך: 0x300
*
*************************************************** **********************
*** /
15.2 תכנון כולל

עמוד 413
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
413 עמודים
15.2.1 מיקום כונן ה- FM במבנה המערכת
איור 30-1 מיקום כונן FM במבנה המערכת
מנהל התקן FM הוא שכבת ההפעלה של חומרת ה- FM. במידת הצורך, התקשר אל sys_drv_install (DRV_GROUP_FM, 0,
"drv_fm.drv") לטעינה. בשלב זה, קוד תושב הנהג ונתוני האתחול יועברו לזיכרון ויוצאו להורג.
פונקציית אתחול מנהל התקן.
לאחר טעינת הנהג, השימוש בנהג נשלט לחלוטין על ידי השכבה העליונה כאשר תהליך RadioUI או תהליכים אחרים דורשים
כאשר ברצונך להפעיל את מודול FM, אתה יכול להתקשר לממשק של מנהל התקן ה- FM על ידי שליחת הודעה למנוע ה- FM ליישום קשה
פעולות חתיכה.
לדוגמה: בסצנת ההפעלה של RadioUI, יש להתאים את התדר צעד אחר צעד. בשלב זה, לאחר שינוי RadioUI לתדר חדש,
שלח הודעת MSG_FMENGINE_SETFREQ_SYNC למנוע FM והעביר את ערך התדר החדש
קדימה, לאחר שהמנוע יקבל את ההודעה, הוא יתקשר לממשק הנהג FM fm_set_freq ויכתוב את ערך התדר דרך I2C.
עבור לפנקס המודולים כדי להתאים את התדר.
15.2.2 חלוקת מודולים של כונן FM
בהתאם לעקרונות העיצוב של כונן FM, מודולי כונן ה- FM מחולקים באופן הבא:

עמוד 414
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
414 עמודים
שם המודול
פונקציה קצרה
תיק מקביל
מודול אתחול מנהל התקנים
בעיקר פונקציית האתחול והפריקה של הנהג,
זה נוח לכל מודול לשתף, לשתי הפונקציות הללו אין תוכן בפועל
bank_a_fm_init.c
מודול חומרה I2C
השתמש בעיקר בממשק אנלוגי I2C למימוש הרשמה למודול FM
הפונקציה של כתיבת אצווה של נתונים או קריאת נתונים. קוד מודול זה היה
מיצוק, על מנת לתמוך בתצורה של יציאת IO האנלוגית, ה- IO הרלוונטי מועבר על ידי הפרמטר
לְתוֹך.
rom_I2C.c
מודול ממשק ותצורה
קבע את התצורה של יציאת ה- IO האנלוגית, רשום את טבלת הממשק המסופקת על ידי מנהל התקן ה- FM
rcode_fm_op_entry.c
שלושת המודולים לעיל משותפים לכל מודול FM
מודול קוד תושב
יישום הממשק הנפוץ יותר של מנהל התקן FM ממוקם בחלל התושב של הנהג. rcode_fm_i2cdrv1.c
כונן מודול BANK
FM מניע ממשקים אחרים שיושמו ויושמו במרחב BANK.
bank_b_fm_i2cdrv2.c
bank_b_fm_i2cdrv3.c
15.3 תכנון ממשק חומרה של מנהל התקן FM
חלק ממשק החומרה בכונן ה- FM מדמה בעיקר את תצורת ה- PIN של I2C ואת מימוש הקוד של ההדמיה של I2C.
מכיוון שצריך לאבד את הקוד להדמיה של I2C, ויציאת IO חייבת להיות ניתנת להגדרה, יציאת IO של הפונקציות הקשורות לפעולת I2C נקבעת על ידי
נקבעים פרמטרי השידור, בנוסף, כדי לעמוד בדרישות קצב ההעברה של I2C של מודולים שונים, עיכוב הפעולה נקבע גם על ידי פרמטרי השידור. תצורה קשורה
כדלהלן:
/ * מבנה מידע אנלוגי GPIO המשמש את I2C * /
gpio_init_cfg_t gpio_i2c [2] =
{
// SCL == GPIO_A15
{GPIO_AINEN, GPIO_AOUTEN, GPIO_ADAT, GPIO_SCL_BIT},
// SDA == GPIO_A16
{GPIO_AINEN, GPIO_AOUTEN, GPIO_ADAT, GPIO_SDA_BIT}
};
/ * עיכוב פעולת I2C * /
uint8 delay_i2c = PARAM_DELAY_I2C;
קוד הריפוי של I2C מספק מספר ממשקים כלפי מעלה, שיכולים להיות משותפים לכל המודולים:

עמוד 415
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
415 עמודים
1. uint8 I2C_Trans_Bytes (uint8 * buf, אורך uint8, gpio_init_cfg_t * gpio, uint8 * עיכוב)
המימוש שולח את נתוני בתים באורך במאגר שצוין דרך I2C. לגבי אורך בתים באורך
האם ניתן לכלול את כתובת המכשיר, לרשום כתובת התחלה וכו ', ניתן לשנות בהתאם למודולים שונים.
2. uint8 I2C_Recev_Bytes (uint8 * buf, כתובת uint8, אורך uint8, gpio_init_cfg_t * gpio,
עיכוב uint8 *
שלח את כתובת המכשיר וקרא את נתוני בתים באורך מההתקן חזרה למאגר שצוין.
3. בטל את IIC_Init (gpio_init_cfg_t * gpio, uint8 * עיכוב)
אתחול I2C, GPIO נמצא במצב ההתחלתי
4. בטל IIC_Start (gpio_init_cfg_t * gpio, uint8 * עיכוב)
תנאי התחלה של I2C
5. בטל את IIC_WriteByte (uint8 dat, gpio_init_cfg_t * gpio, uint8 * עיכוב)
שלח בייט נתונים מוגדר דרך I2C, שיכול להיות כתובת מכשיר, כתובת רישום או ערך רישום וכו '.
6. uint8 IIC_GetAck (gpio_init_cfg_t * gpio, עיכוב uint8 *)
קבל את אות התגובה שיוחזר מהמכשיר.
7. uint8 IIC_ReadByte (gpio_init_cfg_t * gpio, uint8 * עיכוב)
קרא שוב בית אחד של נתונים מהמודול
8. בטל את IIC_SendAck (uint8 ack, gpio_init_cfg_t * gpio, uint8 * עיכוב)
שלח אות תגובה למודול
9. בטל IIC_Stop (gpio_init_cfg_t * gpio, uint8 * עיכוב)
מצב עצירת I2C.
15.4 תכנון ממשק יישומים של כונן FM
הממשק שמספק הנהג ה- FM כלפי מעלה הוא שמנוע ה- FM יתקשר למימוש פונקציות תפעול החומרה. ממשק יישומים מונע FM
יש לקחת בחשבון את הפונקציות המיושמות על ידי האפליקציה, ויש לאחד את הממשק כלפי מעלה של כל מודול כדי להפוך את התחתית לקשה.
תפעול התוכנה שקוף ליישום העליון.
נכון לעכשיו, ממשקי היישום של מנהל התקן FM רשומים באופן הבא בצורת טבלת הממשקים:

עמוד 416
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
416 עמודים
/ * פונקצית ממשק חיצוני של מנהל התקן FM * /
fm_driver_operations fm_drv_op =
{(fm_op_func) sFM_Init, (fm_op_func) sFM_Standby, (fm_op_func) sFM_SetFreq,
(fm_op_func) sFM_GetStatus, (fm_op_func) sFM_Mute, (fm_op_func)
sFM_Search,
(fm_op_func) sFM_HardSeek, (fm_op_func) sFM_SetBand,
(fm_op_func) sFM_SetThrod, (fm_op_func) sFM_BreakSeek,
(fm_op_func) sFM_GetHardSeekflag, (fm_op_func) sFM_GetBand,
(fm_op_func) sFM_GetFreq, (fm_op_func) sFM_GetIntsity,
(fm_op_func) sFM_GetAnten, (fm_op_func) sFM_GetStereo,
};
15.5 הממשק המאוחד המסופק על ידי מנהל התקן ה- FM והצגת כל ממשק להגדרת מאקרו
הגדרות המאקרו הקשורות המשמשות את מנהל התקן FM הן כדלקמן:
/ * מקבלי תצורת GPIO אנלוגיים של IIC אוטובוס * /
# הגדר את IIC_SCL_BIT 13
# הגדר את IIC_SDA_BIT 12
# הגדר את GPIO_SCL_BIT (0x00000001 << IIC_SCL_BIT)
# הגדר את GPIO_SDA_BIT (0x00000001 << IIC_SDA_BIT)
// פרמטרי עיכוב אנלוגיים של I2C, הקשורים לתדר העיקרי, צריכים להעביר פרמטרים להתאמה
# הגדר PARAM_DELAY_I2C 20
מבוא לממשק המסופק על ידי מנהל התקן FM:
1. int sFM_Init (פס uint8, רמת uint8, fre16 uint16)
אתחול מודול FM
2. int sFM_Standby (void * null1, void * null2, void * null3)
מודול FM נכנס למצב המתנה
3. int sFM_SetFreq (uint16 freq, void * null2, void * null3)
הגדר תדר להתחיל לשחק
4. int sFM_GetStatus (void * pstruct_buf, מצב uint8, void * null3)
קבל את מידע הסטטוס של המודול הנוכחי
5. int sFM_Mute (מצב FM_MUTE_e, void * null2, void * null3)
מודול מצב השתקה או ביטול השתקה
6. int sFM_Search (uint16 freq, uint8 ישיר, בטל * null3)
פעולת חיפוש תוכנה, כלומר, קבעו את התדר בזה אחר זה כדי לשפוט האם התחנה תקפה
7. int sFM_HardSeek (uint16 freq, uint8 ישיר, בטל * null3)
התחל את פעולת חיפוש החומרה, כלומר קבע את תדרי ההתחלה והסיום, וחומרת המודול מבצעת את החיפוש
8. int sFM_SetBand (להקת radio_band_e, void * null2, void * null3)

עמוד 417
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 417
הגדר להקת רדיו
9. int sFM_SetThrod (רמת uint8, void * null2, void * null3)
קבע את סף החיפוש
10. int sFM_BreakSeek (void * null1, void * null2, void * null3)
צא מפעולת חיפוש החומרה.
11. int sFM_GetHardSeekflag (void * דגל, void * null2, void * null3)
קבל את הסימן אם חיפוש החומרה הושלם
12. int sFM_GetBand (void * band, void * null2, void * null3)
קבל מידע על הלהקה הנוכחי
13. int sFM_GetFreq (void * freq, void * null2, void * null3)
קבל מידע על תדירות נוכחית
14. int sFM_GetIntsity (חלל * עוצמה, בטל * null2, בטל * null3)
קבל את עוצמת האות של התחנה הנוכחית
15. int sFM_GetAnten (void * אנטנה, void * null2, void * null3)
קבל מצב חיבור אנטנה (אוזניות)
16. int sFM_GetStereo (void * סטריאו, void * null2, void * null3)
קבל את המידע הסטריאו של התחנה הנוכחית.
15.6 תרשים זרימת נתונים מונע FM
שטח הנתונים של מנהל התקן FM יחסית שופע, בעיקרון מדובר בנתוני תושבים, בעיקר בהתמקדות בשני מערכים WritBuffer
ו- ReadBuffer, זהו מאגר הנתונים הקשור לפעולות I2C. המשמעות של נתונים גלובליים תוארה בפירוט בקוד
לא אחזור על זה כאן.
15.7 הוראות להקצאת זיכרון מנהל התקן FM
המערכת לא מקצה שטח זיכרון מיוחד לנהג ה- FM. בהתחשב בכך שלא מתנגנת מוזיקה כאשר מנהל ההתקן של ה- FM מופעל,
לפיכך, המרחב שהוקצה לנהג ה- FM הוא כדלקמן:

עמוד 418
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
418 עמודים
*-------------------------------קוד----------------- --------------------- *
* --- rcode
: 0xbfc29000-0xbfc29fff אורך: 0x1000
*
* כאשר קוד I2C מתמצק, הוא יתפוס את החלל הבא rom_I2C, אחרת, ניתן למקם אותו גם בחלל ה- rcode לעיל *
* --- rom_I2C: 0xbfc08000-0xbfc087ff אורך: 0x800
*
* --- בנק בנקאות
: (0x18 ** 0000 + 0x24c00) - (0x18 ** 0000 + 0x24fff) אורך: 0x400 *
* --- בנק בנק
: (0x28 ** 0000 + 0x25000) - (0x28 ** 0000 + 0x257ff) אורך: 0x800 *
*-------------------------------נתונים----------------- --------------------- *
* - rdata: 0x9fc1dd00-0x9fc1dfff אורך: 0x300
*
*************************************************** ************************* /
מתואר כך:
א) שטח קוד תושב נהג FM ומרחב קודקלים מרובים, ויש לקחת בחשבון הקלטת FM. כהקלטת FM,
קוד ה- Codec יחליף את קוד התושב של הנהג, ולכן כשחוזרים מהקלטת FM ישירות ל- FM, עליכם לשקול להתקין מחדש.
כונן FM.
ב) ניתן לחלק את מרחב הנתונים התושב של מנהל התקן ה- FM ל 0.75K ממרחב נתוני הרקע לשימושו של מנהל ההתקן FM.
מכיוון שנפח הנתונים של מנוע הרקע FM קטן, אין צורך ב 1.5K שטח נתונים ברקע.
15.8 מדריך שינוי לכונן FM
לאחר החלפת ה- FM IC, עליך לשנות את חלק ממשק החומרה של מנהל התקן ה- FM עבור ה- FM IC החדש, ו-
תכנון תוכנה משנה את תצורת ה- GPIO וההספק המתאימים.
שלב 1: שנה את פקודות מאקרו התצורה של GPIO ושל ספק הכוח בהתאם לתכנון החומרה. מאקרו התצורה תואר בעבר, לכן לא אחזור עליו.
עדיין לא נעשה שימוש במאקרו של תצורת הכוח של ההצעה, וניתן לשנות אותו במידת הצורך
/ * הגדרת GPIO כוח כוח, הקשורה לחומרה, שתיקבע * /
# הגדר REGFM_POWER_CTRL GPIO_ADAT
#לְהַגדִיר
OpenFMPower ()
act_writel ((act_readl (REGFM_POWER_CTRL) | 0x00000040),
REGFM_POWER_CTRL)
#לְהַגדִיר
CloseFMPower ()
act_writel ((act_readl (REGFM_POWER_CTRL) ו- 0xffffffbf),
REGFM_POWER_CTRL)
שלב 2: כל המודולים חולקים את הקוד, וחלק ממשק הנהג, אין צורך לשנות. על פי טבלת ממשקי הנהג, אחד אחד
פשוט הכירו את ממשק הכונן של המודול החדש.

עמוד 419
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
419 עמודים
15.9 הוראות לתצורת מנהל התקן FM
התצורה של מנהל ההתקן FM היא בעיקר להגדיר את התצורה של ה- GPIO המדמה את I2C ואת העיכוב של פעולת I2C. הראשון נמצא ב- I2C.H
לַעֲבוֹר
# הגדר את IIC_SCL_BIT
13
# הגדר את IIC_SDA_BIT
12
וב- Rcode_fm_op_entry.c
gpio_init_cfg_t gpio_i2c [2] =
{
{GPIO_AINEN, GPIO_AOUTEN, GPIO_ADAT, GPIO_SCL_BIT},
{GPIO_AINEN, GPIO_AOUTEN, GPIO_ADAT, GPIO_SDA_BIT}
};
ניתן לשנות אותו לכל יציאת IO של GPIOA או GPIOB.
האחרון דרך fm_drv.h
# הגדר PARAM_DELAY_I2C 20
ניתן לשנות.
15.10 כיצד להוסיף ממשק יישומים מונע FM
כדי להוסיף ממשק יישומים מונע FM, בצע את הצעדים שלהלן:
(8) ב- fm_drv_op של Rcode_fm_op_entry.c, הוסף את פונקציית הממשק
(9) בפעולות fm_driver_ של fm_interface.h, הוסף חבר ממשק חדש למיקום המתאים.
(10) ב- fm_cmd_e של fm_interface.h, הוסף פקודת ממשק חדשה למיקום המתאים.
(11) ב- fm_interface.h, הוסף הגדרת מאקרו חדשה, כלומר שם הפונקציה כאשר היישום העליון קורא לנהג.
לאחר הגדרת הממשק, פונקציית הממשק מיושמת במנהל ההתקן.
יישום 16 ap_mainmenu
16.1 סקירת הדרישות
היישום Mainmenu מציג את היישומים הנתמכים על ידי הפיתרון על המסך בתפריט מעוצב למימוש פונקציות היישום.
פונקציית ניווט ותמיכה לשינוי מספר היישומים הנתמכים על ידי התוכנית באמצעות הכלי FW Modify והממשק הראשי של כל יישום.

עמוד 420
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
420 עמודים
סדר ההסדר ב-.
16.2 תכנון אדריכלות כולל
16.2.1 תרשים אדריכלות כולל
מודול כניסה
סצנת הממשק העיקרית (הודעה
מודול מחזור)
מודול לעיבוד הודעות
הצגת מודול אתחול
מודול רכישת מידע למוזיקה
סצנת תפריט
מודול תצוגת ממשק
16.2.2 חלוקת מודולים פונקציונליים
שם המודול
פונקציה קצרה
תיק מקביל
מודול כניסה
אחראי על אתחול ויציאת היישום, כולל קבצי משאבים, קבצי תצורת תפריט
טעינה ופריקה של תוכנה, וניהול סצנות יישומים
mainmenu_main.c
מודול לולאת הודעה
שאילתות ממשק משתמש שאילתה והודעות פרטיות של יישומים, ושאילתה האם יש לעדכן אותה
ממשק, אם אתה נשאר בממשק הנגינה, אתה צריך לשאול גם את הרקע
בין אם השיר מועבר, אם הוא עובר, יש לעדכן את תצוגת כותרת השיר
mainmenu_msg_loop.c
מודול לעיבוד הודעות
טיפול בהודעות ממשק המשתמש והודעות פרטיות של יישומים
mainmenu_msg_handle.c
מודול תצוגת ממשק
הצגת הממשק לפי המספר הסידורי של היישום המופעל כעת
mainmenu_paint.c
מודול רכישת מידע למוזיקה
קבל את הכותרת של מוזיקת ​​הרקע
mainmenu_get_info.c
הצגת מודול אתחול
אתחל את סדר הסידור של סמלי היישום על פי פריטי תצורה
mainmenu_display_init.c
מודול תפריט
התקשרו לבקרת התפריט ופונקציית הביצוע של פריט התפריט
mainmenu_option_menu.c
מודול תצורת פריט תפריט
נתוני תצורת תפריט
ap_cfg_mainmenu.c

עמוד 421
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
421 עמודים
16.3 מחזור חיי היישום
16.3.1 הפעלת היישום
כל יישום צריך לחזור לממשק הראשי ולשלוח הודעה ליצירת יישום למנהל, שנוצר על ידי המנהל.
אתחול היישום הושלם בפונקציה _app_init, בעיקר אתחול של יישומי יישומי יישומים, האתחול של טיימר התוכנה,
אתחול טיימר מערכת, אתחול הודעות, קובץ משאבים פתוח וקובץ תצורת תפריט.
16.3.2 יציאת היישום
יישום נבחר בממשק הראשי ויישום התפריט הראשי יוצא באופן פעיל כשמוזנים את המפתח;
כאשר ההספק נמוך, כיבוי והמשתמש מאשר להכנס לכונן הבזק מסוג USB לאחר חיבור למחשב באמצעות usb, המנהל ישלח את MSG_APP_QUIT
הודעה, היישום ייצא גם כעת.
מה שצריך לעשות בכדי לצאת מהאפליקציה הוא ההפך מזה שנכנסים לאפליקציה, כלומר צאו ממערכת טיימר, שמרו את מידע VRAM וסגרו.
סגור את תצורת התפריט וקובץ המשאבים, יציאת ה- applib, פעולות אלה מסתיימות בפונקציה _app_exit.
16.4 סנכרון ואינטראקציה עם יישומים אחרים
אם יש נגינת רקע, כאשר הממשק הראשי מועבר לנגינה, עליך לקבל את הודעת הסנכרון של נתיב הקובץ מאחור.
מנוע ומידע הכותרת של המוסיקה המנגנת כעת מתקבל דרך בורר הקבצים להצגתו. אם הממשק נשאר ב
זה מתנגן, אתה צריך לבדוק אם מוסיקת הרקע מנותקת, ומרגע שעבר עליה, אתה צריך לעדכן את התצוגה של כותרת המוזיקה.
16.5 ספריות תלויות יישומים והממשקים שלהן
ממשק מערכת ו- libc api.a
ספריית זמן ריצה של יישום ctor.o
כל הפונקציות של Applib
תפריט ממשק משתמש נפוץ, סרגל ראש, אנימציה ומודולים אחרים הנפוצים לפקודה
בחירת קבצים ומודול רכישת ID3 בספריה המשופרת

עמוד 422
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
422 עמודים
16.6 תהליך עסקי מיושם

עמוד 423
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
423 עמודים
16.6.1 תהליך היישום הכולל ותזמון תזמון

עמוד 424
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
424 עמודים
16.6.2 תרשים זרימה של שולחן העבודה ( mainmenu_desktop )
הַתחָלָה
מידע תצוגה ראשוני
סוֹף
חזור למנהל הסצנה
ממשק מחדש
האם יש הודעה פרטית?
האם יש הודעות ממשק משתמש?
מידע על מוסיקת שאילתה?
לעדכן תצוגה?
האם אתה רוצה לחזור?
שאל אם השיר ברקע נחתך
טיפול בהודעות ממשק המשתמש
טיפול בהודעות פרטיות של אפליקציה
נ
י
י
י
י
י
נ
נ
נ
נ
16.6.3 תרשים זרימה של תפריט קופץ ( option_menulist )
התקשר לפונקציות הציבוריות של Common ui, אשר אין צורך לתאר אותן כאן.
16.7 כיצד להוסיף רשומת יישום
שלב 1: הוסף את ההגדרה מאקרו מזהה של היישום החדש ב- case_type.h,
# הגדר את APP_ID_MUSIC
0x00
# הגדר את APP_ID_AUDIBLE 0x01

עמוד 425
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
425 עמודים
...
# הגדר את APP_ID_NEWAP
0x ??
שלב 2: השתמש במזהה ה- apd החדש במערך app_name_ram בקובץ manager_get_name.c בקובץ ה- manager
עבור המנוי, הוסף את שם האפליקציה החדשה. שים לב שצריך להגדיל את גודל המערך בו זמנית כדי להתאים
const char app_name_ram [25] [12] =
{
"music.ap", "audible.ap", "video.ap", "picture.ap", "ebook.ap", "browser.ap", "voice.ap",
"record.ap", "radio.ap", "tools.ap", "setting.ap", "user1.ap", "user2.ap", "user3.ap",
"manager.ap", "mainmenu.ap", "playlist.ap", "config.ap", "udisk.ap", "mengine.ap",
"fmengine.ap", "alarm.ap", "mtp.ap", "mtpsync.ap", "fwupdate.ap", "newap.ap"
};
שלב 3: אם היישום הוא ה- AP הקדמי, שנה את פריט התצורה של mainmenu ap בקובץ config.txt,
הוסף את המזהה של האפליקציה החדשה תחת רצף היישום, כגון MAINMENU_AP_ID_ARRAY = 0 [0, 2, 7, 3, 8, ??, 4, 5, 9, 10];
לאחר מכן בצע מקרה \ כלים \ Gen_config \ genconfig.bat כדי ליצור config.bin חדש
שלב 4: הוסף ap חדש למקרה \ fwpkg \ fwimage.cfg וארוז אותו לקושחה, כך שהוא יהיה בדף הראשי לאחר שינוי
תוכלו לראות את יישום החזית החדש בהמשך.
16.8 כיצד למחוק רשומת יישום
שנה את פריט התצורה של ה- mainmenu ap בקובץ config.txt ושנה את מזהה היישום שצריך למחוק מ
מחק את פריט התצורה MAINMENU_AP_ID_ARRAY ולאחר מכן בצע מקרה \ כלים \ Gen_config \ genconfig.bat,
פשוט צור config.bin חדש.

עמוד 426
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
426 עמודים
17 יישומי ap_browser
17.1 סקירת הדרישות
הדפדפן משמש להצגת פריטי הספריה (ספריות וקבצים) של אמצעי אחסון פיזיים שונים (דיסק פלאש, צ'אק, דיסק U),
בחר קבצים תומכים להפעלה ומחק כל קבצים שנבחרו.
17.2 תכנון אדריכלות כולל
יישום הדפדפן פשוט יחסית וצריך לבצע את הפונקציות הבאות:
(1) עיון בפונקציה: הצגת קבצים וספריות לא מוסתרים, עם פונקציית זיכרון דפדוף;
(2) מחק את הפונקציה של קבצים שרירותיים
(3) הפעל את הקובץ שנבחר והיכנס לממשק הגלישה של קובץ הדפדפן לאחר החזרה מממשק הנגינה
לכן הדפדפן מחולק לשלוש סצינות, סצנת רשימת קבצים, סצנת תפריט אפשרות וסצנת תפריט. רשימת קבצים
סצנת הטבלה מממשת את גלישת הקבצים, וסצנת תפריט האפשרויות מממשת את פעולת התפריט, כמו קפיצה לממשק הנגינה למוסיקה בכדי לממש את הקובץ.
סצנת התפריט תופיע רק עם הכנסת הכרטיס.
17.2.1 תרשים אדריכלות כולל
המבנה הכולל של הדפדפן הוא פשוט יחסית, אם בחרתם קובץ להפעלה מהדפדפן, תצאו מאפליקציית הדפדפן.
כאשר הקובץ יחזור לאחר ההפעלה, הוא ייכנס שוב ליישום הדפדפן.
17.2.2 חלוקת מודולים פונקציונליים
הדפדפן מחולק למודולים הבאים:
שם המודול
פונקציה קצרה
מודול האתחול
אחראי על אתחול ויציאת היישום, כולל טעינת קבצי משאבים וקבצי תצורת תפריט
והסרת ההתקנה, וניהול סצנות יישומים
מודול תזמון סצנה
תזמון ועיבוד מערכות יחסים להעברת סצינות
סצנת רשימה
התקשר למודול רשימת הקבצים כדי להציג את רשימת קבצי הדפדפן
סצנת תפריט אפשרות
התקשר למודול רשימת התפריטים כדי להציג את פריט התפריט של אפשרות הדפדפן

עמוד 427
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 427
סצנת תפריט
הצג את ספריית הדיסק הראשית ואת ספריית הכרטיסים
יציאה מהמודול
מימוש עיבוד יציאה מהיישום
17.3 סינכרון ואינטראקציה עם יישומים אחרים
הזן את יישום הדפדפן מהממשק הראשי. אם יש מוזיקה או FM ברקע, בהתאם למצב הנגינה (השמעה / הפסקה),
כעת מוצגים / משחקים פריטי תפריט אחרונים בתפריט תפריט האפשרויות, בחרו בפריט התפריט המתאים להעברה ליישום המתאים. נבחר
לאחר הפעלת הקובץ שנבחר, הדפדפן ישלח באופן פעיל הודעה לתהליך המנהל, בבקשה ליצור את יישום החזית המתאים ולצאת ממנו.
דפדפן.
17.4 ספריות תלויות יישומים והממשקים שלהן
ממשק מערכת ו- libc
ספריית זמן ריצה של יישום
כל הפונקציות של applib
תפריט ui נפוץ, רשימת קבצים, סרגל ראש ומודולים נפוצים אחרים
מודול בורר קבצי Middleware

עמוד 428
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 428
17.5 התהליך הכולל של היישום ותהליך תזמון התרחיש
17.6 כיצד הדפדפן שומר כניסה ויציאה של ap
הדפדפן מספק פונקציות גלישה ובחירת קבצים, SDK הנוכחי, כניסת ap לדפדפן ונתיב יציאה כמוצג להלן:

עמוד 429
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
429 עמודים
ההבדל בין כניסה לדפדפן מהממשק הראשי וספריית ההקלטות הוא:
היכנס לדפדפן בממשק הראשי כדי לגלוש מתוך ספריית השורשים, ודפדף לספריית המשנה של הרשומה לספריית ההקלטות
הממשק הראשי נכנס לדפדפן ללא פריטי תפריט מקוננים, קריאת ההקלטה נכנסת לרשומה מכילה פריט תפריט מקונן
כשנכנסים לממשק הראשי לבחירת מוסיקה להפעלה, תפריט הגדרת המוסיקה והזן לספריית ההקלטות לבחירת מוזיקה
כשמנגנים, תפריט ההגדרות של המוסיקה שונה
לכן הדפדפן צריך לזכור לאיזה אפליקציה נכנס, ולהבדיל אם הוא מוחזר מ- ebook / מוסיקה / תמונה / וידאו או מ
ראשי / רשומה כניסה. ישנו prev_enter_mode חבר במשתנה VRAM g_browser_var של הדפדפן
כדי להקליט אם הדפדפן מוזמן מהעיקרי או מספריית ההקלטות. כשחוזרים מ- aps אחרים, זה יכול להיות מבוסס על הנכנס
נשפטים את הפרמטרים של הדפדפן.
17.7 כיצד למחוק את כל הספריה בדפדפן
הדפדפן תומך במחיקת קובץ בודד, וגם תומך במחיקת פעולת ספרייה שלמה. על פי המספר הכולל של ספריות הרשימה הנוכחיות וסדר הפריטים הפעילים
אתה יכול לקבוע אם מצב המחיקה הוא קובץ או מדריך. למחיקת ספריות, החל מהרמה העליונה של הספרייה הנוכחית, העמוק
שיטת מעבר התואר חוצה את הקבצים בכל ספרייה. קוד הפסאודו הוא כדלקמן:
עבור כל מנהל
חיפוש קובץ ומחק
אם (dir_total! = 0)
{
הזן משנה תת / // מחזר
}
אַחֵר
{
חזרה להורה ומחק / // מחק דיר
}
בתהליך המעבר, אם נמצא כי היררכיית הספריות עולה על 9 רמות, פעולת המחיקה הופסקה ומצב שגיאה מוחזר. יישום
הפעולה של שחזור פריט הספריה צריכה להיעשות בהתאם (מכיוון שרמת הספריה שונתה). פעולות מעבר ומחק מיושמות על ידי פקד ui_delete ().

עמוד 430
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
430 עמודים
יישום הדפדפן צריך לאתחל את סביבת הספרייה הנוכחית לפני המחיקה.
17.8 כיצד להיכנס לספריה שצוינה ולעיין בקבצים
ההבדל בין כניסה לספריה שצוינה כדי לגלוש בקבצים לבין כניסה לספריית השורש כדי לגלוש בקבצים הוא שהראשון צריך להיכנס תחילה לספריית ברירת מחדל.
לכן, יש צורך ליישם דרך להיכנס לתיקיה שצוינה. משופר מספק שתי פונקציות ממשק כדי להיכנס לספרייה שצוינה, הראשונה היא להשתמש
השתמש ב- fsel_browser_get_items () כדי לקבל את מספר פריטי הספריה בספריה הנוכחית, ואז התאים לשמות הספריות בזה אחר זה.
שיטה פחות יעילה, אך משיגה את האיחוד של ממשק ה- bs; השנייה היא להשתמש ב- fsel_enter_dir () כדי לעבור כדי להיכנס
תקליטור לתיקייה שאליה ברצונך להזין בתחתית מערכת הקבצים. שיטה זו היא שיטה יעילה יותר. להשתמש
קוד ההתייחסות של fsel_browser_get_items הוא כדלקמן:
// היכנס לספריית השורש
fsel_browser_enter_dir (ROOT_DIR, 0, מצח);
...
// קבל את ערך ספריית השורש, מצא אם יש שם ספרייה תואם
עבור (i = 1; i <= brow-> dir_total; i ++)
{
dec_para.top = i;
fsel_browser_get_items (& dec_para, & file_brow);
// השוואה בין שם ארוך
אם (libc_memcmp (שם שיניים, שם שם, קובץ_בוב. שם_לן) == 0)
{
לשבור;
}
// השוואת שם קצר
אם (libc_memcmp (שם שיניים, test_dentry, name_len) == 0)
{
לשבור;
}
}
אם (i> brow-> dir_total)
{
// לא ניתן למצוא את הספרייה שצוינה, צא
gui_dialog_msg (DIALOG_MSG, DIALOG_INFOR_WAIT, S_FILE_NO_FILE);
החזר FALSE;
}
// הזן את הספרייה לחיפוש
תוצאה = fsel_browser_enter_dir (SON_DIR, i, brow);

עמוד 431
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
431 עמודים
קוד ההתייחסות לשימוש ב- fsel_enter_dir () הוא כדלקמן:
fsel_enter_dir (CD_ROOT, NULL);
// מצא תחילה את ספריית השמות הארוכים
אם (fsel_enter_dir (CD_SUB, (char *) dir_name) == TRUE)
{
fsel_browser_enter_dir (CUR_DIR, 0, & brow);
אם ((brow.dir_total + brow.file_total) == 0)
{
תוצאה = FALSE;
}
}
אַחֵר
{
// לא ניתן למצוא את ספריית השם הארוך, חפש את ספריית השם הקצר
אם (fsel_enter_dir (CD_SUB, (char *) dir_short_name) == TRUE)
{
fsel_browser_enter_dir (CUR_DIR, 0, & brow);
אם ((brow.dir_total + brow.file_total) == 0)
{
תוצאה = FALSE;
}
}
אַחֵר
{
תוצאה = FALSE;
}
}
17.9 כיצד לגבות ולשחזר פריטי קטלוג
אם גיבוי ושחזור פריטי ספריה אינם צריכים לשנות את הסביבה המשופרת, כגון גיבוי של פריטי ספריה נוכחיים במהלך פעולות קבצים,
אתה יכול להשתמש ישירות ב- vfs_file_dir_offset () כדי לקבל את קיזוז הספריה הנוכחי ואת רמת הספריה לפני הפעולה, ואז בפעולה
השתמש vfs_file_dir_offset () לאחר השלמתו כדי לשחזר את ערך הספרייה הנוכחי. אם צריך לשחזר גם את הגיבוי וגם את השחזור
בסביבת העבודה המשופרת, עליך להשתמש get_location ו- set_location כדי לגבות ולשחזר את פריטי הספריה הנוכחיים. דוגמא
לדוגמה, בעת מחיקת ספריה, אם היררכיית הספריות עולה על 8 רמות, לא ניתן למחוק את הספריה הנוכחית. אך מעבר במדריך 8 ברמות ישתנה מתי
הקשר ההיררכי המשופר הקודם, לכן עליכם להשתמש fsel_browser_set_location () כדי לשחזר את ערך הספריה הקודם בעת החזרה.
קוד ההתייחסות הוא כדלקמן:
// השתמש vfs_file_dir_offset

עמוד 432
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 432
// שמור נתיב נוכחי
vfs_file_dir_offset (g_music_mount_id, & sys_layer_buf, cur_offset_save, 0);
...
// נתיב שחזור
vfs_file_dir_offset (g_music_mount_id, & sys_layer_buf, cur_offset_save, 1);
// השתמש בממשק מיקום
fsel_browser_get_location (& (g_browser_var.path.file_path.dirlocation), g_browser_var.path.file_source);
...
fsel_browser_set_location (& (g_browser_var.path.file_path.dirlocation), g_browser_var.path.file_source);
18 יישום ap_udisk
18.1 סקירת הדרישות
הפונקציות העיקריות שמומש על ידי היישום Udisk כוללות: (1) מימוש פונקציית דיסק U (2) תצוגת ממשק (3) בקרת לחצנים
18.2 תכנון אדריכלות כולל
אפליקציית Udisk זקוקה לתמיכה של ספריית מערכות ופונקציות ציבוריות:
18.2.1 תרשים אדריכלות כולל

עמוד 433
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 433
18.2.2 חלוקת מודולים פונקציונליים
החלק העיקרי של יישום זה מורכב מארבעה מודולים שכל אחד מהם אחראי לפונקציה נפרדת, כלומר תזמון מודולים,
עיבוד הודעות מערכת, אתחול יישומים, עיבוד יציאת יישומים ותצוגת ממשק. 4 המודולים הללו משתפים פעולה עם מודולי עזר אחרים,
מימוש כל פונקציות דיסק U.
שם המודול
פונקציה קצרה
פונקצית התכתבות
תיק מקביל
מודול ראשי
הוביל את התוכנית לרוץ ולהחליט את התזמון של מודולים אחרים. רָאשִׁי
main_udisk.c
מודול האתחול
אתחול יישומים.
udisk_init_all
udisk_enter2exit.c
יציאה מהמודול
האפליקציה יוצאת.
udisk_exit_all
usbdisk_enter2exit.c
מודול תצוגה
אחראי לתצוגה.
לְהַצִיג
usbdisk_task.c
18.3 סינכרון ואינטראקציה עם יישומים אחרים
מסביר כיצד להיכנס לתהליך של יישום ap_udisk מכל יישום ואת תהליך היציאה מ- ap_udisk ליישום.
18.3.1 התחלת היישום
כשאתה מחבר את כבל ה- USB, בחר במצב העברת נתונים בתיבת הדו-שיח של חיבור USB המוקפץ ואז COMMON ישלח
הודעה MSG_USB_TRANS ל- ap_manager, לאחר שהרג את יישום החזית הנוכחי ואפליקציית הרקע, רק ap_manager
היישום מתחיל.
18.3.2 יציאת היישום
במצב סרוק USB, לחץ על מקש החזרה או על מקש ההפעלה, או נתק את כבל ה- USB או בחר את המחשב
אתה יכול לצאת מאפליקציית Udisk אם אתה מוציא אותה.

עמוד 434
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 434
18.4 ספריות תלויות יישומים והממשקים שלהן
יישום Udisk נוצר רק על ידי המנהל, לאחר השלמת הפעולות הנדרשות לאתחול, הודעת יצירת היישום נשלחת כנדרש.
למנהל.
כשיוצאים מאפליקציית udisk, עליך לדעת את היישום שנכנס לפעם הקודמת לקדמת הבמה. צור זוג של
יש ליישם. יישום udisk נוצר על ידי המנהל, כך שרק המנהל יודע. כשנכנסים לאודיסק, זה
מידע זה ניתן להעביר רק באמצעות פרמטרים כאשר המנהל מתחיל את udisk. בשל מגבלות המערכת, היישום הוא רק הראשון
הפרמטרים של int argc תקפים, כך שפרמטרי הקלט מוגדרים כדלקמן: 16 הסיביות התחתונות מצביעות על כך שהוא פועל לפני הכניסה ל- udisk
מזהה היישום הקדמי, 16 הסיביות העליונות מצביעים על מצב הרקע.
ביציאה מ- udisk, אם יש פעולת כתיבה בדיסק u, הזן רשימת השמעה ap ליצירת רשימת השמעה. אם תלחץ על הפעל
כדי לצאת, הזן mtp; אחרת, צא מקדמת החזית לפני הכניסה ל- udisk.
ממשק מערכת ו- libc api.a
ספריית זמן ריצה של יישום ctor.o
כל הפונקציות של Applib
18.5 תהליך עסקי יישומי
18.6 תיאור תכנון מודול ראשי
18.6.1 תיאור מודול
המודול הראשי אחראי על אתחול AP, ניתוח ועיבוד מצב מודול, עיבוד הודעות מערכת ועיבוד הודעות GUI ומשאבי יציאה
שחרור וכו '. מצבו הרגיל פועל בלולאת עיבוד שאילתה רציפה, והוא שובר את הלולאה לאחר שקיבל את חיווי מצב היציאה של המודול.
מתוך ה- AP, הפרעת USB מתרחשת בכל עת במהלך תהליך זה.
18.6.2 פונקציית מודול
הוביל את התוכנית לרוץ ולהחליט את התזמון של מודולים אחרים.

עמוד 435
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 435
18.6.3 תהליך תזמון סצינות
18.6.4 תרשים זרימת עיבוד ההודעות

עמוד 436
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 436
18.6.5 תרשים זרימה
18.7 תיאור תכנון מודול האתחול
18.7.1 תיאור מודול
מודול אתחול AP, כולל אתחול שכבת AP ואתחול שכבת מודול, ולבסוף הפעלת מנוע ה- USB.
18.7.2 פונקצית מודול
לאתחל את udisk AP, להפעיל את מנוע ה- USB ולהשלים את תהליך ספירת דיסק U.

עמוד 437
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 437
18.7.3 היגיון תהליכים

עמוד 438
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 438
18.8 צא מהוראות עיצוב מודול
18.8.1 תיאור מודול
Udisk ap יוצא ממודול העיבוד.
18.8.2 פונקצית המודול
עיבוד תהליך יציאה של Udisk ap, על פי שיטת היציאה, בחר באפליקציית החזית שצריכה להיכנס, ליצור את AP הקדמה,
וצא מאפליקציית udisk.
18.8.3 היגיון תהליכים
כאשר udisk מקבל הודעה שצריך לצאת ממנה, היא מבצעת את עיבוד היציאה של udisk. ביציאה מאודיסק, אם u
אם לדיסק פעולת כתיבה, הזן את רשימת ההשמעה ap כדי ליצור רשימת השמעה. אם תלחץ על מקש ההפעלה כדי לצאת, הזן mtp; אחר
אם המצב מתקיים, הרץ את AP הקדמה לפני הכניסה ל- Udisk.
18.9 תיאור עיצוב מודול תצוגה
18.9.1 תיאור מודול
ממשקים שונים מוצגים בהתאם למצב הנוכחי של דיסק U.
18.9.2 פונקצית המודול
הצגת הממשק בכל מצב של דיסק U.
18.9.3 היגיון תהליכים
השתמש במשתנים גלובליים כדי לרשום את המצב הנוכחי של כונן הבזק מסוג USB. אם המצב של כונן ההבזק USB משתנה, השלבים ייציירו בהתאם למצב הנוכחי של כונן הבזק מסוג USB.
אם ממשק דיסק U אינו משתנה, אין צורך לרענן את הממשק.

עמוד 439
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 439
18.10 כיצד לשנות את המאפיינים של התקן USB
שנה את שדות התצורה הקשורים ל- usb ב- config.txt תחת ספריית fwpkg, ויש תגובות אחרי השדות.
18.11 כיצד לממש טעינה רק מבלי לדווח על מכתב כונן USB
התרגול הנוכחי, כל עוד אתה נכנס ליישום udisk ומתחבר למארח ה- USB, יישום udisk יעבוד כרגיל ובהחלט
דווח על מכתב כונן ה- USB, כדי לממש פונקציה זו, פשוט אל תכנס ליישום udisk בעת טעינה בלבד.
18.12 כיצד להבין שמכתב כונן הכרטיס אינו מדווח כאשר אין כרטיס
הנוהג הנוכחי אינו מבין כי מכתב הכונן של הכרטיס לא ידווח אם הכרטיס אינו מוכנס, אך במערכת לאחר win7, הכרטיס אינו מוכנס, אם כי
אם דווח על מכתב הצ'אק, הוא לא יוצג במחשב האישי.
יישום ap_playlist 19
19.1 סקירת הדרישות
1. יישום ה- PLAYLIST מבוסס על SDK US212A ואחראי על יצירת קובצי LIB של רשימת ההשמעה עבור כל יישום הפעלה.
הדרישות העיקריות הן כדלקמן:
1) מצא את כל קבצי פורמט המוזיקה וקבצי הניתנים לשמיעה בדיסק, קבל את המידע ID3 של הקבצים, ומיין אותם
לאחר מידע ID3 נוצר רשימת השמעה ליישום MUSIC. תומך ב 4000 מוסיקה ו 1000 AUDIBLE.
2) בנוסף, כל קבצי ה- VIDEO, PICTURE, EBOOK בדיסק ייערכו בנפרד, בהתאם לשמות הקבצים שלהם
מיין וצור את רשימת ההשמעה שלו לשימוש ביישומי VIDEO, PICTURE ו- EBOOK. כל שולחן תומך ב 1000 קבצים.
3) שפר את הביצועים של PLAYLIST, דורש 2000 שירים <60s.
2. פלייליסט מחולק ל -5 רשימות LIB של שירי מוסיקה, ספרי שמע, קטעי וידאו, תמונות וספרי אלקטרוני.
1) רשימת שירי המוזיקה היא על פי אמן, אלבום, ז'אנר וכותרת השירים אולסונג

עמוד 440
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
440 עמודים
מיון ומיון לפי קטגוריות; מפרטי המיון הספציפיים הם כדלקמן:
A, allsong ברמה הראשונה: כותרת
B. אלבום דרגה 2: אלבום-> כותרת
C, אמן ברמה שלוש: אמן-> אלבום-> כותרת
ד. דרגה ארבע: ז'אנר-> אמן-> אלבום-> כותרת או ז'אנר-> אלבום-> כותרת
2) רשימת ספרי השמע מסווגת וממוינת לפי שם ומחבר הספר בלבד. מפרטי המיון הספציפיים הם כדלקמן.
א. רמת הספר: ספר
ב. מחבר דרגה 2: מחבר-> ספר
3) מיון הווידיאו, התמונה וה- ebook ממיין רק שמות קבצים (שם ארוך ראשון, שם קצר אחרון).
א, וידאו ברמה ראשונה: שם קובץ
ב 'תמונה ראשונה: שם קובץ
C, ספר אלקטרוני ברמה א ': שם קובץ
4) פרט את המידע הכלול ב- LIB.
A. המספר הכולל של הקבצים ברשימה.
ב. מידע בסיסי plist_f_info_t של כל קובץ (ראה בהמשך להגדרה ספציפית).
ג. סדר המיון של כל הקבצים.
ב. מידע הכלול בכל רמה: מספר הילדים ברמה הנוכחית ומספר הקבצים הכולל וסדר מיון הקבצים.
5) מרכיבי מפתח בכל דירוג
דרישות המיון מבוססות על קוד פנימי (השוואת תווים, מקטן לגדול): סינית מפושטת ממוינת לפי פינין, מספרים ואנגלית (הכל
אחד מומר לגדולות ואז ממוין) מיין מהקטן ביותר לגדול; התוצאה צריכה להיות תחילה סינית, אחר כך מספרים ולבסוף
זה אנגלית. אם השניים שהושוו זהים, לא ישתנה הסדר של השניים.
A. כותרת: מיין 16 בתים (אם הכותרת ממוינת ברמה התחתונה של האלבום, התוכן הוא track_num + title = 16 בתים)
B, אלבום: סוג 8 בתים
C, אמן: למיין 8 בתים
D, ז'אנר: מיין 8 בתים
E, ספר: למיין 8 בתים
F, מחבר: למיין 8 בתים
G, שם קובץ: למיין 16 בתים
5. PLAYLIST תומך בפורמט קובץ
1) פורמט שירי מוסיקה (עם מידע ID3): MP3, WMA, ASF, OGG, FLAC, APE, AAC
2) פורמט נשמע (עם מידע ID3): AAX, AA
3) פורמט וידאו: AMV, AVI.
4) פורמט תמונה: פורמט JPEG, BMP, GIF

עמוד 441
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 441
5) פורמט ספר אלקטרוני: TXT
6. הדרך בה PLAYLIST מוצאת קבצים
העומק תחילה, מצא קודם קבצים ואז ספריות. תמוך עד 8 רמות ספריות
7. PLAYLIST תומך במחיקת קבצים וניתן לעדכן אותם לרשימה המכילה קבצים שנמחקו.
19.2 תכנון אדריכלות כולל
19.2.1 תרשים אדריכלות כולל
תאר את תרשים מבנה התהליך הכולל של יישום PLAYLIST:

עמוד 442
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 442
19.2.2 חלוקת מודולים פונקציונליים
שם המודול
פונקציה קצרה
תיק מקביל
מודול מערכת
אחראי על אתחול יישומים, פתיחת קבצי משאבים; עיבוד כל תהליך היישום;
ועיבוד יציאת יישומים
plist_main.c
plist_sys_deal.c
מודול תצוגת ממשק
אחראי לתצוגה של ממשק ממשק המשתמש
plist_ui_deal.c
מודול חציית קבצים
אחראי על איתור קבצים בתבנית המתאימה בדיסק
plist_fsel.c
מודול פעולת קבצים
אחראי על יצירת קבצים, כתיבה ושמירה
plist_operate_list.c
מודול מיון האלגוריתם
אחראי על יישום אלגוריתם המיון
plist_sort_method.c
plist_sort_al.c
מודול בניית רשימת מוסיקה
אחראי על סריקת קבצי מוסיקה ובניית טבלאות בהתאם לדרישות
plist_scan_music.c
plist_sort_music.c
מודול בניית רשימת נשמע
אחראי על סריקת קבצים נשמעים וטבלאות בנייה בהתאם לדרישות
plist_scan_audible.c
plist_sort_audible.c
עמודות וידאו, תמונה, ספר אלקטרוני
מודול לבניית שולחן
אחראי על סריקת מסמכים וטבלאות בנייה בהתאם לדרישות
plist_other_list.c
צור מודולים מועדפים וסימניות
עבד את היצירה של קבצי מועדפים וסימניות התואמים לדיסק
plist_creat_userpl.c
plist_creat_userpl_sub.c
plist_creat_bmk.c
צור ספריית השמעה של M3U
על פי * .M3U ספריית רשימת הייצור להפעלה
plist_m3u_deal.c
plist_m3u_deal_sub.c
plist_m3u_deal_sub1.c
19.3 מחזור חיי יישום פלייליסט
19.3.1 הפעלת היישום
תרחיש שיחת מערכת:
Exit יציאת USB של יישום DEVICE.
✧ המערכת מופעלת לראשונה.
Call מתקשר וצור באופן פעיל על ידי כל יישום.
דוגמה לקוד להתקשר למערכת בהפעלה ראשונה:
msg_apps_t config_msg;

עמוד 443
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 443
// סוג הודעה, ליצירת יישום חדש
config_msg.type = MSG_CREAT_APP;
// ליצירת יישום PLAYLIST
config_msg.content.data [0] = APP_ID_PLAYLIST;
// פרמטרים להזנת יישום
// bit0 ~ bit4 מייצג את מזהה היישום הזה
// bit5 ~ bit7 מציינים את אמצעי האחסון ליצירת PLAYLIST
config_msg.content.data [1] = PARAM_FROM_CONFIG | PLIST_DISK_C;
// שלח הודעה למנהל התהליכים
send_async_msg (APP_ID_MANAGER, & config_msg);
19.3.2 יציאת היישום
עיבוד יציאה מהבקשה:
✧ אם PLAYLIST נקרא על ידי יישומי UDISK ו- CONFIG, צא ליישום MAINMENU.
✧ אם היישום MUSIC, VIDEO, PICTURE, EBOOK מתקשר PLAYLIST, חזור ליישום המתאים.
צא מקוד מדגם:
msg_apps_t msg;
// שלח צור הודעת תהליך אחרת למנהל התהליכים
// סוג הודעה, ליצירת יישום חדש
msg.type = MSG_CREAT_APP;
msg.content.data [1] = (uint8) PARAM_FROM_PLAYLIST;
// שופט את פרמטרי הכניסה והחליט לאיזה יישום להחזיר
החלף (enter_mode) {
מקרה PARAM_FROM_MUSIC:
msg.content.data [0] = APP_ID_MUSIC;
לשבור;
מקרה PARAM_FROM_PICTURE:
msg.content.data [0] = APP_ID_PICTURE;
לשבור;
מקרה PARAM_FROM_VIDEO:

עמוד 444
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 444
msg.content.data [0] = APP_ID_VIDEO;
לשבור;
מקרה PARAM_FROM_EBOOK:
msg.content.data [0] = APP_ID_EBOOK;
לשבור;
מקרה PARAM_FROM_CONFIG:
msg.content.data [0] = APP_ID_MAINMENU;
לשבור;
מקרה PARAM_FROM_UDISK:
לשבור;
בְּרִירַת מֶחדָל:
msg.content.data [0] = APP_ID_MAINMENU;
לשבור;
}
// שלח הודעה למנהל התהליכים
send_async_msg (APP_ID_MANAGER, & msg);
19.4 ספריית תלות ביישומים ותיאור הממשק שלה
ממשק מערכת ו- libc api.a
ספריית זמן ריצה של יישום ctor.o
כל הפונקציות של Applib
תפריט ממשק משתמש נפוץ, סרגל ראש, אנימציה ומודולים אחרים הנפוצים לפקודה
ניתוח ID3 ומודולים אחרים בספריה המשופרת
19.5 תיאור הקצאת שטח הזיכרון ליישום PLAYLIST
מכיוון ש- PLAYLIST מיושם על ידי יישום, ניתן להשתמש בקוד בקוד הקדמה ובמרחב הנתונים. שרשרת נוספת
התחברו למודול ENHANCED ושמרו את שני קודי ה- BANK המשופרים בקדמת הבמה, ו- nand צריך 16K
שטח מטמון. אז שטח ה- RAM הזמין הוא 79K, וכתובת ההתחלה היא 0x28000.
1. אזור נתונים זמין
1) אזור נתונים מקדימה

עמוד 445
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 445
אחסן נתונים גלובליים של היישום
2) שטח RAM רציף
אחסן מידע של קובץ ID3 וממשק מיון
3) שטח מטמון של 16k של nand
Nand כתוב מטמון
2. אזור קוד זמין
1) אזור קוד תושב
אחסן פעולות קריאה וכתיבה של VRAM ועברו עיבוד קבצים
2) שטח בנק AP
שמור קוד ביצוע
3) שטח בנק מודול מוגבר
[0x27000 --- 0x277ff] AP_FRONT_ENHANCE1: 2k
[0x27800 --- 0x27fff] AP_FRONT_ENHANCE2: 2K
שמור את קוד ID3 של קובץ הניתוח

עמוד 446
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 446
2. ייצוג קובץ Xn
1) ap_plist.xn
תכנן את AP_FRONT_DATA, AP_FRONT_RCODE, AP_BANK_FRONT_CONTROL,
שימוש בחלל AP_BANK_FRONT_UI
2) id3_link.xn
תכנן את השימוש בקוד ניתוח ה- ID3 עבור מודול ENHANCED
3) common_front_no_selector.xn
תכנן שימוש בקוד מודול applib
19.6 חלוקת שטח RAM ביישומים
וודא כי בעת מיון 2000 שירים, VRAM אינו משמש כמטמון לשיפור הביצועים; מיין קודם קבצי MUSIC
קבצים ואז מיין קבצים הניתנים לשמירה.
בנוסף, בגלל מפרט המיון, המיון בין הרשימות תלוי, וסדר המיון של MUSIC: TITLE, ALBUM,
אמן, ז'אנר ורצף נשמע: ספר, מחבר; אחרים
תמונות, וידאו, EBOOK ממיינים רק את שמות הקבצים.
1. צור את חטיבת ה- PLAYLIST במוזיקה.

עמוד 447
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 447
R3 (16K)
מידע על אלבום ID3
8 ביטים לכל הודעה
R2 (16K)
מידע על אמנים ID3
8 ביטים לכל הודעה
buffer0
file_index_buf (8K)
R6 (2K) שמור את TRACK_NUM
R0 (16K)
שימוש במטמון בכונן Nand
R4 (32K)
מידע TITLE עבור ID3
16 ביטים לכל הודעה
R1 (8K)
מידע GENRE של ID3, 8 ביטים לכל הודעה, Vram מטמון מלא
מאגר 1
sort_index_buf (8k)
מאגר 3
tidy_buf_a (8k)
buffer4
count_buf_a (8k)
מאגר 5
tidy_buf_b (8k)
מאגר 6
count_buf_b (8k)
מאגר 7
count_buf_c (8k)
R5 (4K)
MUSIC_FILE_INFO
256 לכל הודעה
95K
מיין 2048 או פחות, מטמון
מ- VRAM
הקראתי
כותרת
מטמון מידע
(64K)
מ- VRAM
קרא בנפרד
שֶׁל
אַלבּוֹם,
אמן,
ז'ָאנר
מטמון מידע
(32K)
מיין יותר מ- 2048 שירים, מטמון
מַסלוּל_
NUM (8K)
0x3fc00
0x28000
רזרב R7 (1K)
מאגר 2
index_parent_buf (8k)
שימוש חוזר בחלל, לא קבוע, כך
הקצה לפני השימוש
2. צור את חלוקת ה- PLAYLIST של AUDIBLE.

עמוד 448
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 448
חלוקת זיכרון מינית נשמעת
buffer0
file_index_buf (8K)
R6 (2K) שמור את TRACK_NUM
R0 (16K)
שימוש במטמון בכונן Nand
R4 (32K)
מידע על ספר ID3
16 ביטים לכל הודעה
R3 (16K)
המידע של AUTHOR של ID3,
8 ביטים לכל הודעה
מאגר 1
sort_index_buf (8k)
מאגר 3
tidy_buf_a (8k)
buffer4
count_buf_a (8k)
(16K) ללא שימוש
R5 (4K)
AUDIBLE_FILE_INFO
256 לכל הודעה
מ- VRAM
הקראתי
סֵפֶר
מטמון מידע
(64K)
מ- VRAM
הקראתי
מְחַבֵּר
מטמון מידע
(32K)
מיין יותר מ- 2048 שירים, מטמון
0x3fc00
מַסלוּל_
NUM (8K)
0x28000
95K
רזרב R7 (1K)
(8K) ללא שימוש
מאגר 2
index_parent_buf (8k)
שימוש חוזר בחלל, לא קבוע, כך
הקצה לפני השימוש
3. צור חלוקת זיכרון מיון תמונות, וידאו, EBOOK.

עמוד 449
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
449 עמודים
4. נתח את השימוש במאגר מיון
file_index: בעת חיפוש קובץ לדיסק, המספר הסידורי שהוקצה לקובץ בהתאם לרצף חיפוש הקובץ.
sort_index: הוא קובץ_index הממוין, ומיקום המיון המתאים לו.
index_parent: היא מיקום קיזוז האב שאליו משתייך קובץ_indexer הממוין.
הגדרת השימוש במאגר 8K היא כדלקמן:
שם החיץ
תוכן המאגר
file_index_buf
sort_index הוא האינדקס, המאחסן את הקובץ_index הממוין
sort_index_buf
file_index הוא האינדקס, המאחסן את מספר הסיביות מיון sort_index
index_parent_buf
file_index הוא האינדקס, המאחסן את מספר קיזוז המיקום של עץ האב המתאים ל- file_index
מסודר_בוף_א
file_index הוא האינדקס, המאחסן את מספר הסיווג (אם המידע ID3 של שני הקבצים זהה,
אותו מספר)
מסודר_בוף_ב
file_index הוא האינדקס, המאחסן את מספר הסיווג (אם המידע ID3 של שני הקבצים זהה,
אותו מספר)
count_buf_a
מספר העצים הוא האינדקס, המאחסן את מספר הקבצים הכלולים בכל עץ

עמוד 450
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
450 עמודים
count_buf_b
מספר העצים הוא האינדקס, המאחסן את מספר הקבצים הכלולים בכל עץ
count_buf_c
מספר העצים הוא האינדקס, המאחסן את מספר הקבצים הכלולים בכל עץ
השימוש במאגר בסוגים שונים מוצג בטבלה הבאה:
מיין קטגוריה \ מאגר
שֵׁם
כותרת
אַלבּוֹם
אמן
ז'ָאנר
סֵפֶר
מְחַבֵּר
file_index_buf
בשימוש
בשימוש
בשימוש
בשימוש
בשימוש
בשימוש
sort_index_buf
בשימוש
בשימוש
בשימוש
בשימוש
בשימוש
בשימוש
index_parent_buf בשימוש
בשימוש
בשימוש
בשימוש
בשימוש
בשימוש
מסודר_בוף_א
בשימוש
בשימוש
בשימוש
בשימוש
מסודר_בוף_ב
בשימוש
בשימוש
count_buf_a
בשימוש
בשימוש
בשימוש
בשימוש
count_buf_b
בשימוש
בשימוש
count_buf_c
בשימוש
הערה: לאחר מיון של סוג מסוים של file_index ניתן להשתמש במאגר אחסון המידע של ID3. דוגמא
לדוגמה, לאחר מיון קובץ ה-_index של פרטי הכותרת, RAM ב- R4 יכול לשמש כחוצץ מיון, מכיוון שאחרי
המשך למיין אלבום, אמן וז'אנר. אין צורך למיין מידע על כותרות.
19.7 תהליך עסקי יישום PLAYLIST
19.7.1 הזרימה הכוללת של היישום
הזרימה הכוללת של תהליך היישום היא כדלקמן:

עמוד 451
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 451
כניסה הראשית
אתחול מערכת
plist_sys_init
טוען קבצי מדיה
בוחר
fsel_init
רשימת שיחות מודול ממשק ליצירת קבצים
object_build_plist
הסר את התקנת משאבי ממשק המשתמש
ui_res_ סגור
צא ממבחר קובץ
fsel_exit
שמור את רשימת ה- LIB
יציאה מהאפליקציה
צור רשימת LIB המתאימה
creat_plist_lib
מספר הרשימות שנוצרו> 0?
בזמן (build_param! = 0)
האם ליצור רשימת מדיה של STG
בזמן (disk_param! = 0)
י
נ
נ
י
טען משאבי ממשק משתמש
ui_res_open
שחרר משאבי מערכת, שלח
שלח הודעה, צור יישום חדש
plist_sys_exit
עליית תדר המערכת 108M
sys_adjust_clk
התאוששות תדר מערכת
sys_adjust_clk
רשימת יצירת תצורה
פָּרָמֶטֶר
על פי הדגל creat_file_flag
צור מועדפים, סימניות מוסיקה,
סימניה אלקטרונית וניתוח קבצים M3U
מבנה זרימת קוד:
int main (int argc, const char * argv [])
{
. . . . . .

עמוד 452
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 452
// עיבוד תדירות המערכת
save_freq_level = sys_adjust_clk (FREQ_108M, 0);
. . . . . .
// אתחול מערכת
plist_sys_init ();
. . . . . .
// הגדר פרמטרים של המערכת
plist_param = (uint16) ((uint8) argc & PLIST_DISK_ALL) << 8;
. . . . . .
// טען משאבי ממשק משתמש
. . . . . .
ui_res_open (plist_ui_sty, UI_AP);
. . . . .
// האם ליצור רשימת מדיה של STG
בזמן (disk_param! = 0)
{
. . . . . .
// בורר קבצים לטעינת מדיה
ap_vfs_mount = fsel_init (& fsel_param, MODE_NORMAL);
. . . . . .
// מספר הרשימות שנוצרו> 0?
בזמן (build_param! = 0)
{
// צור רשימת LIB המתאימה
אם (FALSE! = creat_plist_lib (lib_num))
{
// רשימת שיחות מודול ממשק ליצירת קבצים
object_build_plist [lib_num] ();
. . . . . .
}
}
// על פי הסימן creat_file_flag
אם (creat_file_flag == TRUE)
{
// צור ספר אלקטרוני
creat_ebook_bmk ();
. . . . . . .
}

עמוד 453
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 453
stg_exit:
// צא מבורר הקבצים
fsel_exit ();
. . . .
}
// הסר את התקנת משאבי ממשק המשתמש
ui_res_close (UI_AP);
. . . . . .
// יציאת מערכת
plist_sys_exit (enter_mode);
. . . . .
// שחזור תדר
sys_adjust_clk (save_freq_level, 0);
. . . . . .
}
19.7.2 תהליך אתחול המודול
לאתחל את הכניסה
החלף זיכרון מטמון
מֶרחָב
רקע קרוב
סוֹף
זרימת מבנה קוד:
void plist_sys_init (void)
{

עמוד 454
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
454 עמודים
// סגור תחילה את הרקע
close_engine ();
// התקן את מנהל ההתקן לאחסון nand , החלף את שטח המטמון של nand
אם (sys_drv_install (DRV_GROUP_STG_BASE, MODE_NORMAL, stg_drv_name [0])! =
-1)
{
/ ****
מכיוון שכתובת דף המטמון 0x9fc34000 של ברירת המחדל של nand משמשת לבניית הטבלה,
לכן יש צורך לשלוף את חתוך המטמון לדף אחר
**** /
#ifndef PC
base_op_entry ((void *) 1, (void *) NAND_CACHE_ADDR, 0, BASE_UPDATE);
#endif
sys_drv_uninstall (DRV_GROUP_STG_BASE);
}
}
19.7.3 דרכים לחצות קבצים
זרימת עיבוד plist_fsel_get_nextfile (uint8 * strfile) לדוגמה

עמוד 455
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
455 עמודים
הַתחָלָה
מצא את הקובץ הבא בספריה
dir_next
הקובץ לא נמצא ליציאה
הזן את ספריית המשנה שנמצאה
VFS_CD ("/")
סוֹף
חזור לספריית האב ואתר
מיקום כניסה לספריה לתיקיית משנה זו
VFS_DIR (PARENT_DIR)
מצא את תיקיית המשנה הבאה של הספרייה
VFS_DIR (NEXT_DIR)
ולא סונן
סינון_דיר
י
נ
י
נ
נ
י
נ
האם ספריית השורש כרגע?
י
שגיאה לא תקינה
נשר
נ
מצא את תיקיית המשנה הראשונה של הספרייה
VFS_DIR (FRIST_DIR)
ולא סונן
סינון_דיר
י
נ
האם ספריית השורש כרגע?
י
האם זה כרגע ספרייה של 8 רמות?
י
נ
זרימת מבנה קוד:
הקוד הספציפי מפורט בממשק bool plist_fsel_get_nextfile (uint8 * strfile).

עמוד 456
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
456 שוכרים
19.7.4 השג אחסון מידע על קבצים
דוגמה: לעבור למציאת קבצים, שמור מידע על קבצי MUSIC ומידע ID3.
זרימת מבנה קוד:
uint16 scan_music_file (בטל)
{
. . . . . .
// קובץ מעבר דיסק
בעוד (FALSE! = plist_fsel_get_nextfile ((char *) & ext_name))
{

עמוד 457
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
457 עמודים
. . . . . .
// קבל מידע קובץ ו ID3 מידע
get_music_info (ext_name);
// אחסן מידע על קבצים
store_music_info (ap_plist_file_total);
ap_plist_file_total ++;
אם (ap_plist_file_total> = PLIST_MUSIC_MAX)
{
לשבור;
}
}
אם (ap_plist_file_total> PLIST_SAVE_MAX)
{
. . . . . .
}
אם (ap_plist_file_total> PLIST_GENRE_MAX)
{
. . . . . .
}
// בין אם יש נתונים לא כתובים ב- RAM , שמור אותם לקובץ
אם (ap_plist_file_total> 0)
{
temp = ap_plist_file_total% (FILE_INFO_BUF_SIZE / PLIST_FILE_SIZE);
אם (temp == 0)
{
// פשוט מלא
temp = FILE_INFO_BUF_SIZE / PLIST_FILE_SIZE;
}
save_to_file ((uint8 *) FILE_INFO_ADDR, temp * PLIST_FILE_SIZE);
}
להחזיר ap_plist_file_total;
}
19.7.5 מיון רשימה
שטח ה- RAM מחולק באופן הבא:

עמוד 458
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 458
אם הקבצים שחיפשת הם פחות מ- 2048 קבצים, המערכת אינה משתמשת ב- VRAM לצורך שמירת מידע ID3;
השווה ומיין ב- RAM.
file_index: בעת חיפוש קובץ לדיסק, המספר הסידורי שהוקצה לקובץ בהתאם לרצף חיפוש הקובץ.
sort_index: הוא קובץ_index הממוין, ומיקום המיון המתאים לו.
index_parent: הוא מיקום הקיזוז של צומת עץ האב של הקובץ_מיין הממוין.
1. רצף קבצי MUSIC הוא כדלקמן:
תהליך עיצוב המסגרת הכולל הוא כדלקמן:

עמוד 459
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 459
מידע על TITLE
> 2048?
כְּנִיסָה
קרא מכתב TITLE מ- VRAM
מידע לכתובת ה- RAM שצוינה
סוֹף
נ
י
מידע TITLE כבר נמצא ב- RAM
, הגדר את כתובת ה- RAM
מיין כדי ליצור רשימת ALLSONG
sort_title ()
מספר ההודעות ALBUM
> 2048?
קרא ALBUM מ- VRAM
הודעה לכתובת ה- RAM שצוינה
נ
י
מידע ה- ALBUM כבר נמצא ב- RAM
, הגדר את כתובת ה- RAM
מיין כדי ליצור רשימת ALBUM
sort_album ()
מספר מידע על ARTIST
> 2048?
קרא את ARTIST מ- VRAM
הודעה לכתובת ה- RAM שצוינה
נ
י
המידע על האמן נמצא כבר ב- RAM
, הגדר את כתובת ה- RAM
מיין כדי ליצור רשימת ARTIST
sort_artist
מספר מידע על GENRE
> 1024?
קרא GENRE מ- VRAM
הודעה לכתובת ה- RAM שצוינה
נ
י
מידע GENRE כבר נמצא ב- RAM
, הגדר את כתובת ה- RAM
מיין כדי ליצור רשימת GENRE
sort_genre

עמוד 460
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
460 עמודים
עיין בממשק list_music_list עבור התהליך ליישום הקוד הספציפי.
(1) מיון TITLE
כְּנִיסָה
שים קובץ_index ו- sort_index
כתוב רשימה לקובץ LIB
ממשק כוונון: save_to_file
על פי המידע TITLE של כל קובץ
מיין את קובץ_ינדקס
ממשק כוונון: list_sort
צור לפי סוג file_index
sort_index
ממשק כוונון: build_ex_index
סוֹף
אתחל את מאגר המיון
ממשק כוונון: init_file_index
עיין בממשק sort_title עבור תהליך יישום הקוד הספציפי.
(2) מיון אלבום

עמוד 461
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 461
כְּנִיסָה
שים קובץ_index_buf,
index_parent_buf ו-
כתוב sort_index_buf לקובץ LIB
ממשק כוונון: save_to_file
סוֹף
לפי ערך track_num, sort_index של TITLE
רשימת תוכן וספור_בוף_, ממוינות
File_index תחת תת המשנה של ALBUM, שמור ב
file_index_buf
ממשק כוונון: son_sort_index
סטטיסטיקות של אותו מספר ומספר זהה של מידע על אלבום, נקודות
אל תפקיד את count_buf_a ו- tidy_buf_a
ממשק כוונון: לוח tidy_same_table
צור קשר TREE של קבוצת משנה של ALBUM
מבנה, כתוב קובץ LIB
ממשק כוונון: creat_plist_tree
חשב את הקטע של קובץ_ינדקס המתאים ל- TREE האב
קבע את הקיזוז ושמור אותו ב- index_parent_buf
ממשק כוונון: creat_index_map
לאתחל את מאגר המיון;
ממשק כוונון: init_file_index
מיין לפי המידע ALBUM של כל קובץ
file_index, מאוחסן ב- file_index_buf;
ממשק כוונון: list_sort
צור לפי סוג file_index
sort_index
ממשק כוונון: build_ex_index
עיין בממשק sort_album עבור תהליך יישום הקוד הספציפי.
(3) מיון אמנים

עמוד 462
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
462 עמודים
כְּנִיסָה
שים קובץ_index_buf,
index_parent_buf ו-
כתוב sort_index_buf לקובץ LIB
ממשק כוונון: save_to_file
סוֹף
על פי רשימת sort_index של ALBUM ו-
תוכן של count_buf_a, ממוין לפי ARTIST
קובץ ה-_index של קבוצת המשנה מאוחסן ב- file_index_buf
ממשק כוונון: son_sort_index
סטטיסטיקות של אותו מספר ומספר זהה של מידע על ARTIST, נקודות
אל תפקיד את count_buf_a ו- tidy_buf_b
ממשק כוונון: לוח tidy_same_table
על פי file_index_buf, count_buf_a,
count_buf_b יצירת תוכן ברמה ARTIST
לוח צומת עץ
ממשק כוונון: creat_plist_tree
על פי file_index_buf, count_buf_b
קובץ חישוב תוכן_index מתאים להורה
קיזוז מיקום עץ, שמור אותו
index_parent_buf
ממשק כוונון: creat_index_map
לאתחל את מאגר המיון;
ממשק כוונון: init_file_index
מיין לפי מידע האמן של כל קובץ
file_index, מאוחסן ב- file_index_buf;
ממשק כוונון: list_sort
צור לפי סוג file_index
sort_index
ממשק כוונון: build_ex_index
מסווג על פי התוכן של count_buf_a, מסודר_buf_a
מיין את ARTIST, קבוצת המשנה של ALBUM
file_index, מאוחסן ב- file_index_buf;
ולמיין את אותו מספר של אלבום ולהפקיד אותו
count_buf_b
ממשק כוונון: tidy_son_unit
על פי file_index_buf, count_buf_a,
count_buf_b יצירת תוכן ברמה ALBUM
לוח צומת עץ
ממשק כוונון: creat_plist_tree
עיין בממשק sort_artist עבור תהליך יישום הקוד הספציפי.
(4) סוג ז'אנר

עמוד 463
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
463 עמודים
כְּנִיסָה
שים קובץ_index_buf,
index_parent_buf ו-
כתוב sort_index_buf לקובץ LIB
ממשק כוונון: save_to_file
סוֹף
על פי רשימת sort_index של ARTIST ו-
ספירת_בוף_ תוכן, מסווג וממויג לפי GENRE
הגדר את קובץ ה-_index, שמור אותו ב- file_index_buf
ממשק כוונון: son_sort_index
ספר את אותו מספר של מידע GENRE ושמור אותו
count_buf_a
ממשק כוונון: לוח tidy_same_table
על פי file_index_buf, count_buf_a,
count_buf_b, count_buf_b יצירת תוכן
בנה טבלת צמתים ברמת האמן
ממשק כוונון: creat_plist_tree
על פי file_index_buf, count_buf_c
קובץ חישוב תוכן_index מתאים להורה
קיזוז מיקום עץ, שמור אותו
index_parent_buf
ממשק כוונון: creat_index_map
לאתחל את מאגר המיון;
ממשק כוונון: init_file_index
מיין לפי המידע של GENRE של כל קובץ
file_index, מאוחסן ב- file_index_buf;
ממשק כוונון: list_sort
צור לפי סוג file_index
sort_index
ממשק כוונון: build_ex_index
מסווג על פי התוכן של count_buf_b, מסודר_buf_a
מיין את ARTIST, קבוצת המשנה של ALBUM
file_index, מאוחסן ב- file_index_buf;
ולמיין את אותו מספר של אלבום ולהפקיד אותו
count_buf_c
ממשק כוונון: tidy_son_unit
על פי file_index_buf, count_buf_c,
count_buf_b יצירת תוכן ברמה ALBUM
לוח צומת עץ
ממשק כוונון: creat_plist_tree
מסווג על פי התוכן של count_buf_a, מסודר_buf_b
מיין קבוצות משנה של GENRE, ARTIST
file_index, מאוחסן ב- file_index_buf;
ולמיין את אותו מספר של ARTIST ולהפקיד אותו
count_buf_b
ממשק כוונון: tidy_son_unit
על פי file_index_buf, count_buf_a,
count_buf_b יצירת תוכן ברמה GENRE
לוח צומת עץ
ממשק כוונון: creat_plist_tree

עמוד 464
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
464 עמודים
עיין בממשק sort_genre לתהליך יישום הקוד הספציפי.
2 , קובץ תהליך מיון הניתן לשמיעה הוא כדלקמן:
תהליך המסגרת העיצובי הכללי הוא כדלקמן:
מידע על שם הספר
מספר מאמרים> 2048?
כְּנִיסָה
סוֹף
נ
י
מידע ה- BOOKNAME כבר נמצא ב- RAM
, הגדר זיכרון RAM
כתובת
מיין כדי ליצור רשימת BOOKNAME
sort_book ()
מידע על הסופר
מספר מאמרים> 2048?
קרא את המידע של AUTHOR מ- VRAM
לכתובת ה- RAM שצוינה
נ
י
מידע ה- AUTHOR נמצא כבר ב- RAM
, הגדר את כתובת ה- RAM
קרא את BOOKNAME מ- VRAM
הודעה לכתובת ה- RAM שצוינה
עיין בממשק list_audible_list של הממשק עבור תהליך יישום הקוד הספציפי.
(1) מיין ספר

עמוד 465
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
465 עמודים
כְּנִיסָה
שים קובץ_index ו- sort_index
כתוב רשימה לקובץ LIB
ממשק כוונון: save_to_file
על פי המסמכים
מידע על שם הספר
מיין את קובץ_ינדקס
ממשק כוונון: list_sort
צור לפי סוג file_index
sort_index
ממשק כוונון: build_ex_index
סוֹף
אתחל את מאגר המיון
ממשק כוונון: init_file_index
עיין בממשק sort_book לקבלת תהליך יישום הקוד הספציפי.
(2) מיון מחבר

עמוד 466
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 466
כְּנִיסָה
שים קובץ_index_buf,
index_parent_buf ו-
כתוב sort_index_buf לקובץ LIB
ממשק כוונון: save_to_file
סוֹף
על פי רשימת sort_index של BOOKNAME ו-
התוכן של count_buf_a, מיין לפי AUTHOR
File_index תחת תת המשנה של
file_index_buf
ממשק כוונון: son_sort_index
ספר את אותו מספר ומספר מידע זהה של AUTHOR, נקודות
אל תפקיד את count_buf_a ו- tidy_buf_a
ממשק כוונון: לוח tidy_same_table
צור קבוצת משנה של BOOKNAME
מבנה עץ, כתוב קובץ LIB
ממשק כוונון: creat_plist_tree
חשב את הקטע של קובץ_ינדקס המתאים ל- TREE האב
קבע את הקיזוז ושמור אותו ב- index_parent_buf
ממשק כוונון: creat_index_map
לאתחל את מאגר המיון;
ממשק כוונון: init_file_index
מיין לפי המידע של AUTHOR של כל קובץ
file_index, מאוחסן ב- file_index_buf;
ממשק כוונון: list_sort
צור לפי סוג file_index
sort_index
ממשק כוונון: build_ex_index
עיין בממשק sort_author לתהליך יישום הקוד הספציפי.

עמוד 467
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 467
19.7.6 תרשים זרימה של מודול יציאת היישום
צא מהכניסה
שחזר שטח זיכרון מטמון
סוֹף
צא מאפליקציית היצירה כדי לשלוח עיבוד הודעות
_deal_playlist_result
מבנה זרימת קוד:
void plist_sys_exit (app_param_e enter_mode)
{
// צא מיצירת יישום לשליחת עיבוד הודעות
_deal_playlist_result (enter_mode);
// התקן מחדש את מנהל ההתקן של nand ושחזר את כתובת המטמון המוגדרת כברירת מחדל של nand 0x9fc34000
אם (sys_drv_install (DRV_GROUP_STG_BASE, MODE_NORMAL, stg_drv_name [0])! =
-1)
{. . . . .
}
}
19.8 תיאור מבנה הנתונים של רשימת ההשמעה
19.8.1 מבנה נתוני מבנה
1. מבנה מידע הקבצים המאוחסן ב- LIB, 256 בתים הכבושים מראש

עמוד 468
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 468
// מבנה המידע של קובץ ID3
typedef struct
{
char title_string [ID3_ITEM_SIZE * 2]; // שם כותרת וקובץ (ממוין 16bytes)
char artist_string [ID3_ITEM_SIZE]; // שם האמן (ממוין 8bytes)
char album_string [ID3_ITEM_SIZE]; // שם האלבום (ממוין 8bytes)
char gener_string [ID3_ITEM_SIZE]; // שם ז'אנר (סוג 8bytes)
char track_string [8];
// מחרוזת num מספר
שם קובץ uint8 [4];
//סיומת קובץ
uint8 id3_tag_flag;
// האם יש סימן למידע ID3: 1 - כן, 0 - אין
דגל uint8;
// האם הקובץ קיים 1- כן, 0-אין, 2- נמחק
uint16 track_num;
// מספר מסלול אלבום
uint32 cluster_no;
// מספר האשכול של ערך ספריית הקבצים
uint32 dir_entry;
// קיזוז ערך ספריית הקובץ באשכול הנוכחי
uint16 prev_offset;
// קיזוז מיקום האחסון האחרון
uint16 next_offset;
// קיזוז מיקום האחסון הבא
pdir_layer_t dir_layer_info;
// מידע ברמת המדריך
} plist_f_info_t; // 256 בתים
2. מבנה העץ, המציין את הקשר ההיררכי בין המפלס העליון והתחתון, הכבוש לפני 16 בתים
// מבנה עץ הפלייליסט
typedef struct
{
דגל uint8;
// דגל עץ: 0-אין בשימוש, קיים-קיים, שנמחק
סוג uint8;
// הרשימה הנוכחית מציגה מידע ID3
uint16 son_num;
// מספר רשימות המשנה
uint16 file_total; // מספר כל הקבצים ברשימה
uint16 file_index; // ניתן לקרוא את המספר הסידורי של קובץ ההתחלה, ערך sort_index
uint16 son_offset; // מספר הקיזוזים במיקום האחסון של הסובליסט
uint16 parent_offset; // מספר הקיזוזים של מיקום האחסון של רשימת האב
uint16 prev_offset; // קיזוז הקודם
uint16 next_offset; // קיזוז הבא
} plist_tree_t;
19.8.2 רשימת מבנה קבצי LIB
המבנה של חמשת ה- LIBs ברשימה זהה, כדלקמן:

עמוד 469
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
469 עמודים
1. מידע על כותרות, בגזרה הראשונה של הקובץ (512 בתים)
(1) 16 המילים הראשונות מאחסנות את המידע העיקרי של LIB
typedef struct
{
char plist_name [8];
// סימן זיהוי LIB
uint16 file_total;
// המספר הכולל של הקבצים
uint16 file_info_offset; // קיזוז אחסון מידע הקבצים, ביחידות של מגזרים
uint16 עתודה [2];
// שמור על יישור
} plist_head_t;
הערכים האפשריים של plist_name:
plist_name = {" MUSIC "};
plist_name = {" AUDIBLE "};
plist_name = {" VIDEO "};
plist_name = {" PICTURE "};
plist_name = {" EBOOK "};
(2) 28 * 6 בתים הבאים, אחסן את כל פרטי הפריט
typedef struct {
שם פריט char [8]; // שם הפריט
uint16 son_tree_num [3]; // מספר העצים בטבלת המשנה
uint16 son_tree_offset [3]; // קיזוז מיקום האחסון בעץ של טבלת המשנה של הרמה השלישית, בענפים
uint16 file_index_offset; // קיזוז מגזר הטבלה file_index ממוזג, שמור file_index
uint16 sort_index_offset; // קיזוז מגזר טבלת המפות, file_index הוא האינדקס ומספר הסיביות של מיון sort_index מאוחסן
uint16 index_parent_offset; // קיזוז מגזר טבלת הורים, file_index הוא האינדקס, וההורה_offset מאוחסן
שמורת uint16;
} plist_item_t; // (28bytes)
הערך של שם הפריט של רשימת שירי המוסיקה:
allsong_name [] = {" ALLSONG "};
album_name [] = {" ALBUM "};
artist_name [] = {" ARTIST "};
genre_name [] = {" GENRE "};
הערך של שם הפריט רשימה נשמע:
a_book_name [] = {" ספר "};
a_author_name [] = {" AUTHOR "};
הערכים של וידאו, תמונה ורשימת ספרים אלקטרוניים שם הם
char allfile_name [] = {" ALLFILE "};

עמוד 470
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
470 עמודים
(3) מבנה 512 בתים הוא כדלקמן:
plist_head_t 16 בתים
plist_item_t 28 בתים
plist_item_t
28 בתים
plist_item_t
28 בתים
plist_item_t
28 בתים
. . .
לְהַזמִין
2. אחסן מידע על כל הקבצים החל מהסקטור השני
פרטי הקבצים תופסים 256 בתים, ואחסון מסתיים ביישור המגזר. אחסון הוא רשימה מקושרת, הנוחה לחיפוש. אם
אחד הקבצים נמחק, הוא יימחק מהרשימה המקושרת; מבנה הנתונים מסומן כלא תקף.
כשולחן:
plist_f_info_t file_1
plist_f_info_t קובץ_2
plist_f_info_t קובץ_3
plist_f_info_t קובץ_4
. . .
( 512 בתים לעיל מיושרים )
3. לאחר מכן, אחסן את תוכן העץ הספציפי של כל פריט.
מבנה העץ הוא כדלקמן:
typedef struct
{
דגל uint8;
// דגל עץ: 0-אין בשימוש, קיים-קיים, שנמחק
סוג uint8;
// הרשימה הנוכחית מציגה מידע ID3
uint16 son_num; // מספר הסובליסטים
uint16 file_total; // מספר כל הקבצים ברשימה
uint16 file_index; // ניתן לקרוא את המספר הסידורי של קובץ ההתחלה, ערך sort_index
uint16 son_offset; // מספר הקיזוזים במיקום האחסון של הסובליסט
uint16 parent_offset; // מספר הקיזוזים של מיקום האחסון של רשימת האב
uint16 prev_offset; // קיזוז הקודם
uint16 next_offset; // קיזוז הבא
} plist_tree_t;

עמוד 471
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 471
כאשר כל חלק מאוחסן, הוא מסתיים גם ביישור מגזרי.
1) מבנה העץ מאוחסן ברשימה מקושרת. אם קובץ יימחק, הוא יימחק מהרשימה המקושרת; קבע את הנתונים
תג מבנה לא חוקי.
2) file_index הוא המספר הסידורי של הקובץ שחיפש; אם הקובץ המתאים יימחק, הוא יוגדר ל- 0xFFFF.
3) sort_index הוא מספר המיון המתאים למספר הסידורי של הקובץ. אם הקובץ המתאים נמחק, הוא מוגדר ל- 0xFFFF.
4) index_parent הוא המספר המרוחק של מספר רצף הקובץ למיקום העץ העליון, אם הקובץ המתאים נמחק, הגדר ל- 0xFFFF
סימן.
הטבלה הבאה:
ALLSONG- plist_tree_t son_tree1
ALLSONG- plist_tree_t son_tree2
ALLSONG- plist_tree_t son_tree3
קובץ_ינדקס ALLSONG- uint16
ALLSONG- מדד uint16 sort_
ALLSONG- uint16 index_parent
. . .
GENRE- plist_tree_t son_tree1
GENRE- plist_tree_t son_tree2
GENRE- plist_tree_t son_tree3
GENRE- uint16 file_index
GENRE- מדד sort_ uint16
GENRE- uint16 index_parent
. . .
19.9 כיצד להוסיף או למחוק תבנית קובץ ברשימה
ערכי LIB ותבנית קובץ המתאימים לכל רשימה:
סוג רשימה
קובץ LIB
כלול פורמט קובץ (BITMAP)
מוּסִיקָה
MUSIC.LIB
file_type_bitmap [0]
נִשׁמָע
AUDIBLE.LIB
file_type_bitmap [1]
וִידֵאוֹ
VIDEO.LIB
file_type_bitmap [2]

עמוד 472
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 472
תְמוּנָה
PICTURE.LIB
file_type_bitmap [3]
טֶקסט
EBOOK.LIB
file_type_bitmap [4]
M3U
M3U.LIB
file_type_bitmap [5]
כאמור לעיל, תבנית הקובץ המתאימה לכל רשימה מוגדרת במערך file_type_bitmap, והמשתמש יכול לשנות את ההגדרה בעצמו.
ניתן לציין את file_type_bitmap כערך מפת הסיביות או ככתובת הזיכרון של קבוצת ההרחבה.
אם ברצונך להגדיר קבוצה של שילובי סיומות קבצים לחיפוש, אתה יכול לעשות זאת באופן הבא:
// הגדר מערך הרחבות (רצוי תושב, מכיוון שהוא צריך לספק ל- FS)
Char creat_file_ext [3] [4] = {"MP3", "WMA", "ABC"};
// מלא את הכתובת של מערך ההרחבה ל- file_type_bitmap
file_type_bitmap [0] = & creat_file_ext;
19.10 כיצד להסיר את רשימת ההשמעה VIDEO או AUDIBLE
פריט רשימת ברירת המחדל שנוצר על ידי המערכת נקבע על ידי הגדרת המאקרו PL_BUILD_ALL, כדלקמן:
# הגדר את PL_BUILD_ALL
0x3f
ביטים ההפעלה המתאימים לכל יצירה ברשימה הם כדלקמן:
# הגדר PL_BUILD_MUSIC
0x01
# הגדר PL_BUILD_AUDIBLE 0x02
# הגדר PL_BUILD_VIDEO
0x04
# הגדר PL_BUILD_PICTURE 0x08
# הגדר PL_BUILD_EBOOK
0x10
# הגדר PL_BUILD_M3U
0x20
1) אם אתה מוחק את טבלת הווידיאו ויוצר אותה, אתה יכול לשנות את הערך PL_BUILD_ALL ל- 0x3b.

עמוד 473
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 473
2) אם אתה מוחק את הטבלה AUDIBLE ויוצר אותה, אתה יכול לשנות את PL_BUILD_ALL ל- 0x3b :
19.11 כיצד לסנן קבצים שנוצרו על ידי הקלטת אפליקציות
סינון הקבצים שנוצרו בהקלטה מושג על ידי סינון התיקיה שצוינה כעת המערכת מסננת כברירת מחדל את שם הקובץ שצוין
"RECORD", שם המסנן מוגדר כ:
static const uint8 rec_dir_name [] = "RECORD";
המשתמש יכול גם לשנות את שם תיקיית המסנן שצוינה.
20 בקשה להגדרת בקשה
20.1 סקירת הדרישות
הגדרת יישום מבינה את התצורה והניהול של פרמטרי המערכת ואת התצוגה של מידע מערכת כלשהו. אדוני
כדי לממש את ההגדרה של פרמטרי השמעת מוסיקה, הגדרת צליל, הגדרת תצוגה, הגדרת תאריך ושעה, הגדרת הצגת שקופיות
הגדרות, הגדרות שפה וכו '.
20.2 תכנון אדריכלות כולל
20.2.1 תרשים אדריכלות כולל
הגדרת יישום זקוקה לתמיכה של ספריית מערכות ופונקציות ציבוריות:

עמוד 474
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
474 עמודים
הגדרת יישום
ספריית applib
ספריית libc
מערכת הפעלה
ממשק משתמש משותף
משופר (בחירת קבצים
בחר)
20.2.2 חלוקת מודולים פונקציונליים
שם המודול
פונקציה קצרה
תיק מקביל
מודול ראשי
אחראי על אתחול ויציאת האפליקציה, כולל קבצי משאבים, תפריטים
טעינה ופריקה של קבצי תצורה, וניהול סצינות יישומים
main_setting.c
מודול עיבוד פריט בתפריט
עיבוד תפריטים הקשורים לפרמטר זמן
menu_callback_time_setting.c
עיבוד תפריטים הקשורים לפרמטרים תאריך
menu_callback_date_setting.c
הצגת עיבוד תפריטים הקשורים לפרמטרים
menu_callback_display_setting.c
עיבוד תפריטים הקשורים לפרמטרים
menu_callback_language.c
הגדרת השמעת מוסיקה עיבוד תפריטים הקשורים לפרמטרים
menu_callback_play_mode.c
הצגת שקופיות הגדרת פרמטרים הקשורים לעיבוד תפריטים
menu_callback_slide_show_setting.c
עיבוד תפריטים הקשורים להגדרת Fullsound ו- eq
menu_callback_sound_setting.c
Srs eq קבע עיבוד תפריטים הקשורים לפרמטרים
menu_callback_sound_setting2.c
כיבוי טיימר, העדפות חיבור למחשב, מידע על נגן, חוקי
מידע ועיבוד תפריטים אחרים הקשורים לפרמטרים
menu_callback_others.c
פורמט, הגדרות יצרן, כונן התקנת תקליטורים ותפריטי פרמטרים קשורים אחרים
טיפול בודד
menu_callback_others2.c
מודול תצורת פריט תפריט
נתוני תצורת תפריט
ap_cfg_menu_setting.c
20.3 סנכרון ואינטראקציה עם יישומים אחרים
אם יש נגינת רקע ברקע, לאחר אישור התפריט הקשור להגדרת המוסיקה, עליך לשלוח הודעת סנכרון של מידע קשור
למנוע הרקע, כגון פרמטרים למקור מוסיקה / EQ וכו '.

עמוד 475
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
475 עמודים
20.4 ספריות תלויות יישומים והממשקים שלהן
ממשק מערכת ו- libc api.a
ספריית זמן ריצה של יישום ctor.o
כל הפונקציות של Applib
תפריט ממשק משתמש נפוץ, סרגל ראש, אנימציה ומודולים אחרים הנפוצים לפקודה
בחירת קבצים ומודול רכישת ID3 בספריה המשופרת
20.5 תהליך עסקי בקשה

עמוד 476
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
סעיף 476
20.6 תרשים זרימת נתונים של נתוני תצורה
20.7 מבני נתונים עיקריים
(1) המידע הגלובלי שנשמר ב- VRAM, מידע זה מחולק לשני חלקים, אחד מהם הוא תוצאת השילוב הציבורי של המשתנה הציבורי.
מידע על המבנה, החלק האחר הוא מידע על הגדרת מוסיקה:
typedef struct
{
/ *! קסם, תקף כאשר הערך הוא 0x55AA * /
קסם uint16;
// הצגת פריטים קשורים
/ *! רמת בהירות תאורה אחורית * /
uint8 קלילות;
/ *! נושא 0: כחול 1: ירוק 2: אפור 3: ורוד 4: אדום * /
נושא uint8;
// + 4bytes
/ *! שומר מסך 0: אין 1: שעון דיגיטלי 2: תמונות אלבום 3: כבה את המסך 4: מצב הדגמה * /
uint8 screen_saver_mode;
/ *! זמן התאורה האחורית הוא ביחידות של 0.5 שניות, 0 פירושו תמיד פועל * /
uint8 light_timer;
/ *! זמן שומר המסך הוא בתוך 0.5 שניות, 0 פירושו אין שומר מסך * /
uint8 screen_saver_timer;
/ *! זמן הכיבוי של חיסכון בחשמל הוא ביחידה של שנייה שנייה, 0 פירושו כיבוי חסכון בחשמל * /
uint8 poweroff_timer;
// + 8 ביטים
/ *! לחזור במועד לממשק הנגינה ביחידה של שנייה שנייה, 0 פירושו אין צורך לחזור * /
uint8 playing_timer;
/ *! זמן כיבוי 9 (שינה) בדקות, 0 פירושו כיבוי לא מתוזמן * /
uint8 sleep_timer;

עמוד 477
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 477
//תאריך ושעה
/ *! פורמט זמן 0: פורמט של 12 שעות 1: פורמט של 24 שעות * /
uint8 time_format;
/ *! פורמט תאריך 0: DD_MM_YYYY 1: MM_DD_YYYY 2: YYYY_MM_DD * /
uint8 date_format;
// + 12 ביטים
/ *! שפת הממשק, ערך זה נקבע על ידי מנהל התקן התצוגה * /
uint8 language_id;
/ *! העדפת חיבור מחשב 0: MSC 1: MTP * /
uint8 online_device;
/ *! תוכנית ההתקנה של CD autorun תומכת בבחירה 0: autorun, 1: autorun support * /
uint8 autorun_set;
/ *! בחירת כרטיסי תמיכה 0: לא תומך 1: תמיכה * /
uint8 support_card;
// + 16 ביטים
/ *! הגבלת נפח * /
uint8 volume_limit;
/ *! ערך נפח נוכחי * /
uint8 נפח_זרם;
// הגדרות תמונה
/ *! זמן מרווח השקופיות * /
uint8 slide_time;
/ *! מצב חזור שקופיות * /
uint8 slide_repeat_mode;
// + 20 ביטים
/ *! פונקציית ההחלפה שקופית * /
uint8 slide_shuffle;
uint8 שמור [3];
} comval_t;
/ *!
* \ תקציר
* music_comval_t מבנה שילוב משתנה של הגדרת מוסיקה
* /
typedef struct
{
/ *! מקור המוסיקה * /
uint8 music_from;

עמוד 478
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
478 עמודים
/ *! מצב לולאת מוסיקה * /
uint8 music_repeat_mode;
/ *! המוזיקה לא תחזור לעבור באופן אקראי * /
uint8 music_shuffle;
/ *! מתג אפקט צליל fullsound * /
uint8 fullsound;
/ *! מתג אפקט קול srs * /
uint8 srs;
/ *! הגדרת מצב eq * /
uint8 eq_setting;
/ *! הפעלת מהירות משתנה * /
משתנה int8 משתנה;
uint8 שמור;
/ *! טבלת פרמטרים למשתמש * /
int8 eq_parameter [12];
/ *! srs טבלת פרמטרים למשתמש * /
int8 srs_parameter [12];
} music_comval_t;
/ *!
* \ תקציר
* setting_comval_t מגדיר את מבנה הפרמטרים הגלובלי של היישום
* /
typedef struct
{
/ *! מבנה שילוב משתנה ציבורי של המערכת * /
comval_t g_comval;
/ *! הגדרת מוסיקה מבנה שילוב משתנה * /
music_comval_t music_comval;
} setting_comval_t;
20.8 כיצד להוסיף פריט תצורה
1. הוסף את פריט התצורה הזה במבנה הנתונים comval_t של setting_common.h, ושמור על מבנה הנתונים ככל האפשר.
המבנה הוא מכפל שלם של 4 בתים;
2. בהתאם למספר התפריטים החדשים בסוג מבנה הנתונים conf_menu_item_t של ap_cfg_menu_setting.c
הוסף פריט עלה תפריט למערך הפריט [ITEM_TOTAL];
3. עדכן את הערך של ITEM_TOTAL;

עמוד 479
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
479 עמודים
4. כתוב את פונקציית הפונקציה המתאימה למפתח אישור התפריט, פונקציית ההתקשרות חזרה בזמן אמת (לא בהכרח חובה) ולחץ על מקש האפשרות כדי לחזור
פונקציית טון
5. הכן משאבי מחרוזת לתפריטים קשורים, וחדש מחדש את setting.sty ו- setting_res.h ו- setting_sty.h
6. ערוך ויצר את ה- AP
7. השתמש בתפריט כלי שינוי כדי לערוך
21 אפליקציות ap_tools
21.1 סקירת הדרישות
יישום TOOLS מבוסס על פלטפורמת us212a ומממש כמה פונקציות ועיצובים עצמאיים, כמו לוח שנה, שעון עצר,
שעון מעורר וכו '. פונקציות אלה הינן עצמאיות יחסית ובעצם אין בהן אינטראקציה עם מכשירי AP אחרים (למעט נפוצים ומנהלים).
21.2 תכנון אדריכלות כולל
21.2.1 תרשים אדריכלות כולל
יישום כלים זקוק לתמיכה של ספריית מערכות ופונקציות ציבוריות
21.2.2 חלוקת מודולים פונקציונליים
שם המודול
פונקציה קצרה
תיק מקביל
מודול ראשי
TOOLS כניסה לתוכנית, אחראית על אתחול ויציאת היישומים,
כולל טעינה ופריקה של קבצי משאבים, קבצי תצורת תפריט,
tools_main.c

עמוד 480
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
480 עמודים
וניהול זירת אפליקציות
קטע קוד תושב. פונקציות ספירת שעונים ושעון עצר
tools_rcode.c
מודול עיבוד פריט בתפריט
כלי עיבוד תפריט ראשי; התראה מסוימת של פונקציות
tools_menu.c
עיבוד פונקציות עיקרי בלוח השנה
menu_callback_calendar_tools.c
עיבוד תפריטים הקשורים לסטופר
menu_callback_stopwatch_tools.c
עיבוד תפריט הקשור לאזעקה
menu_callback_alarm_tools.c
עיתוי עיבוד תפריטים הקשורים fm
menu_callback_fm_tools.c
פונקציות המרה של לוח השנה הגרגוריאני ולוח הירח של לוח השנה התמידי
solar2lunar.c
solar2lunar_data.c
solar2lunar_main.c
מודול תצורת פריט תפריט
נתוני תצורת תפריט
ap_cfg_menu_tools.c
21.3 סינכרון ואינטראקציה עם יישומים אחרים
בשל העצמאות של היישום, למעט משותף ומנהל, אין בעצם אינטראקציה עם יישומים אחרים
21.4 ספריות תלויות יישומים והממשקים שלהן
ממשק מערכת ו- libc api.a
ספריית זמן ריצה של יישום ctor.o
כל הפונקציות של Applib
תפריט ממשק משתמש נפוץ, סרגל ראש, אנימציה ומודולים אחרים הנפוצים לפקודה
בחירת קבצים בספריה המשופרת
21.5 הליך עסקי בקשה
21.5.1 התהליך הכולל של היישום ותהליך תזמון התרחיש
תהליך תזמון הסצינות של יישום כלים הוא כדלקמן:

עמוד 481
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 481
הכנס ל- AP
אתחול Ap
תזמון סצינות
לוּחַ שָׁנָה
סטוֹפֶּר
עדכון אוטומטי
אזעקה
תפריט ראשי
תזמון FM
צא מ- AP
לוח השנה ושעון העצור מתוזמנים כסצנות עצמאיות בעיקר; האזעקה והטיימר fm הם בעצם מבנה התפריט, מכיוון
זה נקרא כתפריט הכפוף של tools_menu.
תרשים הזרימה של תזמון הסצינות מוצג למטה

עמוד 482
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
482 עמודים

עמוד 483
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
483 עמודים
21.5.2 תרשים זרימה של רשימת כלים
כניסה Ap
ניהול סצינה (חתך סצינה
לשנות, בעצם רק ירקות
סצנה יחידה)
ייצוא Ap
מודול לעיבוד תפריט
מודול ראשי

עמוד 484
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 484
21.5.3 תרשים זרימה של סצנת לוח השנה
הַתחָלָה
איך להיכנס?
קרא משתנה vram
רענן ממשק
קבל הודעות מערכת
נשר
האם להגדיר כניסה?
שמור משתנה vram
נ
האם להגדיר כניסה?
לדפדף כדי להיכנס?
התאמת לוח השנה?
י
סצינת יציאה?
י
נ
החלף שבוע
המר לוח שנה ירחי
ממשק משתמש

עמוד 485
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
485 עמודים
21.5.4 תרשים זרימת תרחיש של שעון עצר
הַתחָלָה
נשר
התנתק טיימר וכו '.
אתחול סצנה
(timer_init, data_init)
לצחצח שוב את הממשק?
תזמון קבוצתי?
זמן למחרוזת
הצג את השעה הנוכחית
הצג זמן קבוצתי
רענן ממשק
נשר?
י
י
קבל הודעות מערכת
נ

עמוד 486
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 486
21.6 כיצד להוסיף קבוצת התראות
1. הוסף קבוצה של מבנה אזעקה ב- alarm_common.h, והוסף אותה למבנה הנתונים alarm_vars_t
הוסף פריט זה
2. הוסף תפריט. ב- ap_cfg_menu_tools.c, התפריט החדש שנוסף הוא תפריט השורש או התפריט המשני
שנה את פריט תפריט התגובה;
.3 כתוב את פונקציית הפונקציה המתאימה למפתח אישור התפריט, פונקציית התקשרות חזרה בזמן אמת ופונקציית התקשרות חזרה לאחר לחיצה על מקש האפשרות;
4. ב- alarm_msg_dispatch.c, הוסף את עיבוד ההשוואה של אזעקה חדשה שנוספה
5. עיבוד תגובה לאזעקה החדשה שנוספה לאחרונה.
22 אפליקציית ap_alarm
22.1 סקירת הדרישות
יישום תגובה שעון מעורר. הפעל ועבד בעיקר את קובץ האזעקה המובנה או את קובץ המוסיקה בפלאש.
22.2 עיקרון תכנון והפעלה של שעון מעורר
מעורר מעורר אחראי רק להפעלה ועיבוד שעון השעון המעורר. הגדרת האזעקה נמצאת בכלי Ap. עיבוד השוואת שעון מעורר ושליחת הודעות
נשלח בבקרה המשותפת.

עמוד 487
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
487 עמודים
22.3 תכנון אדריכלות כולל
22.3.1 תרשים אדריכלות כולל
22.3.2 חלוקת מודולים פונקציונליים
עיין בתרשים האדריכלות הכולל, יישום האזעקה מחולק לשלושה מודולים: מודול ראשי (ראשי), מודול אתחול (init), שידור
שים את המודול (הפעל).
שם המודול
מאפיינים
פונקצית כניסה
קובץ מקור
מודול ראשי
תחילת יישום האזעקה
שינוי, יציאה מעיבוד וכו '.
רָאשִׁי()
Alarm_main.c
מצב אתחול
לְחַבֵּר
אתחול סצנה, fm initial
אתחול, מנוע מוסיקה
פתוח וכו '.
_scene_play_init ()
alarm_playing_init.c
מודול ההפעלה מנגן לולאות סצינות והודעות
ועיבוד מפתחות, מנוע
playing_loop_deal ()
alarm_playing_loopdeal.
ג

עמוד 488
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 488
סגירה וכו '.
22.4 סנכרון ואינטראקציה עם יישומים אחרים
כהודעת מערכת, יש להוציא את הודעת האזעקה ללא תנאי כאשר היא מתקבלת על ידי יישומים אחרים. לכן הבסיסי
אין אינטראקציה. אם אתה נכנס מסצנות המוסיקה וה- fm, עליך להקליט את מצב המנוע וכו ', כדי שתוכל לצאת מהאזעקה
המשך את ההפעלה בנקודת הפסקה.
22.5 ספריות תלויות יישומים והממשקים שלהן
ממשק מערכת ו- libc api.a
ספריית זמן ריצה של יישום ctor.o
כל הפונקציות של Applib
22.6 תהליך עסקי בקשה
22.6.1 התהליך הכולל של היישום ותהליך תזמון התרחיש
יישום האזעקה שייך לתהליך החזית. היישום קורא את המשתנה VRam דרך _read_var () בעת הכניסה, וב- _app_init ()
הפונקציה משלימה אתחול של applib, אתחול טיימר תוכנה, אתחול מודול ההודעות, אתחול טיימר המערכת,
אתחול ההודעות, פתח את קובץ המשאב וקובץ תצורת התפריט ולבסוף התקשר לבורר קבצי הקבצים כדי לאתחל את המודול לטעינת המכשיר.
מנהל התקן ומנהל קבצים.
כאשר יישום האזעקה ייצא, הוא יקבע לאיזה יישום לחזור על סמך ערך ההחזר שהתקבל והמצב בעת הכניסה ליישום, ואז
שליחת הודעה לתהליך המנהל דורשת יצירת יישום מתאים. ואז, בניגוד לרצף האתחול, VRam יישמר בעת היציאה
משתנים, התקשרו _app_deinit () להשלמת יציאת בורר הקבצים, יציאת טיימר מערכת, קבצי תצורת תפריט וקבצי משאבים
סגור ולבסוף בצע את פעולת ההתנתקות של ספריית ה- applib וחזור.
תזמון הסצינות של יישום Alarm הוא פשוט יחסית, עם סצנת הפעלה אחת בלבד. תרשים הזרימה הוא כדלקמן:

עמוד 489
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
489 שוכרים
הַתחָלָה
אִתחוּל
האם זה לצאת מהזירה?
סוֹף
צא מעיבוד
להיכנס לסצנת ההפעלה?
הפעל עיבוד סצינות
י
י
נ
נ
22.6.2 תרשים זרימה לאחר יציאת פסק זמן
22.7 מבני נתונים עיקריים
(1) מידע משתנה האזעקה שנשמר ב- VRAM מחולק לשני חלקים, אחד מהם הוא מבנה משתנה אזעקת העיתוי.
מידע על הגוף, החלק האחר הוא מידע על מבנה של משתנים הקשורים לתזמון FM:
typedef struct
{
/ * לוגו MAGIC * /
קסם uint16;
/ * סוג אזעקת לוגו * /
uint8 timer_flag;
/ * מבנה אזעקה * /
alarm_alarm_t g_alarm;
/ * alarm_fm מבנה * /
alarm_fm_t g_aufm;

עמוד 490
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 490
/ * חסוך זמן נודניק * /
זמן לא להירדם;
} alarm_vars_t;
/ * מבנה ALARM * /
typedef struct
{
// קסם uint16;
/ * שעון מעורר לאפשר דגל * /
uint8 לאפשר;
/ * הגדרת זמן של אזעקה 1 * /
time_t זמן התחלה;
/ * דגל ההגדרה של תאריך האזעקה: 0 יחיד, 1 בכל יום, שבועיים * /
uint8 cycle_flag;
/ * כיצד להגדיר את תאריך האזעקה * /
מחזור מחזור;
/ * 0-מובנה 2-כרטיס פלאש 2-כרטיסים * /
uint8 ring_flag;
/ * הנתיב של המוזיקה המושמעת כשמתגיבים לאזעקה * /
file_path_info_t נתיב; /
/ * נפח השמעת מוסיקת אזעקה * /
uint8 נפח;
/ * לוגו של נודניק ותדר * /
uint8 alarm_count;
} alarm_alarm_t;
/ * מבנה ALARMFM * /
typedef struct
{
// קסם uint16;
/ * שעון מעורר לאפשר דגל * /
uint8 לאפשר;
/ * הגדרת זמן התחלה של תזמון FM * /
time_t זמן התחלה;
/ * הגדרת זמן סיום FM מתוזמן * /
time_t סיום_time;
/ * זיהוי מחזור תקופתי: 0-יחיד, 1-בכל יום, שבועיים * /
uint8 cycle_flag;
/ * כיצד להגדיר את תאריך האזעקה * /

עמוד 491
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 491
מחזור מחזור;
/ * להקת FM * /
תדר uint16;
/ * נפח FM * /
uint8 נפח;
/ * הקלטה אפשר דגל * /
uint8 fmrec_enable;
// uint8 timer_flag;
} alarm_fm_t;
אפליקציית 23 ap_ebook
23.1 סקירת הדרישות
ספר אלקטרוני משמש לגלישה וקריאת קובץ הטקסט בפורמט TXT, ויש בו גם תצוגת עמודים של תוכן ספר אלקטרוני.
הגדר סימניות, הפעלה ידנית ופונקציות השמעה אוטומטיות
הדרישות התפקודיות הן כדלקמן:
1. תמיכה בגלישה וקריאה של קובץ בפורמט טקסט
2. תמיכה ידנית ומצב הפעלה אוטומטית, מרווח הזמן להפעלה אוטומטית הוא 2-30S
3. תומך בסימנייה פונקציה להוסיף ולמחוק
4. תמיכה בחר מספר עמוד לקפיצה
דרישות ביצועים
1. פתח * קבצי txt הגדולים מ- 10M בפחות משלוש שניות
2. אתר במהירות את הסימניה
3. גלישה חלקה וקריאת ספרים אלקטרוניים
23.2 תכנון אדריכלות כולל
23.2.1 תרשים אדריכלות כולל
מחולק על ידי ממשק, הממשק של יישום ebook כולל שלושה חלקים עיקריים: סצנת רשימה, סצנת השמעה וסצנת תפריט הגדרה.

עמוד 492
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
492 עמודים
ביניהם, לסצנת תפריט ההגדרות אפשרויות תפריט שונות בסצינות שונות. תרשים המבנה של יישום ebook הוא כדלקמן:
איור 23-1 מבנה ספר
23.2.2 חלוקת מודולים פונקציונליים
מחולק לפי פונקציה, ניתן לחלק את המודולים העיקריים של יישום ebook ל: מודול ראשי, מודול רשימת קבצים, מודול תפריט, קריאה
מודול, מודול תושב, מודול משותף.
הפונקציות הספציפיות הן כדלקמן:
טבלה 23-1 טבלת חלוקת מודולים פונקציונליים
שם המודול
פונקציה קצרה
תיק מקביל
מודול ראשי
בעיקר למימוש אתחול יישומים, שחזור פרמטרים, גיבוי, משאבים
מתג , מתג סצינה, מתג מנוע, יצירת תהליכים או כיבוי
Ebook_main.c
מודול רשימת קבצים
בצע גלישת קבצים, צפה באתחול קודם ויצא מרשימת הקבצים
עיבוד תוצאות שהוחזרו לאחר הייצוא
Ebook_filelist.c
מודול פונקציית תפריט
התמודד בעיקר עם יישום אפשרויות התפריט ופונקציות התצורה של התפריט
Ebook_menu.c

עמוד 493
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
493 עמודים
Ebook_menu2.c
Ebook_menu_cfg.c
קרא את מודול הפונקציה
בעיקר לממש מתג קבצים, קריאת מידע על קבצים, פענוח קבצי טקסט,
קרא וצפה בתוכן ספר אלקטרוני, הוספה לסימניה, מחיקה, בחירת מספר עמודים ופונקציות אחרות
פחית
Ebook_fileoperate.c
Ebook_fileoperate2.c
Ebook_reading.c
Ebook_decode.c
Ebook_bookmark.c
Ebook_bmklist.c
Ebook_bmklist_sub.c
מודול פונקציית קוד תושב
זה בעיקר לאחסן את הפונקציות המשמשות לעתים קרובות במרחב התושב, לצמצם
פחות מעבר לבנקים לשיפור היעילות.
Ebook_residentcode.c
מודול פונקציה ציבורית
אחסן בעיקר כמה פונקציות נפוצות ביישום
Ebook_comfun.c
Ebook_message.c
23.3 סינכרון ואינטראקציה עם יישומים אחרים
מנהל:
כאשר יש מוזיקה ברקע, אם בחרת להחליף את אות הכונן, עליך לשלוח הודעה כדי לסגור את מנוע הרקע למנהל,
ואז החלף את אות הכונן.
23.4 ספריות תלויות יישומים והממשקים שלהן
יישום ebook משתמש בספריות הבאות:
● ממשק api.a בין המערכת ל- libc
● ספריית זמן ריצה של יישום ctor.o
● כל הפונקציות של Applib
● תפריט ממשק משתמש משותף, סרגל ראש, הנפשה ומודולים אחרים לפקודה ציבורית
● בחירת קבצים בספריה המשופרת

עמוד 494
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 494
יישום ספר אלקטרוני
ספריית applib
ספריית libc
מערכת הפעלה
ממשק משתמש משותף
משופר (בחירת קבצים
בחר)
איור 23-2 תרשים תלות ביישום
23.5 תהליך עסקי בקשה
23.5.1 התהליך הכולל של היישום ותהליך תזמון התרחיש
הפונקציה המיושמת על ידי הפונקציה העיקרית () היא בעיקר לבצע את הפעלת האפליקציה, יציאת היישום ומיתוג סצינות; מודול זה מאוד
קוד תושב, המודול המקביל הוא ebook_main.c.

עמוד 495
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 495
הַתחָלָה
להיכנס מהדפדפן?
סמן את הסצנה הבאה כסצנת רשימת קבצים:
scene_next =
RESULT_EBK_FILELIST;
האם אתחול ספר אלקטרוני מצליח?
_ebook_init
תזמון תרחיש פונקציות של ebook
_book_scene_dispatch
מעבד הודעת יציאה: _deal_exit_result
צא מאפליקציית ebook: _ebook_exit
י
י
נ
סוֹף
נ
איור 23-3 תרשים זרימה כללי של ספר אלקטרוני
שיגור סצינה מיושם על ידי הפונקציה _ebook_scene_dispatch. יש שלוש סצינות ששודרו: סצנת השמעת טקסט,
סצנת השמעה של רשימת קבצים, סצנת אפשרויות תפריט.

עמוד 496
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
פרק 496
איור 23-4 תהליך תזמון סצינות
שימו לב שכשאתם נכנסים לסצנת התפריטים ברשימת הקבצים, אתם לא יוצאים, אלא נכנסים לתפריט בשיטת התקשרות חוזרת.
23.5.2 תרשים זרימת תרחיש של רשימת הקבצים
מודול זה משמש בעיקר כדי להציג ולעיין בכל קובצי הטקסט * .txt; המודול המתאים הוא ebook_filelist.c.
מודול זה מממש את גלישת הקבצים, הצגה ורישום של כל הספרים האלקטרוניים של הדיסק על ידי קריאה לממשק ה- UI הנפוץ
קובץ הפעלה של יישום.

עמוד 497
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
497 עמודים
הצג רשימת קבצים
פונקציית שיחה: gui_directory
אפשרות תפריט
התקשר לפונקציית ההתקשרות:
_ebook_filelist_callback
, שיחה פנימית _ebook_option_menu
היכנס לרשימת הקבצים
_ebook_filelist
תזמון סצנת החזרה, פונקצית החזרה:
_book_scene_dispatch
לחץ על מקש המצב, התקשר לפונקציית ההתקשרות
התקשר חזרה
לבטל חזרה?
תוצאה == RESULT_REDRAW?
הזן כל שדה בהתאם לתנאים
הצג או צא מהאפליקציה
לחץ על לחצן ההפעלה כדי לבחור הפעלה?
תוצאה == RESULT_REDRAW?
י
נ
סגור קבצים פתוחים,
היכנסו לסצנת השמעת הטקסט
י
רשימת הקבצים ריקה?
תוצאה == RESULT_DIR_ERROR_NO_FILE?
החלף דיסק או צא מיישום
להשתמש
י
נ
נ
איור 23-5 תהליך תרחיש של רשימת קבצים
23.5.3 תרשים זרימת תרחיש קריאה
מודול זה משמש בעיקר לפתיחה וסגירה של קבצי טקסט וקבצי סימניות; פענוח קבצי טקסט, חישוב מידע על העמודים,
כתוב את מספר מספר העמודים בחזרה לקובץ הסימניות, הוסף סימניות, מחק סימניות, בחר את מספר העמוד כדי לאתר ישירות את מיקום הקריאה ופונקציות אחרות.
המודולים המתאימים הם: ebook_fileoperate.c, ebook_fileoperate2.c, ebook_reading.c, ebook_decode.c,

עמוד 498
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
498 עמודים
ebook_bookmark.c, ebook_bmklist.c, ebook_bmklist_sub.c.
יש לציין כי מכיוון שמודול זה משתמש יותר ב- buf מטמון, הוא כולל בעיקר את טקסט המטמון המשמש לחישוב ספירת העמודים
תוכן, בערך 560byte; משמש להצגת תוכן של מסך אחד של מטמון נתונים, בערך 560byte; משמש להצגת מסך אחד של מידע סימניות,
בערך 72byte; buf נהג לאחסן תוכן סימניות, בערך 256 בערך; שטח מטמון כה רב לא יכול לתפוס נתוני תושבים
שטח, השתמש באופן זמני במרחב של מגזר הבנק המשופר כמרחב נתונים, וכאשר אתה משתמש בבאבי המטמון האלה,
לא ניתן להתקשר לממשק המשופר, אחרת הנתונים יישטפו וגורמים לתוכנית לפעול בצורה לא מסודרת, ולכן התוכנית מיועדת לקריאה
בעת קריאת המודול, לא נעשה שימוש בממשק המשופר.
איור 23-6 תרשים זרימה של סצנת השמעת טקסט

עמוד 499
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
499 עמודים
23.5.4 תרשים זרימת תרשים קופץ
הפונקציה העיקרית של מודול התפריט היא לממש את הצגת התפריט הדינמי ולעבד את תוצאת ההחזרה לאחר הפעלת אפשרות התפריט.
יישום ה- Ebook עיצב 12 תפריטי כניסה, כלומר:
M_NOPLAYNOREAD_NOCARD
ללא הפעלה וללא תפריט קריאה
M_NOPLAYNOREAD_CARDEXIST
אין הפעלה ובלי תפריט קריאה (קלף)
M_NOPLAYREAD_NOCARD
אין תפריט השמעה וקריאה
M_NOPLAYREAD_CARDEXIST
אין תפריט הפעלה וקריאה (קלף)
M_NOWPLAYNOREAD_NOCARD
משחק כעת ללא תפריט קריאה
M_NOWPLAYNOREAD_CARDEXIST
משחק כעת ללא תפריט קריאה (קלף)
M_NOWPLAYREAD_NOCARD
עכשיו תפריט משחק וקריאה
M_NOWPLAYREAD_CARDEXIST
עכשיו תפריט משחק וקריאה (קלף)
M_LPLAYNOREAD_NOCARD
שיחק לאחרונה ובלי תפריט קריאה
M_LPLAYNOREAD_CARDEXIST
שיחק לאחרונה ללא תפריט קריאה (קלף)
M_LPLAYREAD_NOCARD
התפריט האחרון שהושמע וקרא
M_LPLAYREAD_CARDEXIST
התפריט שהושמע וקרא לאחרונה (כרטיס)
כנסו לתפריט מקריאת טקסט
בסצנת הקריאה, כאשר המפתח מוכר כ- MODE, התוצאה המוחזרת היא
RESULT_EBK_READINGMENU, חזור לפונקציית תזמון הסצנה _ebook_scene_dispatch ואז הפעל
_ebook_option_menu הזן את אפשרות התפריט.

עמוד 500
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
500 עמודים
איור 23-7 תרשים זרימת לוגיקה מפתח של הפעלת טקסט
היכנס לתפריט מרשימת הקבצים
כניסה לתפריט ברשימת הקבצים מושגת באמצעות פונקציית התקשרות חוזרת. לפרטים, ראה 23.5.2.
23.6 כיצד לשנות את מספר השורות והעמודות בכל עמוד בסצנת הקריאה
בסצנת הקריאה מוצג טקסט התצוגה בכל שורה ובכל שורה, מספר השורות בעמוד והרוחב הניתן לצפייה של כל שורה נמצאים ב- Ebook.h
הַגדָרָה:
# הגדר את ONE_PAGE_ROW_NUM
9
// המספר בפועל של שורות טקסט המוצגות על גבי מסך אחד
/ *!
* \ תקציר
* ROW_MAX_WIDTH הרוחב המרבי של שורת פענוח טקסט אחת, כל שורה יכולה להציג עד 128 פיקסלים ברוחב
* /
# הגדר את ROW_MAX_WIDTH
128
אם לוקחים בחשבון שפות שונות, אורך כל תו אינו וודאי, כך שמספר התווים שניתן להציג בכל טור הוא בלתי אפשרי
באופן מאוחד, ניתן להגדיר רק את מספר הפיקסלים שניתן להציג.

עמוד 501
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
501 עמודים
לאחר הגדרת מספר השורות בעמוד ורוחב כל שורה, הקצה ערכים למשתני מערכת כאשר אתחול פרמטרי פענוח הטקסט:
/ ********************************************** **** **********************
* תיאור: אתחול פרמטרי פענוח קבצי טקסט
*
* טענות:
*
לא
* החזרות:
*
לא
* הערות
:
*
*************************************************** ********************* /
void _init_decode_param (void)
{
view_decode.valid = FALSE;
view_decode.remain = 0;
view_decode.param.line_count_one_page = ONE_PAGE_ROW_NUM ;
view_decode.param.max_width_one_line = ROW_MAX_WIDTH ;
view_decode.param.mode = 0;
view_decode.text_show_line = _show_text_line ;
view_decode.param.language = view_file.language;
libc_memcpy (& page_count_decode, & view_decode, sizeof (view_decode_t));
}
view_decode.text_show_line היא פונקציית התצוגה המגדירה כל שורה, ניתן לראות מהקוד שלמעלה שהיא נקראת
_show_text_line פונקציה להצגת הטקסט של כל שורה.
בעת הצגת התוכן של כל עמוד, התקשר לפונקציה הבאה:
_decode_one_page (& view_decode, ……, ……); // לפענח את הטקסט ולהציג אותו

עמוד 502
מדריך לתכנון אפליקציות US212A
יש לחקור הפרות זכויות יוצרים
גרסה: 2.0
502 עמודים
פעולות עיצוב מעגלים משולבים ושות 'בע"מ
כתובת: מספר 1, Keji Road 4, חוף החדשנות למדע וטכנולוגיה, אזור ההיי-טק, ג'וחאי
טלפון: 86-756-3392353
פקס: 86-756-3392251
מיקוד: 519085
אתר: http://www.actions-semi.com
אימייל (עסק): mp-sales@actions-semi.com
(תמיכה טכנית): mp-cs@actions-semi.com

טקסט מקור