เทมเพลตเพิ่มความเร็ว ARDUINO I / O

มันง่ายที่จะลืมอย่างไรก็ตาม Arduino ใช้ C ++ โดยทั่วไปแล้วชิ้นส่วน C ++ อยู่ในห้องสมุดรวมถึงกรอบงานรวมถึงผู้คนจำนวนมากเพียงแค่เขียนรหัสโปรแกรมหลักของพวกเขาโดยใช้สไตล์ C เพียงแค่ใช้วัตถุห้องสมุดเช่นนามสกุล C-language [Fredllll] เพิ่งผลิตห้องสมุดเทมเพลตการออกแบบเพื่อเพิ่มความเร็ว ARDUINO I / O เช่นเดียวกับที่เขาแบ่งปันใน GitHub

หากคุณเคยทำสิ่งที่สำคัญกับ Arduino คุณอาจเข้าใจได้ว่าในขณะที่ DigitalWrite มีประโยชน์ แต่มันเป็นงานที่ยอดเยี่ยมที่อยู่เบื้องหลังเพื่อให้แน่ใจว่าพินคือการกำหนดค่ารวมถึงการเพิ่มค่าใช้จ่ายในการโทรทุกครั้ง [เวอร์ชันเทมเพลตการออกแบบของ Fredllll] สามารถสลับ PIN ระบุได้ในสองรอบ คุณสามารถตัดครึ่งได้ถ้าคุณไม่รังเกียจที่จะรบกวนการระบุหมุดอื่น ๆ บนพอร์ตเดียวกันที่แน่นอน

คุณสามารถใช้ค่าคงที่เพื่อเปิดพินเช่นนี้:

Switchon <1> ();
หากคุณไม่ชอบใช้หมายเลขเวทย์มนตร์ (และฉลาด) คุณสามารถกำหนดค่าคงที่:

const uint8_t ledpin = 1;
Switchon ();
เนื่องจากคุณมักจะต้องการทำเวลาที่หรูหราบางอย่างมีเทมเพลตการออกแบบของ NOP ที่ช่วยให้คุณชะลอการตั้งค่าจำนวนรอบ นี่คือรหัสทดสอบบางอย่างจาก Reddit ที่สร้างคลื่นสี่เหลี่ยม 1.3 MHz ตัวอย่างเช่น:

const uint8_t mypin = 5;
void loop () {
cli (); // ปิดใช้งานการขัดจังหวะเนื่องจากพวกเขาจะสกรูหมดเวลา
ทำ {
switchonexclusive (); // 1 รอบ
nop <5> (); // 5 รอบ
SwitchFortPortofpin (); // 1 รอบ
nop <3> (); // 3 รอบ
} ในขณะที่ (1) // กระโดดกลับไปทำคือ 2 รอบ
}
เห็นได้ชัดว่านี่ไม่ใช่ค่าสูงสุดเช่นกันเนื่องจากมีวงจรล่าช้าแปดรอบในลูป

คุณไม่ต้องการให้เข้าใจมากเกี่ยวกับเทมเพลตเพื่อใช้ไลบรารีนี้อย่างไรก็ตามหากคุณต้องการเข้าใจมากขึ้นเราได้ครอบคลุมพวกเขาในอดีต เราได้กล่าวไว้ก่อนหน้านั้น DigitalWrite นั้นช้ากว่าการเข้าถึงพอร์ตโดยตรงเช่นเดียวกับการดำเนินงาน I / O อื่น ๆ นั้นไม่ดีขึ้นมากนัก มันจะน่าสนใจที่จะตรวจสอบว่าเทมเพลตอาจทำให้การดำเนินงานอื่นมีประสิทธิภาพมากขึ้น

Author: found

Leave a Reply

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