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

세마포어:유틸리티 서비스 및 데이터 구조


RTOS 공개 시리즈 보기

이 기사에서는 세마포어를 계속 살펴봅니다.

세마포어 유틸리티 서비스

Nucleus RTOS에는 세마포어와 관련된 유틸리티 기능을 제공하는 네 가지 API 호출이 있습니다. 세마포어 재설정, 세마포어에 대한 정보 반환, 애플리케이션의 세마포어 수 반환, 애플리케이션의 모든 세마포어에 대한 포인터 반환. 이 중 처음 세 가지는 Nucleus SE에서 구현됩니다.

세마포 재설정

이 API 호출은 세마포어를 사용되지 않은 초기 상태로 복원합니다. 이 API 기능은 다른 커널 개체에 사용할 수 있는 기능과 비교할 때 일반적이지 않습니다. 재설정이지만 단순히 카운터를 시작 값으로 초기화하지 않기 때문입니다. 새로운 초기 카운트가 호출에 제공됩니다. 세마포에서 일시 중단된 모든 작업이 재개되고 NUSE_SEMAPHORE_WAS_RESET 반환 코드를 받습니다. (Nucleus SE 또는 NU_SEMAPHORE_RESET에서 Nucleus RTOS 사용).

세마포 재설정을 위한 Nucleus RTOS API 호출

서비스 요청 프로토타입:

STATUS NU_Reset_Semaphore(NU_SEMAPHORE *세마포어,
미서명된 initial_count),

매개변수:

세마포어 – 사용자 제공 세마포어 제어 블록에 대한 포인터

initial_count – 세마포어의 카운터가 설정될 값

반품:

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

NU_INVALID_SEMAPHORE – 세마포어 포인터가 유효하지 않습니다.

세마포 재설정을 위한 Nucleus SE API 호출

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

서비스 요청 프로토타입:

STATUS NUSE_Semaphore_Reset(NUSE_SEMAPHORE 세마포어,
U8 initial_count);

매개변수:

세마포어 – 재설정할 세마포어의 인덱스(ID)

initial_count – 세마포어의 카운터가 설정될 값

반품:

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

NUSE_INVALID_SEMAPHORE – 세마포어 인덱스가 유효하지 않습니다.

Nucleus SE의 세마포어 재설정 구현

NUSE_Semaphore_Reset()의 주요 작업 API 기능 - 매개변수 확인 후 - NUSE_Semaphore_Counter[]에 적절한 항목을 설정하기만 하면 됩니다. 제공된 초기 값으로.

차단이 활성화된 경우 작업 차단을 해제하려면 추가 코드가 필요합니다.

