티스토리 뷰

Study/EmbeddedSystem

[Embedded] TrafficLight Simulation

생각많은 소심남 2014. 3. 30. 03:21


퇴근하고 와서 삽질하다가 드디어 된 결과물이다.

전에도 계속 언급했지만 edX에서 Embedded System Class를 수강중이고, TI Tiva C Launchpad를 이용해서 여러가지 프로젝트를 진행한다.

위 프로젝트는 그중에서도 신호등 시스템을 구현하는 건데, 시스템 설계나 프로그래밍 작성 측면에서 여러가지 생각을 하게끔 해줬다.


보통 임베디드 시스템을 설계하는데 있어서 중요한 건 현재 state가 무엇이냐와 들어올 입력에 대해서 어떻게 반응할 것이냐다. 그래서 보통 이런 걸 Finite State Machine으로 구현한다. 우리가 흔히 알고 있는 FSM은 Moore Machine( 현재 status가 다음 status와 Output을 결정하는 방식)과 Mealy Machine(현재의 status와 Input이 결과에 영향을 주는 시스템) 으로 나뉜다. 여기서는 Moore Machine 방식으로 구현했다.


프로그램 상에서는 다음과 같이 구현되었다.



여기서는 하나의 state를 구성하는 struct를 만들어놓고, 각 state에 대한 정보를 미리 넣어놓은 것이다. 잠깐 설명을 하자면 나는 총 9가지의 status를 가지고 있고, 각 state는 해당 state에 인식할 output 두개와 대기 시간, 그리고 어떤 입력을 받았을때 어떤 state로 넘어갈지를 미리 정해놓았다. 예를 들어서 fsm[0]은 goWest state인데 만약 내가 input으로 2을 받으면 state.next[2]에 해당하는 state인 waitWest로 transition이 일어날 것이다. 이런식으로 입력에 따른 NextState를 배열에 집어넣었다. 그러고 main에서는 다음과 같이 처리해주게 된다.



나도 생각했던 것보다 코드 양도 얼마 안되고 결과도 나오는 거 보고 신기했다. 

뭐 아무튼 결과는 이렇게 나온다.



댓글