ฉันจะลบหน่วยความจำของ Arduino Uno ได้อย่างไร


15

ฉันแค่คนจรจัดกำลังเรียนรู้ Arduino กับลูกชายของฉันและฉันประหลาดใจที่เมื่อฉันเสียบสาย USB กลับเข้าสู่ Arduino โปรแกรมยังคงทำงานอยู่และฉันก็คิดกับตัวเองว่า "มันเป็นสิ่งที่ดีที่ฉันไม่ได้แค่ระเบิดอะไรเลย up."

ดังนั้นวิธีปกติที่ผู้คนเรียกมันว่าวันกับสิ่งเหล่านี้คืออะไร? โดยปกติแล้วคุณจะโหลดกระดูกเปล่าไม่ทำอะไรเลยร่างหรือเพียงถอดปลั๊กทุกอย่าง?


4
คุณหมายถึงอะไร "เมื่อฉันเสียบสาย USB กลับเข้าสู่ Arduino โปรแกรมยังทำงานอยู่" คุณสังเกตพฤติกรรมแบบใดและพฤติกรรมแบบใดที่คุณคาดหวัง มีอะไรเชื่อมโยงกับ Arduino หรือไม่?
jippie

@ jippie ใช่ฉันมีพวงของ LED เสียบและพวกเขาทั้งหมดสว่างขึ้น ด้วยเหตุผลบางอย่างฉันคิดว่าโปรแกรมที่ถูกโหลดลงในหน่วยความจำและจะไปในการรีบูต แต่เนื่องจากที่ไม่มี ....
Peter Turner

7
โปรแกรมถูกโหลดเข้าสู่หน่วยความจำแฟลชไม่ใช่ RAM ดังนั้นจะถูกเก็บไว้แม้หลังจากปิดเครื่อง
Ricardo

คำตอบ:


15

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

เมื่อออกจากกล่อง Arduino มักจะเรียกใช้โปรแกรม Blink ดังนั้นคุณสามารถโหลดและเรียกมันได้วันถ้าคุณต้องการที่จะ "รีเซ็ต" มัน

หรือมีโปรแกรมลูปพร้อมกับคำสั่ง sleep

หากคุณยุ่งกับ USB bootloader ผ่านหมุด icsp นี่ยังไม่เพียงพอคุณจะต้องติดตั้ง bootloader ใหม่ แต่ถ้าคุณอัปโหลดโปรแกรมผ่าน usb หรือใช้โปรแกรมโดยตรงก็ไม่มีปัญหากับการอัปโหลด Blink หรือโปรแกรมจำลองอื่น ๆ เพื่อรีเซ็ต


เป็นไปได้ไหมที่จะใช้โปรแกรมทำลายตนเองโดยไม่ต้องเสียบปลั๊กกับขั้วแรงดันไฟฟ้า?
Peter Turner

@PeterTurner เมื่อไม่มีอำนาจไป? ไม่ แต่คุณสามารถเพิ่มโปรแกรมที่ใช้พินผิดและถ้าคุณทิ้งไว้ในความเสียหายบางอย่างสามารถเรียกได้ (ไม่มากยกเว้นว่ามีการเชื่อมต่อพิน)
Manishearth

9

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

  • อัพโหลดภาพร่างขั้นต่ำ Bare ที่พบในFile-> Examples-> Basicใน
  • อัพโหลดภาพร่างที่มีการหน่วงเวลาเป็นวงใหญ่
#include <limits.h>

void setup()
{}

void loop()
{
  delay(ULONG_MAX);
}
void setup()
{
   exit(0);
}

void loop()
{}

* Stop เป็นเพียงแค่อุปมาอุปไมย บอร์ดไม่หยุดทำงานจริงๆ


2
คุณจะได้รับที่คล้ายกัน (และถาวรมากขึ้น) ผลกระทบโดยการโทรexit()จากภายในsetup()หรือloop()?
Peter Bloomfield

@ PeterR.Bloomfield ไม่อยากจะเชื่อเลยว่าฉันลืมเรื่องนั้นไป!
asheeshr

