Advertisement
EditorRUS

State Machine Template [Expression 2]

Feb 1st, 2017
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. @name State Machine
  2. @inputs StateMachineClk
  3. @outputs Ports:table
  4. @trigger StateMachineClk
  5.  
  6. function popData() {
  7. Ports = Ports:merge(Ports["StateMachineDataTable", table][Ports["StateMachineDataIndex", number], table])
  8. Ports["StateMachineDataIndex", number] = Ports["StateMachineDataIndex", number] + 1
  9. }
  10.  
  11. #[
  12. Ports:
  13. Any Ports...
  14. StateMachineState
  15. StateMachineDataIndex
  16. StateMachineDataRoll
  17. StateMachineDataTable
  18. ]#
  19. function state_init() {
  20. local STATE_FREE = 0
  21. local STATE_BUSY = 1
  22.  
  23. if (first()) {
  24. Ports:clear()
  25. Ports["StateMachineState", number] = STATE_FREE
  26. Ports["StateMachineDataIndex", number] = 1
  27. Ports["StateMachineDataRoll", table] = table()
  28. Ports["StateMachineDataTable", table] = table()
  29. }
  30.  
  31.  
  32. if (clk(clkName()) & Ports["StateMachineState", number] == STATE_BUSY) {
  33. if (clk("resetState")) { reset() }
  34. else { clkName()() }
  35. }
  36.  
  37. if (StateMachineClk & !Ports["StateMachineState", number]) {
  38. Ports["StateMachineState", number] = STATE_BUSY
  39. "main_sequence"()
  40. local CurTime = 10
  41. for (I = 1, Ports["StateMachineDataRoll", table]:count()) {
  42. local Data = Ports["StateMachineDataRoll", table][I, table]
  43. timer(Data[1, string], CurTime+Data[2, number])
  44. Ports["StateMachineDataTable", table]:pushTable(Data[3, table])
  45. CurTime += Data[2, number]
  46. }
  47. timer("resetState", CurTime+1)
  48. }
  49. }
  50. state_init()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement