Arduino เสียไปจากการใช้คำสั่งมากเกินไปหรือไม่?


12

ขอโทษด้วยถ้ามันเป็นคำถามที่โง่ แต่ฉันไม่สามารถหาคำตอบได้

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


ดูคำถามที่เชื่อมโยงด้วย . . .
James Waldby - jwpat7

คำตอบ:


20

ไม่รหัสไม่ "เสื่อมสภาพ" MCU โดยทั่วไปไม่ว่าคุณกำลังทำอะไรในระดับเดียวกับกิจกรรมที่กำลังทำอยู่ แม้delay()จะทำงานมากมายในขณะที่ "ว่าง"

มีคำสั่งเพื่อให้ CPU ทำงานน้อยลง - วางไว้ในโหมด IDLE หรือ SLEEP - แต่คำสั่งเหล่านี้ใช้เพื่อประหยัดพลังงานแทนที่จะลด "การสึกหรอ" บน MCU

แน่นอนว่ามีบางสิ่งที่อายุการใช้งานที่ จำกัด และคุณสามารถใช้งานได้ในเวลา จำกัด เท่านั้น - สิ่งต่าง ๆ เช่นการเขียนไปยัง EEPROM และการเขียนลงในหน่วยความจำแฟลช - ดังนั้นคุณไม่ต้องการทำสิ่งเหล่านั้นตลอดเวลา นอกจากนั้นไม่ว่าคุณจะทำอะไรไม่ได้ทำให้ MCU หมดสภาพ


2
แต่สารกึ่งตัวนำทั้งหมดอายุใช่ไหม การฉีดตัวพาร้อนและความไม่เสถียรของอุณหภูมิอคติเป็นกลไกที่ฉันจำได้ แน่นอนมันต้องใช้เวลาหลายปี
MV

5
@MV ใช่ แต่สิ่งที่คุณเรียกใช้บนไมโครคอนโทรลเลอร์ไม่ได้ส่งผลกระทบต่อจริงๆ ไม่ว่าคุณกำลังทำอะไรคุณกำลังใช้งาน CPU ที่ระดับคร่าวๆ คุณใช้มันทั้งหมด (ค่อนข้างมาก) ตลอดเวลา
Majenko

1
รหัสจะไม่ส่งผลกระทบต่อความร้อนที่เกิดขึ้นทางอ้อม? ส่วนประกอบที่ร้อนแรงสามารถสึกหรอได้เร็วขึ้น
เสา

3
เพียงจำนวนเล็กน้อยเล็กน้อยมาก แม้ในขณะที่ไม่ทำอะไรเลยมันก็ทำงานหนักและประมวลผล
Majenko

ขอบคุณสำหรับการตอบกลับของคุณ. ตอนนี้ฉันสามารถเอนหลังและเขียนรหัสที่ซับซ้อนได้ตามที่ต้องการและไม่ต้องกังวลกับช่วงชีวิตของ Arduino ของฉัน! แต่มันเป็นกรณีของการโต้ตอบกับส่วนประกอบภายนอกอย่างต่อเนื่องหรือไม่? อ่านเซ็นเซอร์การสื่อสาร SPI และอื่น ๆ
ahmadx87

6

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

Arduino (Uno) มีหน่วยความจำสามส่วน SRAM, FLASH และ EEPROM SRAM เป็นเหมือนประตูทรานซิสเตอร์ลอจิกมากกว่า มันจะไม่เสื่อมสภาพด้วยการจัดเก็บตัวแปร FLASH และ EEPROM ประกอบด้วยประตูลอย พวกเขาค่อยๆเสื่อมสภาพเมื่อคุณเขียนข้อมูลใหม่ จากแผ่นข้อมูลของไมโครคอนโทรลเลอร์ Atemlระบุว่า:

หน่วยความจำแฟลชมีความอดทนอย่างน้อย 10,000 รอบการเขียน / ลบ (จากบทที่ 8.2)

EEPROM มีความอดทนอย่างน้อย 100,000 รอบการเขียน / ลบ (จากบทที่ 8.4)

อย่างไรก็ตามหน่วยความจำ FLASH เป็นพื้นที่สำหรับการเรียกใช้โค้ด การเขียนไม่สามารถทำได้ในขณะที่ Arduino กำลังทำงาน คุณเขียนหน่วยความจำ FLASH เฉพาะเมื่อคุณอัปโหลดรหัสใหม่ ดังนั้นมันจะเสื่อมสภาพเมื่อคุณอัปโหลดรหัสอย่างน้อย 10,000 ครั้ง