ทำไมต้องกังวลกับทางออกหรือความล่าช้า เพียงแค่มีvoid setup () { } void loop () { }- ในกรณีใด ๆ ภายในโปรเซสเซอร์เป็นเพียงวนรอบ "ไม่ทำอะไรที่มีประโยชน์"
Nick Gammon

1

สิ่งสำคัญที่สามารถผิดพลาดได้คือถ้าคุณวาง Arduino ไว้สองสามสัปดาห์ลืมว่ามีร่างอะไร (รหัส) โหลดลงไปจากนั้นกลับมาทำงานอีกครั้งเสียบปลั๊กฮาร์ดแวร์ (เช่นสวิตช์ไฟ LED หรือมอเตอร์ ) และให้มันสว่างขึ้น / เปิดโดยไม่คาดคิดเพราะรหัสก่อนหน้าระบุรหัสที่เชื่อมต่อ


โซลูชัน 1. โหลดรหัสใหม่ก่อน

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

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


โซลูชันที่ 2 โหลดแบบร่าง "ไม่ทำอะไรเลย"

คุณสามารถอัพโหลดภาพร่างสั้น ๆ นี้:

int main () { }

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


ปลอดภัยไว้ก่อน

กฎที่ดีคือไม่เสียบหรือถอดปลั๊กฮาร์ดแวร์ (เช่นหลอดไฟ LED, สวิทช์, มอเตอร์) โดยใช้พลังงาน หากคุณฟุ้งซ่านและเสียบกับซ็อกเก็ตผิดบนบอร์ดคุณอาจเกิดความเสียหายทันทีกับสิ่งที่คุณเชื่อมต่อหรือ Arduino หรือทั้งสองอย่าง

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

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

โดยส่วนตัวแล้วฉันมักจะเข้าถึงและสัมผัสชิ้นส่วนโลหะที่อยู่ใกล้เคียงเพื่อ "กราวด์" ด้วยตัวเองก่อนถึง Arduino ตัวอย่างคือเคสโลหะของพีซีช่องเสียบหูฟังหรืออะไรทำนองนั้น

หากหลังจากเชื่อมต่อพลังงานกับ Arduino (เช่นด้วยสาย USB) คุณจะไม่เห็นไฟ LED เปิดขึ้นมาทันทีให้ปลดการเชื่อมต่อพลังงานทันที! คุณอาจจะทำให้บางสิ่งบางอย่างสั้นลงและเวลาที่คุณทำน้อยลงจะยิ่งดีขึ้น


1

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

จนถึงตอนนี้ก็ไม่มีอะไรเลวร้ายเกิดขึ้นและฉันไม่คิดว่าฉันจะใช้การเผาไหม้ BLINK ทุกครั้งที่ฉันนำ Arduinos ของฉันกลับมาที่ถังขยะ มันอาจเป็นเพียงเรื่องของเวลา


0

หากบอร์ด Arduino เชื่อมต่อกับอุปกรณ์อื่นแล้วถอดปลั๊กทุกอย่างและเชื่อมต่อ Arduino กับคอมพิวเตอร์โดยใช้สาย USB และลองอัปโหลดร่างใหม่ฉันหวังว่ามันจะช่วยได้


ยินดีต้อนรับสู่ Arduino SE! มีเหตุผลใดที่คำตอบนี้ดีกว่าคำตอบอื่น ๆ ขอบคุณ!
เพนกวินไม่ระบุชื่อ

0

ใน Arduino IDE ให้ไปที่ตัวอย่างเลือก Eeprom เลือก eeprom clear แล้วอัปโหลดแบบร่าง

เมื่อมันเป็น LED ที่ pin 13 จะเปิดขึ้นคุณก็ทำเสร็จแล้ว

NB อาจใช้เวลาสักครู่ขึ้นอยู่กับขนาดของ EEPROM ใน Arduino


ดังนั้นประเด็นคืออะไร? กำลังรันบางสิ่งที่ไม่ได้สัมผัส I / O (แต่จะล้าง EEPROM ทุกครั้งที่เปิดเครื่อง)?
Peter Mortensen

คุณเคยลองสิ่งนี้จริงหรือ ดูเหมือนว่า Pin 13 จะไม่ได้รับการตั้งค่าเป็นเอาท์พุท (Arduino IDE 1.6.5)
Peter Mortensen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.