This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于从Bootloader程序跳转到APP程序的方法



之前问过TI的工程师跳转的方法,是#define entrytoapp (void(*)(void))0x300000这种方法。我试过,一些简单的程序这样跳转没有问题,但是换一个复杂点的程序后执行结果跟不用bootloader时的结果不一样了。这就比较郁闷了,之前有个帖子说可以用ExitBoot这个函数,但是这个函数是怎么个用法呢,想问一下有什么其他的跳转方法来呢

  • 我试过了,因为我的bootloader和app程序都用到了can,所以我bootloader中对can寄存器配置完。等到跳到app的时候又配置了一下,但是有些设置是bootloader里留下来的,有的是app新配置的,这样bootloader就对我的app程序产生了影响。有什么跳转办法能使寄存器复位呀?

  • 我遇到了和你一样的情况,请问你解决了吗?

  • asm (" LB 0xaddress")在RAM中执行。
  • 这个我试过了,和原来一样,跳转只有差不多50%的成功率,要么卡死,要么跳转成功。但当我用一个只有跳转代码的程序来跳转时,却可以完美跳转,不知道是什么原因。
  • 我的BootLoader是依靠USB与上位机通信接收用户APP的,跳转时总有很大概率会跳转失败,并不是非法中断,而是一直运行,在ccs的Disassembly能看到有跳转到用户APP的地址范围内运行,但好像进不到用户APP的main里面。

    此外,我在调试的时候发现,假如屏蔽了下面这段代码,就可以正常跳转,不会跳转失败。

    //
    // Set the clocking to run from the PLL at 50MHz
    //
    
    SysCtlClockSet(SYSCTL_OSCSRC_XTAL | SYSCTL_PLL_ENABLE | SYSCTL_IMULT(20) |
                              SYSCTL_SYSDIV(2));
    SysCtlAuxClockSet(SYSCTL_OSCSRC_XTAL | SYSCTL_PLL_ENABLE |
                                    SYSCTL_IMULT(12) | SYSCTL_SYSDIV(4));

    但是一旦我屏蔽这个代码,USB就无法正常运行,我应该怎么办呢?是不是BootLoader的时钟频率和用户APP的频率不一致导致的?有没有什么办法重置这个频率呢?芯片型号是F28377S