App state machine 만들기 #4 main.c

지난 포스트에서 app controller, app state들을 만들어 app의 역할 및 동작 방식에 대해 알아 보았습니다. 이번 포스팅에서는 main.c의 infinite loop에서 app initial 과 app의 loop등을 어떻게 호출하는지 확인해 보도록 하겠습니다.

 

아래 main.c의 일부분을 보도록 하겠습니다.

int main(void)
{
...
  /* USER CODE BEGIN 2 */
  app_first_init();
  app_second_init();
  app_third_init();
  app_start_app(APP_first);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    app_process();
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
}
 

아래의 function call로 세개의 app을 초기화하고 app controller에 등록하게됩니다.

  • app_first_init() - 첫번째 app 초기화 및 app controller에 등록
  • app_second_init() - 두번째 app 초기화 및 app controller에 등록
  • app_third_init() - 세번째 app 초기화 및 app controller에 등록

바로 이전 포스트의 코드를 상기해보시면 쉽게 알 수 있을 것입니다.

 

초기화를 마치고 app_start_app(APP_first) 를 호출함으로써 첫번째 app을 active 상태로 만듭니다.

그리고 whille(1) 문에 app_process()를 호출합니다. app_process()는 지난번 app controller에서 보았 듯 아래와 같은 역할을 함수입니다.

  • app_on_msg_app() - 시스템에서 받은 메시지 현재 active app 에 전달
  • app_loop_current_app() - 현재 active app 의 loop() 함수 실행
/**
  * @brief  This function is executed in case of ...
  * @retval ..
  */
void app_process(void)
{
  app_on_msg_app();
  app_loop_current_app();
}
 

이렇게 각 app의 초기화 및 controller의 실행방법까지 알아봤습니다. 다음 마지막 포스트에서는 각각의 app state들이 어떻게 스위칭 되는지 그리고 전반적으로 app state를 어떻게 구성해야 하는지 알아보도록 하겠습니다.

 

이상입니다.