OpenEdv-开源电子网

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

能否利用中断打断某个循环后不再继续执行了

[复制链接]

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
发表于 2023-12-19 08:17:28 | 显示全部楼层 |阅读模式
2金钱
请教一下各位大佬,有没有什么办法打断正在执行的循环,让他不再继续往下执行,比如说,某个函数有100条语句,我正在执行到这个函数的第50条语句时,收到某个信号后,立即跳出这个函数再去执行另外一个函数,除了goto有没有其他好办法

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

使用道具 举报

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
 楼主| 发表于 2023-12-19 08:22:02 | 显示全部楼层
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8204
金钱
8204
注册时间
2020-5-11
在线时间
3697 小时
发表于 2023-12-19 10:02:26 | 显示全部楼层
不建议goto,可能会引起堆栈溢出.
建议用条件语句结合break;
专治疑难杂症
回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2023-12-19 10:30:17 | 显示全部楼层
LcwSwust 发表于 2023-12-19 10:02
不建议goto,可能会引起堆栈溢出.
建议用条件语句结合break;

比如说,某个函数有100条语句,我正在执行到这个函数的第50条语句时,收到某个信号后,立即跳出这个函数再去执行另外一个函数

这是他的要求

我的理解   是在一个函数任意位置处  收到跳转命令  便立即跳转

这还是指C语言的一条语句  而不是汇编的后的一条指令

Nothing is impossible
回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2023-12-19 10:31:27 | 显示全部楼层
LcwSwust 发表于 2023-12-19 10:02
不建议goto,可能会引起堆栈溢出.
建议用条件语句结合break;

所以  我感觉他的描述   有可能  和最终实现的功能  有出入
Nothing is impossible
回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2023-12-19 10:36:48 | 显示全部楼层
如果真的是按照描述的要求来实现

我能想到的方法是

调用函数前  需要记录当前函数执行完成后的下一个跳转地址

中断执行完成后  直接跳转到记录地址  继续执行

当然使用汇编更好实现一些

这还不包括当前函数执行过程中  哪些重要信息需要保留 的操作
Nothing is impossible
回复

使用道具 举报

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
 楼主| 发表于 2023-12-19 10:44:51 | 显示全部楼层
unnormal 发表于 2023-12-19 10:36
如果真的是按照描述的要求来实现

我能想到的方法是

汇编都忘得差不多了,我现在是不想再继续执行了,比如我现在正在执行函数的某一条指令,现在来了一个中断,中断的事情结束之后,我不想再继续执行之前的函数了,执行跳出之前的函数
回复

使用道具 举报

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
 楼主| 发表于 2023-12-19 10:45:37 | 显示全部楼层
unnormal 发表于 2023-12-19 10:31
所以  我感觉他的描述   有可能  和最终实现的功能  有出入

有这个需求,但是一时间没想到好的办法,我现在是暂时直接复位单片机凑合着
回复

使用道具 举报

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
 楼主| 发表于 2023-12-19 10:46:29 | 显示全部楼层
unnormal 发表于 2023-12-19 10:30
比如说,某个函数有100条语句,我正在执行到这个函数的第50条语句时,收到某个信号后,立即跳出这个函数 ...

收到中断命令后,如果不用goto语句要怎么跳转?
回复

使用道具 举报

54

主题

347

帖子

0

精华

高级会员

Rank: 4

积分
948
金钱
948
注册时间
2022-4-20
在线时间
356 小时
发表于 2023-12-19 10:48:28 | 显示全部楼层
unnormal 发表于 2023-12-19 10:36
如果真的是按照描述的要求来实现

我能想到的方法是

楼主这问题跟我去年的时候问的简直如出一辙.求助一个关于中断的问题,请大佬赐教
又菜又爱指点
回复

使用道具 举报

54

主题

347

帖子

0

精华

高级会员

Rank: 4

积分
948
金钱
948
注册时间
2022-4-20
在线时间
356 小时
发表于 2023-12-19 10:51:14 | 显示全部楼层
我明明贴了链接,怎么看不见,再来一次。

求助一个关于中断的问题,请大佬赐教
又菜又爱指点
回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2023-12-19 11:30:47 | 显示全部楼层
yangwang1025 发表于 2023-12-19 10:44
汇编都忘得差不多了,我现在是不想再继续执行了,比如我现在正在执行函数的某一条指令,现在来了一个中断 ...

恩恩  

汇编相对来说更容易实现

因为它有专用的寄存器来存放函数执行完成后的地址

读取并跳转即可
Nothing is impossible
回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2023-12-19 11:31:57 | 显示全部楼层
yangwang1025 发表于 2023-12-19 10:45
有这个需求,但是一时间没想到好的办法,我现在是暂时直接复位单片机凑合着

恩恩  

复位单片机 也是一个方法

