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

파티션 메모리 – 소개 및 기본 서비스


RTOS 공개 시리즈 보기

메모리 파티션은 표준 C malloc()과 비교한 이전 기사에서 소개되었습니다. 기능이 만들어졌습니다. 파티션은 파티션 풀에서 얻은 메모리 영역입니다. 이는 작업이 결정적이고 안정적인 방식으로 데이터 저장소를 확보하고 해제할 수 있는 유연한 수단을 제공합니다.

파티션 사용

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

파티션 풀은 단순히 고정된 크기의 파티션으로 분할된 메모리 영역입니다. 사용자는 각 풀의 파티션 크기와 수를 완전히 제어할 수 있습니다. 작업은 할당된 메모리 파티션을 요청하고 저장 영역에 대한 포인터를 받을 수 있습니다. 파티션 외부에 데이터를 쓰지 않는 것은 태스크의 책임입니다. API 함수에 대한 포인터를 전달하여 모든 작업에서 파티션을 할당 해제할 수 있습니다. 더 이상 사용할 수 없을 때 파티션 할당을 요청하면 API 호출 및 Nucleus SE 구성에서 선택한 옵션에 따라 오류 또는 작업 일시 중단이 발생할 수 있습니다.

메모리 파티션 구성

파티션 풀 수

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

0이 아닌 값을 선택하는 것은 파티션 풀에 대한 "마스터 활성화"입니다. 그 결과 일부 데이터 구조가 그에 따라 정의되고 크기가 조정됩니다. ROM의 데이터 구조는 각 파티션 풀을 특징짓는 적절한 값으로 초기화해야 합니다. 다음 기사에서 데이터 구조에 대해 자세히 알아보십시오. API 활성화 설정도 활성화합니다.

API 사용

Nucleus SE의 모든 API 기능(서비스 호출)에는 활성화된 #define이 있습니다. nuse_config.h의 기호 . 파티션 풀의 경우 다음과 같습니다.

NUSE_PARTITION_ALLOCATE

NUSE_PARTITION_DEALLOCATE

NUSE_PARTITION_POOL_INFORMATION

NUSE_PARTITION_POOL_COUNT

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

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

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

파티션 풀 서비스 호출

Nucleus RTOS는 다음 기능을 제공하는 파티션 풀과 관련된 7개의 서비스 호출을 지원합니다.

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

재설정 기능은 제공되지 않습니다(Nucleus RTOS 또는 Nucleus SE에서). 이것은 의도적입니다. 한 작업이 파티션을 할당하고 포인터를 다른 작업(나중에 할당 해제할 것입니다)에 전달하는 것은 매우 일반적인 관행입니다. 파티션 풀을 재설정하면 모든 파티션이 사용되지 않은 것으로 표시되지만 파티션을 사용하고 있을 수 있는 모든 작업을 추적하고 알릴 수 있는 방법은 없습니다.

파티션 할당 및 할당 해제 서비스

파티션 풀에서 수행할 수 있는 기본 작업은 파티션을 할당하고(즉, 파티션을 사용된 것으로 표시하고 해당 주소를 반환) 파티션을 할당 해제(즉, 파티션을 사용하지 않은 것으로 표시)하는 것입니다. Nucleus RTOS와 Nucleus SE는 각각 이러한 작업에 대해 두 가지 기본 API 호출을 제공하며 여기에서 설명합니다.

파티션 할당

파티션 할당을 위한 Nucleus RTOS API 호출은 매우 유연하여 작업을 즉시 완료할 수 없는 경우 무기한 또는 시간 초과로 일시 중단할 수 있습니다. 즉, 현재 모든 파티션이 할당된 풀에서 파티션을 할당하려고 합니다. Nucleus SE는 작업 일시 중단이 선택 사항이고 타임아웃이 구현되지 않는다는 점을 제외하고는 동일한 서비스를 제공합니다.

파티션 할당을 위한 Nucleus RTOS API 호출

서비스 요청 프로토타입:

STATUS NU_Allocate_Partition(NU_PARTITION_POOL *풀,
VOID **return_pointer, UNSIGNED 일시 중단),

반품:

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

NU_NO_PARTITION – 사용 가능한 파티션이 없습니다.

NU_INVALID_POOL – 파티션 풀 포인터가 잘못되었습니다.

NU_INVALID_POINTER – 데이터 반환 포인터가 NULL입니다.

NU_INVALID_SUSPEND – 작업이 아닌 스레드에서 일시 중단을 시도했습니다.

NU_TIMEOUT – 지정된 시간 초과 기간 동안 일시 중단 후에도 파티션을 사용할 수 없습니다.

NU_POOL_DELETED – 작업이 일시 중단되는 동안 파티션 풀이 삭제되었습니다.

할당을 위한 Nucleus SE API 호출

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

서비스 요청 프로토타입:

STATUS NUSE_Partition_Allocate(NUSE_PARTITION_POOL 풀, ADDR *return_pointer, U8 정지);

매개변수:

– 사용할 파티션 풀의 인덱스(ID)

return_pointerADDR 유형의 변수에 대한 포인터 할당된 파티션의 주소를 수신할 것입니다.

중단 – 작업 일시 중단에 대한 사양 NUSE_NO_SUSPEND일 수 있습니다. 또는 NUSE_SUSPEND

반품:

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

NUSE_NO_PARTITION – 사용 가능한 파티션이 없습니다.

NUSE_INVALID_POOL – 파티션 풀 인덱스가 잘못되었습니다.

NUSE_INVALID_POINTER – 데이터 반환 포인터가 NULL입니다.

NUSE_INVALID_SUSPEND – 작업이 아닌 스레드에서 또는 차단 API 호출이 활성화되지 않은 경우 일시 중단이 시도되었습니다.


임베디드

  1. 스테인리스 스틸 소개 및 제조 방법
  2. 디지털 메모리 용어 및 개념
  3. C# 기본 입력 및 출력
  4. C++ 메모리 관리:신규 및 삭제
  5. 사서함:소개 및 기본 서비스
  6. 세마포어:유틸리티 서비스 및 데이터 구조
  7. 세마포어:소개 및 기본 서비스
  8. 행사 플래그 그룹:소개 및 기본 서비스
  9. 대기열:소개 및 기본 서비스
  10. Rutronik과 AP Memory 글로벌 유통 계약 체결