ในบทความที่แล้วเราได้ทำการเขียนโค้ดกระพริบ 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 ที่ใช้ดูค่าของตัวแปรต่างๆ
รวมไปถึงรีจิสเตอร์ที่เราสนใจ