打印

请问怎样通过外部中断结束子程序?有流程图

[复制链接]
9905|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
以前从来没有碰到过这样的情况,一时想懵了。从主程序进入一个子程序,是多重判定那种,包含for,if,while,延时等等,要求外部中断响应,中断程序结束后不在运行子程序,直接返回主程序中,请问怎样实现?

相关帖子

沙发
ayb_ice| | 2012-7-17 10:57 | 只看该作者
中断设标志,子程序判断标志提前结束

你这种想法基本是没有道理的

使用特权

评论回复
板凳
shell.albert| | 2012-7-17 11:05 | 只看该作者
无语了,哪有这么干的

使用特权

评论回复
地板
dlyt_test001| | 2012-7-17 11:13 | 只看该作者
这个思路很新颖!不过,不合规范!

使用特权

评论回复
5
loveme1949|  楼主 | 2012-7-17 11:21 | 只看该作者
2# ayb_ice
没有道理是个什么情况啊~~新手求解

使用特权

评论回复
6
loveme1949|  楼主 | 2012-7-17 11:42 | 只看该作者
4# dlyt_test001 请问不合规范是什么意思?

使用特权

评论回复
7
ayb_ice| | 2012-7-17 11:48 | 只看该作者
本帖最后由 ayb_ice 于 2012-7-17 11:50 编辑

中断可能随时发生,你怎么知道是什么程序被中断呢,被中断的程序用了多少堆栈,你怎么知道呢,

这种想法用RTOS可以实现,在中断中将某个任务直接删除就可以了,因为每个任务有独立的堆栈

使用特权

评论回复
8
loveme1949|  楼主 | 2012-7-17 11:51 | 只看该作者
7# ayb_ice
是的,所以程序结束就要做出中断触发的,这也是我不知道怎么做的难点。。。。

使用特权

评论回复
9
love_myfamily| | 2012-7-17 11:52 | 只看该作者
202921

使用特权

评论回复
10
hemporer| | 2012-7-17 11:55 | 只看该作者
用goto address;

使用特权

评论回复
11
loveme1949|  楼主 | 2012-7-17 12:07 | 只看该作者
10# hemporer
能在中断函数中goto到主函数里面吗?好像不能跨函数吧

使用特权

评论回复
12
ningling_21| | 2012-7-17 12:37 | 只看该作者
以前从来没有碰到过这样的情况,一时想懵了。从主程序进入一个子程序,是多重判定那种,包含for,if,while,延时等等,要求外部中断响应,中断程序结束后不在运行子程序,直接返回主程序中,请问怎样实现?
115598 ...
loveme1949 发表于 2012-7-17 09:40


你想让程序崩溃?

使用特权

评论回复
13
ningling_21| | 2012-7-17 12:39 | 只看该作者
2# ayb_ice
没有道理是个什么情况啊~~新手求解
loveme1949 发表于 2012-7-17 11:21


LZ想让程序崩溃?

使用特权

评论回复
14
原野之狼| | 2012-7-17 12:48 | 只看该作者
中断中设标志  子程序查询到该标志位就返回

使用特权

评论回复
15
loveme1949|  楼主 | 2012-7-17 13:09 | 只看该作者
14# 原野之狼
这样的话子程序要设定很多个 if ()retun(0);吧?特别是当子程序有延时的时候

使用特权

评论回复
16
原野之狼| | 2012-7-17 13:40 | 只看该作者

void foo(int bar)
{
    do {
        /* Do your business here */
        // ...

        /* return detected */
        if (flag) {
            return;
        }
    } while(1);
   
    return;
}

使用特权

评论回复
17
dlyt_test001| | 2012-7-17 14:41 | 只看该作者
4# dlyt_test001 请问不合规范是什么意思?
loveme1949 发表于 2012-7-17 11:42

对于嵌入式开发,源代源写完之后,都要经过针对代码的测试(不是代码调试)。
具体可搜索“CMM等级”、Capability Maturity Model

使用特权

评论回复
18
liang7143| | 2012-7-17 14:44 | 只看该作者
中断可能随时发生,你怎么知道是什么程序被中断呢,被中断的程序用了多少堆栈,你怎么知道呢,

这种想法用RTOS可以实现,在中断中将某个任务直接删除就可以了,因为每个任务有独立的堆栈 ...
ayb_ice 发表于 2012-7-17 11:48


这里已经讲的很清楚了
简单点 就是在中断中修改 PC
问题是修改PC 将给软件处理带来茫茫多的问题,处理不当,程序随时崩溃

使用特权

评论回复
19
w522930954| | 2012-7-17 16:52 | 只看该作者
出栈的时候改SP

使用特权

评论回复
20
受不了了| | 2012-7-17 20:04 | 只看该作者
不按套路出牌的事情少做

使用特权

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

本版积分规则

10

主题

49

帖子

0

粉丝