while (NUSE_Semaphore_Blocking_Count[semaphore] !=0){ U8 인덱스; /* 차단된 작업이 있는지 확인 */ /* 이 세마포에서 */ for (index=0; index 

세마포에서 일시 중지된 각 작업은 NUSE_SEMAPHORE_WAS_RESET 일시 중지 반환 코드와 함께 "준비됨"으로 표시됩니다. . 이 과정이 완료된 후 Priority 스케줄러를 사용 중이면 NUSE_Reschedule()을 호출합니다. , 하나 이상의 우선순위가 높은 작업이 준비되어 실행을 허용해야 하기 때문입니다.

세마포어 정보

이 서비스 호출은 세마포어에 대한 정보를 선택합니다. Nucleus SE 구현은 개체 이름 지정 및 일시 중단 순서가 지원되지 않고 작업 일시 중단이 활성화되지 않을 수 있으므로 더 적은 정보를 반환한다는 점에서 Nucleus RTOS와 다릅니다.

세마포어 정보를 위한 Nucleus RTOS API 호출

서비스 요청 프로토타입:

STATUS NU_Semaphore_Information(NU_SEMAPHORE *세마포어,
CHAR *이름, UNSIGNED *current_count, OPTION *suspend_type,
UNSIGNED *tasks_waiting, NU_TASK **first_task),

매개변수:

세마포어 – 정보가 요청되는 세마포어의 제어 블록 위쪽에 있는 포인터

이름 - 세마포어 이름에 대한 8자 대상 영역에 대한 포인터 여기에는 null 종결자를 위한 공간이 포함됩니다.

현재_개수 – 세마포어 카운터의 현재 값을 받을 변수에 대한 포인터

일시 중단_유형 – 작업의 일시 중단 유형을 보유하는 변수에 대한 포인터 유효한 작업 일시 중지 유형은 NU_FIFO입니다. 및 NU_PRIORITY

tasks_waiting – 이 세마포어에서 일시 중단된 작업의 수를 수신할 변수에 대한 포인터

첫 번째 작업NU_TASK 유형의 변수에 대한 포인터 첫 번째 일시 중단된 작업의 제어 블록에 대한 포인터를 받습니다.

반품:

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

NU_INVALID_SEMAPHORE – 세마포어 포인터가 유효하지 않습니다.

세마포어 정보에 대한 Nucleus SE API 호출

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

서비스 요청 프로토타입:

STATUS NUSE_Semaphore_Information(NUSE_SEMAPHORE 세마포어,
U8 *current_count, U8 *tasks_waiting, NUSE_TASK *first_task);

매개변수:

세마포어 – 정보가 요청되는 세마포어의 인덱스

현재_개수 – 세마포어 카운터의 현재 값을 받을 변수에 대한 포인터

tasks_waiting – 이 세마포어에서 일시 중단된 작업의 수를 수신할 변수에 대한 포인터(작업 일시 중단이 비활성화된 경우 아무 것도 반환되지 않음)

첫 번째 작업NUSE_TASK 유형의 변수에 대한 포인터 첫 번째 일시 중단된 작업의 인덱스를 수신합니다(작업 일시 중단이 비활성화된 경우 아무 것도 반환되지 않음)

반품:

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

NUSE_INVALID_SEMAPHORE – 세마포어 인덱스가 유효하지 않습니다.

NUSE_INVALID_POINTER – 하나 이상의 포인터 매개변수가 유효하지 않습니다.

Nucleus SE의 세마포어 정보 구현

이 API 호출의 구현은 매우 간단합니다.

NUSE_CS_Enter(); *current_count =NUSE_Semaphore_Counter[세마포어];#if NUSE_BLOCKING_ENABLE *tasks_waiting =NUSE_Semaphore_Blocking_Count[세마포어]; if (NUSE_Semaphore_Blocking_Count[세마포어] !=0) { U8 인덱스; for (index=0; index 

함수는 세마포어 상태를 반환합니다. 그런 다음 차단 API 호출이 활성화되면 대기 중인 작업의 수와 첫 번째 작업의 인덱스가 반환됩니다(그렇지 않으면 이 두 매개변수가 0으로 설정됨).

세마포어 수 구하기

이 서비스 호출은 애플리케이션에 구성된 세마포어 수를 반환합니다. Nucleus RTOS에서는 시간이 지남에 따라 달라지며 반환된 값은 현재 세마포어 수를 나타내지만 Nucleus SE에서는 반환된 값이 빌드 시 설정되며 변경할 수 없습니다.

세마포어 수를 위한 Nucleus RTOS API 호출

서비스 요청 프로토타입:

UNSIGNED NU_Established_Semaphores(VOID);

매개변수:

없음

반품:

애플리케이션에서 생성된 세마포어 수

세마포어 수를 위한 Nucleus SE API 호출

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

서비스 요청 프로토타입:

U8 NUSE_Semaphore_Count(무효);

매개변수:

없음

반품:

애플리케이션에 구성된 세마포어의 수

세마포어 카운트의 Nucleus SE 구현

이 API 호출의 구현은 거의 간단합니다. #define 기호 NUSE_SEMAPHORE_NUMBER 반환됩니다.

2페이지로 계속:"데이터 구조">>


임베디드

  1. 클라우드와 사내 서비스의 장단점
  2. Microsoft Azure' 블록체인 토큰 및 데이터 관리 서비스
  3. 디지털 메모리 용어 및 개념
  4. C# 변수 및 (기본) 데이터 형식
  5. C++의 구조 및 클래스
  6. 사서함:소개 및 기본 서비스
  7. 세마포어:소개 및 기본 서비스
  8. 이벤트 플래그 그룹:유틸리티 서비스 및 데이터 구조
  9. 행사 플래그 그룹:소개 및 기본 서비스
  10. 대기열:소개 및 기본 서비스