stm32f103c6t6 iap升级ZI-DATA太大

2019-07-21 08:16发布

使用的芯片是STM32F103C6T6,10K的RAM。使用的是原子哥的IAPmini板子的历程进行的修改,#define USART_REC_LEN          18*1024 ,编译的时候依旧报错说RAM不足。..OBJSTMFLASH.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,有什么办法优化,不胜感激






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
szczyb1314
1楼-- · 2019-07-21 18:53
510083812 发表于 2018-11-4 17:34
恩恩,您说的这个方法很对,不过原子哥的XCOM那个软件好像不能1K这样发送,是需要专门写一个上位机实现1K ...

需要自己做个上位机实现分包发送的,
510083812
2楼-- · 2019-07-21 21:17
本帖最后由 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的位置错误了。
510083812
3楼-- · 2019-07-21 22:22
 精彩回答 2  元偷偷看……

一周热门 更多>