Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
중앙대학교 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

Embedded System/FreeRTOS 8

[FreeRTOS] 자원 관리 (2) - Mutex

FreeRTOS에서 어떻게 공유자원에 대한 접근을 제한해 상호 배제를 획득하는지에 대한 시리즈이다.혹시 상호 배제에 대한 개념, 그리고 Critical Section과 Scheduler Suspend에 대한 내용이 궁금하다면 이전 글을 확인해보자.ㅤMutex와 Binary Semaphore앞서 확인했던 Critical Section과 Scheduler Suspend는 차단 방식으로 구성된다. Critical Section은 인터럽트를 차단해버렸고, Scheduler Suspend는 스케줄러를 차단해버렸다.ㅤMutex와 Semaphore는 차단이 아닌 “대기” 방식으로 상호 배제를 획득한다.Mutex : 상호 배제(MUTual EXclusion)을 위한 잠금 매커니즘Binary Semaphore : 0 또..

[FreeRTOS] 자원 관리 (1) - Critical Section과 Scheduler Suspend

이전 글들을 통해서 각 Task가 독립적으로 FreeRTOS에 의해 Context-Switch가 되면서 실행될 수 있는 구조를 모두 파악했다. 그런데 Task는 항상 각자도생하면서 실행되지만은 않는다. 다른 Task의 정보를 필요로 할 수도 있고, 다른 Task가 사용중인 주변장치 등을 공유해서 사용해야 할 수도 있다.ㅤ이번 아티클에서는 UART 같은 한정된 주변장치나 전역 변수같은 여러 Task 간에 공유되는 리소스에 대해 어떻게 접근에 대한 관리를 수행할 수 있을지에 대해 알아보았다.ㅤ만약 아무것도 안하면 어떤 일이 일어날까?가장 흔하게 드는 예시인 자판기 대신에, 우리가 자주 배웠던 펌웨어 GPIO의 ODR 레지스터에 값을 넣어주는 과정으로 한 번 예시를 들어보겠다!ㅤODR 레지스터에 값을 OR 연..

[FreeRTOS] 커널의 시작과 첫번째 Task의 실행

이전 글들에서 FreeRTOS가 어떻게 Task를 만들어 관리하는지와 Task간의 전환 과정, 그리고 Real-Time 을 만족하기 위한 스케줄링 전략에 대해 알아보았다. 이번 글에서는 그동안 공부한 내용들을 바탕으로 어떻게 RTOS에서 자동으로 스케줄링을 알잘딱하게 수행하는지에 대해서 알아보자.ㅤ제목에서부터 알 수 있듯이, Task 간의 스케줄링은 커널이 담당한다. FreeRTOS에서 커널은 간단하게 보면 다음의 것들을 담당한다.Task 간의 스케줄링인터럽트 기반의 시간 측정Queue, 세마포어, 뮤텍스 등을 활용한 동기화ㅤ커널이라는 이름이 리눅스 같은 곳에서 많이 나왔었기에, 거창해보이고 어려워보일 수는 있지만, 결국 이놈은 하드웨어 자원(CPU나 메모리)을 관리하고 Task들에게 할당하는 SW 프로..

[FreeRTOS] Task의 스케줄링

ㅤContext-Switch에 대해서 다루는 이전 글의 내용을 이해했다면, 이제 “Task 간의 전환”은 파악했다. (야스!)그렇다면 이렇게 만들어진 Task 들에 대해서 커널은 어떻게 급한 Task가 먼저 CPU를 사용하도록 전환시키도록 하여 Real-Time의 특성을 만족시킬까?ㅤ미션 : Real-Time을 만족시켜라여러가지 방법이 있지만, FreeRTOS 에서는 기본적으로 “Preemptive with Time Slicing” 방식을 사용한다.우선순위가 낮은 Task가 실행중일 때, 우선순위가 높은 Task가 실행되고자 하면 선점한다.우선순위가 동일한 Task가 여러개 실행되고자 한다면, Time Slicing 으로 CPU 자원을 동일한 시간만큼 할당받아, 번갈아가며 처리(Round-Robin)한다..

