تسريع القوالب حتى Arduino I / O
من السهل أن تنسى، ومع ذلك، فإن Arduino يستخدم C ++. عادة ما يكون الجزء C ++ في المكتبات بالإضافة إلى الإطار وكذلك العديد من الأشخاص يميلون إلى رمز برامجهم الرئيسية باستخدام نمط C فقط باستخدام كائنات المكتبة مثل ملحقات اللغة C. [Fredllll] أحدثت مؤخرا مكتبة قالب التصميم لتسريع اردوينو I / O وكذلك شاركه على جيثب.
إذا كنت قد قمت بإجراء أي شيء آخر من أي وقت مضى مع اردوينو، فأنت على الأرجح تفهم أنه في حين أن الكتابة الرقمية مفيدة، فإنه يفعل الكثير من العمل وراء الكواليس للتأكد من أن رقم التعريف الشخصي هو التكوين وكذلك يضيف النفقات العامة إلى كل مكالمة. [FREDLLLLLLLLLY] إصدارات تصميم قالب يمكن أن تبديل تحديد دبوس في دورتين. يمكنك قطع ذلك في النصف إذا كنت لا تمانع في إزعاج تحديد دبابيس أخرى على نفس المنفذ بالضبط.
يمكنك الاستفادة من ثابت لتشغيل دبوس، مثل هذا:
Switchon <1> ()؛
إذا كنت لا ترغب في استخدام الأرقام السحرية (وهذا ذكيا)، يمكنك تحديد ثابت:
const uint8_t Ledpin = 1؛
Switchon ()؛
نظرا لأنك على الأرجح ترغب في القيام ببعض التوقيت الأنيق، فهناك بمجرد قالب تصميم NOP يتيح لك تأخير عدد محدد من الدورات. فيما يلي بعض رمز الاختبار من Reddit الذي ينتج موجة ساحة 1.3 ميجا هرتز، على سبيل المثال:
const uint8_t mypin = 5؛
حلقة فارغة(){
CLI ()؛ / / تعطيل المقاطعات لأنها ستفعل التوقيت
فعل {
التبديل ()؛ // 1 دورة
NOP <5> ()؛ // 5 دورات
switchoffportofpin ()؛ // 1 دورة
NOP <3> ()؛ // 3 دورات
} بينما (1) // القفز مرة أخرى للقيام به هو 2 دورات
}
من الواضح أن هذا ليس هو الحد الأقصى، سواء، لأن هناك ثمانية دورات تأخير في الحلقة.
لا تتطلب فهم الكثير عن القوالب لاستخدام هذه المكتبة، ولكن إذا كنت ترغب في فهم المزيد، فقد غطينا في الماضي. لقد أشرحنا قبل أن يبلغ عدد DigitalWrite حوالي خمسين مرة أبطأ من الوصول المباشر المباشر، وكذلك عمليات الإدخال / الإخراج الأخرى ليست أفضل بكثير. سيكون من الرائع التحقق من أن القوالب قد تجعل عمليات أخرى أكثر كفاءة.