คุณทราบได้อย่างไรว่าแฟลช / RAM ที่คุณต้องการสำหรับไมโครคอนโทรลเลอร์เป็นอย่างไร


24

สมมติว่าคุณกำลังเริ่มต้นโครงการที่ฝังตัวด้วยฟังก์ชันการทำงานที่รู้จัก เมื่อคุณเลือกไมโครคอนโทรลเลอร์คุณจะเลือกแรมที่คุณต้องการได้อย่างไร

คุณใช้บอร์ดนักพัฒนาซอฟต์แวร์และรหัสโครงการของคุณก่อนแล้วดูว่าคุณใช้หน่วยความจำเท่าไรแล้วเลือกไมโครคอนโทรลเลอร์ที่เหมาะสมที่เหมาะกับหน่วยความจำนั้น

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

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

การปฏิบัติที่ดีคืออะไร?


ฉันคิดว่ามันควรจะเป็นไปได้จากมุมมองทางทฤษฎีข้อมูลเพื่อประเมินความต้องการของ RAM ให้อยู่ในลำดับความสำคัญ (รูปแบบการให้เหตุผลเชิงมิติ) จากข้อกำหนดงาน อืม ...
ลินดอนไวท์

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

คำตอบ:


20

โดยส่วนตัวสำหรับโครงการงานอดิเรกฉันมักจะใช้ไมโครคอนโทรลเลอร์ที่ทรงพลังที่สุดในครอบครัวด้วยรอยเท้าขวา จากนั้นฉันก็พัฒนา PCB เขียนรหัสและสร้างต้นแบบ

นี่เป็นข้อได้เปรียบที่ฉันรู้ว่ามีไมโครคอนโทรลเลอร์จำนวนน้อยพอสมควรดังนั้นฉันสามารถสร้างต้นแบบได้อย่างรวดเร็วโดยไม่ต้องอ่านแผ่นข้อมูลทั้งหมด ฉันยังมีแผงฝ่าวงล้อมและแม่แบบรหัสสำหรับพวกเขา

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

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


สำหรับโครงการส่วนบุคคลของฉันฉันมักจะใช้วิธีการที่คล้ายกัน วิธีเดียวกันนี้ก็คืบคลานเข้ามาในสำนักงานเช่นกันกับฉัน มันไม่ผิดมันใช้งานได้ แต่มีวิธีที่ดีกว่า ฯลฯ ชื่นชมอินพุต!
efox29

จะมีวิธีที่ดีกว่าในสภาพแวดล้อม "ของจริง" แน่นอนรอคำตอบอื่น ๆ !
David

Absatively พัฒนาในกล่องทรายขนาดใหญ่และลดในภายหลัง เวลาที่คุณจะประหยัดจะครอบคลุมมากกว่า $ 4 พิเศษที่คุณใช้จ่ายต่อไมโครคอนโทรลเลอร์เพื่อพัฒนาต่อไป สิ่งนี้ใช้ได้มากกว่าสิ่งที่เป็นงานอดิเรก - และอันที่จริงมีความสำคัญมากกว่า รูปที่ 12 คนกำลังรอการเปลี่ยนไปใช้ตัวควบคุมที่ใหญ่กว่าแทนที่จะเกิดขึ้น !!
Scott Seidman

13

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

อย่างไรก็ตามหากคุณต้องการได้รับใบเสนอราคาคุณต้องแจ้งราคาให้ลูกค้าทราบก่อนที่คุณจะมีเงินในการดำเนินการใด ๆ

ดังนั้นวิธีปฏิบัติที่ดีคือการเขียนข้อกำหนดบางอย่างก่อนที่คุณจะเริ่มโปรแกรม คุณรู้ว่าคุณต้องการทำอะไรและคุณควรจดบันทึกว่าคุณจะทำอย่างไร

"วิธีการ" นี้รวมถึงการคิดเกี่ยวกับการออกแบบซอฟต์แวร์ตอบคำถามเช่น:

  • คุณต้องการระบบปฏิบัติการหรือไม่? อันไหน? ต้องการทรัพยากรอะไร?
  • คุณต้องการมีสถาปัตยกรรมแบบเลเยอร์หรือไม่? ต้องมีส่วนต่อประสานซึ่งอาจใช้ RAM
  • มีห้องสมุดใดบ้างที่มีอยู่และมีประโยชน์ / จำเป็นสำหรับวัตถุประสงค์ของคุณและจำเป็นต้องใช้หน่วยความจำเท่าใด (เอกสารประกอบห้องสมุดที่ดีตอบคำถามนี้โดยอ้างอิงโครงสร้างอ้างอิงอย่างน้อยหนึ่งโครงสร้าง)
  • โครงสร้างและตัวแปรใดที่คุณต้องนำไปใช้กับไดรเวอร์และแอพพลิเคชั่นของคุณเอง?

