./../
  I D :    암호 :    ID저장      회원가입    네게(쥔장) 쪽지보내기    메모장    각종계산기    컬러빠렛    이모티콘(프레임, 새창)    보유장비
목록으로 가기..
MCU Task관리할때 필요한 세마포어(Semaphore)와 뮤텍스(Mutex) 김종호 | 삭제하기

자원관리 할때 반드시 이해하고 활용해야 할 사항으로 오래도록 일해왔다면 저마다 같은 목적, 다른 솔류션들이 있을텐데 규정화 된 것을 알아두는게 좋을수 있어서 적어둠. content = r"""# STM32 FreeRTOS 세마포어(Semaphore)와 뮤텍스(Mutex) 완벽 정리 ## 1. 핵심 요약 비교 | 구분 | 세마포어 (Semaphore) | 뮤텍스 (Mutex) | | :--- | :--- | :--- | | **주요 용도** | 태스크 간 **동기화** (이벤트 전달) | 공유 자원 **보호** (상호 배제) | | **소유권** | 없음 (누구나 Give 가능) | 있음 (Lock한 태스크만 Unlock 가능) | | **우선순위 상속** | 지원 안 함 | **지원함** (우선순위 역전 방지) | | **주 사용처** | ISR ➡️ 태스크 동기화 | 다중 태스크의 공용 자원(변수, 통신) 접근 | --- ## 2. 개념 이해하기 ### 🚦 세마포어 (Semaphore) - "신호등 / 카운터" * **목적:** 태스크 간의 **동기화**(순서 제어)나 **한정된 개수의 자원 접근 관리**를 위해 사용합니다. * **특징:** 소유권 개념이 없어 자원을 해제하는 태스크와 획득하는 태스크가 달라도 됩니다. 이진(Binary)형과 카운팅(Counting)형이 있습니다. ### 🔒 뮤텍스 (Mutex) - "화장실 열쇠" * **목적:** 공유 자원(UART, 전역 변수 등)을 **오직 하나의 태스크만 독점**하여 안전하게 사용하도록 보호합니다. * **특징:** **소유권** 개념이 있어 자원을 잠근 태스크만 풀 수 있습니다. 우선순위 상속 기능을 통해 낮은 우선순위 태스크가 높은 우선순위 태스크를 방해하는 문제를 방지합니다. --- ## 3. 코드 예제 (FreeRTOS) ### 💡 세마포어 예제 (이진 세마포어: 동기화) 인터럽트(예: 버튼)가 발생하면 세마포어를 통해 대기 중인 태스크를 깨우는 방식입니다. ```c SemaphoreHandle_t xBinarySemaphore; // 1. 세마포어 생성 void MX_FREERTOS_Init(void) { xBinarySemaphore = xSemaphoreCreateBinary(); } // 2. 인터럽트 핸들러 (버튼 입력) void EXTI0_IRQHandler(void) { BaseType_t xHigherPriorityTaskWoken = pdFALSE; xSemaphoreGiveFromISR(xBinarySemaphore, &xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken); } // 3. 신호를 기다리는 태스크 void vTaskWork(void *pvParameters) { while(1) { if (xSemaphoreTake(xBinarySemaphore, portMAX_DELAY) == pdTRUE) { // 인터럽트 발생 시 수행할 작업 } } } ```c SemaphoreHandle_t xMutex; ### 💡 뮤텍스 예제 (자원 보호) 여러 태스크가 공유 자원(예: UART 로그 출력)을 안전하게 사용하기 위한 방식입니다. // 1. 뮤텍스 생성 void MX_FREERTOS_Init(void) { xMutex = xSemaphoreCreateMutex(); } // 2. 공유 자원을 사용하는 태스크 void vTaskPrint(void *pvParameters) { while(1) { // 뮤텍스 획득 (대기 시간 100ms) if (xSemaphoreTake(xMutex, (TickType_t)100) == pdTRUE) { // --- 공유 자원 사용 (크리티컬 섹션) --- printf("Resource Access Allowed\r\n"); // ------------------------------------ xSemaphoreGive(xMutex); // 뮤텍스 반환 } vTaskDelay(pdMS_TO_TICKS(500)); } } ```

첨언 달기
이름 : 암호 :
번호    제목...(첨언) 작성일 접속
xxx [공지]자유겔러리 등록 오류 수정 완료 2017-12-22 685102
xxx [공지]자료실 다운로드 오류 처리 2017-12-01 31013
xxx [공지]비난, 광고 게시물을 신고, 차단, 삭제됩니다. 2005-06-26 26787
257 [일반]  VS Code에서 Google AI 사용할때 자동 agree 2026-10-02(금) 16
256 [C#]  asp.net .net core connectionString Encryption 표준 암호화 방법 2026-09-24(목) 38
255 [CPP]  MS Windows 64bit Time Converter 2026-09-23(수) 56
254 [M D]  STM32H747I-DISCO 이더넷(RMII) 및 LwIP 완벽 구현 및 트러블슈팅 가이드 2026-09-17(목) 95
253 [일반]  .net core Web 생성하면 나오는 구조 2026-09-12(토) 73
252 [M D]  STM32 개발 때 다양한 USB CDCs 사용CDC, CP210x, FTDI, CH34x, PL2303) 2026-09-11(금) 77
251 [M D]  STM32H747I-DISCO CP2102 USB Host 트러블슈팅 종합 보고서 2026-09-11(금) 67
250 [일반]  STM32H747I-DISCO에서 STM32CubeMX 템플릿때문에 USB OTG 문제 발생할때 2026-09-10(목) 98
249 [M D]  TouchGFX에서 버튼같은거 삭제 했을때 make: *** No rule to make target.. 오류 2026-08-20(목) 134
248 [M D]  STM TouchGFX설계할때 main에서 View에 접근하는 순서 2026-08-16(일) 113
247 [M D]  STM TouchGFX설계할때 View가 main에 접근하는 순서 2026-08-16(일) 157
246 [M D] > MCU Task관리할때 필요한 세마포어(Semaphore)와 뮤텍스(Mutex) < 2026-08-09(일) 146
245 [M D]  STM32F 마이컴 공부할때 RAM에 올려서 시험하기.(속도 빠름) 2026-08-08(토) 152
244 [일반]  STM32F767과 FreeRTOS를 이용해 설계할때 Time base Source는? 2026-08-08(토) 140
243 [일반]  VSCode로 STM32 개발할때 printf에서 실수 출력 안되면 2026-07-16(목) 1003
242 [일반]  VisualStudio으로 만든 프로그램 .net 버전 올리기 위해 2026-07-02(목) 1225
241 [C#]  c# winform에서 URL QR생성 2026-06-30(화) 1070
240 [일반]  VC 컴파일할때 솔류션 폴더에 컴파일된 파일이 생성될때 2026-06-29(월) 476
239 [XML]  IIS 8.0 이상 IP 차단 web.config 설정 2026-06-13(토) 174
238 [일반]  C#.net 6이상 빌트할때 TargetFramework 폴더 생기는거 없애기 2026-04-16(목) 499
검색 :
Page : 이전 1  2  3  4  5  6  7  8  9  10  11  12  13  다음




Copyright 2003-2026 ⓒ 김종호. All rights reserved. kimjongho.co.kr kimjongho.kr kimjongho.net kimjongho.com