การทดสอบหน่วยภาษาแอสเซมบลี AVR


11

คุณจะทดสอบรหัสการประกอบของคุณได้อย่างไร

ฉันกำลังทำงานกับคอนโทรลเลอร์เซอร์โวแบบอนุกรมซึ่งเป็นส่วนหนึ่งของโครงการหุ่นยนต์ hexapod และรหัสได้มาถึงจุดที่มันซับซ้อน;) อย่างไรก็ตามฉันเคยใช้การทดสอบหน่วยในงานประจำวันของฉันในฐานะนักพัฒนาเซิร์ฟเวอร์ C ++ และ ดังนั้นได้ลองใช้การทดสอบชนิดเดียวกันกับรหัสประกอบ AVR ของฉัน ฉันหาวิธีที่ใช้ได้ผลกับฉัน (ดูที่นี่ ) แต่ฉันสนใจถ้ามีเครื่องมือหรือเทคนิคมาตรฐานที่ฉันพลาดไป

Updated:สำหรับบรรดาของคุณที่มีความสนใจที่มาเต็มไปยังตัวควบคุมเซอร์โวและการทดสอบหน่วยที่มีตอนนี้ที่นี่

คำตอบ:


3

ฉันจะอธิบายสิ่งนี้ว่าสวยงาม แต่ต้องการเพิ่มปัญหาหากคุณจะให้อภัยการบุกรุกของฉัน

ฉันรู้ว่ามีแพกเกจซอฟต์แวร์ราคาแพงมากในการทำงานผ่านสถานการณ์เช่นนี้ แต่ที่ บริษัท ฉันทำงานที่เราไม่สามารถจ่ายได้ถ้าเรามั่นใจว่าทำในสิ่งที่เราต้องการ

Test Driven Development (TDD) เป็นหนึ่งในระบบที่ดีกว่าที่ฉันเคยได้ยินสำหรับการพัฒนาและฉันสนุกกับมัน แต่ปัญหาที่ใช้เวลาของฉันมักจะเกิดจากการขัดจังหวะที่ซับซ้อนและเหตุการณ์ฮาร์ดแวร์ที่หลายคนจะเรียกบกพร่อง ดูเหมือนว่าสิ่งเล็กน้อยที่จะมีปัญหาทุก ๆ 2 ชั่วโมงเมื่อดวงดาวเรียงกัน แต่ถ้าโทรศัพท์ของคุณแข็งตัวสัปดาห์ละครั้งคุณจะต้องสาปแช่งชื่อวิศวกร ในกรณีของเราเราต้องเดินเข้าไปในฟีดล็อตเมื่อสิ่งต่าง ๆ แตกสลายซึ่งอย่างที่คุณสามารถจินตนาการได้ฉันชอบที่จะหลีกเลี่ยง

ฉันได้เห็นวิธีแก้ปัญหาที่ชาญฉลาดมากสำหรับการตรวจสอบการทำงานของระบบย่อยซึ่งหากดำเนินการอย่างถูกต้องอาจช่วยฉัน 3 ชั่วโมงจากการทำงาน 50 ชั่วโมงต่อสัปดาห์ แต่ถ้ามีวิธีที่ชาญฉลาดในการค้นหาสถานการณ์ที่ผิดพลาด ค้นหา "บั๊ก" ที่เกิดขึ้นในฟิลด์เป็นครั้งคราวภายใต้การโหลดจำนวนมาก

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


1
ฉันไม่ได้คิดเกี่ยวกับการทดสอบการโต้ตอบระหว่างรหัสขัดจังหวะและรหัสขัดจังหวะที่ไม่ใช่ มันเป็นจุดที่ดี ฉันกำลังวางแผนในการทดสอบรหัสขัดจังหวะการจับเวลาแบบ PWM ของฉันภายนอกสถานการณ์การขัดจังหวะในลักษณะเดียวกันกับวิธีที่ฉันกำลังทดสอบรหัสซีเรียลสายหลักของฉัน ฉันเดาแม้กระทั่งเมื่อฉันได้รับความคุ้มครองทั้งหมดที่ฉันยังขาดปฏิสัมพันธ์ ฉันคิดว่าฉันสามารถทริกเกอร์การขัดจังหวะจากภายในการทดสอบ (เป็นเรื่องง่ายด้วยตัวขัดจังหวะตัวจับเวลา แต่รหัสการขัดจังหวะทั้งหมดสามารถตั้งค่าให้ทำงานบนตัวขัดจังหวะตัวจับเวลาภายในชุดทดสอบ) แม้ว่าจะไม่น่ารำคาญ
Len Holgate

1
ฉันอาจเข้าใจผิดคุณ แต่ฉันพยายามระวังการโต้ตอบที่ไม่ขัดจังหวะและการขัดจังหวะด้วยรหัส ฉันน่าจะใช้งานปฏิบัติการปรมาณูหละหลวมมากขึ้น แต่ไม่เคยแสดงให้เห็นว่าทำให้เกิดอันตรายในระดับที่ฉันมีเครื่องมือเพิ่มประสิทธิภาพ ปัญหาเกิดขึ้นเมื่อการขัดจังหวะหนึ่งล่าช้าอีกปัญหาหนึ่งที่ฉันช่วยนักเรียนด้วยจะถูกขัดขวางการสร้าง PWM หากคุณต้องการความเร็วที่แม่นยำอย่างมากเช่นการใช้โมดูลเปรียบเทียบในชิปของคุณและการขัดจังหวะอีกอย่างหนึ่งคือการใช้เวลาว่างในเรื่องอื่นและทำให้คุณล่าช้า 50uS ซึ่งอาจสิ้นสุดโลก
Kortuk

