如何跳出函数

2019-07-20 13:40发布

void main(void){
    whlie(1)
    {
        A:......
        B:......
        C:......
        D:......
        E:......
        F:......
    }
}
void TIM2_IRQHandler(void)
{
    if(a==1)......
}

主函数在不停的循环ABCDEF五步,如何能使到达TIM2并满足条件判断后,使主函数不管进行到哪一步,一律跳转到步骤C呢?
(我是用在机器的紧急停止按钮上的,检测到按钮按下了,不管在进行什么程序,一律停止并跳转到主程序的某一步)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
DongInker
1楼-- · 2019-07-20 15:13

enum{
TASK_A,
TASK_B,
TASK_C,
TASK_D,
TASK_E,
TASK_F,
};

volatile unsigned char  TaskState;

void main(void){
   TaskState = A;
    whlie(1)
    {
     switch(TaskState)
        {
        case A:
            break;
        
        case B:
            break;

        case C:
            break;

        case D:
            break;

        case E:
            break;

        case F:
            break;
    }
}
void TIM2_IRQHandler(void)
{
    if(a==1)
      {
       TaskState = C;
       }
}
dipolo
2楼-- · 2019-07-20 20:25
 精彩回答 2  元偷偷看……
DongInker
3楼-- · 2019-07-20 22:08
 精彩回答 2  元偷偷看……
dipolo
4楼-- · 2019-07-21 02:12
DongInker 发表于 2017-6-29 20:52
直接复位后执行,硬件直接处理掉,程序要根据自己的实际东西进行设计,按键处理是大几十毫秒级的,单片机随 ...

现在需要实际程序不能复位,复位后代价太大了,计算好久的程序好多变量都要重头来了(把变量周期性的存储起来也不适合我这实际),没有其他办法吗大哥?
dipolo
5楼-- · 2019-07-21 06:07
 精彩回答 2  元偷偷看……
dipolo
6楼-- · 2019-07-21 10:16
DongInker 发表于 2017-6-29 20:52
直接复位后执行,硬件直接处理掉,程序要根据自己的实际东西进行设计,按键处理是大几十毫秒级的,单片机随 ...

不知道setjmp()和longjmp()能不能用得上,我试下

一周热门 更多>