状态机

状态机代码实现

[亡魂溺海] 提交于 2019-11-29 21:44:46
因为这篇文章的目的是游戏界面的状态机实现,所以专门写了一个state_demo.py文件,让大家可以更加方便的看代码。 游戏启动代码 开始是 pygame的初始化,设置屏幕大小为c.SCREEN_SIZE(800, 600)。所有的常量都保存在单独的constants.py中。 import os import pygame as pg import constants as c pg.init() pg.event.set_allowed([pg.KEYDOWN, pg.KEYUP, pg.QUIT]) pg.display.set_caption(c.ORIGINAL_CAPTION) SCREEN = pg.display.set_mode(c.SCREEN_SIZE) SCREEN_RECT = SCREEN.get_rect() 1 2 3 4 5 6 7 8 9 load_all_gfx函数查找指定目录下所有符合后缀名的图片,使用pg.image.load函数加载,保存在graphics set中。 GFX 保存在resources/graphics目录找到的所有图片,后面获取各种图形时会用到。 def load_all_gfx(directory, colorkey=(255,0,255), accept=('.png', '.jpg', '.bmp', '.gif'

状态机

送分小仙女□ 提交于 2019-11-29 20:55:52
always @(*) begin case(state) A: out=0; if (in) nest_state=A; else next_state=B; B: out=1; if(in) next_state=B; else next_state=A; default:out=0; endcase end always @(posedge clk, posedge areset) begin if(arset) state=A; else state=next_state; end endmodule 来源: https://www.cnblogs.com/baihuashan/p/11531966.html

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

此生再无相见时 提交于 2019-11-29 20:30:32
由于时间太少,偶尔才花点时间谢谢这个,废话不多说,下面来简单讲解下词法分析器的实现过程。 一下内容包括: 1:讲解简单词法分析器的实现 2:用C语言验证 注意:词法分析器可以用在命令解释器上,原理是一样的。 首先词法分析器的任务就是识别单词的属性,比如在编程语言中是关键字还是标识符或者是数字等等,这些工作就是词法分析需要做的。 下面我们来通过一个非常简单的例子来说明如何让构建。 假设现在又一下关键字需要识别,其id号已经做了下面规定,如果待检测的单词不在其中,则视为标识符,并保存其标识符,如果在其中,则输出id号。 关键字 ID uint8 1 uint16 2 uint32 3 int8 4 int16 5 int32 6 if 20 for 21 while 22 switch 23 case 24 goto 25 那么如何来识别出单词呢? 一个简单粗暴的方法就是直接判断,我们将其全部定义为字符串, 一个一个判断,这种方式最简单易懂,但是这种方式的效率极低 ,效率低的原因就是每次对其进行遍历,从头开始匹配,如果匹配返回,如果不匹配,继续下一个,这样时间并不确定,而且在最坏情况下的时间复杂度为O(N)。如果将其在嵌入式上面用过命令解释器,基本不可靠。所以下面来说在利用状态机实现该过程,时间复杂度为O(1),即不管输入那种类型,只需要一次便可得到输出结果,并不需要反复遍历

Linux PHY几个状态的跟踪

↘锁芯ラ 提交于 2019-11-29 17:17:14
前面文章零零星星地分析了PHY,本来想完整地,系统地做分析,发现工程量太大了,而自己又一知半解,所以只好各个击破,一点一点来分析。本文主要分析了设备上电、拨出网线、插上网线、自动协商等过程的PHY状态。 MAC驱动和PHY驱动 PHY一般和具体的MAC控制驱动联系一起,这里以TI的MAC驱动为例,由它切入到PHY驱动。Linux内核通过mdio总线访问、控制PHY,源码实现在driver/net/phy/mdio_bus.c中。下面是mdio扫描、找到并注册phy的过程: davinci_mdio_probe ->mdiobus_register -> device_register -> mdiobus_scan -> get_phy_device -> get_phy_id // 读寄存器 -> phy_device_create -> INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine); // !!!!!!初始化状态机函数 -> phy_device_register 在phy_device_create中做了大量的初始化工作,比如默认就是使能自动协商,另外调用INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine)创建phy的状态机,—

Saga分布式事务

人盡茶涼 提交于 2019-11-29 16:33:07
一、简介 与分布式事务TCC一样,目的都是为了在各个服务中正常使用事务。和TCC相比,Saga没有“预留”动作,操作都是直接提交到库。其中: 每个Saga由一系列sub-transaction Ti 组成 每个Ti 都有对应的补偿动作Ci,补偿动作用于撤销Ti造成的结果 既然Saga的操作都是直接提交到库中,那么当后续的服务操作失败时,我们需要一种方法将已被改变的值更改为之前的状态。 为此Saga定义了两种恢复策略: backward recovery:向后恢复,补偿所有已完成的事务,如果任一子事务失败,则撤销掉之前所有成功的sub-transation,使得整个Saga的执行结果撤销。 forward recovery:向前恢复,重试失败的事务,假设每个子事务最终都会成功。适用于必须要成功的场景,此处不需要补偿事务。 显然,向前恢复没有必要提供补偿事务,如果你的业务中,子事务(最终)总会成功,或补偿事务难以定义或不可能,向前恢复更符合你的需求。 注意事项: 对于服务来说,实现Saga有以下这些要求: Ti和Ci是幂等的。假设在执行Ti的时候超时了,如果采用重传策略则会再次发送Ti,那么就有可能出现Ti被执行了两次,所以要求Ti幂等。而如果Ci也超时了,就会尝试再次发送Ci,那么就有可能出现Ci被执行两次,所以要求Ci幂等。 Ci必须是能够成功的,如果无法成功则需要人工介入

软件工程第四章(第二部分)

喜你入骨 提交于 2019-11-29 16:01:54
第四章 面向对象方法——UML **大家想一起学习交流的可以加群,QQ:755422568。** UML是一种可视化语言(也是一种一般性语言),用于规约系统的制品、构造系统的制品、建立系统制品的文档,可作为软件需求规约、设计和实现的工具。 二、UML的模型表达格式 UML的图形化工具分为两类: 结构图:用于表达系统或系统成分的静态结构模型。 行为图:用于表达系统或系统成分的动态结构模型。 (1)、类图 类图是可视化地表达系统静态结构模型的工具,通常包含类、接口、关联、泛化和依赖等关系。 类图是构件图和部署图的基础 1)、创建一个系统类图,要涉及以下4个方面: ①模型化待建系统中的概念,形成类图中的基本元素。 ②模型化待建系统中各种关系,形成系统的初始类图。 ③模型化系统中的协作,给出系统的最终类图。 ④模型化逻辑数据库模式。 (2)、用况图(填空题) 用况图是一种表达系统功能模型的图形化工具,通常包含 主题、用况、参与者、关联、泛化、依赖 。 use case图支持系统功能的建模,交互图支持系统交互的建模,状态图支持系统生存周期的建模。 1)、主题 2)、用况 用况通过一组动作序列来规约系统功能,并且该功能是通过与操作者之间交互给予体现的。 用况可用于整个系统,也可以用于子系统、单个类和接口。 3)、参与者 表达了一组高内聚的角色,一个参与者表达了系统交互的人、硬件或其他系统的角色

