openamp — 표준 비대칭 멀티프로세싱(AMP) 지원 제공¶
openamp 모듈은 MicroPython을 위한 표준 프로세서 간 통신 인프라를 제공합니다. 이 모듈은 공유 리소스 테이블 설정, vring 초기화 등 OpenAMP의 모든 세부 사항을 처리합니다. Endpoint 클래스로 RPMsg 버스 인프라를 사용하기 위한 API를 제공하며, RemoteProc 클래스를 통해 펌웨어 로드, 원격 코어 시작 및 중지와 같은 프로세서 생명 주기 관리(LCM) 지원을 제공합니다.
사용 예제:
import openamp
def ept_recv_callback(src, data):
print("Received message on endpoint", data)
# Create a new RPMsg endpoint to communicate with the remote core.
ept = openamp.Endpoint("vuart-channel", callback=ept_recv_callback)
# Create a RemoteProc object, load its firmware and start it.
rproc = openamp.RemoteProc("virtual_uart.elf") # Or entry point address (ex 0x081E0000)
rproc.start()
while True:
if ept.is_ready():
ept.send("data")
함수¶
Endpoint 클래스¶
- class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)¶
새 RPMsg Endpoint를 생성합니다. 엔드포인트는 두 코어 간의 양방향 통신 채널입니다.
인수는 다음과 같습니다:
name 은 엔드포인트의 이름입니다.
callback 은 엔드포인트가 데이터를 수신할 때 원격 지점의 소스 주소와 참조로 전달된 바이트 데이터와 함께 호출되는 함수입니다.
src 는 엔드포인트 소스 주소입니다. 제공되지 않으면 라이브러리가 엔드포인트에 하나를 할당합니다.
dest 는 엔드포인트 대상 주소입니다. 엔드포인트가 new_service_callback에서 생성되는 경우 반드시 제공되어야 하며 원격 엔드포인트의 소스 주소와 일치해야 합니다. 알림 전에 엔드포인트가 로컬에 등록되는 경우 대상 주소는 엔드포인트가 바인딩될 때 라이브러리가 할당합니다.
- send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int¶
이 엔드포인트를 통해 원격 프로세서에 메시지를 보냅니다.
인수는 다음과 같습니다:
buffer 는 메시지 페이로드(버퍼 프로토콜을 지원하는 모든 객체, 예:
bytes,bytearray또는str)입니다.src 는 메시지의 소스 엔드포인트 주소입니다. 제공되지 않으면 엔드포인트가 바인딩된 소스 주소가 사용됩니다.
dest 는 메시지의 대상 엔드포인트 주소입니다. 제공되지 않으면 엔드포인트가 바인딩된 대상 주소가 사용됩니다.
timeout 은 사용 가능한 버퍼를 기다리는 시간을 밀리초 단위로 지정합니다. 기본적으로 이 함수는 블로킹 방식입니다.
RemoteProc 클래스¶
경고
STM32H7에서 두 번째 AMP 코어는 제자리에서 중지한 다음 재시작할 수 없는 Cortex-M4입니다. 따라서 이 플랫폼에서 RemoteProc.stop() 또는 RemoteProc.shutdown() 을 호출하면 코어별 중지가 아니라 전체 시스템 리셋이 수행됩니다.