如何擦除Arduino Uno的内存?


15

我只是和儿子一起学习Arduino的修补匠,当我将USB线重新插入Arduino时,程序仍在运行,我感到很惊讶,我对自己说:“这是一件好事,我不仅吹了什么东西起来。”

那么,人们每天用这些东西称呼它的正常方式是什么?您通常会加载裸机,什么都不做,还是只是拔掉所有插头?


4
您的意思是“当我将USB线重新插入Arduino时程序仍在运行”,您观察到了什么行为以及期望得到什么行为?Arduino是否连接了任何东西?
jippie 2014年

@jippie是的,我插入了一堆LED,它们都亮了。出于某种原因,我认为方案是加载到内存中,并会在重新启动了,但因为不存在....
彼得·特纳

7
程序被加载到闪存中,而不是RAM中,因此即使在掉电后也可以保留。
里卡多

Answers:


15

启动后,Arduino将运行最后放置在其上的任何程序。解决方案:如果您不希望它运行,请不要打开它。

开箱即用时,Arduino通常运行Blink程序。因此,如果您要“重置”它,则可以加载它并命名为“ day”。

或者使用带有sleep命令的循环程序。

如果您已经通过icsp引脚弄乱了USB引导程序,那还不够,您需要重新安装引导程序。但是,如果您一直是通过USB或直接使用编程器来上传程序,则上传Blink或其他虚拟程序来重置它没有问题。


是否可以在没有任何电压端子插入的情况下运行自毁程序?
彼得·特纳

@PeterTurner什么时候没电了?不可以。但是您可以添加一个程序来滥用这些引脚,并且如果您将其遗留在某些损坏上,可以调用该程序(除非连接了这些引脚,否则不会造成太大的损失)
Manishearth 2014年

9

如果安全是主要考虑因素,那么您应该几乎每天都将stop *草图加载到板上。例如,当您的电路板半永久性地成为大型系统的一部分时,这将是一个好主意。您可以这样做:

  • 上载在中的File-> Examples-> Basic中找到的最小裸露草图
  • 上载延迟较大的草图。
#include <limits.h>

void setup()
{}

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

void loop()
{}

*停止只是象征性的。董事会并没有真正停止运行。


2
您可以通过exit()setup()或内部调用获得类似(且更永久)的效果loop()吗?
彼得·布鲁姆菲尔德

@ PeterR.Bloomfield不敢相信我忘记了!
asheeshr 2014年

为什么要麻烦出口或延迟呢?只需拥有void setup () { } void loop () { }-在任何情况下,处理器内部都在“无用”。
尼克·加蒙

1

可能会出错的主要问题是,如果您将Arduino放在旁边几周,而忘记在其上加载了什么草图(代码),然后又重新开始工作,插入硬件(如开关,LED或电机) ),并使其意外点亮/打开,因为先前的代码处理了它所连接的引脚。


解决方案1.首先加载新代码。

一种简单而安全的技术是插入任何硬件之前加载当前正在使用的新代码。现在您知道该代码的用途,其使用的引脚,然后再插入硬件(最好打开Arduino)请先拔掉电源)。

然后,当您重新连接电源时,它会运行您上传的草图,您的硬件已连接,并且一切都很好。


解决方案2.加载“不执行任何操作”草图。

您可以上传以下简短草图:

int main () { }

它“什么都不做”。所有引脚将保留为输入,因此您可以安全地连接硬件,然后开始对新项目进行编码。


安全第一

一个好的规则是不要在通电的情况下插拔硬件(例如,LED,开关,电动机)。如果您分心并插入错误的板上插座,则可能会立即损坏您所连接的设备或Arduino,或同时损坏两者。

关闭电源,然后您可以进行最后一分钟的检查,以确保一切都已连接到正确的位置,极性是否正确,依此类推。

另外,请确保您身上没有静电,尤其是当您穿着跳线衣或蓬松的衣服或坐在地毯上时。

就个人而言,在接触Arduino之前,我总是伸手触摸附近的一些金属零件以“接地”自己。一个例子是PC,耳机插座之类的金属外壳。

如果在将电源连接到Arduino之后(例如通过USB电缆)您没有立即看到电源LED亮起,请立即断开电源!您可能已经做空了某些事情,为此花费的时间越少越好。


1

发生这种情况时,我最大的担心是,我通常为新项目连接Arduino,并插入USB以下载新草图。我担心,不知道以前的程序要尝试什么,因为它连接到完全不同的硬件上。

到目前为止,还没有发生任何不好的事情,我不认为每次将其中一个Arduino放回垃圾箱时,我都不会采用刻录BLINK的方法。不过,这可能只是时间问题。


0

如果arduino板连接到任何其他设备,则拔下所有插头,然后使用usb电缆将arduino与计算机连接,并尝试上传新草图,希望对您有所帮助。


欢迎使用Arduino SE!有什么理由比其他提供的答案更好?谢谢!
匿名企鹅

0

在Arduino IDE中,转到示例,选择Eeprom,选择eeprom clear,然后上传草图。

当针脚13上的LED亮起时,您就完成了。

注意 这可能需要一些时间,具体取决于Arduino中EEPROM的大小。


那有什么意义呢?运行的东西不会碰到I / O(但每次上电都会清除EEPROM)?
Peter Mortensen

您实际尝试过吗?引脚13似乎未设置为输出(Arduino IDE 1.6.5)
Peter Mortensen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.