สอบถามเรื่องการ Interrupt ซ้อน Interrupt ครับ

  • 21 Replies
  • 6082 Views
*

Offline JENG

  • *****
  • 808
  • รู้ทุกเรื่องเว้นเรื่องจริง
    • View Profile
ถ้าไม่ซีเรียสเรื่องการแสดงผลมาก ไม่ต้องถึงกับ interrupt ซ้อนหรอกครับ
ผมเดาว่าคงเป็น ir remote ซึ่งข้อมูลไม่ได้มีความเร็วมากอะไร
หลังจากไม่มีสัญญาณจาก remote ส่งมาแล้ว การแสดงแสดงผลก็จะกลับมา sync
ได้ปรกติ เพราะรอบการทำงานมันสูง อาจจะเห็นการกระพริบแว๊บๆแค่นั้น

ผมก็ไม่ค่อยรู้เรื่องมากเกี่ยวกับ Propeller Clock แต่มีเพื่อนผมเคยทำเล่นอยู่เหมือนกันแสดงผลเป็นภาษาไทยด้วย
ก่อนหน้าเว๊บ ETD 3.0 จะล่ม ยังคุยกันอยู่ ตอนนี้ติดต่อไม่ได้เลย น่าจะใช้ ir remote ควบคุมเหมือนกัน เขาใช้ PIC16F876 ครับถ้าจำไม่ผิด
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺

ถ้าไม่ซีเรียสเรื่องการแสดงผลมาก ไม่ต้องถึงกับ interrupt ซ้อนหรอกครับ
ผมเดาว่าคงเป็น ir remote ซึ่งข้อมูลไม่ได้มีความเร็วมากอะไร
หลังจากไม่มีสัญญาณจาก remote ส่งมาแล้ว การแสดงแสดงผลก็จะกลับมา sync
ได้ปรกติ เพราะรอบการทำงานมันสูง อาจจะเห็นการกระพริบแว๊บๆแค่นั้น

ผมก็ไม่ค่อยรู้เรื่องมากเกี่ยวกับ Propeller Clock แต่มีเพื่อนผมเคยทำเล่นอยู่เหมือนกันแสดงผลเป็นภาษาไทยด้วย
ก่อนหน้าเว๊บ ETD 3.0 จะล่ม ยังคุยกันอยู่ ตอนนี้ติดต่อไม่ได้เลย น่าจะใช้ ir remote ควบคุมเหมือนกัน เขาใช้ PIC16F876 ครับถ้าจำไม่ผิด

ไม่ได้ซีเรียสมากครับ แต่ถ้าไม่ Interrupt เพื่อตรวจจับตำแหน่ง ตัวหนังสือมันจะติดไม่ตรงตรงตำแหน่งเลยครับ เพราะต้องเสียเวลาไปอ่านค่าจาก DS1307 และอ่านค่าความเร็วรอบ ก่อนจึงทำให้ตำแหน่งของตัวหนังสือนั้นติดไม่ตรงตำแหน่งที่ต้องการครับ

แต่เมื่อใช้งาน Interrupt จากตรวจจับและ Interrupt จากการอ่านค่าจะ IR Remote ก็ทำให้เกิดปัญหาซ้อนกันของการเกิด Interrupt ดังที่กล่าวมาข้างต้น
และวิดีโอ Propeller Clock เจ้าปัญหา  :'(  (เพิ่มเติม )
http://www.youtube.com/watch?v=KNOz1gzDAQo

เพื่อประกอบการอธิบายดูจากโค๊ดดีกว่าครับ อธิบายไม่ค่อยจะถูก โค๊ดอาจจะเขียนแบบ ลูกทุ่งๆ มั่วๆ ซะหน่อยจากการผสมไปผสมมาครับ ^^
เนื่องจากโค๊ดมาความยาวเกินที่เว็บรองรับ เลยต้องอัฟโหลดขึ้นเว็บฝากไฟล์แทนครับ
http://www.mediafire.com/?i5yzx4sxox05owd

ขอบคุณครับ





แม้ว่า PIC บางตัวไม่ interrupt ซ้อน แต่ flag ของ มันก็ยังทำงานอยู่ ดังนั้นเมื่อออกจาก interrupt มันก็จะเกิด interrupt ใหม่ขึ้นอีกรอบได้ครับ หรือแม้แต่ในวงรอบเดียวกันก็ยังทำงานได้ด้วยเนื่องจาก การตรวจสอบ interrupt จะต้อง ดู flag ของแต่ละตัวซึ่งเราอาจจะเจอมันในวงรอบนั้นเลยก็ได้ครับ ดังนั้น เราก็อย่าทำงานใน interrupt ให้นานเกินไปก็จะสามารถจัดการได้เองครับ ถ้าใช้ CCS อาจจะมองไม่เห็นภาพ แต่ถ้าใช้ตัวอื่นจะดูออกครับ

PIC16 ถ้าไม่ปิด interrupt มันก็จะเกิดทับกัน จนstack เต็มและกลับไปทำงานก่อน หน้านั้นไม่ได้เพราะข้อมูลที่จะใช้ย้อนกลับถูกทับไปแล้ว

ครับท่าน firmware ถ้าเป็น software interrupt สามารถทำงานซ้อนกันได้แน่ๆ เหมือนกับ windows ที่เราใช้อยู่ คือ OS เป็นตัวจัดการ interrupt ทั้งหมดเอง
โดยไม่มี hardware มาเกี่ยวข้อง ไม่ต้องกังวลเรื่อง stack จะเต็ม interrupt ได้จนกว่าเลือดจะหมดเมมโมรี่

อย่างตัว fujitsu เองก็หนีเรื่อง interrupt stack ไปใช้ที่ memmory แทน

*

Offline firmware.c

  • *****
  • 181
  • Firmware Design
    • View Profile
เท่าที่ดูจาก requirement ของ Application แล้ว ไม่มีความจำเป็นที่จะต้องใช้ multiple interrupt ครับ พยายาม run code ใน ISR ให้ใช้เวลาน้อยที่สุดเท่าที่จะทำได้ก็พอ
IAR Embedded Workbench for ARM
AVR-Studio + AVR-GCC
CodeBlocks + MinGw
CodeBlocks + Gtk+

ขอบคุณครับ  :D