8088|11

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于LPC1788在线升级程序无法从IAP跳到APP [复制链接]

10芯积分
我在做LPC1788在线上升级系统,我的方案是:自己开发一个上位机将keil编译好的APP的.hex文件读出来,并通过usb转CAN发到LPC1788的CAN上,然后调用芯片自带的IAP将数据写到Flash上,可是无法从IAP跳到APP,我的跳转方法是1、SCB->VTOR = APP_START_ADDR & 0x1FFFFF80;        2、 (*app)();      可是没有跳过去成功执行APP(APP里面在让调试灯闪烁),谁来帮我解决这问题,赏金给谁了,我的qq:1223237156 邮箱:1223237156@qq.com 万分感谢

此帖出自NXP MCU论坛

最新回复

跳转后到复位,并不一定是因为跳转后复位,有可能是跳转后,执行某些代码导致复位,所以最好仿真看看,是那些代码导致复位的  详情 回复 发表于 2015-11-23 15:05
点赞 关注
 

回复
举报

14

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
我看大家都是都是用bin文件,难道不能用hex文件吗
此帖出自NXP MCU论坛

点评

可以用hex文件,hex文件按照hex文件的协议将数据读出来,这些数据就是bin文件的数据,也就是说hex文件有数据的地址信息、该行数据长度信息、数据类型信息、数据偏移地址信息、校检信息、以及用ascll表示的数据(bin  详情 回复 发表于 2015-11-24 09:35
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
为啥没人来,是不是赏金不够?可是最大值也就是10呀
此帖出自NXP MCU论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

4
 
顶一个
此帖出自NXP MCU论坛
 
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

5
 
先仿真看看,是没有跳转,还是跳转后没有执行。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

6
 
zhaojun_xf 发表于 2015-11-23 10:14
先仿真看看,是没有跳转,还是跳转后没有执行。

没有仿真器,我整个IAP程序基本都是和你一样的,只是我用can来获取这个要升级程序
此帖出自NXP MCU论坛

点评

最好仿真一下,确定问题所在,你现在并不能说明是没有跳转,有可能是跳转了没有运行,也可能是中断向量映射有问题。  详情 回复 发表于 2015-11-23 10:51
 
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

7
 
Heguoyao 发表于 2015-11-23 10:23
没有仿真器,我整个IAP程序基本都是和你一样的,只是我用can来获取这个要升级程序

最好仿真一下,确定问题所在,你现在并不能说明是没有跳转,有可能是跳转了没有运行,也可能是中断向量映射有问题。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

8
 
zhaojun_xf 发表于 2015-11-23 10:14
先仿真看看,是没有跳转,还是跳转后没有执行。

执行跳转,可是程序跑去复位了
此帖出自NXP MCU论坛

点评

跳转后到复位,并不一定是因为跳转后复位,有可能是跳转后,执行某些代码导致复位,所以最好仿真看看,是那些代码导致复位的  详情 回复 发表于 2015-11-23 15:05
 
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

9
 
Heguoyao 发表于 2015-11-23 14:18
执行跳转,可是程序跑去复位了

跳转后到复位,并不一定是因为跳转后复位,有可能是跳转后,执行某些代码导致复位,所以最好仿真看看,是那些代码导致复位的
此帖出自NXP MCU论坛

点评

谢谢版主,已经找到问题了,就是app编译前工程入口地址设置为零,结果程序跳过去后执行启动代码,而启动代码里面装着的复位中断函数入口地址刚好就是IAP的复位中断函数地址(是由入口地址设置为零造成的,如果设为AP  详情 回复 发表于 2015-11-24 13:58
 
个人签名我的博客
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

10
 
已经成功解决问题了,原因就是我的APP编译前没有在keil编译器设置工程的入口地址为APP的地址,由于工程里面所有的函数的在flash真实入口地址、以及所有的变量在flash真实地址都是其相对工程入口地址的偏移量加上工程入口地址,这一点可以在keil设置工程两个入口地址,然后编译,在比较两个编译后的hex文件的数据,你就发现,代表地址的数据是不一样
此帖出自NXP MCU论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

11
 
Heguoyao 发表于 2015-11-23 09:59
我看大家都是都是用bin文件,难道不能用hex文件吗

可以用hex文件,hex文件按照hex文件的协议将数据读出来,这些数据就是bin文件的数据,也就是说hex文件有数据的地址信息、该行数据长度信息、数据类型信息、数据偏移地址信息、校检信息、以及用ascll表示的数据(bin中是用2进制表示),把hex文件的用ascll表示的数据转化为二进制,就是bin文件
此帖出自NXP MCU论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

12
 
zhaojun_xf 发表于 2015-11-23 15:05
跳转后到复位,并不一定是因为跳转后复位,有可能是跳转后,执行某些代码导致复位,所以最好仿真看看,是 ...

谢谢版主,已经找到问题了,就是app编译前工程入口地址设置为零,结果程序跳过去后执行启动代码,而启动代码里面装着的复位中断函数入口地址刚好就是IAP的复位中断函数地址(是由入口地址设置为零造成的,如果设为APP的地址,那么这里装着的地址就是APP启动代码中正确的复位中断函数),如果不去认真剖析启动代码,就无法理解整个工程编译完后第一个数据(4byte)是栈的入口地址,第二个数据是复位中断入口地址,后面的是其他中断入口地址,程序都首先去执行复位中断入口地址,这个复位中断会执行一些系统性的函数(SystemInit),然后执行编译器自带的_main函数,_main函数会自动引导到我们写main()函数,这几天被这个跳转问题折腾的要命,但也令我学到了很多东西
此帖出自NXP MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表