การสรุปค่าทั้งหมดเหล่านั้นจะช่วยให้คุณประเมินคร่าวๆ ไกลแค่ไหนที่คุณสามารถเชื่อถือได้ซึ่งขึ้นอยู่กับรายละเอียดการวิเคราะห์ของคุณและมันขึ้นอยู่กับประสบการณ์ของคุณ :-) การ
เพิ่มระยะขอบอย่างน้อย 30 .. 50% ของการประเมินของคุณเป็นความคิดที่ดี

เมื่อผลิตภัณฑ์ของคุณเสร็จสิ้นและคุณมี RAM อยู่ประมาณ 80 .. 90% คุณสามารถมั่นใจได้ว่าการเลือกของคุณถูกต้อง - อย่างน้อยก็เกี่ยวกับ RAM


2
Re: "80 .. 90% RAM ใช้งาน" มาตรฐานการปฏิบัติคือเพื่อให้แน่ใจว่าคุณใช้ประโยชน์สูงสุด 50% ทั้งใน CPU และหน่วยความจำเพื่อให้สามารถรองรับการอัพเกรดและแก้ไขข้อบกพร่องในอนาคต
Dunk

1
@Dunk: ขึ้นอยู่กับธุรกิจ ในยานยนต์ 80% ของทรัพยากรทั้งหมด (CPU, RAM, Flash) ที่ SOP เป็นที่ยอมรับกันโดยทั่วไป ตัวอย่างเช่นในเครื่องใช้ไฟฟ้าราคาถูกอาจมีมากขึ้น: เป็นไปได้ที่จะมีการอัพเกรดในระบบที่มีอายุการใช้งานเพียง 2-3 ปี
mic

@Dunk: ฉันอาจจะผิด แต่ดูเหมือนว่าคุณเคยชินกับซอฟต์แวร์สไตล์เดสก์ท็อปที่มีหน่วยความจำแบบไดนามิกและความไม่แน่นอนทั้งหมดที่เกิดขึ้นพร้อมกับสิ่งนั้น แอ็พพลิเคชันแบบฝังส่วนใหญ่จัดสรรทุกอย่างแบบสแตติก รับประกันไม่มีการรั่วไหลของหน่วยความจำ จากนั้นคุณสามารถใช้งานได้ 100% และสามารถใช้งานได้อย่างถาวรตราบใดที่คุณไม่ได้ทำการแก้ไข แน่นอนว่าจะทำงานได้ก็ต่อเมื่อคุณมีสแต็กแยกต่างหากจาก RAM ทำงานของคุณหรือถ้าคุณรู้ว่าสแต็คจะทำงานอย่างไรตลอดเวลา เป็นความคิดที่ดีที่จะเว้นที่ไว้สำหรับเรื่องนั้น แต่ 10-20% นั้นง่ายพอสำหรับสิ่งที่ฉันทำ
AaronD

ปัญหาที่ใหญ่กว่าในซอฟต์แวร์ฝังตัวคือตัวชี้โกงบัฟเฟอร์โอเวอร์รันหารด้วยศูนย์และสิ่งต่างๆเช่นนั้น MCU บางตัวสามารถโยนข้อยกเว้นในฮาร์ดแวร์คล้ายกับการขัดจังหวะ แต่ทุกอย่างที่ฉันใช้จะดำเนินต่อไปอย่างร่าเริงราวกับไม่มีอะไรเกิดขึ้น จะมีผลลัพธ์บางอย่าง แต่อาจไม่ใช่สิ่งที่คุณคาดหวังดังนั้นคุณต้องตรวจสอบสิ่งนั้น บางสิ่งเช่นเลขคณิตโอเวอร์ / อันเดอร์นั้นง่ายต่อการตรวจสอบและแก้ไขทันที สิ่งอื่น ๆ เช่นตัวชี้คนโกงสามารถไปโดยไม่มีใครสังเกตได้จนฟังก์ชั่นที่ใช้งานมาหลายปีตัดสินใจที่จะระเบิด
AaronD

