OpenEdv-开源电子网

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

怎么使APP程序你跳回 IAP里。main函数该怎么写,求教大神

[复制链接]

3

主题

6

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-5-23
在线时间
3 小时
发表于 2018-6-8 15:13:10 | 显示全部楼层 |阅读模式
1金钱
IAP.C的程序


iapfun jump2app;
u16 iapbuf[1024];   
//appxaddr
//appbuf
//appsize
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
        u16 t;
        u16 i=0;
        u16 temp;
        u32 fwaddr=appxaddr;  //当前写入的地址
        u8 *dfu=appbuf;
        for(t=0;t<appsize;t+=2)
        {                                                   
                temp=(u16)dfu[1]<<8;
                temp+=(u16)dfu[0];         
                dfu+=2;  // 偏移2个字节
                iapbuf[i++]=temp;            
                if(i==1024)
                {
                        i=0;
                        STMFLASH_Write(fwaddr,iapbuf,1024);        
                        fwaddr+=2048; //偏移2048   16=2*8乘以2
                }
        }
        if(i)
                STMFLASH_Write(fwaddr,iapbuf,i);  //将最后的一些内容字节写进去
}


//appxaddr.
void iap_load_app(u32 appxaddr)
{
        if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)//检查栈顶地址是否合法
        {
                jump2app=(iapfun)*(vu32*)(appxaddr+4);        //用户代码第二个字为程序开始地址(复位地址)        
                MSR_MSP(*(vu32*)appxaddr);                        //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)               
                jump2app();                                                //跳转到APP                        
        }
}                 


IAP.H的程序

typedef  void (*iapfun)(void);                                //定义函数类型

#define FLASH_APP1_ADDR                0x08010000  //第一个应用程序起始地址(存放在FLASH)        
                                                                                       

void iap_load_app(u32 appxaddr);                //执行flash里的app程序        
               
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 applen);//指定地址开始写bin        
#endif

最佳答案

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

参考我们例程啊,做一个假函数,跳转过去即可。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-6-8 15:13:11 | 显示全部楼层
参考我们例程啊,做一个假函数,跳转过去即可。
回复

使用道具 举报

6

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
885
金钱
885
注册时间
2016-6-15
在线时间
362 小时
发表于 2018-6-8 16:03:33 | 显示全部楼层
设个标志位后软复位
回复

使用道具 举报

9

主题

141

帖子

1

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2017-1-3
在线时间
65 小时
发表于 2018-6-8 16:20:14 | 显示全部楼层
直接软复位就行了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 06:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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