STM32的IAP功能,程序大小问题

2019-07-21 00:12发布

本帖最后由 shenqihao 于 2019-6-5 14:54 编辑

最近在学习IAP功能,使用f103rc这颗。
学习原子哥pdf教程,有2个疑问。
这颗芯片SRAM为48K,FLASH为256K。
只是用FLASH APP功能
1、升级的程序最大能多大?
Bootloader里面有个数组,USART_RX_BUF,大小为41K,USART_REC_LEN                          41*1024
SRAM限制了这个数组大小吗,数组极限就是48K?
那烧写进去的程序最大为48K,那这个FLASH岂不是浪费不少。
2、如果需要升级大程序,比如200k,有什么办法吗?
串口边读数据边写进入FLASH?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
shenqihao
1楼-- · 2019-07-21 06:03
 精彩回答 2  元偷偷看……
南征北战
2楼-- · 2019-07-21 09:44
一般都有定制的上位机,原子哥的那个只是演示BootLoader。实际项目不能那样用。你在内存中开一个数组,比如512或1024byte之类的缓存,每次收到上位机数据以后解析通过就写入flash。你升级500G或1TB也没问题,不受RAM影响。
peng1554
3楼-- · 2019-07-21 15:04
1.主芯片自带48K字节RAM,限制了数组的大小,也限制了一次可接收的数据大小,你可以将程序分成2个 ,并写接收程序支持
2.200K的固件(FLASH APP)分成多个小于40K字节的固件,写程序支持每接收一个固件,就copy固件到FLASH中运行,FLASH足够存储200K了
shenqihao
4楼-- · 2019-07-21 15:59
 精彩回答 2  元偷偷看……
shenqihao
5楼-- · 2019-07-21 17:54
本帖最后由 shenqihao 于 2019-6-5 09:55 编辑
南征北战 发表于 2019-6-5 08:22
一般都有定制的上位机,原子哥的那个只是演示BootLoader。实际项目不能那样用。你在内存中开一个数组,比如 ...

谢谢。
按你的方法,选择全擦除后,第一次可以,再次下载APP就不行了,不知道为什么。每下一次引导程序,可以成功下载一次APP,第二次就不行。用了2个数组
#define USART_REC_LEN                          (20*1024) //定义最大接收字节数 20K
#define EN_USART4_RX                         1                //使能(1)/禁止(0)串口4接收
         
extern u8  USART_RX_BUF1[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符
extern u8  USART_RX_BUF2[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.末字节为换行符
u8 USART_RX_BUF1[USART_REC_LEN] __attribute__ ((at(0X20001000)));//接收缓冲,最大USART_REC_LEN个字节,起始地址为0X20001000.   
u8 USART_RX_BUF2[USART_REC_LEN] __attribute__ ((at(0X20006000)));//接收缓冲,最大USART_REC_LEN个字节,起始地址为0X20006000.
APP程序30多K

南征北战
6楼-- · 2019-07-21 19:26
 精彩回答 2  元偷偷看……

一周热门 更多>