상세 컨텐츠

본문 제목

[TMS320F28388D] SYS/BIOS 9부 - Task

TMS320F28388D 공부

by Zin9 2023. 12. 26. 16:03

본문

728x90

이번 시간에는 RTOS에 사용되는 Semaphore를 알아본다.

2개의 우선순위가 다른 태스크에서 세마포어를 사용하여 세마포어가 잘 동작하는지 알아볼 것이다.

9부에서는 태스크에 대해 알아보고, 10부에서 Semaphore를 본격적으로 들어갈테니 참고하도록 하자.

 

아래의 링크 자료를 참고한다.

https://www.ti.com/lit/ug/spruex3v/spruex3v.pdf?ts=1702428815187&ref_url=https%253A%252F%252Fwww.google.com%252F

 

태스크 상태

그림 1은 태스크 상태를보여준다.

태스크가 생성되면 'READY' 상태에 머무른다.

태스크가 실행되던 'RUNNING' 상태로 전이한다.

태스크에서 코드 실행이 모두 종료되어, Task_sleep()가 실행되면 'BLOCKED' 상태에 전이된다.

혹은 우선순위가 높은 태스크나 인터럽트에서 Semaphore_pend()가 실행되어도 'BLOCKED' 상태로 전이된다.

밑에서 예시를 통해 알아보자.

 

<그림 1. 태스크 상태>

 

 

 

실습

조건은 다음과 같다.

1. TaskA와 TaskB의 우선순위는 같다.

2. TaskA에서는 varA를 1씩 더하고, TaskB에서는 varA가 10이 되면 0으로 초기화한다.

 

디버깅창에서 브레이크포인트를 걸고 살펴보자.

그림 1을 참고하면 좋다.

우선, TaskA가 먼저 실행된다(Ready → Running).

(우선순위가 같으면 선언된 순서대로 먼저 실행되는 것 같다.)

위에서 설명했듯 Task_sleep()이나 Semaphore_post() 함수가 실행되어 TaskA는 Blocked 상태가 되었다.

<그림 2. TaskA 실행 중>

 

곧이어 TaskB가 실행된다(Ready → Running).

이 때 TaskA는 실행이 종료되고 다음 실행 시간까지 기다리고 있으므로 Blocked 상태이다.

<그림 3. TaskB 실행 중>

 

TaskA와 TaskB가 실행되고 나서 TimerA가 실행되는 동안에 두 태스크는 Blocked 상태이다.

코드에서 설정한대로 100[ms]가 지나면 Ready 상태로 전이된다.

<그림 4. Timer 실행 중>

 

 

 

 

 

728x90

관련글 더보기