进阶项目(1)字符状态机

寵の児 提交于 2019-11-29 12:25:54
写在前面的话 作为一个电子男,一直被女孩子认为是刻板、不懂浪漫的,其实不然,我们可以以我们独特的方式来表达我们的浪漫情怀。这一节,梦翼师兄就用我们电子男特有的方式对我们最亲爱的人说一声 I Love You ! 项目 需求 设计一个电路,输入端 cap_flow 输入的是随机的大写字母数据流,输入端 low_flow 输入的是随机的小写字母数据流,输出端 output_flow 输出的是从两个输入字母流中检出的字符所组成的最深情的一句话 I Love You ! (注:大写字母数据和小写字母的产生方式均是用 ASCII 值来实现的) 解决方案 状态机通过检测 cap_flow 端口和 low_flow 端口的数据流 , 分 11 个状态来完成检测 , 其中 8 个状态依次捕获 “ I Love You ” 中每个字母的 ASCII 值 , 每当捕获到相应字符的 ASCII 值 , 则将相应字符的 ASCII 值输出到输出寄存器 output_flow , 另外 3 个状态是用于输出 I 之后空格的 ASCII 值、 Love 之后的空格的 ASCII 值以及 You 之后的 “ ! ” 的 ASCII 值。 系统架构 模块功能介绍 模块名 功能描述 FSM 检测出I Love You! 顶层模块端口描述 端口名 端口说明 clk 系统时钟输入 rst_n 系统复位 Cap_flow

