inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

FreeRTOS 프로그래밍

세마포어 xSemaphoreTake 휴면상태 문의

해결된 질문

442

김영선

작성한 질문수 7

1

5번 SEM 예제에서

Main Task 우선순위 20, Task1 우선순위10인 상태에서

Main Task에서 Task1을 생성한 후 Main Task가 끝나기 전에 Task1이 실행되는 원리가 궁금합니다.

강의 내용을 보면

Main Task 에서 호출하는 xSemaphoreTake() 함수내부에 현재 진행중인 MainTask를 휴면상태로 만드는 부분이 존재하고 다음 우선순위의 Task를 찾아 실행하는 부분이 존재한다고 설명을 해주시는데

하지만 이해가 안가는 부분은

xSemaphoreTake()함수의 인자에 xQUEUE 구조체 형식인 sem_id 전달한것 뿐인데

동작중인 Task 또는 handle에 대한 정보를 어떻게 알고 현재 실행중인 Task(MainTask)가 휴면상태로 가는지 모르겠습니다.

xQUEUE 구조체를 확인해봤지만 단서가 될만한건 못찾겠습니다.

 

 

FreeRTOS 임베디드 운영체제

답변 1

0

홍영기

안녕하세요. 김영선님!

xSemaphoreTake 함수는
커널 소스 <queue.c> 의 xQueueSemaphoreTake 함수를 실행합니다.

1380  BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait )
...
1532				vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
1533				prvUnlockQueue( pxQueue );
1534				if( xTaskResumeAll() == pdFALSE )
1535				{
1536					portYIELD_WITHIN_API();
1537				}
1538				else
1539				{
1540					mtCOVERAGE_TEST_MARKER();
1541				}

 

1532라인 vTaskPlaceOnEventList 함수에 의해 'TaskMain' 은 휴면하게 되죠.

1536라인에 의해 문맥전환이 발생하니 IdleTask 가 실행하겠죠.

이후 'xSemaphoreGive 함수에 의해 해당 'TaskMain' 은 휴면상태에서 깨어날 것입니다.

이 모든 내용은 디버깅(TRACE)을 통해 직접 확인해 보실 수 있습니다. ^^

 

만약에 포팅을 할때 1년에 한번 잡는 치명적인 문제를 해결하는 코드가 들어갔다고 가정하면

0

57

2

STM32 포팅할 때 STM32 Project가 없음

0

145

2

FreeRTOS 멀티코어 지원안됨?

0

82

2

[소스코드 분석-configUSE_TIME_SLICING] TASK1,2의 우선순위가 동일할 때, configUSE_TIME_SLICING값 변경에 따른 출력 변화

0

82

2

포팅 부탁드립니다!

0

57

1

포팅 부탁드립니다. <NUCLEO-G071RB>

0

64

2

상호배제 후 되지를 않아서 질문드립니다.

0

59

1

수료증 발급 기준 수정 요청

1

69

1

재진입가능여부에 관한 질문

1

66

1

01_TASKMAN프로젝트 디버깅 모드 실패

1

76

2

그러면 malloc/free가 아닌 동적할당자를 써서 메모리를 할당했기떄문에

1

69

2

실행순서

1

74

2

uart 전송중에는 스위칭이 금지되나요?

1

71

2

스택오버플로우 실습 중 stack size 설정 질문

0

79

2

포팅 원합니다.

2

75

2

코루틴 실습질문

1

99

2

TODO 2번 문제

1

140

4

10. 선점형 커널 그림 설명중 우선순위가 반대인 경우에도 Task B가 먼저 수행되나요?

1

79

2

디버거모드에 진입이 안됩니다.

0

175

2

prvExampleTaskHook 함수 호출 부분에 대해 문의드립니다.

0

119

2

보드 STM32H735IG와 강의 호환 여부 문의

1

151

3

[ L152RE ] 원샷 소프트타이머 실행 잘 되시나요?

1

157

2

Deferred Interrupt Processing 샘플 예제 문의 드립니다.

1

119

2

포팅 서비스 부탁드립니다

1

122

2