你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

bootloader跳入系统软件的方式

[复制链接]
everkimage 提问时间:2018-7-5 10:41 /
我用的是STM32F0系列的芯片,IDE是IAR,FLASH前16KB给了bootloader。
bootloader执行1秒后,通过下面代码跳入APP:
  1. __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
  2.    ((pFunction)(*(__IO uint32_t*) (APPLICATION_ADDRESS + 4)))();
复制代码

然后我优化了APP编译选项,导致bootloader无法跳入APP。降低优化条件,便可以。
不知道是bootloader跳入有问题,还是IDE优化有BUG所致。
收藏 评论9 发布时间:2018-7-5 10:41

举报

9个回答
wudianjun2001 回答时间:2018-7-5 11:20:14
没看出啥问题来,我都是这样跳的
void execute_user_code(uint32_t Addr)
{
        /* Change the Vector Table to the USER_FLASH_START
        in case the user application uses interrupts */
        SCB->VTOR = Addr & 0x1FFFFF80;

        boot_jump(Addr);
}

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

everkimage 回答时间:2018-7-5 13:17:34
wudianjun2001 发表于 2018-7-5 11:20
没看出啥问题来,我都是这样跳的
void execute_user_code(uint32_t Addr)
{

boot_jump()代码是怎么样的?
wudianjun2001 回答时间:2018-7-5 13:40:32
everkimage 发表于 2018-7-5 13:17
boot_jump()代码是怎么样的?

__asm void boot_jump( uint32_t address )
{
        LDR SP, [R0]                ;Load new stack pointer address
        LDR PC, [R0, #4]        ;Load new program counter address
}
废鱼 回答时间:2018-7-5 14:01:29
可能是楼主优化代码以后,部分问题导致。建议楼主仿真测试一下。带有boot的程序也可以仿真的

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

everkimage 回答时间:2018-7-5 16:22:01
安 发表于 2018-7-5 14:01
可能是楼主优化代码以后,部分问题导致。建议楼主仿真测试一下。带有boot的程序也可以仿真的 ...

仿真可以的。
就是最优化后bootloader跳不过去,应该没有执行到APP的初始化代码,因为出来的是bootloader的HardFault处理打印信息。
后来我降低优化等级就可以了,然后再最优化编译,也可以了。不知道怎么地。
everkimage 回答时间:2018-7-5 16:24:39
wudianjun2001 发表于 2018-7-5 13:40
__asm void boot_jump( uint32_t address )
{
        LDR SP, [R0]                ;Load new stack pointer address

你是直接设置SP。
我是调用__set_MSP()设置的。还有一个函数__set_PSP(),不知道是不是跟这个有关系。
废鱼 回答时间:2018-7-5 16:28:30
应该是把代码给优化掉了。
everkimage 回答时间:2018-7-5 16:30:22
本帖最后由 everkimage 于 2018-7-5 16:32 编辑
everkimage 发表于 2018-7-5 16:24
你是直接设置SP。
我是调用__set_MSP()设置的。还有一个函数__set_PSP(),不知道是不是跟这个有关系。 ...

像HardFault的处理,就需要判断MSP和PSP,这部分机制有点忘了,哪位大神提示一下?跳入APP时设置MSP还是PSP,还是都可以?
ZDPHPN 回答时间:2018-7-10 17:07:25
做个标记,之后写bootloader参考怎么让跳转

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版