ควรกำหนดกับกับดักทั้งหมดหรือไม่


18

ฉันได้เห็นสองกรณีตอนนี้ด้วย dsPIC 30F4013 ซึ่งตัวควบคุมถูกรีเซ็ตเนื่องจากมีกับดักที่ไม่ได้กำหนด ทำไมกับดักเหล่านี้ได้รับการยกในตอนแรกยังคงเป็นปริศนา แต่นั่นไม่ใช่คำถามของฉันทันที ฉันเริ่มที่จะคิดว่ามันจะเป็นการเขียนโปรแกรมที่ดีที่จะเสมอกำหนดดักทั้งหมดแม้ว่าดักไม่ควรจะเกิดขึ้นดังนั้นฉันได้รับอย่างน้อยข้อผิดพลาดที่ชัดเจนแทนการตั้งค่าแบบสุ่ม นี่เป็นวิธีปฏิบัติมาตรฐานที่ฉันไม่ทราบหรือไม่? ฉันควรพิจารณาข้อเสียของการฝึกนี้หรือไม่?


4
ไม่ใช่คำตอบสำหรับคำถามของคุณ แต่ฉันประสบกับอาการเหล่านั้นในระบบ dsPIC & PIC24 เมื่อไม่นานมานี้ ในกรณีของฉันกับดักผลมาจากบิตของรหัสที่ฉันถูกพอยน์เตอร์อ้างอิงถึงค่า 16 บิตและตัวชี้เหล่านี้มีค่าแปลก ๆ วิธีการรู้ว่าค่า 16 บิตจะเริ่มในขอบเขตคี่หรือแม้กระทั่ง คอมไพเลอร์ XC16 ไม่ได้ปกป้องคุณจากการแฮงค์ของฮาร์ดแวร์ที่นี่ ฉันลงเอยด้วยการเขียนมาโคร wrapper สำหรับฟังก์ชั่นเหล่านี้ซึ่งบังคับให้ตัวชี้ 2 8 บิตยกเลิกการอ้างอิง
brhans

คำตอบ:


13

กฎที่ไม่เป็นทางการของฉันคือ:

  1. หากมีการเปิดใช้งานการขัดจังหวะคุณควรมีรหัสที่จัดการ
  2. หากคุณไม่ได้เขียนรหัสสำหรับการขัดจังหวะให้ปิดการใช้งาน
  3. หากคุณไม่สามารถปิดใช้งานได้ให้เขียนรหัสสำหรับมัน

แม้ว่าจะไม่มีกฎนั้น แต่แผ่นข้อมูลตอบคำถามของคุณอย่างชัดเจน:

หากผู้ใช้ไม่ต้องการดำเนินการแก้ไขในกรณีที่เงื่อนไขข้อผิดพลาดกับดักเวกเตอร์เหล่านี้ต้องโหลดด้วยที่อยู่ของตัวจัดการเริ่มต้นที่มีคำสั่ง RESET หากในทางตรงกันข้ามหนึ่งในเวกเตอร์ที่มีที่อยู่ที่ไม่ถูกต้องถูกเรียกว่ากับดักข้อผิดพลาดที่อยู่จะถูกสร้างขึ้น

( แหล่งที่มาส่วน 8.3 บันทึกย่อครั้งแรก)

เนื่องจากคุณไม่สามารถซ่อนกับดักได้จากนั้นคุณต้องจัดการกับมัน หากคุณไม่ต้องการจัดการกับกับดักในวิธีการเฉพาะวิธีที่เหมาะสมคือดำเนินการตามRESETคำสั่ง


ได้. ฉันมีโมดูลมาตรฐานที่มีเป้าหมายสำหรับกับดักทั้งหมด
Olin Lathrop

16

ใช่มันเป็นความคิดที่ดีข้อเสียเพียงอย่างเดียวคือขนาดรหัสเสริมเล็กน้อยและคุณต้องตัดสินใจว่าจะทำอย่างไรกับกับดัก (ปล่อยข้อความบนพอร์ตอนุกรมเปิดไฟ "ล้มเหลว" รีบูตเครื่องอย่างเงียบ ๆ ฯลฯ ฯลฯ )


4
ฉันมักจะมีหน่วยประมวลผลทำงานในวง NOP / GOTO ไม่มีที่สิ้นสุด วิธีนี้สแต็กไม่ได้รับความเสียหายจากกับดักและเมื่อทำการดีบั๊กฉันมีโอกาสคลี่คลายมันและคิดว่าเกิดอะไรขึ้น ฉันไม่ได้รับกับดักบ่อยครั้ง แต่ 80% ของเวลาเป็นกับดักที่อยู่แปลก ๆ ปกติแล้วเพราะขยะได้รับการโหลดเป็นตัวชี้ บางครั้งตัวชี้สแต็กได้รับความเสียหายและสร้างกับดักที่อยู่แปลก ๆ สิ่งเหล่านี้ยากต่อการแก้ไขเนื่องจากสแต็กไม่มีอยู่อีกต่อไป โชคดีที่มันหายากจริงๆ
Olin Lathrop
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.