CubeIDE에서 학습한 FreeRTOS(1) - 신호 이벤트(이벤트 플래그)

저번 보도에서 FreeRTOS를 먼저 이동해 봤습니다.
이번에는FreeRTOS의 주요 기능을 체험해 보고 싶습니다.

개시하다


CMSIS-RTOS


당초 동작 확인에서 Freertos의 I/F를 완전히 사용하고 싶었다.
하지만 STM32 큐브IDE의 생성 코드를 보기 위해 CMSIS I/F로 싸여 있는 것 같습니다.
고향에 가면 풍속을 따른다.규격은 아래와 같다.
Function Overview
http://www.keil.com/pack/doc/CMSIS/RTOS/html/functionOverview.html

선택 기능


RTOS는 임무 간 통신, 임무 간 통신 중 가장 간단한 표지이다.
앞서 설명한 CMSIS에 따르면 이것을 "신호 활동"이라고 하는 것 같습니다.이번에 그거 소개할게요.

정편


1. 환경


저번 보도와 같습니다.
또한 FreeRTOS의 유효성화와 퀘스트 추가 등은 이 글을 모방한 것이기 때문에 먼저 시도해 보시기 바랍니다.
  • IDE: STM32CubeIDE
  • 평가판: STM32L4 Discovery kit IoT node - 모델 B-L475E-IOT01A
  • 2.해보자!


    실현 방법은 다음과 같다.소박하게 고기능.
  • UART 수신 중단
  • 수신 중단의 뜻을 작업에 알림
  • 이벤트를 받는 미션은 메아리입니다.
  • 2-1. U(S) ART 중단 유효성


    Device Configuration Tool(ioc 파일이 열린 상태)의 왼쪽에 있는 Categories에서 Connectivity-USART1을 선택합니다.
    그런 다음 NVIC Settings 탭에서 중단을 설정합니다.

    설정이 변경되었으니 코드 생성도 잊지 마세요!

    2-2. 설치 중단


    main.c의 위쪽, "/*USER CODE BEGIN0*/"의 위치는 다음과 같습니다.
    /* USER CODE BEGIN 0 */
    uint8_t g_RxData;
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
      /* Re-Initialize Rx */
      HAL_UART_Receive_IT(&huart1, &g_RxData, 1);
      /* Set Signal */
      osSignalSet(myTask02Handle, 1);
    }
    
    /* USER CODE END 0 */
    

    2-3. 임무 실현


    사용자 작업은 다음과 같습니다.
      /* USER CODE BEGIN StartTask02 */
      /* Initlize Rx */
      HAL_UART_Receive_IT(&huart1, &g_RxData, 1);
      /* Infinite loop */
      for(;;)
      {
        /* Wait Signal */
        osSignalWait(1, osWaitForever);
        /* Echo Back */
        HAL_UART_Transmit_IT(&huart1, &g_RxData, 1);
        osDelay(1);
      }
      /* USER CODE END StartTask02 */
    

    2-4. 시험해 보다


    테라테임으로 동작을 확인했는데 무사히 입력한 문자가 메아리가 울렸다(잡)!

    3. 간단한 해설


    실현 방법의 평론은 실제 동작과 마찬가지로 이렇게 말하는 것은 확실히 너무 난잡하다.웃다 웃다

    3-1. 신호 이벤트(이벤트 플래그)는


    시그널 이벤트(이벤트 플래그)는 이름 그대로 이벤트입니다(=무슨 일이 일어났습니까!)라는 공지 메커니즘이 있습니다.
    이 예에서 이벤트는 받은 정보를 임무에 전달하는 것입니다.
      /* Set Signal */
      osSignalSet(myTask02Handle, 1);
    
    에서 이벤트를 설정합니다.첫 번째 매개 변수는 작업 제어점입니다.
        /* Wait Signal */
        osSignalWait(1, osWaitForever);
    
    활동을 기다리다.두 번째 파라미터는'무한 기다림'이라는 뜻이다.
    동시에 존재하는 매개 변수 '1' 은 이벤트를 표시하는 비트입니다.
    참고로 CMSIS 사양은 다음과 같습니다.
    Signal Events
    http://www.keil.com/pack/doc/CMSIS/RTOS/html/group__CMSIS__RTOS__SignalMgmt.html

    3-2. U(S) ART 수신 중단


    다음 호출을 먼저 하지 않으면 수신 중단을 할 수 없습니다.
    또 새치기 처리 프로그램을 통해 다시 불러내지 않으면 이후 새치기는 올라가지 않는다.그래서 여러 곳에 기재되었다.
      HAL_UART_Receive_IT(&huart1, &g_RxData, 1);
    
    파라미터는'1byte를 받으면 중단을 높여주세요'입니다.

    3-3. 문제점


    작업 (이벤트 수신 측) 에서 수신 데이터를 추출했지만, 시간적으로 느릴 수 있습니다.
    본래 새치기해서 데이터를 받은 후 어떤 수단으로 임무를 통지해야 했다. (다음 보도에 대한 복선을 써 보았다.)

    끝말


    uITTRON 등에 비해 매우 간단하고 알기 쉬워 사용하기에 편리합니다!
    다음에도 임무 간 통신과 메시지 하나하나에 대한 기사를 쓸 예정이다.

    좋은 웹페이지 즐겨찾기