3
ไม่ว่าคุณต้องการตั้งเป้าหมาย 80% หรือ 50% จะขึ้นอยู่กับลูกค้าของคุณ ด้วยสเปคคงที่และการแก้ไขข้อบกพร่องเท่านั้นที่จำเป็น 80% ก็ใช้ได้ สเป็คที่ไม่น่าเชื่อถือคุณสมบัติที่คาดว่าจะคืบคลานและอัตรากำไรที่มากพอที่จะทำให้คุณจ่ายเงินเพิ่มสำหรับพื้นที่ว่างที่มากขึ้น เราเคยซื้อไมโครคอนโทรลเลอร์จำนวนมากขึ้น 2x เท่าที่เราต้องการและเลือกอันที่จะโอเวอร์คล็อกเพียงพอที่จะให้ประสิทธิภาพที่เราต้องการซึ่งราคาถูกกว่าการออกแบบ PCB สำหรับชิปที่มีประสิทธิภาพมากขึ้น
Mark Booth

3

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

ดังนั้นนักพัฒนาซอฟต์แวร์ sw โดยทั่วไปจะต้องประเมินความต้องการของหน่วยความจำและ CPU ของโปรแกรม ขั้นตอนแรกของคุณคือการพยายามโน้มน้าวฮาร์ดแวร์ให้ไมโครคอนโทรลเลอร์ / ซีพียูที่ทรงพลังที่สุดและมี RAM มากที่สุดเท่าที่จะเป็นไปได้ นั่นไม่ค่อยได้ผลเพราะพวกเขามีเป้าหมายตามความต้องการของตัวเอง แต่ทุกครั้งที่คุณโชคดี

หากยังไม่ได้ผลสิ่งต่อไปที่คุณต้องทำคือการออกแบบซอฟต์แวร์ระดับสูงและแบ่งโมดูลออกเป็นฟังก์ชันการทำงาน จากนั้นคุณจะประมาณบรรทัดของรหัสสำหรับแต่ละฟังก์ชั่นสำหรับแต่ละโมดูลในระบบ จากนั้นคุณสามารถใช้สูตรในการแปลงบรรทัดรหัสเป็นประมาณการ ballpark ของหน่วยความจำรหัส นอกจากนี้คุณยังจะต้องตรวจสอบข้อกำหนดหน่วยความจำที่ผิดปกติ (เช่นอาร์เรย์ขนาดใหญ่) และเพิ่มค่าประมาณเพื่อรองรับ จากนั้นเพิ่มเปอร์เซ็นต์ที่ด้านบนของผลรวมเพื่อครอบคลุมสิ่งที่คุณพลาดไป จากนั้นเพิ่มเป็นสองเท่าเพื่อให้เป็นไปตามข้อกำหนดการใช้งานทั่วไป 50%

ใช่มันต้องใช้เวลา ใช่มีความจำเป็นต้องกระโดดผ่านห่วงทั้งหมดเพราะการเปลี่ยนฮาร์ดแวร์นั้นยากมากหลังจากสร้างขึ้นมา


เราจะหาสูตรการแปลงบรรทัดของโค้ดเป็นหน่วยความจำรหัสได้ที่ไหน
EasyOhm

สิ่งนั้นขึ้นอยู่กับภาษาและคอมไพเลอร์ที่คุณใช้ ถ้าคุณใช้แอสเซมเบลอร์หนึ่งบรรทัดโดยประมาณเท่ากับหนึ่งหน่วยความจำ (สิ่งใดคือขนาดคำของชิปของคุณ) ถ้าคุณใช้ C มันอาจจะประมาณ 3-5 คำต่อบรรทัดและถ้าคุณใช้ C ++ หรืออะไรที่ซับซ้อนกว่านี้มันก็อาจจะมากขึ้น สิ่งที่ดีที่สุดที่ต้องทำคือรวบรวมโปรแกรมสองสามโปรแกรมที่เขียนด้วยภาษานั้นและเปรียบเทียบบรรทัดโค้ดกับหน่วยความจำรหัสเพื่อให้ได้ค่าเฉลี่ย
Dakkaron

2

