我有一个带有Arduino Uno的项目,我需要存储一个对于EPROM来说太大的char **。
我目前正在尝试使用serial,但如果需要,我也可以使用AVRISP程序员(不可取)
到目前为止,我已经研究了avr / boot.h API,但我不确定如何正确使用它,或者它是否是正确的方法。
答案 0 :(得分:1)
从ATmega328P数据表,“引导加载程序支持”部分,“应用程序和引导加载程序Flash部分”小节,“应用程序部分”子部分:
...从应用程序部分执行时,SPM指令被禁用。
因此无法从正在运行的程序写入闪存。如果您需要存储的数据多于板载数据,请使用外部存储设备。
答案 1 :(得分:1)
arduino(特别是atmel 328版本)只允许您在引导加载程序允许的情况下写入闪存。
标准引导加载程序允许您在安装新程序时写入闪存,但不允许运行时程序写入闪存。
解决方案:安装一个引导加载程序,它允许您运行使您能够写入闪存的功能。
这是一个arduino的引导加载程序(在hackaday上有特色),允许你在运行时写入闪存http://majek.mamy.to/en/writing-to-internal-flash-on-arduino/
这是关于这个主题的hackaday帖子 https://hackaday.com/2015/07/03/arduinos-and-other-avrs-write-to-own-flash/
答案 2 :(得分:0)
我不相信这是对的。 328p确实能够控制关于允许访问的位置的一些指令。我没有在任何地方看到这是不可能的,在某些配置中它(328p)可以在它自己的控制下写下flash。
我在数据表中搜索了SPM指令被禁用'并且仅在ATmega 48a / 48pa上击中。在阅读有关错误控制器的数据表时,我多次迷惑自己。这并没有响铃。
直接从数据表中复制(660页):
" ATmega 48A / 48PA没有单独的Boot Loader部分,如果编程了SELFPRGEN熔丝(“0”),则整个Flash都会启用SPM指令。否则,SPM指令被禁用。"
328p具有锁定位字节'一般而言,设置所有这些控件。 这些也控制着他们拥有的访问权限。
我认为你想把它放到eeprom(这是不同的)......
杰克