硬汉嵌入式论坛

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

[BOOT/IAP] boot程序跳转app后,中断响应问题请教

[复制链接]

6

主题

16

回帖

34

积分

新手上路

积分
34
发表于 2025-1-9 18:47:21 | 显示全部楼层 |阅读模式
在boot程序中,采用了串口中断接收app。
在app程序main最开始增加了中断向量表的偏移:SCB->VTOR = FLASH_BASE | 0x20000;


接收完成后跳转app。app程序中未开启串口中断。也没有串口中断服务函数。


但为什么app在运行过程中,向串口发送数据,会导致芯片跑飞重启。

我分析app仍然会响应中断请求,并去找app的串口中断服务函数,但里面是空的,导致看门狗复位,重启。

也不知道分析的对不对,为啥仍会响应中断请求呢?

目前是在boot 程序跳转app前增加了关闭串口接收中断。

求大神帮忙分析一下是咋回事。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-10 07:36:44 | 显示全部楼层
跳转前是不是没有复位串口配置,最好调用UART Deinit复位串口配置,并关闭串口中断。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2025-1-10 08:48:38 | 显示全部楼层
eric2013 发表于 2025-1-10 07:36
跳转前是不是没有复位串口配置,最好调用UART Deinit复位串口配置,并关闭串口中断。

想这种跳转前复位串口配置啥的,万一没有跳转成功,是不是只能重启设备了。因为相当于串口关闭了,无法再接收串口的信息了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-11 06:45:26 | 显示全部楼层
aure 发表于 2025-1-10 08:48
想这种跳转前复位串口配置啥的,万一没有跳转成功,是不是只能重启设备了。因为相当于串口关闭了,无法再 ...

他这个是boot里面串口接收app固件,接收完毕后复位串口,跳转APP。跳转到APP需要继续用串口,重新配置串口使用即可。

没有跳转成功的话,大概率程序设计问题了。这个跳转就相当于函数调用跳转,如果这个都失败,那这个产品设计有问题了。

不知道你想表达的是不是这个意思。
回复

使用道具 举报

6

主题

16

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2025-1-11 09:45:37 | 显示全部楼层
eric2013 发表于 2025-1-10 07:36
跳转前是不是没有复位串口配置,最好调用UART Deinit复位串口配置,并关闭串口中断。

跳转前的确没有复位串口配置,但是跳转后的app应用程序重新调用了MX_USART1_UART_Init();
eric,就是说在boot程序中对串口相关寄存器的配置数据仍然保留,跳转后并没有对所有的寄存器恢复复位值,所以app程序即使没有配置串口中断响应,但由于boot程序相关寄存器仍然保留前值,所以仍然会产生中断请求是么?
目前在跳转前将串口中断关闭了,跳转后没有出现问题了。
最好是将boot程序用到的相关配置做Deinit是么?
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2025-1-11 21:17:42 | 显示全部楼层
eric2013 发表于 2025-1-11 06:45
他这个是boot里面串口接收app固件,接收完毕后复位串口,跳转APP。跳转到APP需要继续用串口,重新配置串 ...

大概是这个意思。就是说可能有些隐藏的问题没处理好,真的没跳过去,这时boot串口又被反初始化了。那就相当于变砖了。我的IAP升级是:
    1.如果程序正常运行了(boot和app都正常),在app出收到上位机发送的"boot"请求字符串,那我就写一个标志到flash中(做了分区专门用来放参数),软后复位调用NVIC_SystemReset()复位MCU,这是进入到boot读取参数分区,发现需要做IAP升级,就按照XYZModem协议进行处理完成升级和跳转
    2.如果只有boot正常运行,那么我是在boot阶段一直按照XYZModem的协议发送,例如XModem协议,我就一直发送'C'字符出去,上位机收到这个就按照协议进行升级,升级完成就复位参数分区的标识并跳转,跳转失败了就继续在boot处理串口信息
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-12 07:24:42 | 显示全部楼层
SRIlyy 发表于 2025-1-11 09:45
跳转前的确没有复位串口配置,但是跳转后的app应用程序重新调用了MX_USART1_UART_Init();
eric,就是说 ...

对,是这样的。实际上boot跳转到app,就跟函数跳转是一样的,只是我们这里指定了跳转地址。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-12 07:25:06 | 显示全部楼层
aure 发表于 2025-1-11 21:17
大概是这个意思。就是说可能有些隐藏的问题没处理好,真的没跳过去,这时boot串口又被反初始化了。那就相 ...

对,是这样的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-14 06:34 , Processed in 0.042432 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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