임베디드/펌웨어 기초

UART, DMA

twoweeks-within 2025. 1. 19. 14:55

1. DMA 없이 버퍼를 사용하는 경우

CPU가 데이터를 한 바이트씩 처리해야 하기 때문에 느려질 수 있습니다.

  • 동작 방식:
    1. 주변 장치(UART, SPI 등)에서 한 바이트 데이터를 수신.
    2. CPU가 인터럽트를 받아 데이터 처리.
    3. 데이터를 버퍼에 저장하거나 출력.
    4. 이 과정을 데이터의 총 바이트 수만큼 반복.
  • 문제점:
    • CPU 부하 증가: 데이터 처리량이 많아질수록 CPU가 모든 바이트를 처리하느라 작업이 지연됩니다.
    • 속도 제한: 인터럽트 빈도가 높아지고, 주변 장치와 메모리 간 데이터 이동 시간이 길어질 수 있습니다.
    • 실시간성 저하: CPU가 다른 작업을 처리할 시간이 줄어듭니다.

2. DMA를 사용한 경우

DMA는 CPU의 개입 없이 데이터를 한 번에 블록 단위로 전송하므로 훨씬 효율적입니다.

  • 동작 방식:
    1. DMA가 특정 메모리 버퍼를 설정.
    2. 주변 장치에서 데이터를 연속적으로 수신하여 DMA 버퍼에 자동으로 저장.
    3. 데이터 전송이 완료되면 DMA가 완료 인터럽트를 발생시키거나 플래그를 설정.
    4. CPU는 한 번에 데이터를 처리.
  • 장점:
    • 블록 단위 전송: 데이터를 한 바이트씩 처리하지 않고 한 번에 큰 덩어리(버퍼 단위)로 처리.
    • CPU 부하 감소: CPU는 데이터 전송 작업에서 해방되어 다른 작업에 집중 가능.
    • 속도 향상: 데이터 처리 속도가 주변 장치의 최대 속도에 가까워짐.
    • 실시간성 강화: 다른 실시간 작업의 처리 우선순위가 높아짐.

3. DMA의 빠른 이유

DMA를 사용할 때 속도가 빨라지는 이유는 다음과 같습니다:

  • 한 번에 버퍼 단위로 데이터 전송:
    CPU가 데이터를 한 바이트씩 읽고 쓰는 대신, DMA는 메모리와 주변 장치 간에 데이터를 한 번에 전송합니다.
    예: 256바이트 버퍼 설정 → 데이터 256바이트를 한 번에 전송.
  • CPU 개입 최소화:
    CPU는 DMA가 설정된 뒤 완료 신호를 받을 때까지만 대기하거나 다른 작업을 수행할 수 있습니다. 이는 다중 작업 시스템에서 효율성을 극대화합니다.
  • 병렬 처리:
    CPU가 다른 작업을 수행하는 동안 DMA는 데이터를 독립적으로 전송합니다. 이는 멀티태스킹 성능을 향상시킵니다.

4. DMA의 실사용 예시

  • UART 데이터 전송:
    UART에서 DMA를 사용하면 대량의 데이터(예: 로그 메시지, 파일 전송 등)를 CPU가 처리하지 않고도 빠르게 송수신할 수 있습니다.
    예: 데이터 1024바이트를 송신할 경우:
    • DMA 미사용: CPU가 각 바이트를 UART 레지스터에 쓰는 작업 반복 → 느림.
    • DMA 사용: 1024바이트를 DMA 버퍼에 쓰고, DMA가 UART로 전송 → 빠름.
  • ADC 데이터 처리:
    ADC에서 데이터를 샘플링할 때 DMA를 사용하면 고속 샘플링 데이터를 메모리에 자동으로 저장하고, CPU는 데이터 분석에만 집중할 수 있습니다.

5. 결론

DMA를 사용하면 한 번에 버퍼 단위로 데이터를 처리하기 때문에, CPU가 데이터를 한 바이트씩 처리해야 하는 경우보다 훨씬 빠릅니다.

  • 데이터를 블록 단위로 처리 → 속도와 효율 향상.
  • CPU는 데이터 전송에서 해방 → 다른 작업 수행 가능.

DMA는 특히 대용량 데이터를 처리하거나 높은 실시간성이 요구되는 시스템에서 큰 장점을 제공합니다. 😊

 

 