Vivado ILA Advanced Trigger的使用

微笑、不失礼 提交于 2019-11-29 09:41:44
在FPGA工程中经常会因为debug手段有限无法捕捉到错误状态,ila的basic使用能够满足大部分捕捉要求,在不能满足捕捉条件时,编写中间逻辑也可以触发异常状态。vivado提供了 ILA Advanced Trigger,通过编写触发状态机达到触发条件。今天写了简单的debug程序,跑了下 ILA Advanced Trigger,没有太多惊喜,可能小程序,体验不出其特殊价值,期待后面复杂工程的检验。 程序是一个计数器,在循环计数,通过设置VIO来产生触发条件。代码段如下: //计数器循环计数 reg[31:0] timer_cnt; always@(posedge sys_clk) timer_cnt <= (timer_cnt >= 32'd49_999_999) ? 0 : timer_cnt + 32'd1; //产生trigger信号 wire vio_in;//默认初值是0 reg vio_1r; reg vio_2r; reg vio_rise; always@(posedge sys_clk) begin vio_1r <= vio_in; vio_2r <= vio_1r; vio_rise <= ~vio_2r & vio_1r; end //例化VIO核 vio_0 vio( .clk(sys_clk), .probe_out0(vio_in) ); /

Unity进阶:PlayMaker

岁酱吖の 提交于 2019-11-29 05:51:09
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top 优梦创客的游戏讲堂:https://91make.ke.qq.com 『优梦创客』的微信公众号:umaketop 您可以自由转载,但必须加入完整的版权声明 PlayMaker基于状态机的可视化编程工具,playmaker内部实现会为其创建一个类,在其实例化和序列化时会有开销(建立通过缓冲池避免),对复杂度要求较高的逻辑也可以将其封装到PlayMaker的Action中 playMaker基于有限状态机,一个状态机包括若干个状态节点,组合在一起形成游戏逻辑。每个状态节点包括若干Action,这些Action对应的就是Unity内的具体游戏功能,如播放动画,移动位置 PlayMaker状态机不能单独存在(其本身也是继承自MonoBehaviour),选择一个GameObjec,- PlayerMaker -> Components -> Add FSM to Selected Objects;将状态机指定给选中的GameObject,一个GameObject可以有多个状态机 State(状态) 创建状态机后,默认拥有一个状态节点,也就是起始节点,名为State1

【状态机】谈谈自我经验和应用场景

烂漫一生 提交于 2019-11-29 03:34:30
前言   状态机在计算机领域中出现比较多,最近在做DM对话管理的时候,就有有限状态图的概念,又呼应了之前在钛动学到的一些状态机概念,当时状态机在整个公司纵横,但我不知道能灵活运用的人有多少。 FMS 有限状态机   先谈,有限状态机(FMS),FSM 解决一个输入序列,经过 FSM,最终停留在什么状态这样一个问题。比较注重的是系统的状态,和状态之间的转换,状态是历史输入的一种结果,对于一个系统而言,其输入和输出、边界、影响方面的因素都可能会改变状态,一般而言,输入会导致状态改变,而状态改变就可能会有输出,或者做出某些相应。 前端框架 React   前端框架的一种,这个自称是状态机实现,每一个组件都是状态机,这个是我认为最符合状态机定义的,点解?因为React接受外界输入action后,会根据state重新渲染组件,所以会带有观察者模式的感觉,所以我认为它更接近状态机的本质 —— 状态驱动 状态模式   状态模式是设计模式的内容,但和状态机不态一样。一个类如果有状态,那么其状态的表示是非常多的,而状态模式很多时候就用一个状态类代表其所处的状态。而DM就不一样, 对话系统的状态是很难穷举的。所以状态模式是一种比较低级的应用了。 来源: https://www.cnblogs.com/iCanhua/p/11444420.html