โดยทั่วไปแล้วผู้ขายไมโครคอนโทรลเลอร์จะใส่หน่วยความจำไว้ในอุปกรณ์ที่เหมาะสมกับการใช้งานทั่วไป ดังนั้นหากคุณต้องการหมุด I / O เพียงไม่กี่ตัวและ SPI หนึ่งตัวในอุปกรณ์ขนาดเล็กคุณจะไม่พบสิ่งใดที่มาพร้อมกับ Flash 500 kBytes และ 64 kBytes ของ RAM ด้วยอุปกรณ์ที่มีขนาดใหญ่กว่าซึ่งใกล้กับแพ็คเกจ SoC แม้แต่ขนาดเล็กที่สุดก็ใหญ่พอที่จะเว้นเสียแต่ว่าคุณวางแผนที่จะทำตัวเลขจำนวนมากเช่นการประมวลผลภาพ

ในสภาพแวดล้อมแบบมืออาชีพกุญแจสำคัญในการเลือกไมโครคอนโทรลเลอร์ที่เหมาะสมคือการใช้ข้อมูลประวัติ คุณจะมีบันทึกของโครงการอื่น ๆ ที่คุณพัฒนาขึ้นและรู้ว่าต้องใช้หน่วยความจำและทรัพยากรซิลิคอนอื่น ๆ เพื่อใช้คุณลักษณะแต่ละอย่าง คุณจะรู้ว่าสิ่งที่ผลิตภัณฑ์คาดว่าจะทำและมีรายการคุณสมบัติที่ดีและสามารถคำนวณทรัพยากรที่ไมโครคอนโทรลเลอร์จำเป็นต้องจัดหาได้อย่างรวดเร็วและแม่นยำ พยายามคาดเดาความต้องการทรัพยากรจากข้อกำหนดการออกแบบล่วงหน้า (พัฒนาเมื่อเริ่มต้นโครงการเมื่อมีข้อมูลน้อยที่สุดเกี่ยวกับระบบ) ไม่น่าเชื่อถือในช่วงเวลาที่ดีที่สุดและมีวิศวกรที่มีประสบการณ์มากเท่านั้นที่ได้สร้างระบบที่ครอบคลุม ฐานข้อมูลของข้อมูลประวัติในหัวของตัวเองจะมีความสำเร็จใด ๆ ในการใช้วิธีนี้

บริษัท หลายแห่งได้นำวิธีการ 'เปรียว' มาใช้กับซอฟต์แวร์และการออกแบบอิเล็กทรอนิกส์ซึ่งเกี่ยวข้องกับการสร้าง 'ไลบรารี่' ของบอร์ดขนาดเล็ก (เช่นบอร์ด RS-485, บอร์ด ADC, ฯลฯ ) พร้อมกับแพลตฟอร์มแพลตฟอร์มทั่วไปที่โฮสต์ไมโครคอนโทรลเลอร์ ในทำนองเดียวกันกับการใช้ dev-kit และปลั๊กอิน ผลิตภัณฑ์สามารถทำการสร้างต้นแบบได้อย่างรวดเร็ว (ภายในไม่กี่ชั่วโมง) โดยการเลือกและเชื่อมต่อชุดของบอร์ดที่จำเป็นสำหรับคุณสมบัติ ซอฟต์แวร์ดังกล่าวประกอบขึ้นจากโมดูลไลบรารีและสามารถทำการพอร์ตและทดสอบได้อย่างรวดเร็ว เมื่อขนาดของส่วนเฉพาะของฮาร์ดแวร์ของรหัสเป็นที่รู้จักก็มักจะเพียงพอที่จะเลือกส่วนที่เล็กที่สุดที่จะมีที่ ข้อยกเว้นที่กล่าวมาข้างต้นซึ่งการทำงานของอุปกรณ์เกี่ยวข้องกับข้อมูลขนาดใหญ่หรืออัลกอริทึมที่ซับซ้อน วิธีนี้มีความถูกต้อง

(ข้อดีอีกประการของวิธี Agile ก็คือมันช่วยให้การพัฒนาซอฟต์แวร์และอิเล็กทรอนิกส์ทำได้ควบคู่กันไปด้วยการออกแบบ elctronics เป็นการออกกำลังกายในการบูรณาการชุดของบอร์ดคุณลักษณะและทำ EMC ที่เกี่ยวข้องและสิ่งที่ยากอื่น ๆ ในเวลาเดียวกัน กำลังพัฒนาซอฟต์แวร์แอปพลิเคชันในชุด protoype การย้ายและการรวมบางอย่างยังคงเป็นสิ่งที่จำเป็น

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