R7A2L1AB _Bootloader 如何从BOOT 跳 APP

大家好,有问题想咨询各位大佬。

使用的是R7A2L1AB板子,当前BOOT函数中,调用实例代码中 do_boot函数,其中 flash_base = 0x10000。我希望将APP程序的其实位置从0x0000改到0x10000,从而满足BOOT ---JUMP--->

APP 。

APP程序能够发送周期性CAN数据,BOOT本身不主动发数据,可通过这块确认是否跳转成功。但是当我改动script中 memory_regions.ld文件中 FLASH_START的赋值,整个APP工程就会报错

失效,必须从worksapce中删除才能重新使用。

我应当如何修改配置文件才能使APP程序生成出来的HEX文件,起始地址从0X10000开始?又应该怎样操作才能使BOOT+APP的HEX文件一起down进板子?

Parents
  • 目前已经能够更改APP去程序的ld文件了,是编译器内部链接的BUG,需要把script中fsp.ld文件里面的 !DEFINED增加空格 ! DEFINED,这样。

    现在刷写完后,会进入do_boot函数跳转,跳转0X20000时候出现

    break at address"0xeffffffe"with no debug information

    是否出了起始地址FLASH_START和FLASH_LENGTH以外还有别的需要修改?

Reply
  • 目前已经能够更改APP去程序的ld文件了,是编译器内部链接的BUG,需要把script中fsp.ld文件里面的 !DEFINED增加空格 ! DEFINED,这样。

    现在刷写完后,会进入do_boot函数跳转,跳转0X20000时候出现

    break at address"0xeffffffe"with no debug information

    是否出了起始地址FLASH_START和FLASH_LENGTH以外还有别的需要修改?

Children
  •  调试到JUMP的时候如下

  • 你好,在此状态下,请确认0x20000处有合理的代码,可以在memory窗口查看。

    另外,你所说的调试,是调试哪一个project呢?Boot Project吗?如果调试Boot Project的同时,需要加载App Project的内容,可参考下图的方法进行下载。

    如果调试的是App Project,则需要在调试前将Boot Project内容下载到MCU中(参考上图的操作)。

    特别需要注意的是,仔细确认烧写地址,以免产生无法恢复的锁死。

  • 你好,我在调试BOOT的时候,通过load file 加入了APP的HEX文件(文件地址是从0x2000开始),同时选择了Address为0x20000,稍后在BOOT调试时查看memory,显示如图。

    等到程序调试走到 

    ((void (*)()) vt->reset)();

    调试进入,project报出

    我不知道应该怎样才能从BOOT实现跳转,以及我在BOOT中刷写新程序(已经在代码中修改好起始地址的HEX文件偏移),直接跳转至APP区。

    谢谢

  • APP区域的代码,我单独调试其project(起始地址为0x0000)是能够正常运行,并且发出CAN数据来判断工作正常。

  • 你好,请参考下图的配置,从0x20000开始调试App Project。调试前确认App Project重新build生成的目标文件(*.srec 或*.hex)起始地址是0x20000。

    下图中的参数分别替换为:

    set $sp = *0x20000

    set $pc = *0x20004

    set {int}0xe000ed08 = 0x00020000

    关于这三行的意义说明,请参考以下链接中的文档说明:

    https://developer.arm.com/documentation/ddi0337/e/

    另:从提供的memory window内容看,里面的内容是不合理的。

    如果0x20000是App Project的起始地址,则0x20000处的4 Byte应该是stack pointer的地址,解析之后为RAM空间才对,0x20004开始的4 Byte是中断向量表的存放地址,应该是code flash空间,从目前的结果上看均不合理。请再次确认。