DMA 사용 X : 매번 interrupt 를 받아 처리하기에 CPU의 개입이 커지며, 속도저하

 

 

 

 

 

but

 

DMA를 사용하는 것이 유리한 경우

  1. 대용량 데이터 전송:
    • 많은 양의 데이터를 메모리 간에 전송해야 할 때(예: 대용량 파일, 고속 ADC 샘플링 데이터).
    • 예: UART로 로그 메시지 1KB 이상 전송 시.
  2. CPU 부하 감소가 필요한 경우:
    • 실시간 작업에서 CPU가 데이터 전송 대신 중요한 작업(예: 알고리즘 처리, 제어 작업 등)을 수행해야 하는 경우.
  3. 고속 데이터 전송 필요:
    • 데이터 전송 속도가 매우 중요한 시스템(예: 영상 처리, 오디오 스트리밍).
  4. 연속적인 데이터 스트림 처리:
    • 링 버퍼와 함께 DMA를 설정해, 데이터 스트림을 끊기지 않고 안정적으로 수신하거나 송신.
  5. 저전력 설계가 중요한 경우:
    • DMA는 CPU가 유휴 상태에 있을 때 데이터를 전송하므로 전력 소비를 줄이는 데 유리.

DMA를 사용하는 것이 불리하거나 과도한 경우

  1. 소량 데이터 처리:
    • 데이터 크기가 매우 작을 때(예: 단 몇 바이트만 전송).
    • DMA를 설정하고 시작하는 과정이 데이터 전송보다 오히려 시간이 더 걸릴 수 있음.
  2. 단순한 전송 작업:
    • 데이터 전송이 간헐적이고 복잡한 동작이 필요하지 않은 경우.
    • 예: UART로 상태 정보(1~2바이트)를 주기적으로 전송.
  3. 하드웨어 리소스 제한:
    • DMA 채널 수가 제한되어 다른 중요한 작업에 DMA를 할당해야 하는 경우.
    • 예: DMA 채널이 부족한 마이크로컨트롤러에서 SPI와 ADC 모두 DMA를 사용하려면 우선순위 관리가 필요.
  4. 실시간 반응이 더 중요한 경우:
    • 매우 짧은 시간 내에 응답해야 하는 작업(예: 외부 이벤트 처리)이 DMA의 초기 설정 지연 시간보다 더 중요한 경우.
  5. 복잡한 소프트웨어 관리가 필요할 때:
    • DMA를 사용하면 초기화, 상태 관리, 인터럽트 처리 등 추가적인 소프트웨어 설계가 필요.
    • 작은 프로젝트나 간단한 시스템에서는 오히려 복잡도를 증가시킬 수 있음.

DMA와 CPU 전송의 선택 기준

  • 작업 크기:
    • 소량 데이터: CPU로 처리.
    • 대량 데이터: DMA로 처리.
  • 실시간성:
    • 즉각적인 응답 필요: CPU가 직접 처리.
    • 긴 처리 시간 허용: DMA를 사용하여 CPU 부하 감소.
  • 시스템 리소스:
    • DMA 채널이 부족하면 중요 작업에 우선 사용하고, 나머지는 CPU로 처리.
  • 복잡성 관리:
    • 간단한 프로젝트: CPU 전송.
    • 대규모 시스템 또는 고성능 요구: DMA 사용.

>> 가장 critical 한 단점 : 실시간 적으로 일어나는 인터럽트에 반응 못함

   > CPU개입이 적으니깐

 

>>>>> RTOS 로 보완!

 

 

DMA와 RTOS의 역할 분담

  • DMA:
    하드웨어 기반으로 데이터를 빠르고 효율적으로 전송하지만, 실시간 이벤트에 대해 유연하게 대처하지 못합니다. 예를 들어:
    • 특정 순간에 데이터 전송을 중단하거나, 새로운 데이터가 들어오는 즉시 처리해야 하는 경우에는 제약이 있을 수 있습니다.
    • 주로 "예약된 작업"을 처리하며, 즉각적인 변화에 대응하기 어려움.
  • RTOS:
    RTOS는 태스크 스케줄링을 통해 긴급한 작업우선순위가 낮은 작업을 적절히 조율할 수 있습니다.
    • 이벤트 기반 반응: DMA 완료 인터럽트를 RTOS의 태스크와 연동해 즉시 데이터를 처리하거나, 다음 작업을 예약 가능.
    • 우선순위 관리: 중요한 실시간 태스크를 최우선으로 실행하여 시스템의 실시간성을 유지.

