산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 임베디드

행사 플래그 그룹:소개 및 기본 서비스


RTOS 공개 시리즈 보기

이벤트 플래그 그룹은 이전 기사에서 소개되었습니다. Nucleus SE에서는 신호와 다소 유사하지만 더 큰 유연성을 제공합니다. 작업 간에 간단한 메시지를 전달할 수 있는 저비용이지만 유연한 수단을 제공합니다.

이벤트 플래그 사용

Nucleus SE에서 이벤트 플래그는 빌드 시 구성됩니다. 응용 프로그램에 대해 최대 16개의 이벤트 플래그 그룹이 구성될 수 있습니다. 이벤트 플래그 그룹이 구성되어 있지 않으면 이벤트 플래그 그룹과 관련된 데이터 구조 또는 서비스 호출 코드가 애플리케이션에 포함되지 않습니다.

이벤트 플래그 그룹은 여러 작업에서 안전하게 사용할 수 있도록 액세스가 제어되는 8개의 1비트 플래그 집합입니다. 하나의 작업은 이벤트 플래그의 조합을 설정하거나 지울 수 있습니다. 다른 작업은 언제든지 이벤트 플래그 그룹을 읽거나 특정 패턴의 플래그를 대기(폴링 또는 일시 중단)할 수 있습니다.

이벤트 플래그 그룹 구성

이벤트 플래그 그룹 수

Nucleus SE의 대부분의 측면과 마찬가지로 이벤트 플래그 그룹의 구성은 주로 #define에 의해 제어됩니다. nuse_config.h의 문 . 주요 설정은 NUSE_EVENT_GROUP_NUMBER입니다. , 애플리케이션에 대해 구성된 이벤트 플래그 그룹 수를 결정합니다. 기본 설정은 0(즉, 이벤트 플래그 그룹이 사용되지 않음)이며 최대 16까지 값을 설정할 수 있습니다. 잘못된 값은 nuse_config_check의 테스트에 의해 생성되는 컴파일 시간 오류를 발생시킵니다. h (이것은 nuse_config.c에 포함되어 있습니다. 따라서 이 모듈로 컴파일됨) 결과로 #error 컴파일 중입니다.

0이 아닌 값을 선택하는 것은 이벤트 플래그 그룹에 대한 "마스터 활성화"입니다. 이에 따라 일부 데이터 구조가 그에 따라 정의되고 크기가 조정되며, 이에 대한 자세한 내용은 이 시리즈의 뒷부분에 있습니다. API 활성화 설정도 활성화합니다.

API 사용

Nucleus SE의 모든 API 기능(서비스 호출)에는 활성화된 #define이 있습니다. nuse_config.h의 기호 . 이벤트 플래그 그룹의 경우 다음과 같습니다.

NUSE_EVENT_GROUP_SET NUSE_EVENT_GROUP_RETRIEVE NUSE_EVENT_GROUP_INFORMATION NUSE_EVENT_GROUP_COUNT 

기본적으로 모두 FALSE로 설정되어 있습니다. , 따라서 각 서비스 호출을 비활성화하고 구현 코드의 포함을 금지합니다. 애플리케이션에 대한 이벤트 플래그 그룹을 구성하려면 사용할 API 호출을 선택하고 활성화 기호를 TRUE로 설정해야 합니다. .

다음은 기본 nuse_config.h에서 발췌한 것입니다. 파일.

#define NUSE_EVENT_GROUP_NUMBER 0 /* 이벤트 그룹 수  시스템 - 0-16 */ #define NUSE_EVENT_GROUP_SET FALSE /* 서비스 호출 인에이블러 */ #define NUSE_EVENT_GROUP_RETRIEVE FALSE /* 서비스 호출 인에이블러 */ #define NUSE_EVENT_GROUP_INFORMATION FALSE /* 서비스 호출 인에이블러 */ #define NUSE_EVENT_GROUP_COUNT FALSE /* 서비스 호출 인에이블러 */ 

이벤트 플래그 그룹 API 기능이 활성화되고 이벤트 플래그 그룹이 구성되지 않은 경우 컴파일 시간 오류가 발생합니다(NUSE_Event_Group_Count() 제외). 항상 허용됨). 코드가 활성화되지 않은 API 호출을 사용하는 경우 애플리케이션에 구현 코드가 포함되지 않았기 때문에 링크 시간 오류가 발생합니다.

이벤트 플래그 서비스 호출

Nucleus RTOS는 다음 기능을 제공하는 이벤트 플래그와 관련된 7개의 서비스 호출을 지원합니다.

이러한 각 서비스 호출의 구현을 자세히 조사합니다.

재설정 기능이 제공되지 않는다는 점에 유의할 수 있습니다(Nucleus RTOS 또는 Nucleus SE에서). 이것은 의도적입니다. 재설정은 특별한 조건이 존재함을 의미합니다. 이벤트 플래그 그룹의 경우 유일한 "특수" 조건은 모두 0이며 NUSE_Event_Group_Set()으로 설정할 수 있습니다. .

이벤트 플래그 그룹 설정 및 검색 서비스

이벤트 플래그 그룹에서 수행할 수 있는 기본 작업은 하나 이상의 플래그를 설정하고 플래그의 현재 상태를 검색하는 것입니다. Nucleus RTOS와 Nucleus SE는 각각 이러한 작업에 대해 두 가지 기본 API 호출을 제공하며 여기에서 설명합니다.

