본문 바로가기
반응형

임베디드 관련13

[FreeRTOS] 동기화 xSemaphoreTake(), xSemaphoreGive() (뮤텍스 또는 세마포어)특정 자원을 보호하기 위해 세마포어 또는 뮤텍스를 사용하여 태스크 간 동기화를 위한 수단이다.※ 동기화란?2024.05.21 - [소프트웨어 공학 용어 정리] - [SW 용어] 동기화(Synchronization), 임계 영역(Critical Section) [SW 용어] 동기화(Synchronization), 임계 영역(Critical Section)동기화(Synchronization)1. 동기화는 시스템을 동시에 작동시키기 위해 여러 사건들을 조화시키는 것을 의미한다.2. 병행성과 관련해서 공유되는 자원에 대한 이해와 공유자원 사용과 관련해서 생길kfdd6630.tistory.com 세마포어는 하나의 태스크만 자원에.. 2024. 9. 15.
[FreeRTOS] 이진 세마포어, 뮤텍스 사용법 및 비교 세마포어(Semaphore)와 뮤텍스(Mutex)1. FreeRTOS에서 여러 태스크 간의 동기화와 공유 자원 보호를 위한 주요 동기화 도구이다.2. 이 두 개념은 태스크들이 동시에 접근할 수 없는 공유 자원(예: 하드웨어, 변수)을 안전하게 사용할 수 있도록 제어한다.3. 세마포어는 태스크 간의 동기화를 제공하고, 다수의 태스크가 자원에 접근할 수 있는지를 관리한다.4. 뮤텍스는 상호 배제를 통해 한 번에 하나의 태스크만 특정 자원에 접근할 수 있도록 한다.1. 세마포어(Semaphore)1. 세마포어는 특정 자원을 여러 태스크가 동시에 사용하지 못하도록 제어하는 데 사용된다.2. FreeRTOS에서 세마포어는 주로 이진(Binary) 세마포어와 카운팅(Counting) 세마포어로 나뉜다. 1.1. 이.. 2024. 9. 14.
[FreeRTOS] ISR 내에서 임계구역 설정 portSET_INTERRUPT_MASK_FROM_ISR(), portCLEAR_INTERRUPT_MASK_FROM_ISR()인터럽트 서비스 루틴(ISR) 내에서 임계 구역을 설정한다.사용예제UBaseType_t uxSavedInterruptStatus;uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();// ISR 내에서 보호되어야 하는 코드부portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus); 특징1. ISR에서 사용하도록 설계되었다.2. 임계 구역을 설정하여 다른 인터럽트가 중첩되지 않도록 한다. 2024. 9. 13.
[FreeRTOS] Task 전환 제어 vTaskSuspendAll(), xTaskResumeAll()태스크 스케줄링을 일시 중지하여 현재 태스크가 다른 태스크로 전환되지 않도록 한다.사용예제vTaskSuspendAll();// 태스크 전환 없이 실행해야 하는 코드부xTaskResumeAll(); 특징1. 인터럽트는 계속 발생한다.2. 인터럽트 내에서 FreeRTOS API를 호출하면 안 된다.3. 임계 구역보다 시스템에 미치는 영향이 적다. 2024. 9. 11.
[FreeRTOS] 인터럽트 비활성화 및 활성화하는 방법 portDISABLE_INTERRUPTS(), portENABLE_INTERRUPTS()FreeRTOS에서 인터럽트에 의해 선점되면 안되는 중요한 로직을 실행하는 함수를 보호하는 방법이 있다.portDISABLE_INTERRUPTS() 기능1. 이 매크로는 전역적으로 시스템 전체에 모든 인터럽트를 비활성화한다.2. 시스템의 모든 마스킹 가능한 인터럽트를 비활성화한다.3. 이 함수를 호출하면 즉시 모든 인터럽트가 비활성화되어, 인터럽트 서비스 루틴(ISR)이 실행되지 않도록 한다. 주의 사항1. 모든 인터럽트를 비활성화하기 때문에, 시스템의 다른 기능들이 일시적으로 중단될 수 있다.2. 다른 인터럽트 기반 기능(예: 타이머, 통신 등)이 영향을 받을 수 있다.3. 인터럽트를 오랫동안 비활성화하면 시스템 응.. 2024. 9. 10.
[FreeRTOS] Critical Section(임계 영역), 공유자원 보호하기 FreeRTOS에서 Critical Section(임계 영역), 공유자원 보호하기 임계 영역이란?2024.05.21 - [소프트웨어 공학 용어 정리] - [SW 용어] 동기화(Synchronization), 임계 영역(Critical Section) [SW 용어] 동기화(Synchronization), 임계 영역(Critical Section)동기화(Synchronization)1. 동기화는 시스템을 동시에 작동시키기 위해 여러 사건들을 조화시키는 것을 의미한다.2. 병행성과 관련해서 공유되는 자원에 대한 이해와 공유자원 사용과 관련해서 생길kfdd6630.tistory.com 임계 영역을 보호하는 4가지 방법1. 인터럽트 중단(taskENTER_CRITICAL(), taskEXIT_CRITICAL() .. 2024. 6. 10.
[FreeRTOS] Task의 Stack 최적의 사이즈 설정 FreeRTOS에서 Task의 적절한 Stack Size 설정1. 작업은 xTaskCreate() 또는 xTaskCreateStatic() API 함수를 사용하여 생성할 수 있다.2. 함수의 usStackDepth 매개변수는 생성 중인 작업에 할당될 스택의 크기를 지정한다.  - 이떄 단위는 byte가 아니고 word이다.3. 필요한 스택 양은 다음 애플리케이션별 매개변수에 따라 달라진다.4. 스케줄러가 다른 작업을 실행하기 위해 작업 실행을 일시적으로 중지할 때마다 프로세서 컨텍스트가 작업 스택에 저장된다.5. 저장된 프로세서 컨텍스트는 다음에 작업이 실행될 때 작업 스택에서 제거된다.6. 프로세서 컨텍스트를 저장하는 데 필요한 스택 공간은 RTOS 자체에서 발생하는 작업의 스택 요구 사항에 추가되는 .. 2024. 5. 30.
[FreeRTOS] Task의 우선순위와 선점 FreeRTOS에서 Task의 우선순위와 선점, Task간 흐름제어1. 우선순위가 다를 때우선순위가 다른 두 Task를 만든다.우선순위의 숫자가 클 수록 더 우선순위가 높다.xTaskCreate((TaskFunction_t)Task1, "Task1", 128, NULL, 10, &xHandle1);xTaskCreate((TaskFunction_t)Task2, "Task2", 128, NULL, 9, &xHandle2 ); 알파벳 ‘a’를 1초마다 한 번씩 출력하는 우선순위 10의 Task1을 만든다.알파벳 ‘b’를 1초마다 한 번씩 출력하는 우선순위 9의 Task2를 만든다.Task1과 Task2의 vTaskDelay()를 주석처리 해보면서 두 Task가 어떻게 작동하는지 확인한다.  1. Task1, .. 2024. 5. 18.
[FreeRTOS] FreeRTOS의 Task 및 관련 함수 FreeRTOS의 Task 및 관련 함수 xTaskCreate(), vTaskDelay(), vTaskDelayUntil(), vTaskSuspend(), vTaskResume(), vTaskPrioritySet() 1. Task란?FreeRTOS에서 태스크 (Task)란 어느 한 시점에서 Running, Suspended, Waiting되어 있는 함수이다. 프로세스(process)나 스레드(thread)와 비슷하게 동작한다.   2. Task의 특징  - Task의 특징과 생김새 각 Task에는 우선순위를 할당하며 숫자가 높을수록 큰 우선순위를 의미한다.   - 우선순위는 0부터 configMAX_PRIORITIES까지 할당이 가능하다.   - 우선순위가 높은 Task는 낮은 Task를 선점(preem.. 2024. 5. 10.
[FreeRTOS] FreeRTOS 네이밍 규칙 FreeRTOS에서 네이밍 규칙RTOS 커널 및 데모 애플리케이션 소스 코드는 다음 규칙을 사용한다.1. Variables (변수)1. 접두사 u, l, s, c unsigned 타입의 변수는 추가 접두사 u를 갖는다. 변수 이름은 CamelCase 대소문자를 사용하고 명확하게 설명하며 전체 단어(일반적으로 사용되는 약어 제외)를 사용한다.유형 uint32_t의 변수는 접두사로 ul이 붙는다.  - 여기서 'u'는 ' unsigned '을 의미하고 'l'은 'long'를 의미한다.유형 uint16_t의 변수는 접두사로 us가 붙는다.  - 여기서 'u'는 ' unsigned '을 의미하고 's'는 'short'를 의미한다.유형 uint8_t의 변수는 접두사로 uc가 붙는다.  - 여기서 'u'는 ' un.. 2024. 5. 7.
반응형