Questions tagged «state-machines»

8
为什么有状态元素的输出通常命名为Q?
在逻辑电路图中,我已经看到了各种命名逻辑门和组合电路的输入和输出的约定。但是,诸如锁存器和触发器之类的有状态元素通常将其“状态”称为Q。我怀疑与理论计算机科学中的抽象有限状态机有联系,其中“状态”也常被称为Q(所以我问他们也 :-) 但是为什么人们会选择这封特殊信呢?

11
VHDL面试问题-检测数字是否可以除以5而无余数
我看到了有关VHDL的一个不错的面试问题-构建一个可以接收数字并检测是否可以将其除以5而没有余数的系统。我试图用状态机解决这个问题(我想他们不希望您使用mod或rem),而我确实取得了初步的成功(像5、10、15这样的数字以及像20、40、80这样的数字都可以工作),其他数字(例如130、75等)对我来说却失败了。 我将展示我的状态机,但这是一团糟(不是代码,是绘图),而且就像我说的那样,甚至无法正常工作。 基本上,我想做的是写下可被5整除的二进制数,并构建一个适用于它们的状态机。 如果您能向我展示如何解决此问题以及面对此类问题时如何思考,我将非常高兴。 谢谢!

6
串行协议定界/同步技术
由于异步串行通信甚至在当今的电子设备中也很普遍,我相信我们许多人会不时遇到这样的问题。考虑与串行线(RS-232或类似产品)连接并且需要连续交换信息的电子设备D和计算机。即每个发送一个命令帧,并每个发送一个状态报告/遥测帧答复(报告可以作为对请求的响应发送,也可以独立发送-在这里并不重要)。通信帧可以包含任何任意二进制数据。假设通信帧是固定长度的分组。PCPCX msDY ms 问题: 由于协议是连续的,因此接收方可能会失去同步,或者只是在进行中的发送帧中间“加入”,因此它只是不知道帧起始位置(SOF)在哪里。根据数据相对于SOF的位置,数据具有不同的含义,接收到的数据可能会永久损坏。 所需的解决方案 可靠的定界/同步方案可在恢复时间短的情况下检测SOF(即重新同步所需的时间不超过1帧)。 我了解(并使用了一些)的现有技术: 1)标头/校验和 -SOF作为预定义的字节值。帧末的校验和。 优点:简单。 缺点:不可靠。恢复时间未知。 2)字节填充: 优点:可靠,快速恢复,可与任何硬件一起使用 缺点:不适用于固定大小的基于帧的通信 3)第9位标记 -在每个字节之前附加一个位,而SOF标记为1和数据字节标记为0: 优点:可靠,快速恢复 缺点:需要硬件支持。大多数PC硬件和软件未直接支持。 4)第8位标记 -上面的一种模拟,同时使用第8位而不是第9位,每个数据字仅保留7位。 优点:可靠,快速的恢复,可与任何硬件一起使用。 缺点:需要从/到常规8位表示到/从7位表示的编码/解码方案。有点浪费。 5)基于超时 -假定SOF为某个已定义的空闲时间之后的第一个字节。 优点:无数据开销,简单。 缺点:不太可靠。在较差的计时系统(如Windows PC)上无法很好地工作。潜在的吞吐量开销。 问题: 还有哪些其他可能的技术/解决方案可以解决该问题?您能否指出上面列出的缺点,可以轻松解决这些缺点,从而消除它们?您(或您将)如何设计系统协议?
24 serial  communication  protocol  brushless-dc-motor  hall-effect  hdd  scr  flipflop  state-machines  pic  c  uart  gps  arduino  gsm  microcontroller  can  resonance  memory  microprocessor  verilog  modelsim  transistors  relay  voltage-regulator  switch-mode-power-supply  resistance  bluetooth  emc  fcc  microcontroller  atmel  flash  microcontroller  pic  c  stm32  interrupts  freertos  oscilloscope  arduino  esp8266  pcb-assembly  microcontroller  uart  level  arduino  transistors  amplifier  audio  transistors  diodes  spice  ltspice  schmitt-trigger  voltage  digital-logic  microprocessor  clock-speed  overclocking  filter  passive-networks  arduino  mosfet  control  12v  switching  temperature  light  luminous-flux  photometry  circuit-analysis  integrated-circuit  memory  pwm  simulation  behavioral-source  usb  serial  rs232  converter  diy  energia  diodes  7segmentdisplay  keypad  pcb-design  schematics  fuses  fuse-holders  radio  transmitter  power-supply  voltage  multimeter  tools  control  servo  avr  adc  uc3  identification  wire  port  not-gate  dc-motor  microcontroller  c  spi  voltage-regulator  microcontroller  sensor  c  i2c  conversion  microcontroller  low-battery  arduino  resistors  voltage-divider  lipo  pic  microchip  gpio  remappable-pins  peripheral-pin-select  soldering  flux  cleaning  sampling  filter  noise  computers  interference  power-supply  switch-mode-power-supply  efficiency  lm78xx 

