硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1625|回复: 12
收起左侧

[技术讨论] 单片机IAP升级时定义数组太大怎么解决?

[复制链接]

2

主题

18

回帖

24

积分

新手上路

积分
24
发表于 2024-10-17 15:06:47 | 显示全部楼层 |阅读模式
请问硬汉老师和各位嵌入式大佬。我现在用GD32E230F8P6单片机做bootloder,我写完APP程序,APP程序有将近13K大小,我在boot程序定义一个uint8_t arr[15*1024]大小的数组,编译显示内存不够,APP程序我已经优化过了。请教各位有没有什么好的办法。还有就是我现在有个思路,就使用环形数组来代替这个大数组,但是遇到了一些问题,现在陷入了窘境,求各位大佬指教。
回复

使用道具 举报

43

主题

1053

回帖

1187

积分

至尊会员

积分
1187
发表于 2024-10-17 15:29:25 | 显示全部楼层
为什么定义这么大的数组?不用一次性接收完成整个APP。我都是把APP拆分成1K大小的帧,每次接收一帧写入一帧。
回复

使用道具 举报

2

主题

18

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2024-10-17 15:46:42 | 显示全部楼层
ghslfgkkl88 发表于 2024-10-17 15:29
为什么定义这么大的数组?不用一次性接收完成整个APP。我都是把APP拆分成1K大小的帧,每次接收一帧写入一帧 ...

老哥说细点,怎么拆分的,拆分之后写flash的地址又是怎么增加的,写完之后,你是自动跳转到app还是发送指令跳转到app。我使用的SSCOM串口软件,比如说我的app是10k,我的做法就是直接发送bin文件,一次性发送完成,然后再写到flash,写完之后做校验,正确就自动跳转到app。
回复

使用道具 举报

49

主题

385

回帖

532

积分

金牌会员

积分
532
发表于 2024-10-17 16:16:17 | 显示全部楼层
永远是小学生 发表于 2024-10-17 15:46
老哥说细点,怎么拆分的,拆分之后写flash的地址又是怎么增加的,写完之后,你是自动跳转到app还是发送指 ...

你的方案RAM大部分情况下是不够用的,可以对bin文件进行切包,按地址+数据长度+数据的格式发给IAP,IAP把这个数据接收到并写入对应的Flash,全部搬运完再对Flash数据进行校验,通过升级成功
回复

使用道具 举报

43

主题

1053

回帖

1187

积分

至尊会员

积分
1187
发表于 2024-10-17 17:22:14 | 显示全部楼层
永远是小学生 发表于 2024-10-17 15:46
老哥说细点,怎么拆分的,拆分之后写flash的地址又是怎么增加的,写完之后,你是自动跳转到app还是发送指 ...

这不是简单的数学题么?比如你的APP是10K(这里的1K是1024),要把APP写到0x80010000处,那将10K拆分成10个1K。发送第一个1K,将第一个1K写到0x80010000;发送第2个1K,将第二个1K写入到0x80010400。以此类推不就行了?
回复

使用道具 举报

0

主题

87

回帖

87

积分

初级会员

积分
87
发表于 2024-10-17 20:50:56 | 显示全部楼层
E230我记得才8K的RAM,你定义定义15K的数据,空间肯定不够啦
FLASH是1K大小,你可以拆分成1K/包,由1K写1K
回复

使用道具 举报

2

主题

18

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2024-10-18 09:02:43 | 显示全部楼层
ghslfgkkl88 发表于 2024-10-17 17:22
这不是简单的数学题么?比如你的APP是10K(这里的1K是1024),要把APP写到0x80010000处,那将10K拆分成10个 ...

好的,感谢老哥,我去试试
回复

使用道具 举报

10

主题

56

回帖

86

积分

初级会员

积分
86
发表于 2024-10-18 10:16:32 | 显示全部楼层
这样发送就不能用一次性发送完的上位机了,需要自动把bin文件分开发送。
回复

使用道具 举报

2

主题

18

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2024-10-18 11:31:55 | 显示全部楼层
quanshimutou 发表于 2024-10-18 10:16
这样发送就不能用一次性发送完的上位机了,需要自动把bin文件分开发送。

我就是想一次性把bin文件发送完。但是现实打脸,单片机的RAM小了。不过也算一种历练了
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-10-18 12:19:41 来自手机 | 显示全部楼层
分散文件和这个有没有关系?
回复

使用道具 举报

2

主题

18

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2024-10-25 10:09:43 | 显示全部楼层
wanglehui_12 发表于 2024-10-17 16:16
你的方案RAM大部分情况下是不够用的,可以对bin文件进行切包,按地址+数据长度+数据的格式发给IAP,IAP把 ...

老哥多问一句,如何对flash的数据进行校验,求指教
回复

使用道具 举报

102

主题

573

回帖

894

积分

金牌会员

积分
894
QQ
发表于 2024-10-25 10:56:34 | 显示全部楼层
需要你自己实现一个上位机。如果不会写上位机,就找一个通用的协议,比如Ymodem协议。

你可以参考硬汉哥的视频教程,自己研究一下。

BSP视频教程第22期:基于串口的XYZmodem文件传输协议实现,含上位机和下位机全开源,制作了一个Ymodem方式固件更新(2022-08-08)
https://forum.anfulai.cn/forum.p ... 5&fromuid=32469
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2024-10-26 16:26:28 | 显示全部楼层
如楼上所说,传输时必须分包传输,网络IAP建议移植TFTP客户端,串口IAP更新建议移植ymodem,不必要自己去琢磨传输协议。传输完一包数据就写flash,若最后一包不满1k说明升级完成。当然,实际能用的IAP至少需要考虑固件完整性(若因为丢包收到错误固件后,不校验就更新,设备马上变砖)。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 06:31 , Processed in 0.058585 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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