본문 바로가기

Embedded/OSEK Real-Time OS9

Mutex Mutex OSEK RTOS에서 “Mutex(뮤텍스)“는 공유 자원에 대한 접근을 동기화하기 위한 동기화 메커니즘 중 하나입니다. 뮤텍스는 Mutual Exclusion(상호 배제)의 약자로, 한 번에 하나의 태스크만이 특정 공유 자원에 접근할 수 있도록 보장합니다. 이를 통해 경쟁 조건(Race Condition)을 방지하고 데이터의 일관성을 유지할 수 있습니다. 뮤텍스를 사용하는 OSEK API 함수는 주로 다음과 같습니다: • GetResource(mutexName): 뮤텍스를 획득(락)합니다. 이미 다른 태스크에 의해 획득된 뮤텍스에 대해선 해당 태스크는 대기 상태로 전이됩니다. • ReleaseResource(mutexName): 획득한 뮤텍스를 반납(언락)합니다. 실습을 진행하며 mutex에 .. 2024. 1. 21.
Race condition & Resource Race condition Race Condition은 멀티스레드 또는 멀티태스킹 환경에서 여러 스레드 또는 태스크가 공유된 자원에 동시에 접근하려고 할 때 발생하는 문제를 나타냅니다. OSEK RTOS 환경에서도 race condition이 발생할 수 있습니다. Race Condition이 발생하는 상황은 주로 다음과 같습니다: 공유 자원에 동시 접근: 여러 태스크가 동시에 공유 변수, 자료구조, 메모리 영역 등에 접근할 때 발생합니다. 스케줄링의 불확실성: 다양한 태스크들이 스케줄링에 의해 실행되는 순서가 예측하기 어려울 때 발생합니다. 비원자적 연산 수행: 여러 단계로 이뤄진 연산 중 일부 단계만 수행되고 다른 태스크가 끼어들어 해당 연산을 완전히 수행하기 전에 결과를 읽는 경우 등이 해당됩니다. .. 2024. 1. 21.
Hook Hook OSEK RTOS에서 “hook”은 시스템 이벤트가 발생할 때 호출되는 사용자 정의 함수를 나타냅니다. OSEK에서 hook 함수는 시스템의 다양한 이벤트 포인트에서 실행되어 사용자가 특정 동작을 수행하도록 하는 확장성을 제공합니다. OSEK 표준은 다양한 유형의 훅을 정의하고 있습니다. 1. Startup Hook: • 시스템이 초기화될 때 호출되는 훅입니다. • 사용자가 초기화 코드를 추가하거나 특정 동작을 수행하도록 하는 데 사용됩니다. 2. Error Hook: • 오류가 감지되면 호출되는 훅입니다. • 시스템 에러 처리를 위해 사용자가 특정 코드를 추가할 수 있습니다. 3. PreTaskHook: • 각 태스크가 실행되기 전에 호출되는 훅입니다. • 태스크 실행 전에 특정 동작이 필요한.. 2024. 1. 21.
Alarm & Event Alarm OSEK RTOS에서 알람(Alarm)은 시간 주기에 따라 태스크를 활성화하는 데 사용되는 메커니즘입니다. 알람은 특정 카운터와 연결되어 있으며, 카운터가 특정 값에 도달하면 알람이 트리거되어 해당 알람과 연결된 태스크가 실행됩니다. Alarm을 추가하는 실습을 진행하며 이해하는 시간을 가지겠습니다. OIL파일을 수정하여 Counter와 alarm을 추가 COUNTER counter1{ MINCYCLE = 1; MAXALLOWEDVALUE = 127; TICKSPERBASE = 1; }; ALARM alarm1{ COUNTER = counter1; ACTION=ACTIVATETASK{ TASK=Task1; }; AUTOSTART = TRUE{ ALARMTIME = 5; CYCLETIME = 1.. 2024. 1. 20.
Task OSEK RTOS에서의 Task에 대해 알아보겠습니다. Task Task는 실행되어야 하는 코드 블록을 나타내며, 시스템의 주요 기능을 수행하는 데 사용됩니다. 각 태스크는 우선순위를 가지며, 시스템은 우선순위에 따라 태스크를 스케줄링하여 실행합니다. 작업 수행: 태스크의 주요 역할은 특정 작업 또는 일련의 작업을 수행하는 것입니다. 작업은 시스템의 요구사항에 따라 다양하게 정의될 수 있으며, 예를 들어 센서 읽기, 데이터 처리, 통신 등이 해당될 수 있습니다. 우선순위 지정: 각 태스크는 특정 우선순위를 가지며, 시스템은 이 우선순위에 따라 태스크를 스케줄링합니다. 높은 우선순위를 가진 태스크는 낮은 우선순위를 가진 태스크보다 더 높은 우선순위로 실행됩니다. 스케줄링 및 동기화: OSEK RTOS는 멀.. 2024. 1. 20.
OSEK project 기초 OSEK 프로젝트의 파일구조와 관리에 대해 알아보았기에 기본적인 함수를 사용하고 코드를 작성해보며 어떠한 구조로 이루어져있는지 알아보는 시간을 가지겠습니다. 첫번째로 Hello World를 출력하는 프로그램을 작성해보도록 하겠습니다. 1. Hello World bsw.cpp파일과 bsw.h파일, asw.c 파일과 conf.oil파일을 수정하면됩니다. #include “bsw.h” TASK(Task1) { printfSerial(“Hello World\n”); TerminateTask(); } TASK Task1{ PRIORITY = 1; STACK = SHARED; SCHEDULE = FULL; //preemptive AUTOSTART = TRUE; //자동시작 ACTIVATION = 1; }; 위 코드.. 2024. 1. 20.