数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2118|回复: 10

[Arduino] 在Arduino UNO的程序里面加入备份功能

[复制链接]
发表于 2024-5-18 01:35:33 | 显示全部楼层 |阅读模式
有的时候,可能需要从Arduino开发板上面把二进制程序备份出来,使用编程器可以做到,但是比较麻烦。在编程的时候加入这些代码,就可以在启动的时候自动把里面的程序输出到串口,方便以后备份程序(不是用来读取以前的程序内容的,如果之前下载的程序里面没有这个,那么仍然要用编程器读取):

  1. #include <avr/pgmspace.h>
  2. void setup() {
  3.   Serial.begin(115200);
  4.   for(unsigned int i=0;i<32768;i++){
  5.     Serial.write(pgm_read_byte(i));
  6.   }
  7. }

  8. void loop() {

  9. }
复制代码
这是一个简单的备份程序,没有其他内容,使用pgmspace.h里面的pgm_read_byte()把程序区的内容读取出来,Arduino UNO使用ATmega328P,程序区是32768字节。需要备份里面程序的时候,只需要打开串口助手,把串口接收的数据保存到文件。
备份内容和编译出来的bin文件比较(这里开始有不一样的内容,前面都是一样的):

备份出来内容:


编译出来的bin文件:


Arduino IDE显示编译后大小是1462字节,转换成十六进制是5B6,编译出的bin文件从偏移量5B6以后都是FF(空白的),而备份出的内容在5B6以后还有其他内容,应该是以前的程序内容,没有被覆盖掉。


目前还没测试,将备份出来的二进制文件重新下载到单片机,是否能正常工作
如果不想每次启动都往串口输出程序内容,也可以把这个代码放到其他位置运行,比如按一个按钮后开始备份

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 3家元 +140 收起 理由
vip2128 + 20 以資鼓勵
家睦 + 90
不长叶子的树 + 30

查看全部打赏

发表于 2024-5-18 08:54:16 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-18 10:15:47 | 显示全部楼层
游客请登录后查看回复内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2024-5-18 13:12:43 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-5-18 20:18:43 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-5-18 22:09:36 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-5-19 08:14:11 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-5-21 11:12:32 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-5-21 22:42:18 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-5-24 22:59:18 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-5-24 23:47:55 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-5-25 06:47:10 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-4-1 15:44 , Processed in 0.265200 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

快速回复 返回顶部 返回列表