2. RTOS가 DMA의 실시간성 부족을 보완하는 방법

  1. 인터럽트 기반 처리:
    • DMA 완료 시 RTOS에 인터럽트를 발생시켜 작업 완료를 알림.
    • 인터럽트는 RTOS에서 이벤트를 트리거하거나, 대기 중인 태스크를 즉시 활성화.
    • 예: UART DMA로 수신된 데이터 처리 → RTOS 태스크가 큐를 통해 데이터 분석 시작.
  2. 태스크 우선순위 제어:
    • RTOS는 태스크 우선순위를 동적으로 조정하여 중요 작업일반 작업을 균형 있게 처리.
    • DMA 작업이 실시간성이 낮아도, RTOS는 더 중요한 작업을 먼저 처리할 수 있음.
  3. 동기화 메커니즘:
    • RTOS는 세마포어, 뮤텍스, 이벤트 플래그 등을 통해 DMA와 CPU 간의 데이터 처리를 조율.
    • 예: DMA가 데이터를 메모리에 저장한 후 세마포어를 사용해 CPU가 데이터를 가져가도록 관리.
  4. 버퍼 관리:
    • RTOS는 **더블 버퍼링(Ping-Pong Buffer)**과 링 버퍼 같은 구조를 활용해 DMA가 데이터를 처리하는 동안 다른 태스크가 데이터를 소비하도록 설계.
    • 이로 인해 데이터 흐름이 끊기지 않고 연속적으로 유지.

3. 실제 동작 시나리오

예제: UART 데이터 수신

  1. DMA 초기화:
    DMA를 설정하여 UART 수신 데이터를 메모리 버퍼로 자동 저장.
  2. RTOS 태스크와 연동:
    • DMA 완료 인터럽트 발생 시 RTOS에서 대기 중인 태스크가 활성화.
    • RTOS 태스크는 DMA 버퍼에서 데이터를 읽어 처리.
  3. RTOS가 실시간성을 유지:
    • DMA가 데이터를 처리하는 동안 RTOS는 우선순위가 높은 태스크(예: 제어 알고리즘 실행)를 먼저 실행.
    • 데이터가 소량일 경우, RTOS는 즉시 반응할 수 있도록 DMA 인터럽트와 연동.

4. RTOS와 DMA의 시너지

RTOS와 DMA는 서로 보완적인 관계로, 잘 조합하면 다음과 같은 이점이 있습니다:

  • 고성능: DMA는 대량 데이터를 빠르게 처리하고, RTOS는 실시간성을 유지.
  • 효율성: CPU 부하를 최소화하면서 우선순위 태스크를 실행.
  • 안정성: RTOS가 DMA와 다른 태스크를 조율해 경쟁 조건이나 데이터 손실 방지.

5. 결론

DMA는 고속 데이터 처리에 강하지만, 실시간성을 요구하는 복잡한 시스템에서 단독으로는 한계가 있을 수 있습니다.
RTOS는 스케줄링, 동기화, 이벤트 관리를 통해 DMA의 단점을 보완하여 실시간성과 효율성을 동시에 제공할 수 있습니다.

즉, RTOS가 DMA의 부족한 실시간성을 채우고, DMA는 RTOS의 부하를 덜어주는 완벽한 파트너 관계라고 볼 수 있습니다! 😊

 

 

DMA가 완료 인터럽트 등등을 남기면 RTOS 가 즉시 처리

+

더블 버퍼링 > DMA + 다른일

 

 

 

미사일 탐지 레이더에서의 실시간 처리는 RTOS가 가장 잘 수행할 수 있는 역할입니다.
이 시스템에서는 미사일 탐지가 최우선이고, 다른 객체(참새, 비행기, 사람 등)의 탐지는 중요도가 상대적으로 낮습니다.

RTOS는 이러한 우선순위 기반 태스크 처리결정론적 응답을 보장하여 미사일 탐지와 같은 치명적인 상황에 즉시 대응할 수 있도록 설계됩니다.


미사일 탐지 레이더 시스템에서의 RTOS 동작 예시

