硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3553|回复: 13
收起左侧

[有问必答] stm32iap无法正常跳转

[复制链接]

73

主题

1195

回帖

1414

积分

至尊会员

积分
1414
发表于 2020-8-7 14:46:54 | 显示全部楼层 |阅读模式
请教一下硬汉哥,今天我iap升级的时候,就是死活无法正常跳转,我的流程是这样的,上点运行boot程序,上位机时候串口下发并保存到flash,最后一包发送后,跳转,但是跳转后就死机了,
app程序得中断向量已经设置了,能指点下吗?
回复

使用道具 举报

73

主题

1195

回帖

1414

积分

至尊会员

积分
1414
 楼主| 发表于 2020-8-7 15:57:12 | 显示全部楼层
我用jlink生成的bin和keil生成的bin对比了,一致,说明flash烧写没问题,但是为啥跳转后就死机了?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2020-8-7 18:00:00 | 显示全部楼层
简单排查下,boot里面什么外设都不开启,直接跳转。APP里面什么都不写,仅开启的LED闪烁,而for循环实现的。

回复

使用道具 举报

73

主题

1195

回帖

1414

积分

至尊会员

积分
1414
 楼主| 发表于 2020-8-7 18:29:54 | 显示全部楼层
eric2013 发表于 2020-8-7 18:00
简单排查下,boot里面什么外设都不开启,直接跳转。APP里面什么都不写,仅开启的LED闪烁,而for循环实现的 ...

你好,已经解决了,就是ac6编译器都换成ac5就行了,不知道为啥,ac6的编译器就是不能跳转。
回复

使用道具 举报

73

主题

1195

回帖

1414

积分

至尊会员

积分
1414
 楼主| 发表于 2020-8-7 18:30:49 | 显示全部楼层
硬汉哥keil的ac6跳转指令不对吗?

//THUMB指令不支持汇编内联
//采用如下方法实现执行汇编指令WFI
void WFI_SET(void)
{
    __ASM volatile("wfi");
}
//关闭所有中断
void INTX_DISABLE(void)
{
    __ASM volatile("cpsid i");
}
//开启所有中断
void INTX_ENABLE(void)
{
    __ASM volatile("cpsie i");
}



#ifdef ARMCC_AC5

//设置栈顶地址
//addr:栈顶地址
//__asm void  MSR_MSP(uint32_t addr)
//{
//    MSR MSP, r0           //set Main Stack value
//    BX r14
//}



//设置栈顶地址
//addr:栈顶地址   ac5 版本
__asm void MSR_MSP(uint32_t addr)
{
    MSR MSP, r0 //set Main Stack value
    BX r14
}

#else
//设置栈顶地址
//addr:栈顶地址   ac6 版本
void MSR_MSP_(unsigned int addr)
{
    __asm("MSR MSP, r0");   //set Main Stack value

    __asm("BX r14");
}

void MSR_MSP(uint32_t addr)
{
    __ASM volatile("MSR MSP,r0");
    __ASM volatile("BX r14");
}
#endif

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2020-8-7 19:51:31 | 显示全部楼层
wdliming 发表于 2020-8-7 18:30
硬汉哥keil的ac6跳转指令不对吗?

//THUMB指令不支持汇编内联

这种常用函数不要自己写,兼容性差。

CMSIS软件包里面有现成的API,AC5和AC6都可以使用。
回复

使用道具 举报

73

主题

1195

回帖

1414

积分

至尊会员

积分
1414
 楼主| 发表于 2020-8-7 20:24:42 | 显示全部楼层
eric2013 发表于 2020-8-7 19:51
这种常用函数不要自己写,兼容性差。

CMSIS软件包里面有现成的API,AC5和AC6都可以使用。

请问在哪里呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2020-8-7 20:46:31 | 显示全部楼层
wdliming 发表于 2020-8-7 20:24
请问在哪里呢?

AC6: cmsis_armclang.h
AC5: cmsis_armcc.h
回复

使用道具 举报

73

主题

1195

回帖

1414

积分

至尊会员

积分
1414
 楼主| 发表于 2020-8-7 21:08:09 | 显示全部楼层
eric2013 发表于 2020-8-7 20:46
AC6: cmsis_armclang.h
AC5: cmsis_armcc.h

谢谢谢谢
回复

使用道具 举报

73

主题

1195

回帖

1414

积分

至尊会员

积分
1414
 楼主| 发表于 2020-8-7 21:14:46 | 显示全部楼层
eric2013 发表于 2020-8-7 20:46
AC6: cmsis_armclang.h
AC5: cmsis_armcc.h

/**
  \brief   Set Main Stack Pointer
  \details Assigns the given value to the Main Stack Pointer (MSP).
  \param [in]    topOfMainStack  Main Stack Pointer value to set
*/
__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack)
{
  __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : );
}


ac6的是这样。谢谢
回复

使用道具 举报

73

主题

1195

回帖

1414

积分

至尊会员

积分
1414
 楼主| 发表于 2020-8-7 21:15:31 | 显示全部楼层
eric2013 发表于 2020-8-7 20:46
AC6: cmsis_armclang.h
AC5: cmsis_armcc.h

/**
  \brief   Set Main Stack Pointer
  \details Assigns the given value to the Main Stack Pointer (MSP).
  \param [in]    topOfMainStack  Main Stack Pointer value to set
*/
__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)
{
  register uint32_t __regMainStackPointer     __ASM("msp");
  __regMainStackPointer = topOfMainStack;
}

ac5的是这个
回复

使用道具 举报

73

主题

1195

回帖

1414

积分

至尊会员

积分
1414
 楼主| 发表于 2020-8-8 08:44:02 | 显示全部楼层
在请教一下硬汉哥,我现在AC5AC6都可以调跳转了,但是当我boot和app都开启iwdg,超时是12s,那么就不能跳转了,请问是为什么啊?谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2020-8-8 10:14:06 | 显示全部楼层
wdliming 发表于 2020-8-8 08:44
在请教一下硬汉哥,我现在AC5AC6都可以调跳转了,但是当我boot和app都开启iwdg,超时是12s,那么就不能跳转 ...

跳转前立即喂一次狗
回复

使用道具 举报

73

主题

1195

回帖

1414

积分

至尊会员

积分
1414
 楼主| 发表于 2020-8-8 11:58:31 | 显示全部楼层
试过了,还是不行,app里面也开启了iwdg,就是无法跳转,升级完成还是停留在boot程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-8 17:27 , Processed in 0.592756 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表