หากคุณต้องการให้คุณสามารถสร้างรหัสพิเศษให้กับหน่วยความจำ FLASH ด้วยตนเองโดยปกติแล้วเพื่อการเก็บข้อมูลตัวแปรเมื่อปิดเครื่อง Arduino เมื่อคุณเขียนโปรแกรมประเภทนี้มันจะช้าลงเนื่องจากหน่วยความจำ FLASH ไม่มีความอดทนในการเขียนมากนัก นั่นเป็นเหตุผลที่คุณจะแนะนำให้ใช้ EEPROM ซึ่งมีอายุขัยมากขึ้นถ้าคุณต้องการเก็บข้อมูลแม้ในขณะที่ปิดเครื่อง Arduino

โดยสรุปแล้วมันจะเสื่อมสภาพโดยการเขียนหน่วยความจำ FLASH หรือ EEPROM ใหม่ไม่ใช่โดยการใช้รหัส


6

สำหรับงานอดิเรก:

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

เกี่ยวกับปัญหาที่เกี่ยวข้องกับฮาร์ดแวร์ที่ จำกัด ชีวิตเพียงอย่างเดียวคือการโหลดเอาต์พุตที่มีความต้านทานต่ำ (หลอดไฟแบบไส้), โหลดแบบอินดัคทีฟ (เช่นรีเลย์กลเชิงขับโดยตรง) เพื่อตั้งชื่อเพียงสองตัว แต่คำถามนั้นเกี่ยวกับซอฟต์แวร์เท่านั้น


5

... (หรือโดยทั่วไปตัวควบคุมไมโครอื่น ๆ ) ...

คำตอบอื่น ๆ นั้นยอดเยี่ยม แต่ก็มีข้อยกเว้นเล็กน้อยหนึ่งข้อ

Ferroelectric RAM (FRAM)เป็นรูปแบบของหน่วยความจำที่รวมความไม่ผันผวนของแฟลชและ EEPROM ความสามารถในการเขียนของ SRAM และความหนาแน่นของ DRAM

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

ตัวอย่างของ MCUs ว่าการใช้งานรวมถึงเฟรมTI บรรทัด


1
โดยทั่วไปหากมี FRAM จะไม่มีหน่วยความจำอื่น ไม่แม้แต่แฟลช
Majenko

3

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

ในการเปรียบเทียบ: คอมพิวเตอร์หลายเครื่องทำงานเป็นเวลาหลายปีโดยไม่ต้องปิดเครื่อง Atmel (ชิป) นั้นไม่มีความแตกต่างตราบใดที่ความร้อนที่เกิดขึ้นสามารถบรรเทาได้

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเซ็นเซอร์ความร้อนใน Atmels ได้ที่นี่: เซ็นเซอร์อุณหภูมิภายใน


2
วิธีการที่ Arduino ดำเนินการหน่วงเวลาคือการตรวจสอบอย่างต่อเนื่องหากเวลาผ่านไปนานพอ ดังนั้นการรันโปรแกรมหรือการdelayใช้กำลังการประมวลผลเท่ากัน
Gerben

ฉันจะอัปเดต (ลบ) ส่วนนั้น ... ขอบคุณ!
Michel Keijzers

มีความแตกต่าง - คอมพิวเตอร์ส่วนใหญ่ในปัจจุบันมีคุณสมบัติการประหยัดพลังงานมากมาย หลายสิ่งหลายอย่างปิดไฟเมื่อไม่ต้องการและสิ่งนี้จะเกิดขึ้นโดยอัตโนมัติ Arduino มีวิธีลดการใช้พลังงาน แต่คุณต้องใช้อย่างชัดเจน หากคุณต้องการบางสิ่งบางอย่างที่ใช้พลังงานลดลงเกือบตลอดเวลาlearn.sparkfun.com/tutorials/reducing-arduino-power-consumptionเป็นวิธีที่ดีในการเริ่มต้น โดยเฉพาะอย่างยิ่ง lowpower sleep จะลดการใช้พลังงานประมาณหนึ่งเท่า - ซึ่งต่างจากdelayCPU แน่นอนว่ามันมีค่าใช้จ่ายแน่นอน :)
Luaan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.