1. 시스템 우선순위 설정

  • 미사일 탐지: 최고 우선순위 (Critical Task)
    • 미사일 탐지가 성공하면 즉시 태스크 실행.
    • 추가적으로, 방어 시스템(예: 요격 미사일 발사)까지 연계 가능.
  • 다른 객체 탐지: 낮은 우선순위 (Background Task)
    • 참새, 비행기, 사람 등은 실시간성이 덜 중요.
    • 미사일이 없는 경우, 이 태스크가 실행됨.
  • 데이터 로깅 및 분석: 가장 낮은 우선순위
    • 수집된 데이터를 저장하거나, 후속 분석에 활용.
    • 실시간 처리가 덜 중요하므로 우선순위 낮음.

2. 이벤트 흐름

  1. 레이다 스캔:
    • 레이다가 주기적으로 주변을 스캔하여 객체를 탐지.
    • 탐지된 데이터는 DMA를 통해 메모리로 전송.
  2. RTOS 태스크 관리:
    • RTOS는 스캔 데이터 처리 태스크를 실행.
    • 데이터가 분석되고 객체 유형(참새, 비행기, 사람 등)이 분류됨.
  3. 미사일 탐지:
    • 미사일로 분류되는 객체를 탐지하면, 미사일 탐지 태스크가 즉시 활성화.
    • RTOS는 최우선순위 태스크로 전환하여 미사일 관련 데이터를 처리.
    • 데이터 분석 후 요격 시스템에 신호를 보냄.
  4. 우선순위 전환:
    • 미사일 관련 태스크가 완료되면, RTOS는 다시 낮은 우선순위 태스크(예: 다른 객체 탐지)를 실행.

3. RTOS의 기여

  1. 결정론적 응답:
    • 미사일 탐지 시, RTOS는 지체 없이 미사일 관련 태스크를 실행합니다.
    • "탐지 → 분석 → 요격 신호 전송"의 전체 과정이 예측 가능한 시간 안에 완료됩니다.
  2. 우선순위 스케줄링:
    • 낮은 우선순위 태스크(참새, 비행기 탐지)는 미사일 탐지 중에는 실행되지 않음.
    • RTOS가 시스템 자원을 최우선 작업에 집중시킴.
  3. 멀티태스킹과 동시성:
    • 미사일 탐지와 동시에 다른 센서 데이터 처리나 통신을 수행.
    • 하지만 RTOS는 실시간성이 중요한 태스크를 우선 처리하여 응답 지연을 방지.
  4. 동기화 및 데이터 처리:
    • 여러 태스크가 동시에 작동하면서 데이터 충돌을 방지하기 위해, RTOS는 뮤텍스세마포어를 사용하여 안전하게 데이터를 처리.

4. 미사일 탐지 시 RTOS와 인터럽트 연계

  1. 미사일 탐지 이벤트 발생:
    • 레이다 시스템에서 인터럽트가 발생하여 "미사일 신호"를 감지.
    • 인터럽트는 RTOS에게 이벤트 플래그를 설정하거나 우선순위가 가장 높은 태스크를 즉시 실행하도록 알림.
  2. RTOS 태스크 실행:
    • 인터럽트가 완료되면, RTOS는 "미사일 탐지 태스크"를 실행하여 필요한 데이터를 분석.
    • 동시에, 요격 시스템과의 통신이나 경고 알림을 관리.
  3. 다른 태스크 중단:
    • RTOS는 낮은 우선순위 태스크(참새, 비행기 탐지)를 중단하여 시스템 리소스를 해방.
    • 미사일 탐지 태스크가 끝난 후, 낮은 우선순위 태스크가 재개.

5. RTOS를 사용하지 않는 경우의 문제점

  1. 우선순위 충돌:
    • 단순 스케줄링 시스템에서는 중요한 미사일 탐지 태스크가 바로 실행되지 못하고, 다른 덜 중요한 작업 때문에 지연될 수 있음.
  2. 비결정론적 응답:
    • 응답 시간이 변동되거나, 긴급한 작업이 제때 처리되지 않을 가능성.
  3. 데이터 처리 충돌:
    • 여러 태스크가 동시에 작동하면서 데이터 충돌이나 손실 발생 가능성.

6. 결론

RTOS의 우선순위 기반 태스크 관리결정론적 응답은 미사일 탐지 레이더와 같은 시간 민감형 시스템에서 필수적입니다.

  • RTOS는 미사일 탐지와 같은 긴급한 작업을 항상 최우선으로 처리하고, 나머지 작업은 우선순위에 따라 지연하거나 배분합니다.
  • 이를 통해 시스템은 미사일 탐지 시 즉각적으로 대응하면서도, 다른 태스크를 효율적으로 관리합니다.

 

 

 

 

