硬汉嵌入式论坛

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

[STM32H7] IAP跳转问题 应用区的程序运行不正常

[复制链接]

14

主题

57

回帖

99

积分

初级会员

积分
99
发表于 2021-8-13 15:50:35 | 显示全部楼层 |阅读模式
自己写的bootloader和应用区的程序     boot大小设置的10K  跳转地址0x2800  跳转是没有问题的   boot 是裸机程序
应用区程序是RTX4的   现在情况是  应用区单独下载运行时没有问题的   设置好偏移地址   从boot跳转之后   串口运行就不正常了  LED闪烁是正常的  仿真也仿真不了一直停在这里
Dingtalk_20210813154929.jpg
回复

使用道具 举报

14

主题

57

回帖

99

积分

初级会员

积分
99
 楼主| 发表于 2021-8-13 16:04:03 | 显示全部楼层
硬汉帮忙看一下

APP.zip

4.34 MB, 下载次数: 11

回复

使用道具 举报

14

主题

57

回帖

99

积分

初级会员

积分
99
 楼主| 发表于 2021-8-13 16:06:39 | 显示全部楼层
boot

Inclinometer_Boot.7z

731.07 KB, 下载次数: 9

回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2021-8-13 16:46:39 | 显示全部楼层
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107137
QQ
发表于 2021-8-13 16:48:09 | 显示全部楼层
有可能跳转前没有提供干净的运行环境,另外中断向量表设置了没。

你可以试试你的BootLoader程序在main函数里面什么都不干,直接就跳转。

-----------------
下面的代码可供参考

分享个基于STM32H7的BOOT和APP代码都使用RTX5的案例,相互之间任意跳转
http://www.armbbs.cn/forum.php?m ... 7247&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

14

主题

57

回帖

99

积分

初级会员

积分
99
 楼主| 发表于 2021-8-13 16:49:05 | 显示全部楼层
eric2013 发表于 2021-8-13 16:48
有可能跳转前没有提供干净的运行环境,另外中断向量表设置了没。

你可以试试你的BootLoader程序在main函 ...

我柑橘没有问题呀  我上传的工程  能帮忙看一下吗   我实在是找不到问题了  
回复

使用道具 举报

4

主题

46

回帖

58

积分

初级会员

积分
58
发表于 2021-8-13 23:11:59 | 显示全部楼层
我遇到类似的问题的解决思路是,使用RTT,进入main函数之后进行二分搜索的办法加入RTT打印,打印内容就是代码行号,逐渐定位出来是什么卡住了,我当时研究出来的是跳转之前需要set_fault将中断关闭,进入main之后再打开,跳转的时候如果有中断进来,而程序又没有运行到systeminit,只是在resethandler的时候,中断响应会出问题,但是看你这个状态不像
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107137
QQ
发表于 2021-8-14 08:27:29 | 显示全部楼层
years 发表于 2021-8-13 16:49
我柑橘没有问题呀  我上传的工程  能帮忙看一下吗   我实在是找不到问题了

你的boot程序里面,main函数中的内容都删掉,直接跳转

  1. int main(void)
  2. {
  3.         All_Init();
  4.        
  5.         IsUpdate();
  6.        
  7.         //readVer();
  8.        
  9.         while(1)
  10.         {
  11.                 LED_M_ON();
  12.                 Delay_ms(100);
  13.                 LED_M_OFF();
  14.                 Delay_ms(100);
  15.                 LED_M_ON();
  16.                 Delay_ms(100);
  17.                 LED_M_OFF();
  18.                 Delay_ms(1000);
  19.                 if(Flag_Finish)
  20.                 {
  21.                         FM_WriteByte(1,1);
  22.                         Delay_ms(600);
  23.                         LED_M_ON();
  24.                         Delay_ms(500);
  25.                         LED_M_OFF();
  26.                         iap_load_app(FIRMWARE_START_ADDR);
  27.                 }
  28.         }
  29. }
复制代码
回复

使用道具 举报

4

主题

26

回帖

38

积分

新手上路

积分
38
发表于 2021-8-14 14:26:33 | 显示全部楼层
跳前关掉全局中断再试试
回复

使用道具 举报

3

主题

38

回帖

47

积分

新手上路

积分
47
发表于 2021-8-14 17:28:26 | 显示全部楼层
你是否用的是H7芯片。 如果是的话,那这两个工程的hex文件要合成一个烧录试试(这个我没试过,理论行,反正我后面是boot直接设置为128K)。 因为H7系列。一个扇区就是128K。烧录是直接擦除整个扇区的。你boot设置10K,不管你是先烧boot还是应用。都只会留下后面烧的那个。因为之前烧的已经擦除了。
回复

使用道具 举报

14

主题

57

回帖

99

积分

初级会员

积分
99
 楼主| 发表于 2021-8-15 20:39:18 | 显示全部楼层
eric2013 发表于 2021-8-14 08:27
你的boot程序里面,main函数中的内容都删掉,直接跳转

把boot的串口初始化去掉就可以了   。。。
这是啥问题?   之前我也这样用过呀  
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107137
QQ
发表于 2021-8-16 01:44:55 | 显示全部楼层
years 发表于 2021-8-15 20:39
把boot的串口初始化去掉就可以了   。。。
这是啥问题?   之前我也这样用过呀

说明跳转前的应用程序有点问题,查查怎么回事。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 05:02 , Processed in 0.231116 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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