STM32H7 Inter-processor communication (3) - FreeRTOS message buffer

FreeRTOS message buffer and stream buffer

버전 10.0.0부터 FreeRTOS™에는 프로세서 간 통신 API를 구현되어 있습니다. 다음 섹션에서는 메시지 버퍼 및 스트림 버퍼 API에 대해 설명합니다.

Message buffers

메시지 버퍼를 사용하면 인터럽트 서비스 루틴에서 작업으로 또는 한 작업에서 다른 작업으로 다양한 길이의 이산 메시지를 전달할 수 있습니다.

예를 들어, 길이가 10, 20, 123바이트인 메시지는 모두 동일한 메시지 버퍼에 쓰고 읽을 수 있습니다. 10바이트 메시지는 개별 바이트가 아닌 10바이트 메시지로만 읽을 수 있습니다. 메시지 버퍼는 스트림 버퍼 구현 위에 구축됩니다. 메시지 버퍼는 페이로드 데이터 크기를 저장하기 위해 단어가 필요합니다.

길이는 일반적으로 다음과 같은 변수에 저장됩니다. 32비트 아키텍처에서 4바이트. 따라서 10바이트 메시지를 메시지 버퍼에 쓰는 것은 14바이트의 버퍼 공간을 소비합니다. 마찬가지로 100바이트 메시지를 메시지 버퍼에 쓰는 것은 104바이트의 버퍼 공간을 사용합니다.

Stream buffers

스트림 버퍼를 사용하면 아래 그림과 같이 인터럽트 서비스 루틴에서 작업으로 또는 한 작업에서 다른 작업으로 바이트 스트림을 전달할 수 있습니다. 바이트 스트림은 임의의 길이일 수 있으며 반드시 시작이나 끝이 있는 것은 아닙니다. 한 번에 여러 바이트를 쓸 수 있고 한 번에 여러 바이트를 읽을 수 있습니다.

스트림 버퍼 구현은 속도와 풋프린트에 최적화된 알림을 사용합니다. 따라서 호출 작업을 차단 상태로 만드는 스트림 버퍼 API를 호출하면 호출 작업의 알림 상태와 값이 변경될 수 있습니다.

대부분의 다른 FreeRTOS™ 통신 프리미티브와 달리 단일 Reader 단일 Writer 시나리오에 최적화되어 있습니다. Writer나 Reader가 여러 명인 것은 안전하지 않습니다.

듀얼 코어 마이크로컨트롤러에서 한 CPU에서 다른 CPU로 데이터를 전달할 때 데이터는 복사로 전달됩니다. 데이터는 보낸 사람이 버퍼로 복사하고 판독기에 의해 버퍼 밖으로 복사됩니다.

​<계속>