3087|5

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

遇难题,键盘 [复制链接]

遇到一个问题:
这样的,现在有一个函数,它有四种处理方法,A,B,C,D,它根据标志位选一个走下去,而在 A 中它也有四种方法,A1,B1,C1,D1,如此下去,A1中也有四种方法,,,,,,有五层,到第五层的时要返回到A,B,C,D的这个环,再继续  A 中的A1,B1,C1,D1,                     ,B,C,B1,C1,,,,,,,,处理方法类似但又不一样,D,D1完全相同,并且要求要立即结束,也就是不能结束后回到上一层,
请大家帮我想个解答方法.注意函数面对四种选择时要不停的查询四个标志位,这个是系统有要求的,
我用的笨方法算的,没学过计算机,看起来这像个树,
问题是系统要求,最好不要递归,用GOTO,也不行,让我烦躁的是那个D 因为要不停查询,我用的是DO ***  WHILE** 所以总是一结束就回到上一层,郁闷!!!!!!!!!!!!

最新回复

这个changstage就好似一个触发一样  详情 回复 发表于 2007-10-9 15:58
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这是一个标准的状态机思路

如果要在多层间嵌套一般是得用GOTO,因为这样的效率最高,也是GOTO存在的原因之一.

switch (StateMachin)
{
    case A:
    {
        //do sth && State change
        break;
    }
    case B:
    {
        break;
    }
    case C:
    {
        break;
    }
    ...
    case A1:
    {
        break;
    }
    case B1:
    {
        break;
    }
....
    default:
}
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
楼上哥们,我没学过状态机,但我看你这个和SWITCH CASE结构有什么区别啊
再说了,一个SWITCH 不能解决问题啊,它有五层呢,说白了就是要根据A,A1,A2,,,,,来决定是哪一个的B,C,D,B1,C1,D1,它们的标志位只有四个,没那么多,
问了很多人都说用状态机,谁能详细点说呢,
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
状态机这个学术点了,说白了就是从代码的角度去看你的过程逻辑.

你的过程是从一个"状态"经过一个的处理,触发,转移到另一个状态.

用代码怎么表达?

你可以这样

IF A
    DOSTH
ENDIF
IF B
    DOSTH
ENIF
对吧?对应A/B做不同的事

那用更形象的表达方式呢?
那是把你的对象整体看成一个东西,以不同的标志(可以为一些特殊值)然后处理该状态下要做的东西,外加管理好状态迁移
比如:
我,有上班,在家.这两个状态
那我可以这样来表示
#define ONWORK 1
#define ATHOME 2

unsigned char MEStateMachin = ATHOME;

...

switch (MEStateMachin)
{
    case ONWORK:
    {
        DOSTH();//做事,里面也可以有不同的状态,可以是新的,比如我做别的事有开始做,正在做,做完,等
        HAVELUCH();//吃午饭
        DOSTH();
        if (Finish())
        {   
            GOHOME();
            MEStateMachin = ATHOME;//状态迁移
        }
    }
    case ATHOME:
    {
        //思路同上
    }

    default:
    {
        //异常
    }
}

状态机一般只在本层面上工作,不传入下一层状态,不然会太复杂,调试的时候可能要郁闷
要进入下一层,那就用新的一组状态了.别不舍得

不知道我说清楚没有?
 
 
 

回复

103

帖子

0

TA的资源

一粒金砂(初级)

5
 
你的意思是不是说在chang stage那里该边到自己所要的状态
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
这个changstage就好似一个触发一样
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表