OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8100|回复: 18

IAP升级,boot和app分别是用标准库和HAL库写的,跳转不成功

[复制链接]

30

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2020-4-17
在线时间
111 小时
发表于 2022-5-30 00:02:03 | 显示全部楼层 |阅读模式
18金钱
boot和app都是标准库时,跳转没问题。app改用HAL库时挑战失败。是不是定时器、串口、时钟配置等不一致导致的?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2020-4-17
在线时间
111 小时
 楼主| 发表于 2022-5-30 00:03:12 | 显示全部楼层
file:///C:/Users/14842/Desktop/%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_1653839825140.png
回复

使用道具 举报

30

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2020-4-17
在线时间
111 小时
 楼主| 发表于 2022-5-30 00:05:03 | 显示全部楼层
跳转到APP后,main函数下直接运行下面代码。HAL的不行
__enable_irq();
SCB->VTOR = (0x08000000 | 0x40000);         /* Vector Table Relocation in Internal FLASH. */
       
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4305
金钱
4305
注册时间
2019-9-4
在线时间
896 小时
发表于 2022-5-30 09:51:54 | 显示全部楼层
没试过,帮顶  
回复

使用道具 举报

11

主题

2130

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4727
金钱
4727
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-5-30 10:21:24 | 显示全部楼层
按理说不会,你可以用原子的boot试试,先确定你的app有没有问题
回复

使用道具 举报

2

主题

47

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1382
金钱
1382
注册时间
2015-11-30
在线时间
335 小时
发表于 2022-5-30 10:41:38 | 显示全部楼层
没有关系,可以用
回复

使用道具 举报

30

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2020-4-17
在线时间
111 小时
 楼主| 发表于 2022-5-30 13:50:20 | 显示全部楼层
阿侑kevin 发表于 2022-5-30 10:21
按理说不会,你可以用原子的boot试试,先确定你的app有没有问题

有文件吗
回复

使用道具 举报

11

主题

2130

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4727
金钱
4727
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-5-30 14:41:58 | 显示全部楼层

例程里面有个IAP例程
回复

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3345
金钱
3345
注册时间
2013-5-28
在线时间
468 小时
发表于 2022-5-30 15:00:14 | 显示全部楼层
http://www.openedv.com/forum.php ... p;page=1#pid1165835
这是网址,我前面碰到的问题.一般都是这些强制类型转换出了问题,看着一样,但实际不一样.

  1. if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
  2.                         { /* Jump to user application */
  3.                                 JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
  4.                                 Jump_To_Application = (pFunction) JumpAddress;
  5.                                 /* Initialize user application's Stack Pointer */
  6.                                 __set_MSP(*(__IO uint32_t*) ApplicationAddress);
  7.                                 Jump_To_Application();
  8.                         }
复制代码
回复

使用道具 举报

30

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2020-4-17
在线时间
111 小时
 楼主| 发表于 2022-5-30 23:29:59 | 显示全部楼层
聚东风 发表于 2022-5-30 15:00
http://www.openedv.com/forum.php?mod=viewthread&tid=321782&page=1#pid1165835
这是网址,我前面碰到的 ...

我的跳转程序和这个一样也不行
回复

使用道具 举报

30

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2020-4-17
在线时间
111 小时
 楼主| 发表于 2022-5-31 00:34:48 | 显示全部楼层
标准库和标准库,HAL库和HAL库都可以,标准库和HAL库跳转就不行
回复

使用道具 举报

13

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2021-3-6
在线时间
115 小时
发表于 2022-5-31 12:54:12 | 显示全部楼层
本帖最后由 omw 于 2022-5-31 12:58 编辑

最好是附上代码,我用HAL库可以跳转,用原子哥封装的也可以,附上我的跳转代码, boot.png 在原子哥的基础上改了改,跳转前需要确定几个问题,
1)CPU确定接收到了完整的bin文件
2)flash确定写入正确(原子哥的写flash后会清除cache,所有要使能cache)
3)rom地址设置确定正确以及APP程序设置是否正确
4)APP程序中断偏移是否设置正确,中断偏移设置需要在系统时钟初始化以后才行 APP.png
其他的我感觉没什么要注意呀,当然只是我调试中遇到的问题,如果你遇到的是其他问题,刚好来学习学习

回复

使用道具 举报

30

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2020-4-17
在线时间
111 小时
 楼主| 发表于 2022-5-31 18:11:36 | 显示全部楼层
omw 发表于 2022-5-31 12:54
最好是附上代码,我用HAL库可以跳转,用原子哥封装的也可以,附上我的跳转代码,在原子哥的基础上改了改, ...

应该是标准库和HAl库里面的时钟配置不一样
回复

使用道具 举报

30

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2020-4-17
在线时间
111 小时
 楼主| 发表于 2022-5-31 18:12:35 | 显示全部楼层
omw 发表于 2022-5-31 12:54
最好是附上代码,我用HAL库可以跳转,用原子哥封装的也可以,附上我的跳转代码,在原子哥的基础上改了改, ...

还有不确定两边的定时器、CAN等配置不一致会不会影响功能
回复

使用道具 举报

13

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2021-3-6
在线时间
115 小时
发表于 2022-6-1 08:54:16 | 显示全部楼层
跟紧我 发表于 2022-5-31 18:12
还有不确定两边的定时器、CAN等配置不一致会不会影响功能

两边时钟不一致没有关系,只需要在跳转前将时钟恢复就行,HAL_RCC_DeInit, 功能配置不一样我的是没有影响,在跳转前已经关闭了全局中断,清除了中断标志位,我用的是以太网(W5500)升级,目前没有发现问题
回复

使用道具 举报

30

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2020-4-17
在线时间
111 小时
 楼主| 发表于 2022-6-7 09:21:30 | 显示全部楼层
omw 发表于 2022-6-1 08:54
两边时钟不一致没有关系,只需要在跳转前将时钟恢复就行,HAL_RCC_DeInit, 功能配置不一样我的是没有影响 ...

至少不会跳转到错误中断了
企业微信截图_16545644888209.png
回复

使用道具 举报

30

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2020-4-17
在线时间
111 小时
 楼主| 发表于 2022-6-7 09:24:11 | 显示全部楼层
omw 发表于 2022-6-1 08:54
两边时钟不一致没有关系,只需要在跳转前将时钟恢复就行,HAL_RCC_DeInit, 功能配置不一样我的是没有影响 ...

加了HAL_RCC_DeInit()初始化后,现在是跳转后,能运行到APP的线程入口这里了。卡死在to_thread->sp
回复

使用道具 举报

9

主题

53

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-21
在线时间
226 小时
发表于 2022-6-8 17:13:58 | 显示全部楼层
本帖最后由 paulhe 于 2022-6-8 17:24 编辑

跳转前要关闭总中断;进入APP第一件事就是要打开总中断开关;HAL库的HAL_Delay函数是采用中断计数方式的,所以进入app后设置完向量表后,首先要打开总中断开关



https://shop286328453.taobao.com/
回复

使用道具 举报

30

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2020-4-17
在线时间
111 小时
 楼主| 发表于 2022-6-9 19:41:47 | 显示全部楼层
paulhe 发表于 2022-6-8 17:13
本帖最后由 paulhe 于 2022-6-8 17:24 编辑 跳转前要关闭总中断;进入APP第一件事就是要打开总中断开关;HA ...

标准库间跳转中断是这样操作的,没有设置向量表也没问题
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 15:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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