硬汉嵌入式论坛

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

[有问必答] 回调函数调用异常

[复制链接]

2

主题

9

回帖

15

积分

新手上路

积分
15
发表于 2025-1-21 10:08:48 | 显示全部楼层 |阅读模式
我自己使用小华半导体芯片HC32L130,程序里的中断回调函数会在中断发生时进入,但单步执行实际上却跳过了回调函数,我将回调函数内容复制到中断函数中,单片机运行正常,不在debug的情况下,单片机实际也会卡死在中断函数里?这是什么原因啊?
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2025-1-21 10:10:06 | 显示全部楼层

回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2025-1-21 10:28:45 | 显示全部楼层
0x00000D76 BD10      POP      {r4,pc}    369: {     370: #if (INT_CALLBACK_ON == INT_CALLBACK_TIM2)      0x00000D78 B510      PUSH     {r4,lr}    371:     Tim2_IRQHandler();     372: #endif  0x00000D7A 46C0      MOV      r8,r8 0x00000D7C 46C0      MOV      r8,r8
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2025-1-21 11:41:39 | 显示全部楼层
仅说这部分“但单步执行实际上却跳过了回调函数”

你可以在回调里面加入个软件断点__asm("BKPT 0")试试,看看可以暂时不

回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2025-1-22 09:10:06 | 显示全部楼层
eric2013 发表于 2025-1-21 11:41
仅说这部分“但单步执行实际上却跳过了回调函数”

你可以在回调里面加入个软件断点__asm("BKPT 0")试试 ...

它实际上的使用是系统中断函数,里面放了一个回调函数,两者都是WEAK类型,目前我将它复制出来放在一个源文件里就可以正常运行。(所以类似这样的中断均有这个现象)

在中断文件里,
weak  void fun_cb(void);

void FUN_CB(void)
{
fun_cb();
}

我发的图片都不见了,不知道是不是不能直接粘贴图片在对话框里
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2025-1-23 07:17:43 | 显示全部楼层
正义属于世界 发表于 2025-1-22 09:10
它实际上的使用是系统中断函数,里面放了一个回调函数,两者都是WEAK类型,目前我将它复制出来放在一个源 ...

这个确实有点诡异,得查查了,STM32的HAL库的回调都是这样的,weak弱定义。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 17:50 , Processed in 0.048431 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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