תבניות להאיץ את Arduino I / O

תבניות להאיץ את Arduino I / O

August 18, 2022 Digital Electronics 0

זה פשוט לשכוח, אולם Arduino עושה לנצל C + +. בדרך כלל, חלק C + + הוא בספריות, כמו גם את המסגרת, כמו גם אנשים רבים פשוט נוטים קוד התוכניות העיקריות שלהם באמצעות סגנון C רק ניצול אובייקטים הספרייה כמו תוספות C- שפה. [FREDLLLL] רק לאחרונה הפיק ספריית תבנית עיצוב כדי להאיץ את Arduino I / O, כמו גם הוא שיתף אותו על Github.

אם אי פעם עשית משהו גדול עם Arduino, סביר להניח שאתה מבין כי בעוד DigitalWrite הוא שימושי, זה עושה הרבה עבודה מאחורי הקלעים כדי לוודא את ה- PIN הוא תצורה, כמו גם זה מוסיף תקורה לכל שיחה. [פריד אתה יכול לחתוך את זה בחצי אם לא אכפת לך להטריד את ציין של סיכות אחרות על אותו נמל.

אתה יכול לנצל קבוע כדי להפעיל סיכה, ככה:

Switchon <1> ();
אם אתה לא אוהב לנצל מספרי קסם (וזה חכם) אתה יכול להגדיר קבוע:

const uint8_t Ledpin = 1;
Switchon ();
כי סביר להניח שאתה רוצה לעשות כמה עיתוי אלגנטי, יש גם תבנית עיצוב NOP המאפשר לך לעכב מספר מוגדר של מחזורים. הנה כמה קוד מבחן מ Reddit שמייצרת גל מרובע 1.3 MHz, לדוגמה:

const uint8_t mypin = 5;
לולאה חלל () {
CLI (); / / להשבית interrupts כפי שהם היו לדפוק את העיתוי
לעשות {
switchonexclusive (); // 1 מחזור
nop <5> (); / 5 מחזורי
switchoffortofpin (); // 1 מחזור
nop <3> (); // 3 מחזורים
} בעוד (1) // לקפוץ בחזרה לעשות הוא 2 מחזורים
}
ברור, זה לא מקסימום, גם, כי יש שמונה מחזורי עיכוב בלולאה.

אתה לא דרישה להבין הרבה על תבניות כדי לנצל ספריה זו, אבל אם אתה רוצה להבין יותר, כיסה אותם בעבר. ציינו לפני כן זה DigitalWrite הוא כחמישים פעמים לאט יותר מאשר גישה יציאה ישירה, כמו גם את פעולות I / O אחרים אינם הרבה יותר טוב. זה יהיה מרתק לבדוק אם תבניות עשויות לעשות פעולות אחרות הרבה יותר יעיל.

Leave a Reply

Your email address will not be published. Required fields are marked *