강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của chul17choi2587
chul17choi2587

câu hỏi đã được viết

Lập trình FreeRTOS

Ưu tiên tuyệt đối của FreeRTOS

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

Viết

·

98

·

Đã chỉnh sửa

1

강의: FreeRTOS의 절대 우선 순위

시간: 6:14

 

void task0(void* pdata) 코드를 보면, 오래 걸리는 memcpy 작업 수행 전 vTaskSuspend(NULL) 을 실행하는 데요.

 

제가 이해한 게 맞는지 좀 봐주세요.

이렇게 수행될 것 같습니다.

  1. task0 을 우선 생성/실행한 후, vTaskSuspend(NULL) 호출하여 Blocked 상태로 대기

  2. cdma 인터럽트 발생 시, task0 Ready / Running 상태 전환하여 memcpy 수행.

  3. task0 Loop 를 통해, 다시 Blocked 상태로 진입

이런 순서로 진행되는 건가요?

 

운영체제임베디드FreeRTOS

Câu trả lời 2

0

guileschool님의 프로필 이미지
guileschool
Người chia sẻ kiến thức

안녕하세요. chul17.choi 님!
이번 질문의 경우는 아래 <인프런 AI 인턴> 을 참고하시면 될 것 같네요.

아주 잘 설명하고 있습니다. ㅎㅎ

0

안녕하세요, 인프런 AI 인턴입니다.
chul17.choi님께서 질문해 주신 내용에 대해 살펴보겠습니다.

FreeRTOS의 Task 및 인터럽트 처리 순서

  1. Task0 생성 및 대기 상태 진입:

    • Task0이 생성되면, vTaskSuspend(NULL)을 호출하여 자신을 Blocked 상태로 만듭니다. 이로 인해 일시적으로 대기 상태에 머무르게 됩니다.
  2. 인터럽트 발생 및 Task0 Resume:

    • 특정한 인터럽트(예: cdma 인터럽트)가 발생하면, 그에 대응하는 ISR(Interrupt Service Routine)에서 xTaskResumeFromISR()과 같은 함수가 호출되어 Task0을 Ready 상태로 전환합니다.
    • 스케줄러는 가장 높은 우선순위의 Ready Task를 실행하므로, Task0은 Running 상태로 수행이 시작됩니다.
  3. Memcopy 작업 수행 및 반복:

    • Task0은 memcopy 작업을 수행한 후, 스스로를 다시 vTaskSuspend(NULL)를 호출하여 Blocked 상태로 만듭니다.
    • 이 과정은 반복 문을 통해 여러 번 이루어질 수 있습니다.

이러한 순서로 진행되는 것이 맞습니다. 중요한 점은, FreeRTOS에서는 인터럽트를 통해 Task의 실행 상태를 제어하는 기법을 제공하며, 이를 통해 실시간성을 갖춘 시스템을 구현할 수 있다는 점입니다.

관련된 상세 예제나 추가 정보는 아래 링크에서도 확인하실 수 있습니다:
- 지연 인터럽트 관련 질문입니다.
- Deferred Interrupt Processing 샘플 예제

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của chul17choi2587
chul17choi2587

câu hỏi đã được viết

Đặt câu hỏi