- 1. การพัฒนาความต้องการผลิตภัณฑ์
- 2. การออกแบบระบบและการพัฒนาอัลกอริทึม
- 3. การเข้ารหัสสำหรับเฟิร์มแวร์ในตัว
- การทดสอบ Embedded Firmware
โดยทั่วไปแล้วการพัฒนาซอฟต์แวร์เป็นเรื่องยาก แต่สำหรับระบบฝังตัวนั้นอยู่ในระดับความยากใหม่ทั้งหมด ผู้พัฒนาเฟิร์มแวร์จำเป็นต้องมีความรู้ที่ดีเกี่ยวกับการพัฒนาฮาร์ดแวร์และเข้าใจการทำงานภายในของโปรเซสเซอร์แบบฝังตัว สำหรับบทความวันนี้ฉันจะแบ่งปันเครื่องมือและเคล็ดลับที่สามารถใช้เพื่อให้ได้ประสิทธิภาพระดับสูงและกำจัดบางสิ่งที่ทำให้การพัฒนาเฟิร์มแวร์น่าเบื่อ
การพัฒนาซอฟต์แวร์แบบฝังต้องผ่านขั้นตอนการพัฒนาที่คล้ายคลึงกันกับการพัฒนาซอฟต์แวร์แบบ "ธรรมดา" โดยไม่คำนึงถึงรูปแบบการพัฒนา / การจัดการที่นำมาใช้การพัฒนาซอฟต์แวร์แบบฝังตัวโดยทั่วไปจะเกี่ยวข้องกับขั้นตอนด้านล่าง:
- การพัฒนาความต้องการผลิตภัณฑ์
- การออกแบบระบบและการพัฒนาอัลกอริทึม
- การเข้ารหัส
- การทดสอบ
เราจะตรวจสอบปัญหาบางอย่างที่มาพร้อมกับขั้นตอนเหล่านี้และเครื่องมือบางอย่างที่สามารถเพิ่มประสิทธิภาพและประสิทธิผล
1. การพัฒนาความต้องการผลิตภัณฑ์
ข้อกำหนดของผลิตภัณฑ์มักขึ้นอยู่กับนักออกแบบบอร์ดเป็นหลัก โดยปกติจะมีข้อมูลเพียงเล็กน้อยที่สามารถช่วยในการพัฒนาเฟิร์มแวร์ได้ดังนั้นนักพัฒนาซอฟต์แวร์แบบฝังจึงลงเอยด้วยเอกสาร 250 หน้า (ค่าเฉลี่ย) ที่มีข้อบกพร่องซึ่งไม่สามารถใช้ในการอ้างอิงได้และหากไม่พิจารณาอย่างรอบคอบอาจนำไปสู่การควบคุมดูแลในการออกแบบซึ่งจะทำให้ นำไปสู่การขยายกรอบเวลาของโครงการหากไม่ใช่ความล้มเหลวโดยรวมของโครงการ เอกสารแทบจะไม่มีข้อมูลเกี่ยวกับรีจิสเตอร์หรือฟิลด์บิตเหนือสิ่งอื่นใดและสิ่งนี้ทำให้นักพัฒนาเฟิร์มแวร์ต้องใช้เวลาหลายชั่วโมงในการค้นหาเอกสารเพื่อระบุสิ่งต่างๆเช่นรีจิสเตอร์ใดเป็นของกลุ่มใดและฟิลด์บิตใดเป็นของรีจิสเตอร์ใด ด้านล่างนี้เป็นเคล็ดลับบางประการที่สามารถนำมาพิจารณาเพื่อให้แน่ใจว่ามีการพัฒนาเอกสารข้อกำหนดโครงการที่มีประโยชน์มากขึ้น
การใช้คำอธิบายการลงทะเบียน
ตามที่กล่าวไว้ข้างต้นนักพัฒนาเฟิร์มแวร์จำเป็นต้องเข้าใจความซับซ้อนของการลงทะเบียนความทรงจำและอื่น ๆ ขององค์ประกอบการควบคุมทั้งหมด (CPU, MCU ฯลฯ) ในโครงการเพื่อให้สามารถควบคุมทุกส่วนของระบบได้อย่างมีประสิทธิภาพ วางนี้ในสถานที่ที่นักพัฒนาเฟิร์มสามารถมั่นใจได้ว่าเอกสารข้อกำหนดพกคำอธิบายที่เหมาะสมของการลงทะเบียนพร้อมกับแผนที่หน่วยความจำการลงทะเบียนทั้งหมดในองค์ประกอบการควบคุมสามารถกำหนดชื่อเฉพาะที่ทำให้ง่ายต่อการระบุในเอกสารและพวกเขาทั้งหมดสามารถเชื่อมโยงแบบร้อนเพื่อนำไปสู่รายการภายในเอกสารซึ่งระบุชื่อที่ตั้งบล็อกและที่อยู่ของ แต่ละทะเบียน
คำอธิบายงาน
ทางผ่านซึ่งเอกสารข้อกำหนดสามารถทำประโยชน์ให้กับนักพัฒนาซอฟต์แวร์ฝังตัวก็คือโดยการอธิบายสิ่งที่แต่ละบล็อกควรจะทำและวิธีการที่ควรจะทำมันนอกจากนี้ในขั้นตอนนี้ควรมีแผนการจัดการข้อผิดพลาดภายใต้แต่ละบล็อก โดยพื้นฐานแล้วสิ่งนี้ดูเหมือนว่าผู้พัฒนาเฟิร์มแวร์จะพูดว่า; “ เมื่อฉันมาถึงที่นี่ฉันต้องทำสิ่งนี้สิ่งนี้และสิ่งนี้เพื่อให้แน่ใจว่าสิ่งนี้สิ่งนี้และสิ่งนั้นจะไม่เกิดขึ้น” สิ่งนี้ช่วยแนะนำการทำงานของนักพัฒนาและช่วยประเมินโครงการก่อนที่การออกแบบจะเริ่มระบุข้อผิดพลาดและข้อบกพร่องที่อาจเกิดขึ้นช่วยประหยัดเวลาและเงินอันมีค่า
มีปัจจัยอื่น ๆ เช่นโครงสร้างเอกสารการใช้ฟอนต์ที่อ่านง่าย (สิ่งที่นักพัฒนาสามารถใช้งานได้แม้ว่าจะเหนื่อยล้าก็ตาม) แผนภูมิและรูปภาพหากเป็นไปได้ซึ่งทั้งหมดนี้สามารถเพิ่มประสิทธิภาพของทีมเฟิร์มแวร์ได้หลังจากขั้นตอนนี้
2. การออกแบบระบบและการพัฒนาอัลกอริทึม
ขั้นตอนนี้เกี่ยวข้องกับการพัฒนา pseudocodes ผังงานเครื่องแสดงสถานะและทุกอย่างที่เกี่ยวข้องกับการออกแบบเฟิร์มแวร์ สำหรับขั้นตอนนี้สามารถใช้เครื่องมือจำนวนมากเพื่อช่วยในการจัดระเบียบความคิดสำรวจซอฟต์แวร์เดิม / ที่เขียนไว้ก่อนหน้านี้รอบ ๆ โครงการและพัฒนาผังงานของคุณเองเครื่องแสดงสถานะเป็นต้นเครื่องมือเหล่านี้บางส่วนมีการกล่าวถึงด้านล่าง
PIM
ในขั้นตอนของการพัฒนาผลิตภัณฑ์เหล่านี้นักพัฒนามักจะเขียนลวก ๆ เนื่องจากรวบรวมทรัพยากรในโครงการจากลิงก์เว็บไปยังสูตร ฯลฯ วิธีที่ดีที่สุดวิธีหนึ่งในการติดตามข้อมูลนี้เพื่อให้มีประโยชน์ในภายหลังคือการใช้PIM (การจัดการข้อมูลผลิตภัณฑ์) เครื่องมือ มี PIM จำนวนมากอยู่ที่นั่น แต่ฉันจะพูดถึงคุณสมบัติที่โดดเด่นบางอย่าง
1. Evernote
Evernote ช่วยให้คุณจดบันทึกที่มีอยู่ในทุกแพลตฟอร์มเพื่อให้คุณสามารถตรวจสอบบันทึกที่คุณทำบนพีซีของคุณขณะอยู่ในรถบัสกลับบ้าน โน้ตได้รับการจัดระเบียบอย่างดีและสามารถค้นหาได้อย่างสมบูรณ์ดังนั้นคุณจะพบสิ่งที่คุณต้องการเสมอ
2. TrunkNote
Trunk note เป็นแอปพลิเคชั่นจดบันทึกแบบวิกิ มันนำพลังขององค์กรทั้งหมดของวิกิมาสู่การจดบันทึก เป็นแอปพลิเคชันที่ใช้โทรศัพท์มือถือ แต่สามารถซิงค์กับพีซีผ่าน WIFI ได้อย่างง่ายดาย
PIM ประเภทอื่น ๆ เช่น Tiddlywiki เป็นต้นแต่ละคนมาพร้อมกับคุณสมบัติที่อาจทำให้น่าสนใจยิ่งขึ้นสำหรับบุคคลที่เฉพาะเจาะจงและอาจใช้การสุ่มตัวอย่างก่อนที่คุณจะตัดสินใจในที่สุด
ทำความเข้าใจกับ Legacy Code
เครื่องมืออีกกลุ่มที่มีประโยชน์มากในขั้นตอนการออกแบบคือเครื่องมือสำหรับทำความเข้าใจรหัสเดิม ในสถานการณ์ที่ผลิตภัณฑ์ที่ได้รับการออกแบบเป็นเวอร์ชันปรับปรุงของผลิตภัณฑ์ก่อนหน้านี้นักพัฒนาอาจพบว่าการทบทวนงานที่ได้ทำไปแล้วนั้นเป็นประโยชน์เพื่อรับแนวคิดบางอย่างและอาจเป็นบิตโค้ดสำหรับโครงการใหม่นี้ นี่อาจเป็นเส้นทางที่ค่อนข้างยาวโดยเฉพาะอย่างยิ่งหากคุณไม่ได้เป็นส่วนหนึ่งของทีมที่สร้างซอฟต์แวร์ก่อนหน้านี้ มีซอฟต์แวร์จำนวนมากที่ช่วยสร้างต้นไม้สร้างเอกสารและผังงานจากโค้ดที่เขียนไว้แล้ว
1. Doxygen
Doxygen เป็นเครื่องมือที่มีประสิทธิภาพมากที่ช่วยสร้างเอกสารจากซอร์สโค้ด ได้รับการออกแบบมาเพื่อทำงานกับ C ++ เป็นหลัก แต่ยังทำงานร่วมกับ C, Python และภาษาอื่น ๆ มีความสามารถในการแยกโครงสร้างรหัสของรหัสใด ๆ โดยให้กราฟการพึ่งพาที่สร้างขึ้นโดยอัตโนมัติและแผนภาพมรดกเพื่อช่วยให้เห็นภาพของรหัส
2. กราฟวิซ
ตามเว็บไซต์ของพวกเขา graphviz ช่วยนำเสนอข้อมูลโครงสร้างเป็นแผนภาพของกราฟนามธรรมและเครือข่าย สามารถใช้ร่วมกับ Doxygen เพื่อทำความเข้าใจกราฟิกที่สร้างขึ้นได้ดีขึ้น
3. Srecord
Srecord เป็นเครื่องมือที่มีประสิทธิภาพสำหรับจัดการภาพเฟิร์มแวร์และการแปลงไฟล์รูปแบบต่างๆ สามารถใช้ในการคำนวณและทำ CRCs และ Checksums บนบล็อกไบต์แก้ไขไฟล์ข้อผิดพลาดที่สร้างขึ้นเนื่องจากห่วงโซ่เครื่องมือบั๊กกี้และกรองหรือย้ายส่วนของไฟล์ท่ามกลางสิ่งอื่น ๆ ข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานสามารถพบได้ในหน้า SourceForge
เครื่องมืออื่น ๆ ที่อยู่ในหมวดหมู่นี้ ได้แก่ CrystalRev และ Hexplorer เป็นต้น
การพัฒนาอัลกอริทึม
การวิจัยและการจดบันทึกทั้งหมดจะรวมอยู่ในการพัฒนาอัลกอริทึมที่แยกออกเป็นรหัสเทียมและผังงานสำหรับโครงการ มีเครื่องมือหลายอย่างสำหรับการพัฒนาผังงานและในขณะที่เครื่องมือส่วนใหญ่ไม่ได้มีไว้สำหรับการพัฒนาเฟิร์มแวร์ แต่ก็มีคุณสมบัติที่มีประโยชน์และสำคัญที่ทำให้งานสำเร็จและยังช่วยรักษาแผนภูมิตลอดวงจรการพัฒนาผลิตภัณฑ์ ด้านล่างนี้คือเครื่องมือที่ดีที่สุดสำหรับผังงาน
1. QFSM
QFSM เป็นเครื่องมือกราฟิกสำหรับการออกแบบและจำลองเครื่องจักรที่มีสถานะ จำกัด ความสามารถในการจำลองการออกแบบทำให้ดีกว่าซอฟต์แวร์อื่น ๆ ส่วนใหญ่ในกลุ่มนี้ มีประโยชน์อย่างยิ่งเมื่อคุณออกแบบเครื่องสถานะสำหรับ FPGA และฮาร์ดแวร์เป้าหมายที่คล้ายกัน
2. แผนภูมิสุวิมล
Lucid chart เป็นซอฟต์แวร์ผังงานที่ดีที่สุดและยืดหยุ่นที่สุด เป็นแบบเว็บและมีคุณลักษณะของทีมที่ช่วยให้คุณสามารถทำงานระหว่างอุปกรณ์หลายเครื่องและทำงานร่วมกันแบบเรียลไทม์กับเพื่อนร่วมทีม
3. Microsoft Visio
Visio เป็นหนึ่งในเครื่องมือกราฟิกที่ดีที่สุดในปัจจุบัน มีอาร์เรย์ของวัตถุจากช่องต่างๆที่ช่วยให้อธิบายอะไรได้ง่าย อย่างไรก็ตามมันไม่ได้มาพร้อมกับคุณสมบัติที่ช่วยเพิ่มการทำงานร่วมกันระหว่างทีมและสามารถใช้ได้กับเครื่อง windows ที่ติดตั้งเท่านั้น
4. Google สไลด์
สิ่งสำคัญอย่างหนึ่งในการพัฒนาผลิตภัณฑ์ในโลกปัจจุบันคือการใช้เครื่องมือที่ช่วยให้ทีมทำงานร่วมกันได้อย่างมีประสิทธิภาพไม่ว่าจะอยู่ที่ใดและนั่นคือสิ่งหนึ่งที่ Google สไลด์นำมาใช้ สามารถใช้เพื่อพัฒนาแผนภูมิทุกประเภทตั้งแต่ผังงานซอฟต์แวร์ไปจนถึงแผนภูมิองค์กรและแผนที่ความคิด เป็นระบบคลาวด์และทำงานได้ในเบราว์เซอร์ยอดนิยมเกือบทั้งหมด
มีเครื่องมืออื่น ๆ อีกมากมายสำหรับการสร้างผังงานและการพัฒนาอัลกอริทึมทั่วไปตามปกติแต่ละเครื่องมือมีข้อดีและข้อเสียของตัวเอง
3. การเข้ารหัสสำหรับเฟิร์มแวร์ในตัว
ทุกสิ่งที่กล่าวมาจนถึงจุดนี้นำไปสู่ที่นี่ โลกของ SDK และ IDE การเลือกใช้เครื่องมือในขั้นตอนนี้ขึ้นอยู่กับอุปกรณ์เป้าหมายและคุณสมบัติที่จะติดตั้งในอุปกรณ์ด้วยเหตุนี้ฉันจะไม่รวม SDK และ IDE ที่เป็นที่นิยมเช่น MPLAB เป็นต้นออกจากการสนทนาและเพียงแค่ติด ไปจนถึงเครื่องมือที่มีลักษณะเสริมกันมากขึ้น
1. QT (การพัฒนา GUI)
การแสดงผล (อินเทอร์แอกทีฟหรือไม่) เป็นสื่อที่ได้รับความนิยมมากที่สุดในการให้ข้อเสนอแนะแก่ผู้ใช้ในปัจจุบันและ SDK ของ QT เป็นหนึ่งในสิ่งที่ดีที่สุดและอาจไม่มีใครแปลกหน้าสำหรับใครในแวดวงที่ฝังตัว มีคุณสมบัติ "ลากและวาง" ที่ทำให้ง่ายต่อการพัฒนาแอปพลิเคชันที่ซับซ้อนบน GUI สำหรับอุปกรณ์ฝังตัวโดยไม่คำนึงถึงแพลตฟอร์มเป้าหมายหรือภาษาโปรแกรมที่ใช้สำหรับการพัฒนาโครงการโดยรวม โดยทั่วไปจะช่วยขจัดความเครียดที่เกี่ยวข้องกับการใช้รหัสเพื่อสร้างส่วนต่อประสานผู้ใช้
2. (การสร้างต้นแบบอย่างรวดเร็ว)
หนึ่งในคอขวดที่ใหญ่ที่สุดในการพัฒนาซอฟต์แวร์ฝังตัวเป็นความจริงที่ว่าฮาร์ดแวร์มักจะไม่สามารถใช้ได้กับสิ่งที่ทดสอบในระหว่างการเดินทางในขณะที่ซอฟแวร์จะถูกพัฒนาบ่อยครั้งเมื่อพร้อมใช้งานนักพัฒนาเฟิร์มแวร์จะต้องรอตลอดเวลาที่ฮาร์ดแวร์จะพร้อมทำเพียงเล็กน้อยหรือไม่ทำอะไรเลย ซึ่งจะเพิ่มระยะเวลารอคอยสินค้าและไม่ได้สร้างที่ว่างสำหรับการซิงค์ระหว่างวิศวกรฮาร์ดแวร์และผู้พัฒนาเฟิร์มแวร์ที่จะเพิ่มคุณภาพของผลิตภัณฑ์ เพื่อช่วยแก้ปัญหานี้พวกที่ VaST ได้สร้างแพลตฟอร์มการสร้างต้นแบบเสมือนระดับระบบอิเล็กทรอนิกส์ที่สามารถใช้สร้างต้นแบบฮาร์ดแวร์เสมือน ซอฟต์แวร์ฝังตัวใดที่สามารถเรียกใช้งานได้เพื่อกำหนดประสิทธิภาพของระบบก่อนที่ฮาร์ดแวร์จะพร้อมใช้งาน
3. Doxygen (เอกสารประกอบ)
ส่วนที่สำคัญที่สุดอย่างหนึ่งของการเขียนโค้ดคือเอกสารและหนึ่งในเครื่องมือที่ได้รับความนิยมมากที่สุดก็คือ Doxygen นอกเหนือจากการใช้เพื่อทำความเข้าใจซอฟต์แวร์รุ่นเก่าแล้ว Doxygen ยังมีความสามารถในการดึงความคิดเห็นจากรหัสโดยอัตโนมัติและสร้างเอกสารที่มีอยู่ โครงสร้าง Doxygen รวมไฟล์แบบกราฟิกและสร้างการอ้างอิงสำหรับทุกฟังก์ชันตัวแปรและมาโครที่ใช้ในโค้ดของคุณ ผังงานและแผนภาพการไหลของข้อมูลสามารถฝังอยู่ในเอกสารประกอบได้โดยการรวม Doxygen กับ graphviz
4. GIT (ระบบควบคุมเวอร์ชัน)
เป็นเรื่องยากที่จะเชื่อว่ามีใครพัฒนาซอฟต์แวร์ทุกประเภทโดยไม่มีระบบควบคุมเวอร์ชันในปัจจุบัน แต่ในกรณีที่คุณทำมันเป็นความคิดที่ไม่ดีเลยที่อาจนำไปสู่ความผิดพลาดที่จะทำให้คุณเสียเวลาและเงิน Git โดดเด่นในบรรดาเครื่องมือควบคุมเวอร์ชันด้วยเหตุผลหลายประการ เป็นโอเพ่นซอร์สรวดเร็วมีประสิทธิภาพและส่วนใหญ่อยู่ในท้องถิ่น นอกเหนือจาก Git แล้วเครื่องมืออย่างการโค่นล้มก็มีมูลค่าการกล่าวขวัญเช่นกัน
การทดสอบ Embedded Firmware
การทดสอบเป็นส่วนสำคัญของกระบวนการพัฒนาสำหรับทุกสิ่ง บริษัท สูญเสียเงินหลายพันดอลลาร์เมื่ออุปกรณ์ถูกเรียกคืนเนื่องจากข้อผิดพลาดของเฟิร์มแวร์ดังนั้นจึงเป็นส่วนหนึ่งของการพัฒนาที่ควรดำเนินการอย่างจริงจัง มักจะทำควบคู่กันไปพร้อมกับการเข้ารหัสและเครื่องมือชุดแรกสำหรับการทดสอบโค้ดน่าจะเป็นดีบักเกอร์ภายใน IDE หรือ SDK ที่ใช้สำหรับโครงการ การทดสอบมีหลายรูปแบบและดำเนินการในแต่ละขั้นตอนดังนั้นจึงต้องใช้เครื่องมือที่หลากหลาย เครื่องมือทดสอบจากการพัฒนาเฟิร์มแวร์จะตัดการตรวจสอบความถูกต้องของการออกแบบไปจนถึงการวิเคราะห์แบบคงที่และเครื่องมือทดสอบรันไทม์ ด้านล่างนี้เป็นเครื่องมือบางอย่างที่ฉันคิดว่ามีประโยชน์จริงๆ
1. คริสตัล REV
Crystal revs เป็นเครื่องมือสำหรับศึกษาโค้ด สามารถใช้เพื่อสร้างผังงานจากโค้ด C / C ++ ซึ่งทำให้เป็นเครื่องมือที่ยอดเยี่ยมในการตรวจสอบโค้ดของคุณเองและดูว่าการออกแบบเบื้องต้นเป็นสิ่งที่นำไปใช้หรือไม่ ด้วย Crystal rev คุณจะสามารถเห็นความแตกต่างระหว่างการออกแบบและการนำไปใช้งานได้อย่างรวดเร็ว ความสามารถในการสร้างแผนภูมิการไหลข้อมูลและกระแสการโทรจากรหัสทำให้เป็นเครื่องมือที่มีประโยชน์สำหรับการวิเคราะห์รหัสเดิม
2. PC- ผ้าสำลี
PC-lint เป็นหนึ่งในเครื่องมือทดสอบเฟิร์มแวร์ที่เก่าแก่ที่สุด มีความสามารถในการวิเคราะห์ซอฟต์แวร์เพื่อระบุจุดบกพร่องช่องโหว่ด้านความปลอดภัยและตรวจสอบว่าโค้ดเขียนตามมาตรฐานอุตสาหกรรม เครื่องมือที่คล้ายกัน ได้แก่ polyspace และ LRDA, Eggplant และ Tessy เป็นต้น
3. Wireshark
สิ่งนี้มีประโยชน์เมื่อสร้างอุปกรณ์เครือข่าย โดยพื้นฐานแล้วมันคือการดมกลิ่นแพ็คเก็ตและสามารถช่วยดูข้อมูลที่อุปกรณ์ของคุณกำลังส่งได้ สิ่งนี้สามารถช่วยในการรักษาความปลอดภัยอุปกรณ์
4. ไดรเวอร์พอร์ตอนุกรมเสมือน
ซอฟต์แวร์ VSPD by eltima เป็นเครื่องมือที่เพื่อนคนหนึ่งเพิ่งแนะนำให้รู้จัก มันมีประโยชน์มากเมื่อทำงานกับไดรเวอร์อุปกรณ์และการพัฒนาที่เกี่ยวข้องกับพอร์ต com อื่น ๆ พอร์ต com อนุกรมเสมือนช่วยให้คุณสามารถทดสอบพฤติกรรมของพอร์ต com โดยไม่ต้องใช้อุปกรณ์เป้าหมาย คุณสามารถสร้างพอร์ตได้ไม่ จำกัด จำนวนซึ่งสามารถจำลองการตั้งค่าทั้งหมดของพอร์ต com จริงได้ ซอฟต์แวร์ยังมาพร้อมกับคุณสมบัติต่างๆเช่นการแยกพอร์ตอนุกรม, การควบรวมพอร์ต Com, ใช้การเชื่อมต่อพอร์ต com แบบบันเดิลท่ามกลางคุณสมบัติเจ๋ง ๆ อื่น ๆ
สำหรับบทความนี้ขอบคุณที่สละเวลาอ่าน แม้ว่าจะเป็นไปไม่ได้ที่จะแสดงรายการเครื่องมือทั้งหมดที่นั่น แต่ฉันหวังว่าคุณจะพบว่าเครื่องมือเหล่านี้มีประโยชน์