เมนู

วันศุกร์ที่ 18 กันยายน พ.ศ. 2558

ดีบัคโค๊ดใน MPLABX, Debug Code with MPLABX

           ในบทความที่แล้วเราได้ทำการเขียนโค้ดกระพริบ LED ง่ายๆแล้วใช้โปรแกรม ds30loaderGUI โปรแกรม .hex ไฟล์ลงไปในไมโครคอนโทรลเลอร์ผ่านทาง bootloader มาแล้ว คราวนี้เราจะมาใช้เครื่องมือที่เรียกว่า programmer/debugger มาทำการดีบัคโค้ดกันครับ            ตัว programmer/debugger ที่รองรับไมโครคอนโทรลเลอร์ของไมโครชิพจะมีอยู่ด้วยกันหลายตัว เริ่มต้นจากตัวเล็กที่สุดและราคาถูกที่สุดก็คือ PICkit3 ซึ่งรองรับการดีบัคแบบพื้นฐาน และเพียงพอกับการใช้งานดีบัคทั่วไป
        ถัดมาจะเป็น ICD3 ซึ่งมีความสามารถสูงกว่า PICkit3 เช่นรองรับ software breakpoint แบบ unlimited ทำให้สามารถดีบัคโค้ดที่ซับซ้อนได้ง่ายขึ้น อีกทั้งยังมีความเร็วในการโปรแกรมสูงกว่าอีกด้วย


        ตัวสุดท้ายคือ Real ICE ซึ่งก็รองรับการดีบัคทั้งหมดที่ PICkit3 และ ICD3 รองรับ แต่ความสามารถที่เหนือไปยิ่งกว่าคือ trace และ real time monitor ค่าในตัวแปรต่างๆได้แบบ real time ไม่ต้อง pause ก่อนเพื่อจะดูค่าของรีจิสเตอร์ หรือตัวแปร เหมือนอย่างที่ PICkit3 และ ICD3 ต้องทำ


หลังจากรู้จักกันแล้วว่าตัว programmer/debugger มีตัวไหนกันบ้างก็มาถึงการใช้งานเพื่อดีบัคโค้ดของเรากันแล้วครับ โดยเราจะให้โค้ดไฟกระพริบจากตัวอย่างบทความที่ผ่านมา แล้วเมื่อเรากดปุ่มดีบัค ตัว MPLABX จะโปรแกรมไฟล์ .elf/.coff ลงไปในตัวไมโครคอนโทรลเลอร์เพื่อทำหน้าที่ในการรวบรวมข้อมูลและสื่อสารกับ MPLABX ผ่านทางตัว programmer/debugger ที่เราเลือกใช้ ซึ่งในที่นี้คือ PICkit3  
                หลังจากที่เราเปิดโปรเจ็คของเราขึ้นมาแล้ว ให้ต่อ PICkit3 เข้ากับบอร์ด PIC Get Start 8 ดังรูป



จากนั้นกดปุ่มดีบัคดังแสดงในวิดีโอ MPLABX จะทำการคอมไพล์โปรเจ็คของเราอีกครั้ง แล้วจะเชื่อมต่อ กับ PICkit3 หากเป็นการเชื่อมต่อครั้งแรก อาจจะมีการอัพเดท firmware ของ PICkit3 ที่เหมาะสมสำหรับไมโครคอนโทรลเลอร์ของเรา การอัพเดทอาจใช้เวลาซัก 1 – 2 นาที อดทนรอแป็ปนึง จากนั้น MPLABX จะแจ้งว่า ไม่สามารถติดต่อกับไมโครคอนโทรลเลอร์ของเราได้ นั้นเพราะเรายังไม่ได้จ่ายไฟเลี้ยงให้กับตัวไมโครคอนโทรลเลอร์นั่นเอง  ในการทดลองครั้งนี้ผมจะใช้ PICkit3 จ่ายไฟให้กับตัวไมโครคอนโทรลเลอร์ ขั้นตอนก็ดูได้จากในวิดีโอนะครับ พอเราสามารถโปรแกรมไมโครคอนโทรลเลอร์ เราจะเห็นเมนูดีบัคแอ็คทีพขึ้นมา ซึ่งเราสามารถสั่ง RUN, Pause, Step by Step, etc. ซึ่งปุ่มคำสั่งต่างๆเหล่านี้จะใช้คู่กับการเซ็ท breakpoint ตรงตำแหน่งต่างๆที่เราต้องการให้โปรแกรมไปหยุด ร่วมกับหน้าต่าง watch ที่ใช้ดูค่าของตัวแปรต่างๆ รวมไปถึงรีจิสเตอร์ที่เราสนใจ