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

Nucleus SE 파티션 메모리: 구성, API, 모범 사례

Nucleus SE 파티션 메모리: 구성, API, 모범 사례RTOS Revealed 시리즈 보기

메모리 파티션은 이전 기사에서 소개되었으며, 기존 C malloc() 함수와 비교되었습니다. 파티션은 파티션 풀에서 가져온 고정 크기 메모리 블록으로, 태스크가 의존할 수 있는 결정론적 할당과 해제를 제공합니다.

파티션 사용하기

Nucleus SE에서 파티션 풀은 컴파일 타임에 정의됩니다. 애플리케이션당 최대 16개 풀 구성 가능. 풀이 정의되지 않으면 모든 관련 데이터 구조와 API 코드가 빌드에서 생략되어 풋프린트 최소화.

풀은 단순히 여러 개의 동일한 파티션으로 분할된 연속 메모리 영역입니다. 애플리케이션이 풀의 크기와 개수를 제어합니다. 태스크가 파티션을 요청하면 블록 포인터를 받습니다. 호출자가 할당된 경계 내에 머무르는 것은 호출자의 책임입니다. 파티션은 해제 API를 통해 어떤 태스크든 풀로 반환할 수 있습니다. 풀이 고갈되면 API 매개변수와 빌드 옵션에 따라 에러 반환 또는 태스크 일시 중단.

메모리 파티션 구성

파티션 풀 수

파티션 풀은 nuse_config.h의 #define 문으로 활성화. 핵심 심볼은 NUSE_PARTITION_POOL_NUMBER로 풀 개수 설정. 기본값 0(풀 비활성화). 유효 범위 1~16; 잘못된 값은 nuse_config_check.h가 생성하는 컴파일 타임 #error 유발.

0이 아닌 값으로 설정하면 필요한 데이터 구조 활성화 및 ROM 초기화, 아래 API 인에이블 심볼 잠금 해제.

API 인에이블

각 서비스 콜은 nuse_config.h에 인에이블 매크로 존재. 파티션 관련 심볼:

기본적으로 모두 FALSE로 구현 빌드에서 제외. 기능 사용 위해 해당 매크로 TRUE로 설정. 풀 정의 없이 API 활성화 시(NUSE_Partition_Pool_Count() 제외) 컴파일 타임 에러. 비활성화된 API 호출 시 링크 타임 에러.

Nucleus SE 파티션 메모리: 구성, API, 모범 사례

파티션 풀 서비스 콜

Nucleus RTOS는 파티션 풀용 7개 서비스 콜 제공. Nucleus SE에서는 핵심 할당/해제 API만 구현. 아래 표는 각 콜, 구현 상태, 간단 설명:

API구현설명
NU_Allocate_Partition()구현됨파티션 할당.
NU_Deallocate_Partition()구현됨파티션 해제.
NU_Partition_Pool_Information()구현됨풀 메타데이터 조회.
NU_Established_Partition_Pools()구현됨활성 풀 개수 세기.
NU_Create_Partition_Pool()미구현동적 풀 생성.
NU_Delete_Partition_Pool()미구현동적 풀 삭제.
NU_Partition_Pool_Pointers()미구현풀 포인터 반환.

Nucleus RTOS나 SE 모두 파티션 풀 리셋 루틴 제공 안 함. 이 설계 선택은 태스크가 파티션 할당 후 포인터를 다른 태스크에 넘겨 최종 해제하는 일반적인 유스케이스 반영. 풀 리셋은 모든 파티션을 암묵적으로 자유로 표시해 태스크 수준 계약을 깨뜨릴 수 있음.

할당 및 해제 서비스

핵심 연산:

Nucleus RTOS 할당 API

프로토타입:

STATUS NU_Allocate_Partition(NU_PARTITION_POOL *pool, VOID **return_pointer, UNSIGNED suspend); 

반환 값: NU_SUCCESS, NU_NO_PARTITION, NU_INVALID_POOL, NU_INVALID_POINTER, NU_INVALID_SUSPEND, NU_TIMEOUT, NU_POOL_DELETED.

Nucleus SE 할당 API

프로토타입:

STATUS NUSE_Partition_Allocate(NUSE_PARTITION_POOL pool, ADDR *return_pointer, U8 suspend); 

매개변수:

반환 코드는 RTOS와 유사하나 NUSE_ 접두사. 비태스크 스레드에서 잘못된 일시 중단 요청이나 블로킹 API 비활성화 시 NUSE_INVALID_SUSPEND 발생.

전체 구현 연습은 RTOS Revealed 시리즈 후속 기사 참조.

임베디드

  1. 스테인리스강 완벽 해설: 조성, 생산 공정, 글로벌 영향
  2. 디지털 메모리 기초: 어드레싱, 접근 방식, 휘발성
  3. C# 기초: 입출력(Essential Input/Output) 완벽 가이드
  4. C++ 메모리 관리 마스터: new와 delete 전문가 활용법
  5. Nucleus SE의 메일박스: 구성 및 사용 실용 가이드
  6. Nucleus RTOS의 세마포어: 유틸리티 서비스 및 데이터 구조
  7. Nucleus SE의 세마포어: 개요, 구성, API 핵심
  8. Nucleus SE의 이벤트 플래그 그룹: 구성 및 API 사용 입문 가이드
  9. Nucleus SE 큐: 소개와 핵심 서비스 콜
  10. Rutronik, AP Memory IoT RAM 유럽 독점 유통사로 글로벌 계약 체결