状态机

Tcp状态机

强颜欢笑 提交于 2019-11-27 01:31:02
1、为什么建立连接需要三次握手,断开连接需要四次握手? 举例来说,C与S要可靠的沟通,沟通之前要又准备工作,沟通完了,要有清理工作。 沟通之前的准备工作 C:我要跟你说话,你注意听(SYN) S:好的(ACK),我也要跟你说话,你注意听(SYN) C:好的(ACK) ........ 交流过程中 ....... 沟通完了的清理工作 C:我说完了(FIN) S:我知道了(ACK) S 再 说一些...... S:我说 完了(FIN) C:我知道了(ACK) tcp是全双工的, 建立连接,ACK的同时可以SYN,而断开连接,往往不满足条件,C说完了,S可能还要再说一会。 2、为什么,TIME_WAIT要经过 2个MSL(Maximum Segment Lifetime),才进入CLOSED? 考虑下面的情况,C回了ACK立即进入CLOSED,假如S没有收到ACK,站在S的角度,S认为:C还不知道我已经说完了,我要再说一遍。但是这个时候C已经CLOSED,怎么解决这个问题? 站在C的角度考虑,如果我回了ACK,S没有收到,那么S会重发FIN,从C回ACK,到C再次收到S的FIN,最多需要两个报文段周期。如果在两个报文段周期没有收到FIN,则说明,S肯定收到了我了ACK,进入CLOSED 转载于:https://www.cnblogs.com/nzbbody/p/4320925.html

多按键状态机的实现

