OpenEdv-开源电子网

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

IAP怎么修改才能使下载进去的代码大于41K也能运行呢

[复制链接]

30

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2015-8-29
在线时间
17 小时
发表于 2016-2-23 21:39:38 | 显示全部楼层 |阅读模式
1金钱
刚开始,用原子的原程序,只要一下载大于41K的程序,就不行。现在大概知道原因了,是USART一次只能接受41K的字节。
所以我想把bin文件,拆成两个bin文件发,
        if(key==WKUP_PRES)                        //WK_UP按键按下
                                                {
                                                if(dss==0 )        / /加了这句
                                                                {
                                                                        if(applenth)
                                                                                {
                                                                                        printf("开始更新固件...\r\n");       
                                                                                        LCD_ShowString(60,210,200,16,16,"Copying APP2FLASH...");
                                                                                        if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
                                                                                        {         
                                                                                        iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新FLASH代码   
                                                                                        LCD_ShowString(60,210,200,16,16,"Copy APP Successed!!");
                                                                                        printf("固件更新完成!\r\n");       
                                                                                        }
                                                                                        else
                                                                                       {
                                                                                                LCD_ShowString(60,210,200,16,16,"Illegal FLASH APP! 12  ");          
                                                                                                printf("非FLASH应用程序!\r\n");
                                                                                        }
                                                                                }
                                                                                        else
                                                                                {
                                                                                        printf("没有可以更新的固件!\r\n");
                                                                                        LCD_ShowString(60,210,200,16,16,"No APP!");
                                                                                }               
                                                                                        Len=applenth;                //加了这句
                                                                                dss=1;                                //加了这句                                                                                               
                                                                                }
                                                                                else if(dss==1)                    //加了后面这几句
                                                                                {
                                                                                printf("开始更新固件...\r\n");       
                                                                                iap_write_appbin(FLASH_APP1_ADDR+(u32)Len,USART_RX_BUF,applenth);//更新FLASH代码   
                                                                                LCD_ShowString(60,210,200,16,16,"Copy APP Successed!!dss");
                                                                                printf("固件更新完成!dss\r\n");               
                                                                                dss=0;                                                                                                       
                                                                                }
                                                                                       
                                                                                clearflag=7;//标志更新了显示,并且设置7*300ms后清除显示                                                                         
                                                                        }


我把写入程序改成这样,原本小于41K的程序可以下进去,拆成2个.bin也可以下进去,但是原来大于41k的程序可以下进去,但是不可以运行。
求解释,这种方法行吗,有其他办法吗

最佳答案

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

你是要在ram运行,还是在flash?前者不行.(除非换大ram的型号),后者可以,通过modbus协议,来一段段传输就可以了.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-2-23 21:39:39 | 显示全部楼层
你是要在ram运行,还是在flash?前者不行.(除非换大ram的型号),后者可以,通过modbus协议,来一段段传输就可以了.
回复

使用道具 举报

30

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2015-8-29
在线时间
17 小时
 楼主| 发表于 2016-2-24 09:28:06 | 显示全部楼层
yklstudent 发表于 2016-2-23 22:36
楼主不会一次全下载到RAM后,才开始烧录吧?

不是,传一次,就下一次
回复

使用道具 举报

30

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2015-8-29
在线时间
17 小时
 楼主| 发表于 2016-2-24 09:32:40 | 显示全部楼层
正点原子 发表于 2016-2-23 21:39
你是要在ram运行,还是在flash?前者不行.(除非换大ram的型号),后者可以,通过modbus协议,来一段段传输就可以 ...

我是在FLASH里运行的,把50K的程序分成两个20K的程序下进去,可还是不行
回复

使用道具 举报

30

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2015-8-29
在线时间
17 小时
 楼主| 发表于 2016-2-24 10:24:04 | 显示全部楼层
yklstudent 发表于 2016-2-24 09:36
50k分成2个20K?
楼主的描述问题能力值得提高

20几k
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2016-2-22
在线时间
10 小时
发表于 2016-2-24 13:13:20 来自手机 | 显示全部楼层
应该是用Ymodem协议1k每次传啊,一次传太多也容易出错
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-11-10
在线时间
19 小时
发表于 2016-3-17 14:40:18 | 显示全部楼层
这个问题是如何解决的?
回复

使用道具 举报

30

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2015-8-29
在线时间
17 小时
 楼主| 发表于 2016-3-17 22:44:24 | 显示全部楼层
雨后天 发表于 2016-3-17 14:40
这个问题是如何解决的?

没解决
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-11-10
在线时间
19 小时
发表于 2016-3-18 09:17:27 | 显示全部楼层
用其他方式的通讯方式,如can-IAP,也同样需要解决这个问题吗?可以试一试
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 22:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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