만약에 서로 다른 방향에서 미사일이 2개가 날라오면 먼저 발견한 하나를 처리하는중에 다른 하나는 놓치게 되는거아니야?
 

ChatGPT의 말:

ChatGPT

아주 중요한 질문입니다!

RTOS는 이러한 상황을 처리하기 위해 멀티태스킹우선순위 기반 스케줄링을 조합하여 다수의 긴급 상황에 대응할 수 있습니다. 두 개의 미사일이 서로 다른 방향에서 날아오는 상황에서도, 올바르게 설계된 RTOS 기반 시스템은 양쪽 미사일에 실시간으로 대응할 수 있습니다. 이를 구체적으로 설명하겠습니다.


1. 상황 분석

  • 문제: 한 미사일을 탐지하고 처리 중인 동안, 다른 방향에서 날아오는 미사일을 탐지하지 못하거나 늦게 대응할 위험이 있음.
  • 원인:
    • 단일 태스크 설계로 인해 하나의 작업(미사일 1 탐지 및 처리)에 모든 리소스를 할당.
    • 시스템이 다른 이벤트(미사일 2 탐지)에 반응하지 못할 가능성.

2. RTOS의 해결 방법

(1) 인터럽트 기반 설계

RTOS는 인터럽트를 활용하여, 우선순위가 높은 이벤트(미사일 탐지 등)에 항상 즉각적으로 반응할 수 있도록 설계됩니다.

  • 미사일 1 처리 중에도 새로운 미사일 탐지 인터럽트가 발생하면, RTOS는 기존 태스크를 중단하고 새로운 탐지 태스크를 실행할 수 있습니다.

(2) 우선순위 스케줄링

RTOS는 태스크 우선순위를 관리하며, 미사일 탐지 태스크를 항상 최고 우선순위로 설정합니다.

  • 새로운 미사일 탐지: 두 번째 미사일 탐지 이벤트가 발생하면, RTOS는 이를 즉시 감지하고 처리.
  • 기존 태스크(미사일 1 추적 및 대응)는 잠시 중단되거나, 동시에 병렬적으로 처리될 수 있음.

(3) 멀티태스킹 및 동시성

RTOS는 멀티태스킹을 지원하므로, 두 개의 미사일 추적 및 대응 태스크를 동시에 관리할 수 있습니다.

  • 두 미사일 탐지 태스크는 서로 독립적으로 실행되며, RTOS는 CPU 시간을 태스크 간에 분배하여 양쪽 미사일을 실시간으로 처리.

(4) 리소스 할당 및 동기화

RTOS는 뮤텍스(Mutex), 세마포어(Semaphore) 같은 동기화 도구를 사용하여 자원을 공유하는 태스크 간의 충돌을 방지합니다.

  • 예: 두 미사일 태스크가 동시에 레이더 데이터를 읽을 경우, RTOS는 이를 조율하여 데이터 충돌을 방지.

3. 동작 예시

1단계: 첫 번째 미사일 탐지

  • 레이더가 미사일 1을 탐지하여 미사일 탐지 태스크 1 실행.
  • 태스크 1은 미사일의 위치, 속도 등을 추적하고, 대응 시스템(예: 요격 미사일)을 활성화.

2단계: 두 번째 미사일 탐지

  • 탐지 중, 다른 방향에서 날아오는 미사일 2를 레이더가 감지.
  • 미사일 탐지 태스크 2가 인터럽트를 통해 즉시 실행.
  • RTOS는 두 태스크를 병렬적으로 관리하며, 두 미사일의 데이터를 별도로 추적.

3단계: 동시 처리

  • RTOS는 두 태스크가 동일한 리소스(CPU, 레이더 데이터 등)를 효율적으로 공유하도록 조율.
  • 두 미사일에 대한 요격 명령을 개별적으로 전송.

4. 시스템 설계 시 고려 사항

(1) 인터럽트 우선순위

  • 미사일 탐지와 같은 치명적인 이벤트는 가장 높은 우선순위의 인터럽트로 설정.
  • 다른 이벤트(참새, 비행기 탐지 등)는 낮은 우선순위로 처리.

(2) CPU 리소스 및 태스크 분배

  • CPU 성능이 제한적이라면, 태스크 실행 시간을 최적화해야 함.
  • 실시간성을 유지하기 위해, 각 태스크가 필요한 최소 작업만 수행하고, 나머지는 백그라운드 태스크로 처리.