5
微控制器中的中断处理和FSM示例
最初的问题 我对微控制器中的中断处理有一个一般性的问题。我正在使用MSP430,但我认为这个问题可能会扩展到其他uC。我想知道是否经常在代码中启用/禁用中断是一种好习惯。我的意思是,如果我有一部分对中断不敏感的代码(或者更糟糕的是,出于某种原因,一定不能监听中断),那么这样做会更好: 在关键部分之前禁用中断,然后在其后重新启用它们。 在相应的ISR中放置一个标志,并(而不是禁用该中断),在关键部分之前将标志设置为false,然后在紧要部分之前将其重置为true。防止执行ISR的代码。 两者都不提供,因此欢迎提出建议! 更新:中断和状态图 我将提供具体情况。让我们假设我们要实现一个状态图,该状态图由4个块组成: 过渡/效果。 退出条件。 进入活动。 做活动。 这就是教授在大学里教给我们的。遵循此方案可能不是最好的方法: while(true) { /* Transitions/Effects */ //---------------------------------------------------------------------- next_state = current_state; switch (current_state) { case STATE_A: if(EVENT1) {next_state = STATE_C} if(d == THRESHOLD) {next_state = STATE_D; a++} break; case STATE_B: // transitions and effects break; (...) } /* Exit activity …

3
同时按下相同的按键行
我正在设计VHDL中的键盘。仅按一个键,一切正常。我正在状态机中扫描每一列的按键,并且在没有按键按下的情况下,这是pin4pin6pin7pin2 = "0000"我切换到下一状态以扫描下一列的条件。因此我设置的列pin3pin1pin5顺序地"001","010"和"100"。 在扫描pin3pin1pin5如"001",如果pin4pin6pin7pin2是"0100"则简单地“9”被按下。我在VHDL中声明pin4pin6pin7pin2为输入和pin3pin1pin5输出端口。当我同时按6和9 pin6和pin7时high。读取第一个按键,第二个按键被忽略。当我按下3和7的同时,第一个用几毫秒压胜前,第一个键被读取时,第二个键被忽略,pin2并且pin4是high。 这是棘手的部分。当我同时按下4和6时,我期望pin7是,high但是变成了low和pin4pin6pin7pin2 = "0000",我不知道如何以及为什么。因为"0000"检测到没有按下任何键,所以状态机从一个状态跳到另一个状态。在按住4和6的情况下,如果一次按下并离开4次,就会检测到6次被按下了6次,这是一个很大的错误。如果您能帮助我进行调试,我将非常高兴! “ 1”和“ 2”发生相同的情况,仅对于同一行中的键,“ 7”和“ 8”发生相同的情况。由于这是一个正在进行的项目,因此我无法将我的VHDL代码放在网上:(如果您能给我一些克服该问题的技巧,我将非常高兴! 下面,我没有将我的代码上传到开发板上,没有代码在运行。连接Pin5到地,在1,2,4,5,7,8单次按压,*,0不转Pin3上,但如果林挤压6,然后加入4-同时LED Pin3指示灯是亮的Pin7LED是仍然有效,但当我的代码运行时,这不会发生。也许我连接错了,幸运的Pin7是,我不知道... 以下是键盘的原理图:

2
嵌入式编程状态机
我正在研究在具有gcc的32位MCU上实现非平凡的有限状态机(指定为UML分层状态图)。 是否有任何经验法则,哪些方法更好,哪些效果不好?我的直觉说,基于开关(甚至是计算的goto)的实现应该稍微更高性能,而通常认为基于功能指针的过渡表更易于维护。 另外:有人对嵌入式应用程序的Boost MSM进行了评估吗?我知道Boost MSM通常被认为是非常高效的,但是对于嵌入式应用程序,效率的衡量标准可能不同于PC编程领域。 有人知道MSM的编译状态机引擎是什么样吗?是更像开关跳转表还是更像函数指针转换表?它使用动态内存分配还是可以静态使用?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.