OS/vxWorks [VxWorks] 메시지 큐 예제
  • 728x90
    반응형

     

     

     

     

    • 앞 예제의 소스를 메시지 큐를 포함하여 수정하였다.
    • 메시지 큐 외의 설명은 앞예제를 참고한다.
    • main() 함수에서 메시지 큐를 생성하고, Task1 이 5초에 한번씩 Task2에게 메시지 큐를 보낸다.

     

     

    • msgQCreate()함수의 인자로 사용되는 메시지 큐 정보인 메시지큐 개수와 메시지의 길이를 MAX_MSG 10, MAX_MSG_LEN 128 각각 정의 하였다.

     

    • msgQCreate()함수를 통해 생성할 메시지 큐 핸들러의 옵션을 저장할 변수이다.
    • 구조체 포인터 타입으로 선언되어 있으며 구조체는 아래와같이 정의되어 있다.

     

     

     

     

    [main 함수]

     

     

    • msgQCreate()함수를 사용하여 메시지 큐를 생성한다. 함수의 원형은 아래와 같다.

     

     

     

    • 첫번째 인자는 메시지의 개수이고, 두번째 인자는 메시지의 길이다. 세번 째 인자는 옵션이다.
    • 옵션은 아래와같이 정의되어 있다. (MSG_Q_PRIORITY : Task 우선 순위에서 대기)

     

     

     

    [myTimer 함수]

    • 설명 생략 앞예제 참고.

     

    [myTask1 함수]

     

    • line 80 : Task2 에 보낼 메시지를 저장할 128byte 크기의 버퍼 선언.
    • line 106 : memset()함수를 사용하여 tx_buf 를 0으로 초기화 하였다.
    • line 108 : sprintf()함수를 사용하여 tx_buf에 Task2에게 보낼 메시지를 저장 하였다.
    • line 110 : msgQSend()함수를 사용하여 Task2에 메시지 큐를 보낸다.

     

     

    함수의 원형은 아래와 같이 선언되어 있다.

     

     

    • 첫번 째 인자는 msgQCreate() 함수로 생성한 메시지 큐 ID가 들어간다.
    • 두번 째 인자는 보낼 메시지가 저장된 버퍼가 들어간다.
    • 세번 째 인자는 보낼 메시지의 길이가 들어간다.
    • 네번 째 인자는 timeout(대기하는 시간) 으로 아래와 같이 두가지 유형이 있다.

     

     

    • 다섯번 째 인자는 priority(우선 순위) 로 아래와 같이 두가지 유형이 있다.

     

     

     

    [myTask2 함수]

     

    • line 121 : Task1에서 보낸 메시지 큐를 받을 버퍼선언.
    • line 131 : memset() 함수로 rx_buf 버퍼를 0으로 초기화 한다.
    • line 133 : msgQReceive() 함수를 사용하여 Task1에서 msgQSend( ) 함수로 메시지 큐를 보낼 때 까지 블록킹한다. 메시지 큐가 발생되면 rx_buf에 메시지를 저장한다.

     

    msgQReceive() 함수원형은 아래와 같이 정의되어 있다.

     

     

     

    • 첫번 째 인자는 msgQCreate() 함수로 생성한 메시지 큐 ID가 들어간다.
    • 두번 째 인자는 보내온 메시지 큐를 저장할 버퍼가 들어간다.
    • 세번 째 인자는 메시지의 최대 길이가 들어간다.
    • 네번 째 인자는 timeout(대기하는 시간) 으로 아래와 같이 두가지 유형이 있다.

     

     

    • msgQReceive() 함수를 사용할 경우 메시지를 받는 과정에서 오류가 발생할 것을 대비하여 에러처리를 해주는 것
    • line 139 : printf 를 사용하여 rx_buf에 저장된 메시지를 출력한다.

     

     

    [clean 함수]

     

    • 종료시에는 msgQDelete() 함수를 사용하여, msgQCreate( ) 함수로 생성한 메시지 큐 ID를 삭제한다.

     

     

     

    [실행 결과]

    • main 함수를 실행하면 아래와같이 Task1이 5초 마다, Task2에게 메시지 큐를 날리는 것을 확인할 수 있다.

     

     

     

     

     

     

    728x90
    반응형

    'OS > vxWorks' 카테고리의 다른 글

    VxWorks (BSP 파일구성/romInit.s 분석)  (0) 2017.07.05
    VxWorks C99 버전 변경  (0) 2017.06.30
    VxWorks (세마포어)  (0) 2017.06.30
    VxWorks (Task 생성 / RS232 통신 )  (0) 2017.06.30
    VxWorks OS구성 / 개발 방법  (2) 2017.06.30
상단으로