이벤트 플래그 그룹 마스터하기: Nucleus RTOS/SE의 유틸리티 서비스와 데이터 구조
RTOS Revealed 시리즈 보기
이 기사는 이벤트 플래그 그룹에 대한 탐구를 이어갑니다.
이벤트 플래그 그룹 유틸리티 서비스
Nucleus RTOS는 이벤트 플래그 그룹과의 상호작용을 간소화하는 3가지 전용 API 콜을 제공합니다: 상세 그룹 정보 조회, 총 그룹 수 획득, 애플리케이션 내 모든 그룹 포인터 접근. 처음 두 함수는 Nucleus SE에서 완전히 지원됩니다.
이벤트 플래그 그룹 정보
이 서비스 콜은 지정된 이벤트 플래그 그룹에 대한 핵심 데이터를 전달합니다. Nucleus SE에서는 인터페이스가 축소되어 객체 명명과 일시 중단 순서가 생략되고, 태스크 일시 중단 정보는 기능 활성화 시에만 반환됩니다.
이벤트 그룹 정보를 위한 Nucleus RTOS API 콜
서비스 콜 프로토타입:
STATUS NU_Event_Group_Information(NU_EVENT_GROUP *group,
CHAR *name, UNSIGNED *event_flags, UNSIGNED *tasks_waiting,
NU_TASK **first_task);
매개변수:
group – 사용자 제공 이벤트 플래그 그룹 컨트롤 블록 포인터
name – 그룹 이름용 8자 버퍼(null 종결자 포함)
event_flags – 현재 플래그 값을 수신할 변수 포인터
tasks_waiting – 이 그룹에서 일시 중단된 태스크 수를 수신할 변수 포인터
first_task – 첫 번째 일시 중단된 태스크 포인터를 수신할 NU_TASK 변수 포인터
반환:
NU_SUCCESS – 콜 성공.
NU_INVALID_GROUP – 제공된 그룹 포인터 무효.
이벤트 그룹 정보를 위한 Nucleus SE API 콜
이 API는 RTOS 대응과 동일한 핵심 기능을 제공합니다.
서비스 콜 프로토타입:
STATUS NUSE_Event_Group_Information(NUSE_EVENT_GROUP group,
U8 *event_flags, U8 *tasks_waiting, NUSE_TASK *first_task);
매개변수:
group – 이벤트 플래그 그룹 인덱스
event_flags – 현재 플래그 값 수신 포인터
tasks_waiting – 일시 중단된 태스크 수 수신 포인터(태스크 일시 중단 비활성화 시 0)
first_task – 첫 번째 일시 중단된 태스크 인덱스 수신 포인터(태스크 일시 중단 비활성화 시 0)
반환:
NUSE_SUCCESS – 콜 성공.
NUSE_INVALID_GROUP – 그룹 인덱스 무효.
Nucleus SE의 이벤트 그룹 정보 구현
구현은 직관적입니다: 현재 플래그 값을 읽고, 블로킹 API가 활성화되면 대기 태스크 수와 첫 태스크 인덱스를 계산; 그렇지 않으면 둘 다 0으로 설정.
*event_flags = NUSE_Event_Group_Data[group];#if NUSE_BLOCKING_ENABLE *tasks_waiting = NUSE_Event_Group_Blocking_Count[group]; if (NUSE_Event_Group_Blocking_Count[group] != 0) { U8 index; for (index=0; index
이벤트 플래그 그룹 수 획득
Nucleus RTOS에서는 그룹 수가 동적으로 변경될 수 있으므로 현재 개수를 반환합니다. Nucleus SE에서는 빌드 타임에 고정됩니다.
이벤트 플래그 그룹 수를 위한 Nucleus RTOS API 콜
서비스 콜 프로토타입:
UNSIGNED NU_Established_Event_Groups(VOID);
반환:
애플리케이션 내 현재 생성된 이벤트 플래그 그룹 수
이벤트 플래그 그룹 수를 위한 Nucleus SE API 콜
서비스 콜 프로토타입:
U8 NUSE_Event_Group_Count(void);
반환:
애플리케이션에서 구성된 이벤트 플래그 그룹 수
Nucleus SE의 이벤트 플래그 그룹 수 구현
함수는 단순히 컴파일 타임 상수 NUSE_EVENT_GROUP_NUMBER 값을 반환합니다.