이벤트 플래그는 비트이므로 이진수로 가장 잘 시각화됩니다. 표준 C는 이진 상수 표현을 지원하지 않기 때문에(8진수 및 16진수만) Nucleus SE 배포에는 유용한 헤더 파일인 nuse_binary.h가 포함되어 있습니다. – #define 포함 b01010101 형식의 기호 모든 256개의 8비트 값에 대해.

이벤트 플래그 설정

이벤트 플래그 설정을 위한 Nucleus RTOS API 호출은 매우 유연하여 AND를 사용하여 이벤트 플래그를 설정하고 지울 수 있습니다. 및 또는 작업. Nucleus SE는 작업 일시 중단이 선택 사항이라는 점을 제외하고 동일한 서비스를 제공합니다.

플래그 설정을 위한 Nucleus RTOS API 호출

서비스 요청 프로토타입:

STATUS NU_Set_Events(NU_EVENT_GROUP *그룹, UNSIGNED event_flags,
OPTION 연산),

매개변수:

그룹 – 사용자 제공 이벤트 플래그 그룹 제어 블록에 대한 포인터

event_flags – 작동할 플래그 패턴의 비트 값

작업 - 수행할 작업 NU_OR일 수 있음 (플래그 설정) 또는 NU_AND (플래그 지우기)

반품:

NU_SUCCESS – 통화가 성공적으로 완료되었습니다.

NU_INVALID_GROUP – 이벤트 플래그 그룹 포인터가 유효하지 않습니다.

NU_INVALID_OPERATION – 지정된 작업이 NU_OR이 아닙니다. 또는 NU_AND

플래그 설정을 위한 Nucleus SE API 호출

이 API 호출은 Nucleus RTOS API의 주요 기능을 지원합니다.

서비스 요청 프로토타입:

STATUS NUSE_Event_Group_Set(NUSE_EVENT_GROUP 그룹,
U8 event_flags, OPTION 연산);

매개변수:

그룹 – 플래그가 설정/삭제될 이벤트 그룹의 인덱스(ID)

event_flags – 작동할 플래그 패턴의 비트 값

작업 - 수행할 작업 NUSE_OR일 수 있음 (플래그 설정) 또는 NUSE_AND (플래그 지우기)

반품:

NUSE_SUCCESS – 통화가 성공적으로 완료되었습니다.

NUSE_INVALID_GROUP – 이벤트 플래그 그룹 인덱스가 유효하지 않습니다.

NUSE_INVALID_OPERATION – 지정된 작업이 NUSE_OR이 아닙니다. 또는 NUSE_AND

Nucleus SE의 이벤트 플래그 설정 구현

NUSE_ Event_Group_Set()의 초기 코드 API 기능 - 매개변수 확인 후 - API 호출 차단(작업 일시 중단) 지원 여부에 관계없이 일반적입니다. 논리는 매우 간단합니다.

NUSE_CS_Enter();if(작업 ==NUSE_OR){ NUSE_Event_Group_Data[그룹] |=event_flags;}else /* NUSE_AND */{ NUSE_Event_Group_Data[그룹] &=event_flags;} 

비트 패턴, event_flags , 지정된 이벤트 플래그 그룹에 OR 또는 AND로 연결됩니다.

나머지 코드는 작업 차단이 활성화된 경우에만 포함됩니다.

#if NUSE_BLOCKING_ENABLE  동안 (NUSE_Event_Group_Blocking_Count[그룹] !=0)  {  U8 지수; /* 차단된 작업이 있는지 확인 */  /* 이 이벤트 그룹의 */  for (index=0; index  {  if ((LONIB(NUSE_Task_Status[index]) ==  NUSE_EVENT_SUSPEND)  &&(HIINIB(NUSE_Task_Status[index]) ==그룹))  {  NUSE_Task_Blocking_Return[색인] =NUSE_SUCCESS;  NUSE_Task_Status[색인] =NUSE_READY;  휴식;  }  }  NUSE_Event_Group_Blocking_Count[그룹]--;  }  #if NUSE_SCHEDULER_TYPE ==NUSE_PRIORITY_SCHEDULER  NUSE_일정 변경(NUSE_NO_TASK),  #endif #endif NUSE_CS_Exit(); NUSE_SUCCESS를 반환합니다. 

이 이벤트 플래그 그룹에서 작업이 일시 중단(검색)되면 모든 작업이 다시 시작됩니다. 스케줄러에 따라 실행 기회가 있을 때 반환 조건이 충족되었는지 여부를 결정할 수 있습니다. 이벤트 플래그 검색 참조 아래.

2페이지로 계속>>


임베디드

  1. 캠 잠금 장치 소개 및 작동 방식
  2. 아이 나사 및 작동 원리 소개
  3. 그로밋 및 작동 원리 소개
  4. 스테인리스 스틸 소개 및 제조 방법
  5. C# 기본 입력 및 출력
  6. 사서함:소개 및 기본 서비스
  7. 세마포어:유틸리티 서비스 및 데이터 구조
  8. 세마포어:소개 및 기본 서비스
  9. 이벤트 플래그 그룹:유틸리티 서비스 및 데이터 구조
  10. 대기열:소개 및 기본 서비스