1
ในบางกรณีคุณสามารถมีความสำคัญหรือคุณสามารถปิดการใช้งานอินเตอร์รัปต์และเปิดใช้งานอินเตอร์รัปต์ภายในภายในขึ้นอยู่กับแพลตฟอร์ม แต่เส้นทางที่ง่ายที่สุดสำหรับการพัฒนาของฉันเองคือการ จำกัด เวลาในการขัดจังหวะสิ่งที่จำเป็นอย่างยิ่ง ส่วนที่เหลือของงาน
Kortuk

1
การออกแบบปัจจุบันของฉันมีการอธิบายในบล็อกของฉันเช่นเดียวกับการออกแบบใหม่ที่เสนอ ตอนนี้ฉันมี PWM 64 ช่องที่สร้างโดยตัวขัดจังหวะตัวจับเวลาและไม่มีการขัดจังหวะอื่น ๆ อนุกรมทำโดยการสำรวจ นี่หมายความว่า PWM เป็นหินแข็ง แต่อนุกรมอาจมีปัญหา การออกแบบใหม่ของฉันจะใช้สำหรับการขัดจังหวะ UART เช่นเดียวกับการจับเวลาสำหรับการสร้าง PWM และ reenabling ระวังและการปิดกั้นของการขัดจังหวะเพื่อให้แน่ใจว่าผิดพลาด PWM ฟรีและการประมวลผล glitch UART ฟรี ...
บางเลน Holgate

2
ฉันใช้ PWM เป็นตัวอย่างระบบที่ฉันเคยมีปัญหานี้มีอินเตอร์เฟซ SPI 3 ตัวโดยที่หนึ่งในการเชื่อมต่อ SPI มี 3 ชิปที่เราใช้กับมัน มีอินเตอร์รัปต์ 4 พอร์ตที่แตกต่างกันเพื่อแจ้งการเปลี่ยนแปลงสถานะของชิปภายนอกและสิ่งอื่น ๆ ที่เกิดขึ้น ปัญหายิ่งแย่ลงยิ่งมีการเชื่อมต่อมากขึ้น
Kortuk

2

น่าสนใจ หลังจากวันคริสต์มาสฉันวางแผนที่จะทำแอสเซมเบลอร์กับ Pics เมื่อฉันมีเวลามากขึ้นฉันจะได้เห็นระบบของคุณ

วิธีหนึ่งที่ฉันสามารถเห็นได้คือการเขียนสคริปต์เฟรมเวิร์กในภาษาที่แตกต่างกันเพื่อสร้างและทำลายวัตถุจำลอง ฯลฯ แต่วิธีที่คุณจะเชื่อมต่อสิ่งนี้กับชิป / การจำลองจะเป็นปัญหา

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


การทำให้มันทำงานภายในเครื่องจำลองเป็นเครื่องกีดขวางเริ่มต้นของฉันจนกว่าฉันจะหาวิธีที่จะแยกรหัสออกเป็นไฟล์แยกต่างหากและเพียงแค่ "เยาะเย้ย" ฉลากบางอย่างที่ฉันจะข้ามไปในรหัสจริง ฉันจะโพสต์สิ่งทั้งหมดเมื่อฉันทำเสร็จแล้ว การติดตั้งเพิ่มเติมการทดสอบหน่วยกับรหัสกำลังใช้เวลาสักครู่ แต่มันก็คุ้มค่าแล้ว
Len Holgate

ตอนนี้ฉันมีโอกาสที่จะมองผ่านวิธีการของคุณแล้วฉันคิดว่ามันค่อนข้างหรูหรา บางทีฉันอาจจะได้ดู avrs หลังจากวันคริสต์มาสเนื่องจากดูเหมือนว่าจะมีสิ่งต่าง ๆ ตามชุมชนรอบตัวพวกเขามากกว่าสำหรับภาพ ความคิดใด ๆ สิ่งที่ Linux IDE ที่ดีสำหรับการเขียนโปรแกรม AVR Assembler อาจเป็น
Amos

1
มีห่วงโซ่เครื่องมือ GNU ที่คุณสามารถใช้แทน AVR Studio (ซึ่งเป็นชุดเครื่องมือฟรีของ Atmel) อาจเป็นไปได้ที่จะเรียกใช้บน Linux แต่ฉันไม่ต้องการ
Len Holgate

เพิ่งพบลิงค์นี้ไปยังบทความ Linux Journal เกี่ยวกับการพัฒนาสำหรับ AVR ภายใต้ Linux: linuxjournal.com/article/7289
Len Holgate

ข้อกังวลหลักของฉันในบทความนั้นคือว่ามาจากปี 2005 และอื่น ๆ อาจล้าสมัย
Amos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.