RTOS에서 가장 많이 쓰는 IPC

테스크 혹은 ISR에서 다른 테스크로 포인터 변수를 보낸다
ex) "Hello World" 문자열
1. 문자열 자체를 메시지 큐에 담는다
2. 문자열의 포인터 변수 주소를 담는다
메시지큐에 메시지 들어오면 Task1 깨어난다(Recieve로 휴면 중)
xQueSendToBack() : 선입선출 방식으로 메시지큐 보냄(xQueSend() 와 동일)
xQueSentoFront() : 후입선출 방식으로 메시지큐 보냄
- ISR도 동일하다


데이터는 꼭 구조체 말고도, Array, 문자열, 이미지, 동영상 모두 가능


front와 back은 매개인자는 똑같다

큐에 메세지 몇 개 있는지 확인

큐 초기화

구조체를 메시지로 보내고자함, 사이즈와 메시지 개수 define

xQueCreate로 큐 핸들 만듦

한 테스크에서는 큐 대기

큐 보내는 테스크에서는 처음 정의한 구조체에 각각 key에 맞는 value 할당하고 완성된 구조체 보냄
매개변수에는 보낼 메시지큐 핸들, 보내고 싶은 데이터의 주소, 타임아웃시간 적음

메시지가 받을 수 있는 개수 5개

우선순위가 높은 T1이 Recieve전 10초동안 Blocked

우선순위 낮은 T2에서 Send 보내는데, 1초동안 Recive를 찾다가 없으면 그냥 저 메시지 큐에 데이터를 보냄.
1초당 1send니까, 메세지큐에 1,2,3,4,5 까지 담기고 6부터 다 채워져서 에러 표시 및 1초 딜레이 7 에러표시 1초딜레이(9초) 이후 10초부터 task1이 Recive하니 메시지큐에 담겼던 1,2,3,4,5 모두 출력, 이후 8담기고 바로 또 출력된다
각 에러당 또 1초를 기다리게 되는것 주의!!

다른 테스크에서 같은 메시지큐를 리시브하고 Blocked 되어 있을 때,
어떤 또 다른 테스크에서 Send를 보냈다면, 우선 순위가 높은 테스크가 리시브 받는다
상호배제를 따로 신경 쓰지 않아도 된다.
리시브 함수 중 일부를 보면, 인터럽트 금지 상호배제 API가 들어있음을 확인할 수 있다