(3) 데이터 충돌 방지

  • 다수의 태스크가 동시에 실행되더라도, RTOS는 세마포어 등을 사용하여 데이터를 안전하게 관리.

(4) 병렬 처리 하드웨어(DMA, 멀티코어 CPU)

  • DMA를 활용해 데이터 전송을 CPU와 독립적으로 수행.
  • 멀티코어 CPU가 있다면, 각 미사일 태스크를 별도의 코어에서 실행 가능.

5. RTOS가 없는 경우의 문제점

RTOS가 없는 시스템에서는 두 미사일을 동시에 처리하기 어렵습니다.

  • 단일 태스크 시스템:
    • 첫 번째 미사일 탐지 및 처리가 끝나기 전까지 두 번째 미사일을 감지하지 못함.
  • 응답 지연:
    • 두 번째 미사일 탐지 이벤트가 발생해도 시스템이 다른 태스크를 처리하느라 지연 발생.

6. 결론

RTOS는 다수의 미사일이 동시에 탐지되는 상황에서도 실시간 멀티태스킹을 통해 문제를 해결합니다.

  • 두 개 이상의 미사일을 탐지하면, 각 미사일에 대해 독립적인 태스크를 생성.
  • RTOS는 태스크 간 자원 충돌을 방지하면서 결정론적이고 예측 가능한 방식으로 양쪽 미사일에 대응할 수 있습니다.

이처럼 RTOS는 여러 긴급 상황을 실시간으로 병렬 처리할 수 있는 강력한 도구입니다. 추가적으로 더 궁금한 사항이 있으면 말씀해주세요! 😊

 

 

 

 

뮤텍스 , 세마포어 : 

**뮤텍스(Mutex)**와 **세마포어(Semaphore)**는 둘 다 멀티스레드 환경에서 동기화 메커니즘을 제공하는 도구입니다. 둘의 주요 차이점은 사용하는 목적과 동작 방식에 있습니다.

  1. 뮤텍스 (Mutex):
    • 목적: 공유 자원에 대한 동시 접근을 제어하여, 동시에 한 스레드만 자원에 접근할 수 있도록 보장합니다.
    • 특징: 한 번에 하나의 스레드만 자원을 잠글 수 있으며, 자원을 잠근 스레드만 그 잠금을 해제할 수 있습니다. 이로 인해 자원에 대한 독점적인 접근을 보장합니다.
  2. 세마포어 (Semaphore):
    • 목적: 여러 개의 스레드가 동시에 자원을 사용할 수 있도록 제한을 두기 위한 것입니다. 예를 들어, 동시에 접근 가능한 자원의 수를 제어할 수 있습니다.
    • 특징: 세마포어는 정수 값을 가지고 있으며, 스레드는 세마포어 값을 감소시키거나 증가시킵니다. 세마포어 값이 0이면 더 이상 자원을 사용할 수 없게 되며, 세마포어 값이 1 이상일 때는 자원을 사용할 수 있습니다.

간단히 말하면, 뮤텍스는 자원에 대한 배타적인 접근을 보장하고, 세마포어는 자원의 동시 접근 가능 수를 제어합니다.

 

 

  • 뮤텍스사과 한 개를 가지고 8명이 기다리며 하나씩 사과를 먹는 방식입니다. 한 사람이 사과를 먹을 때는 다른 사람은 기다려야 하고, 사과를 다 먹고 나서야 다른 사람이 사과를 먹을 수 있습니다. 즉, 하나의 자원에 대해 배타적인 접근을 보장합니다.
  • 세마포어사과 8개가 있어서 동시에 8명이 각각 사과를 먹을 수 있는 상황입니다. 만약 사과가 더 필요하면, 다른 사람이 사과를 다 먹은 후에야 추가로 먹을 수 있게 됩니다. 즉, 여러 자원에 대한 제한적인 동시 접근을 제어합니다.

따라서 뮤텍스는 자원을 한 번에 하나만 사용할 수 있도록 제한하고, 세마포어는 여러 개의 자원을 동시에 사용할 수 있지만 그 수에 제한을 둡니다.

'임베디드 > 펌웨어 기초' 카테고리의 다른 글

Flash  (0) 2025.01.22
reset  (0) 2025.01.08
cdc 2  (0) 2025.01.05
USB CDC  (0) 2025.01.04
stm32 mx >LED  (1) 2025.01.03