CubeIDE에서 학습한 FreeRTOS(1) - 신호 이벤트(이벤트 플래그)
이번에는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의 유효성화와 퀘스트 추가 등은 이 글을 모방한 것이기 때문에 먼저 시도해 보시기 바랍니다.
1. 환경
저번 보도와 같습니다.
또한 FreeRTOS의 유효성화와 퀘스트 추가 등은 이 글을 모방한 것이기 때문에 먼저 시도해 보시기 바랍니다.
2.해보자!
실현 방법은 다음과 같다.소박하게 고기능.
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 등에 비해 매우 간단하고 알기 쉬워 사용하기에 편리합니다!
다음에도 임무 간 통신과 메시지 하나하나에 대한 기사를 쓸 예정이다.
Reference
이 문제에 관하여(CubeIDE에서 학습한 FreeRTOS(1) - 신호 이벤트(이벤트 플래그)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/imagou/items/82ca955ab291b3878d01
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(CubeIDE에서 학습한 FreeRTOS(1) - 신호 이벤트(이벤트 플래그)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/imagou/items/82ca955ab291b3878d01텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)