วลีที่ยกมาไม่ใช่คำเตือนมันเป็นเพียงคำแถลงเกี่ยวกับการทำงานของสิ่งต่าง ๆ
ไม่มีอะไรผิดปกติกับการใช้งานmillis()
หรือmicros()
ภายในรูทีนขัดจังหวะที่เขียนอย่างถูกต้อง
ในทางกลับกันการทำอะไรเลยภายในรูทีนขัดจังหวะที่เขียนไม่ถูกต้องนั้นเป็นสิ่งที่ผิด
รูทีนการอินเตอร์รัปต์ที่ใช้เวลามากกว่าสองสามไมโครวินาทีในการทำงานคือในทุกโอกาสที่เขียนไม่ถูกต้อง
ในระยะสั้น: การเขียนอย่างถูกต้องประจำการขัดจังหวะจะไม่ทำให้เกิดปัญหาหรือเผชิญหน้ากับหรือmillis()
micros()
แก้ไข: เกี่ยวกับ“ ทำไม micros ()“ เริ่มทำงานผิดปกติ”” ตามที่อธิบายไว้ในหน้าเว็บ“ การตรวจสอบฟังก์ชั่น Arduino micros ” micros()
โค้ดใน Uno สามัญนั้นเทียบเท่ากับการใช้งาน
unsigned long micros() {
return((timer0_overflow_count << 8) + TCNT0)*(64/16);
}
สิ่งนี้จะส่งคืนความยาวที่ไม่ได้ลงชื่อสี่ไบต์ประกอบด้วยสามไบต์ต่ำสุดจากtimer0_overflow_count
และหนึ่งไบต์จากการลงทะเบียน count-0
timer0_overflow_count
จะเพิ่มขึ้นประมาณหนึ่งครั้งต่อมิลลิวินาทีโดยTIMER0_OVF_vect
จัดการขัดจังหวะตามที่อธิบายไว้ในการตรวจสอบการทำงานของ Arduino มิลลิวินาทีหน้าเว็บ
ก่อนที่ตัวจัดการขัดจังหวะจะเริ่มต้นขึ้นฮาร์ดแวร์ AVR จะปิดใช้งานการขัดจังหวะ หาก (ตัวอย่าง) ตัวจัดการขัดจังหวะต้องทำงานเป็นเวลาห้ามิลลิวินาทีโดยที่อินเตอร์รัปต์ยังปิดใช้งานอยู่จะมีการพลาดอย่างน้อยสี่ตัวจับเวลา 0 โอเวอร์โฟลว์ [การขัดจังหวะที่เขียนด้วยรหัส C ในระบบ Arduino ไม่ใช่ reentrant (ความสามารถในการจัดการการประมวลผลที่ทับซ้อนกันหลายอย่างภายในตัวจัดการเดียวกัน) แต่สามารถเขียนตัวจัดการภาษาแอสเซมบลี reentrant ที่เปิดใช้งานการขัดจังหวะก่อนเริ่มกระบวนการใช้เวลานาน]
กล่าวอีกนัยหนึ่งตัวจับเวลาล้นไม่ได้“ ซ้อนกัน”; เมื่อใดก็ตามที่มีการล้นเกิดขึ้นก่อนที่การขัดจังหวะจากการโอเวอร์โฟลด์ก่อนหน้าจะได้รับการจัดการตัวmillis()
นับจะสูญเสียมิลลิวินาทีและความคลาดเคลื่อนtimer0_overflow_count
ก็จะทำให้micros()
เกิดความผิดพลาดโดยมิลลิวินาทีเช่นกัน
เกี่ยวกับ“ สั้นกว่า 500 μs” เป็นขีด จำกัด เวลาสูงสุดสำหรับการประมวลผลขัดจังหวะ“ เพื่อป้องกันการบล็อกการขัดจังหวะตัวจับเวลาเป็นเวลานานเกินไป” คุณสามารถไปที่ระดับต่ำกว่า 1024 μs (เช่น 1,020 μs) และmillis()
ยังคงใช้งานได้ เวลา. อย่างไรก็ตามฉันถือว่าตัวจัดการขัดจังหวะที่ใช้เวลามากกว่า 5 μsเป็นคนเกียจคร้านมากกว่า 10 μsเฉื่อยชามากกว่า 20 μsเหมือนหอยทาก