OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3503|回复: 9

stm32f103c6t6 iap升级ZI-DATA太大

[复制链接]

6

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-3-21
在线时间
16 小时
发表于 2018-11-4 10:26:10 | 显示全部楼层 |阅读模式
2金钱
使用的芯片是STM32F103C6T6,10K的RAM。使用的是原子哥的IAPmini板子的历程进行的修改,#define USART_REC_LEN          18*1024 ,编译的时候依旧报错说RAM不足。..\OBJ\STMFLASH.axf: Error: L6220E: Execution region RW_IRAM1 size (24576 bytes) exceeds limit (10240 bytes). Region contains 360 bytes of padding and 0 bytes of veneers (total 360 bytes of linker generated content).
现在的RI-data即使是C8T6也会报错,想请问下原子哥IAP里面是开个什么数组以致于有这么大的ZI-data,有什么办法优化,不胜感激






最佳答案

查看完整内容[请看2#楼]

收到1K数据先写1Kflash,然后再收1K写1Kflash,一直做下去,直到APP数据全部写入flash,这样子你的数组只需要定义1K大小即可
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-11-4 10:26:11 | 显示全部楼层
收到1K数据先写1Kflash,然后再收1K写1Kflash,一直做下去,直到APP数据全部写入flash,这样子你的数组只需要定义1K大小即可
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-11-4 10:33:18 | 显示全部楼层
你定义这么大的数组干嘛
一分耕耘一分收获。
回复

使用道具 举报

6

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-3-21
在线时间
16 小时
 楼主| 发表于 2018-11-4 10:38:49 | 显示全部楼层
yklstudent 发表于 2018-11-4 10:33
你定义这么大的数组干嘛

可能是我没理解对,我觉得这个数组不是用来接收上位机给单片机发送的升级Bin文件吗?我的程序大约在15K左右,需要的数据就要这么大了
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-11-4 15:43:50 | 显示全部楼层
510083812 发表于 2018-11-4 10:38
可能是我没理解对,我觉得这个数组不是用来接收上位机给单片机发送的升级Bin文件吗?我的程序大约在15K左 ...

那你要升级的BIN文件大小有100K,你也要定义这么大的数组吗?
一分耕耘一分收获。
回复

使用道具 举报

6

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-3-21
在线时间
16 小时
 楼主| 发表于 2018-11-4 17:34:50 | 显示全部楼层
szczyb1314 发表于 2018-11-4 17:14
收到1K数据先写1Kflash,然后再收1K写1Kflash,一直做下去,直到APP数据全部写入flash,这样子你的数组只需 ...

恩恩,您说的这个方法很对,不过原子哥的XCOM那个软件好像不能1K这样发送,是需要专门写一个上位机实现1K方式的传送吗?
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2018-11-4 18:18:13 | 显示全部楼层
510083812 发表于 2018-11-4 17:34
恩恩,您说的这个方法很对,不过原子哥的XCOM那个软件好像不能1K这样发送,是需要专门写一个上位机实现1K ...

一般做软件升级的,不可能一次性发完,都是分包发送的
学无止境
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-11-5 08:49:55 | 显示全部楼层
510083812 发表于 2018-11-4 17:34
恩恩,您说的这个方法很对,不过原子哥的XCOM那个软件好像不能1K这样发送,是需要专门写一个上位机实现1K ...

需要自己做个上位机实现分包发送的,
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

6

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-3-21
在线时间
16 小时
 楼主| 发表于 2018-11-6 14:06:28 | 显示全部楼层
本帖最后由 510083812 于 2018-11-6 14:08 编辑

上位机我已经写成按照1K发送了,更新固件程序我改成如下iap_write_appbin(FLASH_APP1_ADDR+count*1024,USART_RX_BUF,applenth);
count++;
iap里面我改成如下
u16 iapbuf[512];   
//appxaddr:ó|óÃ3ìDòμÄÆeê¼μØÖ·
//appbuf:ó|óÃ3ìDòCODE.
//appsize:ó|óÃ3ìDò′óD¡(×Ö½ú).
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
        u16 t;
        u16 i=0;
        u16 temp;
        u32 fwaddr=appxaddr;//μ±Ç°D′èëμÄμØÖ·
        u8 *dfu=appbuf;
        for(t=0;t<appsize;t+=2)
        {                                                    
                temp=(u16)dfu[1]<<8;
                temp+=(u16)dfu[0];          
                dfu+=2;//&#198;&#171;ò&#198;2&#184;&#246;×&#214;&#189;ú
                iapbuf[i++]=temp;            
                if(i==512)
                {
                        i=0;
                        STMFLASH_Write(fwaddr,iapbuf,512);       
//                        fwaddr+=2048;//&#198;&#171;ò&#198;2048  16=2*8.&#203;ùò&#212;òa3&#203;ò&#212;2.
                }
        }
        if(i)STMFLASH_Write(fwaddr,iapbuf,i);//&#189;&#171;×&#238;oóμ&#196;ò&#187;D&#169;&#196;úèY×&#214;&#189;úD′&#189;&#248;è¥.  
}



现在的情况之后APP无法正常工作(APP程序本身单独运行是可以的),发送的二进制文件我看了下没错误的,是不是我烧写flash的位置错误了。
回复

使用道具 举报

6

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-3-21
在线时间
16 小时
 楼主| 发表于 2018-11-6 14:10:50 | 显示全部楼层
szczyb1314 发表于 2018-11-5 08:49
需要自己做个上位机实现分包发送的,

我现在写成1K接收后更新FLASH这样的了,但是好像无法进入APP,iap_load_app(FLASH_APP1_ADDR);函数是进去的,
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 13:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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