发新帖我要提问
12
返回列表
打印

C,如何在程序运行任何状态下,直接跳转至主循环

[复制链接]
楼主: at0755
手机看帖
扫描二维码
随时随地手机跟帖
21
hgjinwei| | 2014-8-24 12:29 | 只看该作者 回帖奖励 |倒序浏览
如果真要实现,可以按操作系统的方法:
1、进入主循环前,记录CPU当前信息(PC,堆栈、程序寄存器)等
2、中断执行完后,将第一步记录的信息除PC外,覆盖CPU状态,并将PC覆盖中断返回地址
3、中断返回,程序自然回到主循环位置

当然哈,这只是说技术上是可实现的。至于为何要这么做,是否有可替代方法,那就要看具体应用环境了。

使用特权

评论回复
22
SeekFor| | 2014-8-26 17:42 | 只看该作者
setjmp() + longjmp()就是实现你的功能的

使用特权

评论回复
23
dirtwillfly| | 2014-8-28 11:16 | 只看该作者
楼主的串口通讯不用中断吗?

使用特权

评论回复
24
at0755|  楼主 | 2014-8-28 15:18 | 只看该作者
dirtwillfly 发表于 2014-8-28 11:16
楼主的串口通讯不用中断吗?

现在的做法是串口接收中断中判断数据,置标志位

麻烦的地方就是每个子函数和循环中要去判断标志位

更麻烦的是,如果使用了用循环写的延时函数,那么在延时函数的循环中要加入判断标志位的语句,如果对延时的精度要求比较高,延时循环的时间就需要重新计算

使用特权

评论回复
25
dirtwillfly| | 2014-8-28 16:40 | 只看该作者
at0755 发表于 2014-8-28 15:18
现在的做法是串口接收中断中判断数据,置标志位

麻烦的地方就是每个子函数和循环中要去判断标志位

:L延时建议使用定时器

使用特权

评论回复
26
at0755|  楼主 | 2014-8-28 16:49 | 只看该作者
我这个是STM32的系统,延时是用的嘀哒定时器  :lol
如果资源不足的时候,用软件延时,就有这个问题了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则