임베디드
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페이지로 계속:"데이터 구조">>
임베디드
구조를 소개한 후 이 강력한 데이터 개체의 몇 가지 중요한 응용 프로그램을 살펴보겠습니다. 그런 다음 C 언어 구문을 조사하여 구조를 선언합니다. 마지막으로 데이터 정렬 요구 사항을 간략하게 소개합니다. 단순히 멤버의 순서를 재배열하여 구조체의 크기를 줄일 수 있음을 알 수 있습니다. 이 기사는 임베디드 C 프로그래밍의 구조에 대한 몇 가지 기본 정보를 제공합니다. 구조를 소개한 후 이 강력한 데이터 개체의 몇 가지 중요한 응용 프로그램을 살펴보겠습니다. 그런 다음 C 언어 구문을 조사하여 구조를 선언합니다. 마지막으로 데이터
30년 이상 동안 Camcode의 내구성 있는 자산 레이블 솔루션을 신뢰하여 자산을 식별, 추적 및 제어할 수 있습니다. 오늘날 Camcode는 검증된 AIDC(자동 식별 및 데이터 캡처) 프로세스와 내구성 있는 자산 레이블 및 태그를 사용하여 자산을 완전히 제어하고 시스템 내에서 책임을 높이는 데도 도움이 됩니다. Camcode의 프로젝트 관리 팀은 자산에 대한 확신을 얻는 데 도움이 되는 맞춤형 서비스 및 프로세스 기반 방법을 개발하기 위해 귀하와 협력합니다. 데이터. 높은 수준의 정책 구현에서 자산 레이블 설치 및 자산 데이터