之前问过TI的工程师跳转的方法,是#define entrytoapp (void(*)(void))0x300000这种方法。我试过,一些简单的程序这样跳转没有问题,但是换一个复杂点的程序后执行结果跟不用bootloader时的结果不一样了。这就比较郁闷了,之前有个帖子说可以用ExitBoot这个函数,但是这个函数是怎么个用法呢,想问一下有什么其他的跳转方法来呢
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.
之前问过TI的工程师跳转的方法,是#define entrytoapp (void(*)(void))0x300000这种方法。我试过,一些简单的程序这样跳转没有问题,但是换一个复杂点的程序后执行结果跟不用bootloader时的结果不一样了。这就比较郁闷了,之前有个帖子说可以用ExitBoot这个函数,但是这个函数是怎么个用法呢,想问一下有什么其他的跳转方法来呢
我试过了,因为我的bootloader和app程序都用到了can,所以我bootloader中对can寄存器配置完。等到跳到app的时候又配置了一下,但是有些设置是bootloader里留下来的,有的是app新配置的,这样bootloader就对我的app程序产生了影响。有什么跳转办法能使寄存器复位呀?
我的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