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

[复制链接]
10778|23
 楼主| loveme1949 发表于 2012-7-17 09:40 | 显示全部楼层 |阅读模式
以前从来没有碰到过这样的情况,一时想懵了。从主程序进入一个子程序,是多重判定那种,包含for,if,while,延时等等,要求外部中断响应,中断程序结束后不在运行子程序,直接返回主程序中,请问怎样实现?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2012-7-17 10:57 | 显示全部楼层
中断设标志,子程序判断标志提前结束

你这种想法基本是没有道理的
shell.albert 发表于 2012-7-17 11:05 | 显示全部楼层
无语了,哪有这么干的
dlyt_test001 发表于 2012-7-17 11:13 | 显示全部楼层
这个思路很新颖!不过,不合规范!
 楼主| loveme1949 发表于 2012-7-17 11:21 | 显示全部楼层
2# ayb_ice
没有道理是个什么情况啊~~新手求解
 楼主| loveme1949 发表于 2012-7-17 11:42 | 显示全部楼层
4# dlyt_test001 请问不合规范是什么意思?
ayb_ice 发表于 2012-7-17 11:48 | 显示全部楼层
本帖最后由 ayb_ice 于 2012-7-17 11:50 编辑

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

这种想法用RTOS可以实现,在中断中将某个任务直接删除就可以了,因为每个任务有独立的堆栈
 楼主| loveme1949 发表于 2012-7-17 11:51 | 显示全部楼层
7# ayb_ice
是的,所以程序结束就要做出中断触发的,这也是我不知道怎么做的难点。。。。
love_myfamily 发表于 2012-7-17 11:52 | 显示全部楼层
hemporer 发表于 2012-7-17 11:55 | 显示全部楼层
用goto address;
 楼主| loveme1949 发表于 2012-7-17 12:07 | 显示全部楼层
10# hemporer
能在中断函数中goto到主函数里面吗?好像不能跨函数吧
ningling_21 发表于 2012-7-17 12:37 | 显示全部楼层
以前从来没有碰到过这样的情况,一时想懵了。从主程序进入一个子程序,是多重判定那种,包含for,if,while,延时等等,要求外部中断响应,中断程序结束后不在运行子程序,直接返回主程序中,请问怎样实现?
115598 ...
loveme1949 发表于 2012-7-17 09:40


你想让程序崩溃?
ningling_21 发表于 2012-7-17 12:39 | 显示全部楼层
2# ayb_ice
没有道理是个什么情况啊~~新手求解
loveme1949 发表于 2012-7-17 11:21


LZ想让程序崩溃?
原野之狼 发表于 2012-7-17 12:48 | 显示全部楼层
中断中设标志  子程序查询到该标志位就返回
 楼主| loveme1949 发表于 2012-7-17 13:09 | 显示全部楼层
14# 原野之狼
这样的话子程序要设定很多个 if ()retun(0);吧?特别是当子程序有延时的时候
原野之狼 发表于 2012-7-17 13:40 | 显示全部楼层

  1. void foo(int bar)
  2. {
  3.     do {
  4.         /* Do your business here */
  5.         // ...

  6.         /* return detected */
  7.         if (flag) {
  8.             return;
  9.         }
  10.     } while(1);
  11.    
  12.     return;
  13. }
dlyt_test001 发表于 2012-7-17 14:41 | 显示全部楼层
4# dlyt_test001 请问不合规范是什么意思?
loveme1949 发表于 2012-7-17 11:42

对于嵌入式开发,源代源写完之后,都要经过针对代码的测试(不是代码调试)。
具体可搜索“CMM等级”、Capability Maturity Model
liang7143 发表于 2012-7-17 14:44 | 显示全部楼层
中断可能随时发生,你怎么知道是什么程序被中断呢,被中断的程序用了多少堆栈,你怎么知道呢,

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


这里已经讲的很清楚了
简单点 就是在中断中修改 PC
问题是修改PC 将给软件处理带来茫茫多的问题,处理不当,程序随时崩溃
w522930954 发表于 2012-7-17 16:52 | 显示全部楼层
出栈的时候改SP
受不了了 发表于 2012-7-17 20:04 | 显示全部楼层
不按套路出牌的事情少做
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

49

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部