Heguoyao

    1. zhaojun_xf 发表于 2015-11-23 15:05 跳转后到复位,并不一定是因为跳转后复位,有可能是跳转后,执行某些代码导致复位,所以最好仿真看看,是 ...
      谢谢版主,已经找到问题了,就是app编译前工程入口地址设置为零,结果程序跳过去后执行启动代码,而启动代码里面装着的复位中断函数入口地址刚好就是IAP的复位中断函数地址(是由入口地址设置为零造成的,如果设为APP的地址,那么这里装着的地址就是APP启动代码中正确的复位中断函数),如果不去认真剖析启动代码,就无法理解整个工程编译完后第一个数据(4byte)是栈的入口地址,第二个数据是复位中断入口地址,后面的是其他中断入口地址,程序都首先去执行复位中断入口地址,这个复位中断会执行一些系统性的函数(SystemInit),然后执行编译器自带的_main函数,_main函数会自动引导到我们写main()函数,这几天被这个跳转问题折腾的要命,但也令我学到了很多东西
    2. Heguoyao 发表于 2015-11-23 09:59 我看大家都是都是用bin文件,难道不能用hex文件吗
      可以用hex文件,hex文件按照hex文件的协议将数据读出来,这些数据就是bin文件的数据,也就是说hex文件有数据的地址信息、该行数据长度信息、数据类型信息、数据偏移地址信息、校检信息、以及用ascll表示的数据(bin中是用2进制表示),把hex文件的用ascll表示的数据转化为二进制,就是bin文件
    3. 已经成功解决问题了,原因就是我的APP编译前没有在keil编译器设置工程的入口地址为APP的地址,由于工程里面所有的函数的在flash真实入口地址、以及所有的变量在flash真实地址都是其相对工程入口地址的偏移量加上工程入口地址,这一点可以在keil设置工程两个入口地址,然后编译,在比较两个编译后的hex文件的数据,你就发现,代表地址的数据是不一样
    4. zhaojun_xf 发表于 2015-11-23 10:14 先仿真看看,是没有跳转,还是跳转后没有执行。
      执行跳转,可是程序跑去复位了
    5. zhaojun_xf 发表于 2015-11-23 10:14 先仿真看看,是没有跳转,还是跳转后没有执行。
      没有仿真器,我整个IAP程序基本都是和你一样的,只是我用can来获取这个要升级程序
    6. 顶一个:handshake
    7. 为啥没人来,是不是赏金不够?可是最大值也就是10呀:Cry:
    8. 我看大家都是都是用bin文件,难道不能用hex文件吗
    9. LPC1100处理器通过SD卡实现IAP功能 36/16490 NXP MCU 2015-11-23
      liuzhemin12 发表于 2015-8-14 09:39 感谢楼主
      你弄好了吗
    10. NXP ARM Cortex M0/M3 IAP应用 41/27815 NXP MCU 2015-11-21
      大哥,能不能交流下
    11. NXP ARM Cortex M0/M3 IAP应用 41/27815 NXP MCU 2015-11-21
      阳光守望者 发表于 2014-12-26 21:33 哈哈,搞定了
      为什么我的不行
    12. NXP ARM Cortex M0/M3 IAP应用 41/27815 NXP MCU 2015-11-21
      :Cry:为什么我不行!我的做法是利用自己写的上位机解析APP的hex文件,正确地利用IAP将hex文件的数据写到0x00A000处(校检过数据),然后执行跳转指令,结果程序没有按照我想要的跑,感觉是跑飞了

最近访客

< 1/1 >

统计信息

已有2人来访过

  • 芯积分:--
  • 好友:--
  • 主题:2
  • 回复:12

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言