闲聊技术贴,关于状态机

dch4890164 2009-08-18 03:49:35
加精
状态机很重要,相当的重要
至少我知道有两个比较好的库,架构的原理都是状态机的原理,OPENGL LUA
运动控制软件当中很多架构也都是基于状态机的架构,或者说在运动控制软件当中没有用到状态机的很少
或许仅仅是你没有意识到而已
而且很多支持脚本的系统也都是基于状态机的
=====================================================================
现在谈状态机,内容不限,随便
大家可以举例现实当中的应用,原理,感想,亦或是其它
======================================================
本人比较关心的是,到底什么才是状态机?
大家可以去看编译原理上讲的状态机,和最开始的纸带存储器的状态机是一样的,但是明显的OPENGL LUA所使用的
状态机的概念又有所不同,这个问题困扰我很久了
=====================================================
今天的话题,只要是基于状态机的,你想谈什么 随便
理解最深最好的那个人100分相送,剩下100分给大家发,不知道我的级别是否还能加分(好像最多是200)如果可以我还会加
...全文
2444 151 打赏 收藏 转发到动态 举报
写回复
用AI写文章
151 条回复
切换为时间正序
请发表友善的回复…
发表回复
AUTOSAR之谜 2009-09-02
  • 打赏
  • 举报
回复
来看看高手出招
wenqinwuhai 2009-08-24
  • 打赏
  • 举报
回复
MARK
zwing1201 2009-08-24
  • 打赏
  • 举报
回复
关注
loomoo 2009-08-23
  • 打赏
  • 举报
回复
学习~~~
jking1989 2009-08-23
  • 打赏
  • 举报
回复
学习一下哈
fjcqv 2009-08-23
  • 打赏
  • 举报
回复
[Quote=引用 96 楼 intelliarm 的回复:]
晕,其实看了这个标题我下意识想起的全部都是硬件结构,我不是学计算机的,我学的是IC设计。
最早接触状态机是在数字电路设计这门课程里,设计的状态机最终结构是门级结构,当然也可以优化到晶体管级。
    我也没有用C或者其他高级语言实现过状态机,或者说可能实现过但是我并不把高级语言实现的程序叫做状态机。
我理解的状态机就是一种时序电路结构。
    要实现状态机必然有状态的存储和转换,这就要求使用时序电路最基本的组件:触发器,这正是所谓“上升沿触发”“下降沿触发”的根源所在,因为触发器的结构决定了同步状态机到底是在上升沿还是下降沿触发。

    写FPGA时我用的是Verilog 这种硬件描述语言里也有和C一样的case语句,当满足一定得语法描述的时候,综合器(相当于软语言的编译器)就会将硬件实现为状态机,所以搞过FPGA之后再结合对C的理,其实具有多级连续条件判断的程序结构都可以被理解为广义状态机。当然在数字电路里,状态机具有明确的数学定义,比如设计时应当把所有的状态的下一状态有合适的定义以避免进入死循环。我理解数字电路里的状态机主要用于条件判断还有有严格顺序和时间要求的场合,比如FPGA控制外部AD采样,就可以用状态机实现严格的AD时序。
    在程序中也是一样,我觉得最好的例子可能是游戏中的NPC,不考虑人工智能的前提下,NPC只能根据预设好的条件和用户的反馈做出回应,也就是可以这样说,NPC有n个状态,用回每回应一次就是一个“上升沿”(一次触发),NPC根据用户的选择从当前第k个状态跳转至第m个状态,当然状态跳转的范围是在n以内。开发人员要做的就是在某个状态让玩家去做相应的事比如:获得宝物、触发任务、升级等等。而实现这种结构的基本框架可能是switch...case...
    不是做软件开发的,呵呵,理解的和大家有所不同,其实状态机这个概念软硬均可实现,只要是能很好的服务于应用,为什么不应用呢?
[/Quote]

我现在是搞单片机和FPGA都搞。状态机在FPGA中应用确实很好。很多思想利用状态机来描述很方便。
在软件中使用状态机也是有用。像前面有人所说的几千个状态里面有多少是很相似的状态呢?很多状态都是一样的。中间一些bit变化。在cl里面实现确实给予switch()case:。前不久就根据状态机思想写了个按键驱动。
linyiisbluce 2009-08-22
  • 打赏
  • 举报
回复
很好!收获不小。
beyonld 2009-08-22
  • 打赏
  • 举报
回复
学习
wubaobao 2009-08-22
  • 打赏
  • 举报
回复
状态机的思想很有用,前几天看了一个用状态机实现的同时查找多个字符串的算法
FigoZhu 2009-08-22
  • 打赏
  • 举报
回复
往简单的想,就是一张二维的表格。
xdjsxdjs 2009-08-22
  • 打赏
  • 举报
回复
学习
dadalan 2009-08-22
  • 打赏
  • 举报
回复
状态机在项目中用的比较多,状态1+条件1----》状态2


状态2+条件2----》状态3.

楼主理解了吗
xuxingok 2009-08-22
  • 打赏
  • 举报
回复
up
yimingxh 2009-08-22
  • 打赏
  • 举报
回复
学习学习。。。。
wangchun_7788 2009-08-22
  • 打赏
  • 举报
回复
我来了 还不错啊
我家有奥特曼 2009-08-22
  • 打赏
  • 举报
回复
不懂,帮顶
favorxx 2009-08-22
  • 打赏
  • 举报
回复
关注
nwao7890 2009-08-21
  • 打赏
  • 举报
回复
太复杂了,留名,等我以后技术好了再研究
TearyWang 2009-08-21
  • 打赏
  • 举报
回复
fox513 2009-08-21
  • 打赏
  • 举报
回复
101
加载更多回复(129)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