Message Queue

공부기록·2023년 10월 14일
0
post-thumbnail

  • 대용량의 데이터를 처리하기에 용이하다.

관련함수

예시 : decision task는 숫자를 받고 가장 우선순위가 높은 task에게 문자 'w'를 전송한다.


Message Queue 생성

  • OS_EVENT *OSQCreate(void **start, INT16U size)
  • size : message queue size
  	OS_EVENT* queue_to_decision;
    OS_EVENT* queue_to_random;
    
    void decision_queue[4];
    void random_queue[4];
    
    //index를 0오로하여 메모리공간 확보
    queue_to_random = OSQCreate(random_queue[0], 4);
    queue_to_decision = OSQCreate(dicision_queue[0], 4);
    

메시지 기다리기

  • void OSQPend(OS_EVENT pevent, INT16U timeout, INT8U *err)
 for(i = 0; i < N_TAST - 1; i++){
	get_number[i] = (int)OSQPend(queue_to_decision, 0, &err);
 }

메시지 보내기

  • INT8U OSQPost(OS_EVENT pevent, void *msg)
for(i = 0; i < N_TASK; i++){
    if (i == min_task) {
    	push_letter = 'W';
    } else {
    	push_letter = 'L';
    }
    OSQPost(queue_to_random, (void*)push_letter);
    //push_letter 주소가 queue에 들어간다.
}

배달된 메시지 모두 삭제

  • INT8U OSQFlush(OS_EVENT *pevent)

    broadcast

  • INT8U OSQPostOpt(OS_EVENT pevent, void msg, INT8U opt)

  • opt = OS_POST_OPT_BROADCAST

0개의 댓글

관련 채용 정보