ubinos
세마포어 타이머 예제

간단한 세마포어 타이머 사용 예제 Simple semaphore timer example

이 예제는 일정한 주기로 간단한 메시지를 반복적으로 출력한다.


세마포어 타이머의 주기적 알림 기능 시험

Test on periodic notification function of semaphore timer

이 예제는 세마포어 타이머의 주기적 알림 기능을 시험한다.

시점 1에서 태스크 2를 중간 우선순위로 생성한다.
여기까지 성공적으로 진행되었다면 확인 지점 1에서 태스크 2가 수행 중이어야 한다.

시점 2에서 태스크 1을 높은 우선순위로 생성한다.
여기까지 성공적으로 진행되었다면 확인 지점 2에서 태스크 1이 수행 중이어야 한다.

시점 3에서 태스크 1이 세마포어 타이머를 설정하고 시작한 다음, 알림 신호를 기다린다.
여기까지 성공적으로 진행되었다면 확인 지점 3에서 태스크 2가 수행 중이어야 한다.

시점 5가 되면 세마포어 타이머가 알림 신호를 보낸다.
그러면 태스크 1이 그 알림 신호를 받고 깨어나 주어진 일을 처리한다.
여기까지 성공적으로 진행되었다면 확인 지점 5에서 태스크 1이 수행 중이어야 한다.

시점 6이되면(주어진 일 처리를 마치면) 태스크 1이 다시 알림 신호를 기다린다.
여기까지 성공적으로 진행되었다면 확인 지점 6에서 태스크 2가 수행 중이어야 한다.

시점 7이 되면 세마포어 타이머가 다시 알림 신호를 보낸다.
그러면 태스크 1이 그 알림 신호를 받고 깨어나 다시 주어진 일을 처리한다.
여기까지 성공적으로 진행되었다면 확인 지점 7에서 태스크 1이 수행 중이어야 한다.

시점 8에서 태스크 1이 세마포어 타이머를 멈춘다.
그리고 시점 10까지를 제한 시간으로 두고 알림 신호를 기다린다.
여기까지 성공적으로 진행되었다면 확인 지점 8에서 태스크 2가 수행 중이어야 한다.

시점 10이 되면 태스크 1이 제한 시간이 다해서 알림 신호를 받지 못했더라도 깨어난다.
여기까지 성공적으로 진행되었다면 확인 지점 10에서 태스크 1이 수행 중이어야 한다.

시점 11에서 태스크 1이 종료된다.

시점 12에서 태스크 2가 종료된다.


세마포어 타이머의 일회성 알림 기능 시험 Test on periodic notification function of semaphore timer

이 예제는 세마포어 타이머의 일회성 알림 기능을 시험한다.

시점 1에서 태스크 2를 중간 우선순위로 생성한다.
여기까지 성공적으로 진행되었다면 확인 지점 1에서 태스크 2가 수행 중이어야 한다.

시점 2에서 태스크 1을 높은 우선순위로 생성한다.
여기까지 성공적으로 진행되었다면 확인 지점 2에서 태스크 1이 수행 중이어야 한다.

시점 3에서 태스크 1이 일회성 선택 사항(STIMER_OPT__ONESHOT)을 선택하고 세마포어 타이머를 설정한다.
그리고 세마포어 타이머를 시작한 다음 알림 신호를 기다린다.
여기까지 성공적으로 진행되었다면 확인 지점 3에서 태스크 2가 수행 중이어야 한다.

시점 5가 되면 세마포어 타이머가 알림 신호를 보낸다.
그러면 태스크 1이 그 알림 신호를 받고 깨어나 주어진 일을 처리한다.
여기까지 성공적으로 진행되었다면 확인 지점 5에서 태스크 1이 수행 중이어야 한다.

시점 6이되면(주어진 일 처리를 마치면) 태스크 1이 시점 8까지를 제한 시간으로 두고 다시 알림 신호를 기다린다.
여기까지 성공적으로 진행되었다면 확인 지점 6에서 태스크 2가 수행 중이어야 한다.

시점 8이 되면 태스크 1이 제한 시간이 다해서 알림 신호를 받지 못했더라도 깨어난다.
여기까지 성공적으로 진행되었다면 확인 지점 8에서 태스크 1이 수행 중이어야 한다.

시점 9에서 태스크 1이 종료된다.

시점 10에서 태스크 2가 종료된다.


세마포어 타이머에 의한 메모리 누수 시험 Test for memory leak by stimer

이 예제는 세마포어 타이머에 의한 메모리 누수를 시험한다.

먼저 힙heap의 할당된 메모리 총량과 메모리 블록 수를 가져와 저장한다.
그리고 세마포어 타이머 생성과 제거를 여러 번 반복한다.
그 다음 힙heap의 할당된 메모리 총량과 메모리 블럭 수를 다시 가져와 저장했던 값과 비교한다.
메모리 누수가 발생하지 않았다면 저장했던 값과 다시 가져온 값이 같아야 한다.

Content is available under Attribution-Noncommercial-No Derivative Works 3.0 Unported.