ขึ้นอยู่กับและนี่เป็นเรื่องจริงสำหรับเครื่องมือทั้งหมดไม่ใช่แค่ C30
การเพิ่มประสิทธิภาพมักจะลบและ / หรือปรับโครงสร้างรหัสในรูปแบบต่างๆ คำสั่ง switch ของคุณอาจถูกนำมาใช้ใหม่ด้วย if / else construct หรือในบางกรณีอาจถูกลบออกทั้งหมดพร้อมกัน y = x * 16 อาจถูกแทนที่ด้วยชุดของกะซ้าย ฯลฯ แม้ว่าการเพิ่มประสิทธิภาพประเภทสุดท้ายนี้มักจะสามารถก้าวผ่านไปได้ แต่ส่วนใหญ่เป็นการปรับโครงสร้างของคำสั่งควบคุมที่ได้รับยา
สิ่งนี้สามารถทำให้ขั้นตอนดีบักเกอร์ผ่านโค้ด C ของคุณเป็นไปไม่ได้เนื่องจากโครงสร้างที่คุณกำหนดไว้ใน C ไม่มีอยู่อีกต่อไปพวกเขาถูกแทนที่หรือสั่งใหม่โดยคอมไพเลอร์เป็นสิ่งที่คอมไพเลอร์เชื่อว่าจะเร็วขึ้นหรือใช้พื้นที่น้อยลง นอกจากนี้ยังสามารถทำให้เบรกพอยต์เป็นไปไม่ได้ที่จะตั้งค่าจากรายชื่อ C เนื่องจากคำสั่งของคุณอาจไม่อยู่อีกต่อไป ตัวอย่างเช่นคุณอาจลองตั้งค่าเบรกพอยต์ภายในคำสั่ง if แต่คอมไพเลอร์อาจลบว่าถ้า คุณอาจลองตั้งค่าเบรกพอยต์ภายในระยะเวลาหนึ่งหรือเป็นลูป แต่คอมไพเลอร์ตัดสินใจที่จะปลดลูปนั้นดังนั้นจึงไม่มีอยู่อีกต่อไป
ด้วยเหตุผลนี้หากคุณสามารถดีบักโดยปิดการปรับให้เหมาะสมมักจะง่ายกว่า คุณควรทดสอบซ้ำเมื่อเปิดใช้งานการเพิ่มประสิทธิภาพเสมอ นี่เป็นวิธีเดียวที่คุณจะพบว่าคุณพลาดสิ่งสำคัญvolatile
และทำให้เกิดความล้มเหลวเป็นระยะ ๆ (หรือความแปลกประหลาดอื่น ๆ )
ในกรณีของการพัฒนาแบบฝังคุณจะต้องระมัดระวังในการปรับให้เหมาะสมอยู่ดี โดยเฉพาะอย่างยิ่งในส่วนของรหัสที่มีความสำคัญต่อเวลาการขัดจังหวะบางอย่างเช่น ในกรณีเหล่านี้คุณควรเขียนรหัสบิตที่สำคัญในแอสเซมบลีหรือใช้คำสั่งคอมไพเลอร์เพื่อให้แน่ใจว่าส่วนเหล่านี้ไม่ได้รับการปรับปรุงเพื่อให้คุณรู้ว่าพวกเขามีเวลาดำเนินการคงที่หรือเวลาทำงานเลวร้ายที่สุด
gotcha อีกตัวสามารถใส่รหัสลงใน uC ได้คุณอาจต้องปรับความหนาแน่นของรหัสให้พอดีกับรหัสของคุณในชิป นี่คือเหตุผลหนึ่งว่าทำไมจึงเป็นความคิดที่ดีที่จะเริ่มต้นด้วยความจุ ROM ที่ใหญ่ที่สุดในครอบครัวและเลือกอันที่เล็กกว่าสำหรับการผลิตหลังจากรหัสของคุณถูกล็อค