[FreeRTOS] RTOS의 Context Switch 과정 파헤치기

이전 글에서 Task의 생성과 구조에 대해서 알아봤으니, 이번 글에서는 “그렇다면 생성된 여러 개의 Task 들 간의 실행 흐름을 어떻게 전환하는가?” 에 대해서 알아보자. 커널은 어떻게 Task를 전환하여 Real-Time의 특성을 만족시킬까?ㅤ기본적으로 Cortex-M의 CPU는 싱글코어이기 때문에 한 번에 하나의 명령어만 실행할 수 있다. 그러니 만약 여러 Task를 한 번에 또는 특정한 Task를 먼저 실행하려고 한다면 CPU를 효율적으로 사용해줘야 한다. 이걸 어떻게 할까?ㅤ아래쪽에 PendSV 예외가 발생했을 때 어떻게 Context-Switch가 발생하는 지에 대해 기똥차게 설명해뒀다. 필요하면 해당 부분만 샥 훑어버리자. 혹시 Exception과 관련된 내용들이 궁금하다면, 이 글을 먼저 ..

[FreeRTOS] RTOS의 System Exception

이전 글에서 Task의 생성과 구조에 대해서 알아봤으니, 이번 글에서는 “그렇다면 생성된 여러 개의 Task 들 간의 실행 흐름을 어떻게 전환하는가?” 에 대해서 알아보자. 커널은 어떻게 Task를 전환하여 Real-Time의 특성을 만족시킬까?ㅤFreeRTOS의 핵심, System ExceptionFreeRTOS에서 사용하는 System Exception은 3가지가 있다.SysTick : 주기적인 타이머PendSV : SW가 의도적으로 발생시키는 Context-Switch를 위한 익셉션SVC : SW가 호출하는 익셉션ㅤException VS Interrupt- Exception은 프로세서 내부에서 연산의 결과로 발생하는 것- Interrupt는 프로세서 외부 장치에서 비동기적으로 발생하는 것 ㅤSyst..

[FreeRTOS] Task의 생성과 관리

FreeRTOS는 Task 단위로 기능들을 스케줄링하면서 우선순위가 높은 Task 들을 먼저 처리해 입력에 대해 정해진 시간 내에 처리하는 것을 보장한다. 벌써 키워드가 막막 나온다.Task 가 뭐냐, Task를 어떻게 관리하나?우선순위에 따라 어떻게 작업을 먼저 처리하나?우선순위가 같은 땐 어떻게 하나?이걸 누가 어떻게 처리하나? 직접 코드로 짜야하나?순서대로, 이번 글에서는 Task가 무엇인지, 어떻게 생성하고 관리하는지에 대해서 알아보자. 이후 다음에는 스케줄링을 하는 방법 + 스케줄링을 자동으로 처리해주는 커널 + Task 간의 통신 에 대해서 시리즈로 등장할 예정!Task 의 구조Task가 무엇인가?Task는 독립적으로 실행되는 작은 프로그램이자, RTOS 스케줄러가 실행시킬 코드의 단위.Tas..

[FreeRTOS] RTOS와 FreeRTOS가 뭔데요?

임베디드 세계에 발을 들인지 어연 3개월, 지금의 단계까지 오면서 취업공고나 랩실 설명에서 RTOS라는 키워드를 굉장히 자주 마주쳤다. 그리고 나는 이게 어떠한 종류의 OS라고 생각해왔다. 그리고 드디어 이 RTOS라는게 도대체 어떤 녀석인지 공부할 단계가 되었다. 후하! 그럼 들어가보자. 글을 열심히 적다보니깐, 내용이 막 길어지는 것도 있고 하나의 글에 담기에는 어울리지 않는 내용들이 점차 불어나는 것 같아서, 글을 분리하였다. 이번 글에서는 RTOS와 FreeRTOS가 무엇인지에 대해서 간략하게 살펴보고, FreeRTOS의 구조나 사용 방법, 타고 들어가서 확인할 수 있는 레지스터나 어셈블리 코드의 동작들, 그리고 프로세스 아키텍처까지 정리하면서 다뤄보려고 한다. RTOS의 두둥등장우선 RTOS는 ..