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

Nucleus SE의 이벤트 플래그 그룹: 구성 및 API 사용 입문 가이드

Nucleus SE의 이벤트 플래그 그룹: 구성 및 API 사용 입문 가이드
RTOS Revealed 시리즈 보기

이벤트 플래그 그룹은 Nucleus SE에서 시그널과 유사하지만 더 풍부한 기능을 제공하는 경량, 유연한 태스크 간 통신 메커니즘입니다.

이벤트 플래그 사용하기

Nucleus SE에서 이벤트 플래그는 빌드 타임에 구성됩니다. 최대 16개 그룹을 정의할 수 있습니다. 구성하지 않으면 RTOS가 관련 데이터 구조와 API 코드를 모두 생략합니다.

이벤트 플래그 그룹 구성

이벤트 플래그 그룹 수

구성은 nuse_config.h의 #define 지시어로 제어됩니다. 핵심 매크로 NUSE_EVENT_GROUP_NUMBER는 애플리케이션이 사용할 그룹 수를 설정합니다(기본값 0). 16 초과 또는 음수 값은 nuse_config_check.h가 생성하는 컴파일 타임 #error를 유발합니다.

0이 아닌 값으로 설정하면 이벤트 플래그 서브시스템이 활성화되어 데이터 구조가 할당되고 API 인에이블이 고려됩니다.

API 활성화

각 서비스 콜은 nuse_config.h에 인에이블 매크로를 가집니다:

NUSE_EVENT_GROUP_SET NUSE_EVENT_GROUP_RETRIEVE NUSE_EVENT_GROUP_INFORMATION NUSE_EVENT_GROUP_COUNT 

기본적으로 모두 FALSE로 해당 기능 비활성화. API 사용을 위해 원하는 매크로를 TRUE로 설정. NUSE_EVENT_GROUP_NUMBER가 0인데 API를 활성화하면 컴파일 타임 에러 발생(NUSE_Event_Group_Count()는 항상 사용 가능).

기본 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를 코드에서 참조하면 링커가 구현 생략으로 에러를 냅니다.

이벤트 플래그 서비스 콜

Nucleus SE는 이벤트 플래그 관련 7개 서비스 콜을 제공하지만 4개만 구현:

전용 리셋 함수는 없으며, NUSE_Event_Group_Set()에 제로 플래그 마스크로 OR 연산해 전체 제로로 리셋 가능.

설정 및 검색 연산

이벤트 플래그는 비트이므로 이진 값으로 표현하는 것이 최적입니다. Nucleus SE는 nuse_binary.h를 제공해 b01010101 같은 모든 8비트 패턴 매크로를 정의합니다.

이벤트 플래그 설정

RTOS와 SE 모두 유사한 API 노출. RTOS 프로토타입:

STATUS NU_Set_Events(NU_EVENT_GROUP *group, UNSIGNED event_flags, OPTION operation); 

매개변수:

반환 값:

SE 대응:

STATUS NUSE_Event_Group_Set(NUSE_EVENT_GROUP group, U8 event_flags, OPTION operation); 

매개변수와 반환 코드는 RTOS 버전과 유사하며 NUSE_SUCCESS, NUSE_INVALID_GROUP, NUSE_INVALID_OPERATION.

구현 하이라이트

핵심 루틴은 operation을 확인하고 마스크 적용:

NUSE_CS_Enter(); if (operation == NUSE_OR) { NUSE_Event_Group_Data[group] |= event_flags; } else { /* NUSE_AND */ NUSE_Event_Group_Data[group] &= event_flags; } 

블로킹이 활성화된 경우(NUSE_BLOCKING_ENABLE), 함수는 모든 태스크를 순회하며 이 그룹에서 일시 중단된 태스크를 깨우고 블로킹 카운터 업데이트. 이후 우선순위 스케줄러 활성화 시 리스케줄 발생 가능.

일시 중단된 태스크는 플래그 상태 변경 시 재개되어 대기 조건을 평가할 수 있습니다.

2페이지 계속 >>


임베디드

  1. 캠 락(Cam Lock) 설명: 캐비닛을 은밀하게 보호하는 방법
  2. 아이 볼트(Eye Screws)란? 설계와 용도 전문가 가이드
  3. 그로밋 이해하기: 종류, 용도, 장비 보호 원리
  4. 스테인리스강 완벽 해설: 조성, 생산 공정, 글로벌 영향
  5. C# 기초: 입출력(Essential Input/Output) 완벽 가이드
  6. Nucleus SE의 메일박스: 구성 및 사용 실용 가이드
  7. Nucleus RTOS의 세마포어: 유틸리티 서비스 및 데이터 구조
  8. Nucleus SE의 세마포어: 개요, 구성, API 핵심
  9. 이벤트 플래그 그룹 마스터하기: Nucleus RTOS/SE의 유틸리티 서비스와 데이터 구조
  10. Nucleus SE 큐: 소개와 핵심 서비스 콜