如果有别的方法  我不建议总复位单片机  
Nothing is impossible
回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2023-12-19 11:43:25 | 显示全部楼层
驭剑的秘密 发表于 2023-12-19 10:48
楼主这问题跟我去年的时候问的简直如出一辙.求助一个关于中断的问题,请大佬赐教

是的   汇编好实现一些
Nothing is impossible
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8204
金钱
8204
注册时间
2020-5-11
在线时间
3697 小时
发表于 2023-12-19 11:48:31 | 显示全部楼层
听说C语言里有两个神奇的函数:setjmp(), longjmp();
可以实现函数之间跳转,我还不怎么了解,有兴趣的可以看看.
专治疑难杂症
回复

使用道具 举报

3

主题

1906

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4100
金钱
4100
注册时间
2018-8-14
在线时间
695 小时
发表于 2023-12-19 16:23:19 | 显示全部楼层
本帖最后由 edmund1234 于 2023-12-19 16:28 编辑

可以, 我做过, 只不过你要对退出正在执行函数的定义, 正在执行函数有否调用其它函数, 执行完你要到的新函数后退回哪?。。。。。当你都给这些有个清晰的定义, 就可以在中断时把栈里返回的内容改换成你想要的(实际就是改动返回地扯, 当然你要确定被中断打断的函数还有没有其它东西压了栈, 否则你改了返回地址后这些被压栈的数据就永远拿不出来, 栈的空间也会变用越少), 当然你首先要了解中断前压栈的过程, 新手不建议改动这些。

回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2023-12-20 15:59:44 | 显示全部楼层
edmund1234 发表于 2023-12-19 16:23
可以, 我做过, 只不过你要对退出正在执行函数的定义, 正在执行函数有否调用其它函数, 执行完你要到的新 ...

这些通过汇编  好实现一些

怎么通过C语言来实现呢
Nothing is impossible
回复

使用道具 举报

3

主题

1906

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4100
金钱
4100
注册时间
2018-8-14
在线时间
695 小时
发表于 2023-12-21 17:32:03 | 显示全部楼层
unnormal 发表于 2023-12-20 15:59
这些通过汇编  好实现一些

怎么通过C语言来实现呢

CMSIS intrinsic functions 了解一下
回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2023-12-22 09:17:14 | 显示全部楼层
edmund1234 发表于 2023-12-21 17:32
CMSIS intrinsic functions 了解一下

好 的  

谢谢您

有时间可以了解一下
Nothing is impossible
回复

使用道具 举报

77

主题

521

帖子

0

精华

高级会员

Rank: 4

积分
729
金钱
729
注册时间
2014-9-30
在线时间
124 小时
发表于 2023-12-23 10:48:19 | 显示全部楼层
本帖最后由 caosix 于 2023-12-23 10:52 编辑

某个函数有100条语句,正在执行到这个函数的第50条语句时,【被中断 打断】
—— 那么 你在 该函数 第 99条 语句的地方,【做一个 标记 我用词不专业 】
再 在 中断结束 的前夕 , 想办法 跳转 到 第 99条 语句 。。。其实不叫跳转,需要通过【 栈 越级 】,直接 结束 前一个 函数 。你要宏观确定 不带来恶果 。

—— 我认为 这近似实现了 你的 需求 ,同时 也不破坏 C语音 的 栈 ——
回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2023-12-23 13:46:02 | 显示全部楼层
caosix 发表于 2023-12-23 10:48
某个函数有100条语句,正在执行到这个函数的第50条语句时,【被中断 打断】
—— 那么 你在 该函数 第 99 ...

再 在 中断结束 的前夕 , 想办法 跳转 到 第 99条 语句

思路没问题

汇编知道怎么弄

C语言怎么操作   没有弄过
Nothing is impossible
回复

使用道具 举报

3

主题

1906

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4100
金钱
4100
注册时间
2018-8-14
在线时间
695 小时
发表于 2023-12-23 17:43:26 | 显示全部楼层
unnormal 发表于 2023-12-23 13:46
再 在 中断结束 的前夕 , 想办法 跳转 到 第 99条 语句

思路没问题

建议你可以看一下FreeRTOS的开源源代码, 里面有很多用C处理栈里数据的代码。
回复

使用道具 举报

0

主题

451

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3316
金钱
3316
注册时间
2016-3-19
在线时间
815 小时
发表于 2023-12-23 20:17:02 | 显示全部楼层
edmund1234 发表于 2023-12-23 17:43
建议你可以看一下FreeRTOS的开源源代码, 里面有很多用C处理栈里数据的代码。

恩恩  谢谢您

如果我没有记错的话  FreeRTOS 上下文切换也是使用汇编来编写的

初始化栈  确实是C语言  是通过指针直接写入特定值

我回头再去确认一下
Nothing is impossible
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 22:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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