คำถามติดแท็ก isr

3
ฟังก์ชั่นสามารถเรียกใช้โดยอัตโนมัติเมื่ออินพุทเปลี่ยนแปลงได้หรือไม่?
ขณะนี้ร่างของฉันกำลังตรวจสอบพินอินพุตทุกครั้งที่วนรอบลูปหลัก หากตรวจพบการเปลี่ยนแปลงจะเรียกใช้ฟังก์ชันที่กำหนดเองเพื่อตอบสนองต่อการเปลี่ยนแปลงนั้น นี่คือรหัส (ตัดลงไปที่จำเป็น): int pinValue = LOW; void pinChanged() { //... } void setup() { pinMode(2, INPUT); } void loop() { // Read current input int newValue = digitalRead(2); // Has the input changed? if (newValue != pinValue) { pinValue = newValue; pinChanged(); } } น่าเสียดายที่สิ่งนี้ไม่ได้ทำงานอย่างถูกต้องเสมอไปสำหรับการเปลี่ยนแปลงสั้น ๆ ในอินพุต (เช่นพัลส์สั้น …
21 pins  interrupt  isr 

2
ฟังก์ชั่นการกำหนดตัวชี้อะตอมใน Arduino?
ตัวอย่างต่อไปนี้มาจากซอร์สโค้ดของ TimerOne : // TimerOne.h: void (*isrCallback)(); // TimerOne.cpp: ISR(TIMER1_OVF_vect) // interrupt service routine that wraps a user defined function supplied by attachInterrupt { Timer1.isrCallback(); } // TimerOne.cpp: void TimerOne::attachInterrupt(void (*isr)(), long microseconds) { if(microseconds > 0) setPeriod(microseconds); isrCallback = isr; // register the user's callback with the real ISR …

1
จำเป็นต้องมีความผันผวนหรือไม่เมื่อเข้าถึงตัวแปรจาก> 1 ISR แต่ไม่แชร์ภายนอก ISR
มีการบันทึกไว้อย่างชัดเจนว่าเมื่อมีการแบ่งปันข้อมูลทั่วโลกกับ ISR และโปรแกรมหลักข้อมูลจะต้องประกาศvolatileเพื่อรับประกันการมองเห็นหน่วยความจำ (และนั่นเพียงพอสำหรับข้อมูล 1 ไบต์เท่านั้นสิ่งที่ใหญ่กว่าต้องมีการจัดการพิเศษเพื่อรับประกันอะตอม . ที่นี่เรามีกฎระเบียบที่ดี: ตัวแปรที่ใช้ภายนอก ISR เท่านั้นไม่ควรเปลี่ยนแปลงได้ ตัวแปรที่ใช้ภายใน ISR เท่านั้นไม่ควรเปลี่ยนแปลงได้ ตัวแปรที่ใช้ทั้งภายในและภายนอก ISR ควรมีความผันผวน แต่volatileจำเป็นเมื่อมีการเข้าถึงตัวแปรจาก> 1 ISR แต่ไม่ได้ใช้ร่วมกันนอก ISR ตัวอย่างเช่นฉันมีฟังก์ชั่นที่รักษาสถานะภายในโดยใช้staticตัวแปร: void func() { static volatile long counter; // volatile or not? // Do stuff with counter etc. } ฟังก์ชั่นนั้นเรียกว่าสองวิธี: จากการขัดจังหวะด้วยพินและจากไลบรารี TimerOne : attachInterrupt(0, func, CHANGE); Timer1.attachInterrupt(func); ไม่มีปัญหา …
9 interrupt  timers  isr 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.