久未见 提交于 2019-11-26 23:14:36
1. 简单按键检测 记得开始学习单片机的时候,写的按键扫描是这样的: if(KEY1 == 0) { delay_ms(20); if(KEY1 == 0) { while(KEY1 == 0); // 按键按下处理代码 } } 一看,有个20ms消除抖动时间,就是说我要在这里死等20ms,还有等待按键释放,我就是不放,你能怎么样?没办法只能做超时。那我想做长按1s呢?细思极恐,对于实际项目上的应用来说是很糟糕的事情,这不仅会拖慢你整个系统,还会出现,多个按键有时检测不到的问题。有没有更好的办法来实现呢?答案是肯定的,想想,如果这个20ms的延时用定时器来做,不就可以了吗!!! 2. 状态机 首先我们得了解什么是状态机?这个当然是问度娘了!!! 状态机可归纳为4个要素,即 现态、条件、动作、次态 。这样的归纳,主要是出于对状态机的内在因果关系的考虑。"现态"和"条件"是 因 ,"动作"和"次态"是 果 。详解如下: 现态 :是指当前所处的状态。 条件 :当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 动作 :条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。 次态 :条件满足后要迁往的新状态。"次态"是相对于"现态"而言的,"次态"一旦被激活,就转变成新的"现态"了。

编译原理之词法分析器(三)

蹲街弑〆低调 提交于 2019-11-26 19:04:02
上篇用了另一种方式构造词法分析,总体来说实现的过程比较明确,但是我们可以看到,上篇的分析仅仅只进行了少量的单词分析,如果将C语言中的32个保留字还有其他的操作符以及界限符加进入,其构造的状态机会异常的庞大,所以接下来将简化其状态机,使用查询匹配的方式,很明显这种方式有很大的确定,在该系列博客第一篇谈到,但是对于C语言这样的来说,构造完全的状态机太费事了,所以这也是一种取舍的方式。 下面是简化版的状态机,注意:该状态机只能区分单词的种类,单词的ID是通过遍历比较匹配得到的。 下面由于时间关系暂时先写到这,后面会继续写。 来源: https://www.cnblogs.com/listenscience/p/11935380.html

状态机

☆樱花仙子☆ 提交于 2019-11-26 17:34:19
状态机 偏基础: berkeley: Finite State Machines in Verilog 好文: 数字集成电路设计-12-状态机 在FPGA的电路实现当中FSM的应用是非常广泛的。根据状态机的输出得出的方式状态机可以分成两个大类,第一个是Moore型状态机,Moore型状态机的输出只与当前状态有关,一种状态就对应着一种输出。Mealy型状态机不仅与当前的FSM的状态有关,还与当前状态机的输入有关。相对来说,Moore机的状态更加稳定可靠,设计起来更容易理解。 使用verilog语言创建一个FSM模型,一般要经过以下几步: 首先是对FSM当中出现的状态进行编码; 对FSM的当前状态进行跟踪; 执行状态转换; 执行新旧状态的转换; 基于当前状态对输出进行赋值; Xilinx官网给了一个FSM的实现例子,可以参见 这个网页 。代码如下 // State Machine with single sequential block // // This example shows the use of the Vivado "fsm_encoding" attribute // // Acceptable values for this are: one_hot sequential johnson gray and auto. module fsm_test(clk,reset

Zeebe服务学习2-状态机

て烟熏妆下的殇ゞ 提交于 2019-11-26 17:18:14
1.什么是状态机? 第一次接触到这个名词,感觉自己是明白这个东东是啥的,但是后来发现,emm…,是的,只是理解了这个词而已。 贴一下官方介绍: 有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。在计算机科学中,有限状态机被广泛用于建模应用行为、硬件电路系统设计、软件工程,编译器、网络协议、和计算与语言的研究。 2.状态机有啥用? 说了那么多,show me the code!这个状态机具体能干啥?不然我学它干啥,屠龙之术,学了只能吹吹牛皮而已。 举个例子,介绍个简单的场景,现在有个流程:出库->修改库存->发货。 每个单据都有三个状态,Created,Running,Completed;我们一般会这样处理,调用新建出库单据,此时单据的状态是Created,当该单据没有确认完成之前,该单据是Running状态,如果确认这个新建成功了,则更新该单据为Completed状态; 如果想要继续执行这个流程,那么需要根据出库的单据上的状态做判断,如果是Running,那么还不能去·`修改库存`;如果是Completed状态了,那么去修改库存单据;

Unity基础(12)—— Animatior 的使用

六月ゝ 毕业季﹏ 提交于 2019-11-26 13:45:57
Animator 动画控制器的简介 利用状态机的原理来控制动画的播放。 一、为人物模型添加动画 1、在打开一个Unity文件后,检视窗口中的Animator 中没有状态机,如下图所示。需要自己添加一个动画控制器。 2、在project中创建一个状态机(动画控制器),将其命名为AC1,并将其拖到 Controller 上。 3、再打开动画控制器 AC1 ,在Asset 目录中找到准备好的动画,直接拖到状态机中即可。 或者先在动画状态机中创建一个空的状态,再选中 New State ,将需要的动画拖动到Motion中(或者在Motion中选取)。此时点击运行,即可让人物模型做出相应的动作。 4、选中 Hierarchy 面板中的人物模型,在Inspector 窗口中 Animator 组件下箭头所指的选项为是否将该运动应用到根节点上。当取消该选项时,人物只是在原地做相应的动作,根节点的坐标不变。 5、双击动画控制器中刚刚创建的状态State,可以对运动进行控制。 Loop Time 是对动作进行重复播放。 二、Animations 各项简介 在 Inspector 面板中的Animations 选项下,只有选中 Import Animation 才会出现动画的各个选项。每一个Animations 都包含了当前所选中 fbx 文件下所有的动画。 1、 Anim.Compression

状态机设计

笑着哭i 提交于 2019-11-26 10:04:20
  在状态机设计时,可以将状态机分为三个部分,      从上图可知OL没有和CS放在一起的,除了第四种,但是第四种中的CS处理中用了变量赋值的方法,信号值的变化在一个Process内完成,因此,可以放在一起。其他的三种由于采用的时信号赋值的方式。   如果在一个process里面既要完成状态变换,又要完成输出结果,这样会产生额外的latch。 进一步的解释可以是: 如图 该结构可以产生一个D触发器。 如图,却可以产生两个D触发器。 但是,我们在做状态机的跳转时只需要一个触发器就可以了,其他的可以在状态转换完成后用组合逻辑进行输出逻辑的运算。即在边沿触发的结构中白瞎了一个D触发器。 接着,如图所示 组合逻辑给出了下一个状态,而状态寄存器用于将该状态锁住,并等待下下个状态。 也就是说,组合逻辑既可以用于处理输入信号,也可以用于输出信号,还可以提供下一个状态的值。但状态机最好就是不要产生输出信号。 来源: https://www.cnblogs.com/gongchengqu/p/11933326.html

多循环操作状态机

∥☆過路亽.° 提交于 2019-11-25 21:57:46
多个时钟周期上的重复操作 verilog代码如下:在第一个时钟周期,sum初始化第一个值,在第4个时钟周期之后,动作流返回第一个事件控制表达式;disable位于reset中,以确保状态机正常进行初始化。 module add_4cycle( output reg [5:0] sum, input [3:0] data, input clk, input reset); always@(posedge clk) begin:add_loop if(reset==1'b1) disable add_loop; else sum<=data; @(posedge clk) if(reset==1'b1) disable add_loop; else sum<=sum+data; @(posedge clk) if(reset==1'b1) disable add_loop; else sum<=sum+data; @(posedge clk) if(reset==1'b1) disable add_loop; else sum<=sum+data; end endmodule tb代码如下: module tb(); reg [3:0] data; reg clk; reg reset; wire [5:0] sum; parameter cycle=20; initial begin