목록분류 전체보기 (128)
승코딩당당당
RTOS 환경에서는 여러 태스크가 동시에 실행되며, 동일한 자원에 접근할 경우 데이터 충돌이 발생할 수 있다.이를 방지하기 위해 동기화 기법이 필요하며, 대표적인 방법이 Mutex이다. 본 글에서는 Mutex의 개념을 간단히 정리하고, OSEK/Trampoline 환경에서 직접 구현한 Mutex를 활용하여태스크 간 동기화가 어떻게 이루어지는지 실습을 통해 확인하였다. Mutex의 개념Mutex(Mutual Exclusion)는 하나의 공유 자원에 대해 동시에 하나의 태스크만 접근하도록 제한하는 동기화 기법이다. 즉, 특정 자원을 사용하려는 태스크는 먼저 lock을 획득해야 하며,이미 다른 태스크가 해당 자원을 사용 중이라면 접근할 수 없고 대기 상태에 들어가게 된다. ✔ 특징한 번에 하나의 태스크만 접..
이번 실습에서는 Trampoline RTOS 환경에서 여러 Task(Task1, Task2, TaskM)를 정의하고, Task 간 상태 변화와 스케줄링 동작을 확인하였다. 특히 ActivateTask, ChainTask, GetTaskState API를 활용하여 Task의 실행 흐름과 상태 전이를 관찰하는 데 초점을 맞췄다. 접근 방법1. 주기 Task (TickPrint)Timer2 기반 Alarm을 통해 약 1초 주기로 실행카운터 c를 증가시키며 로그 출력c == 0일 때 Task1을 활성화if (c == 0) { ActivateTask(Task1);} 2. Task1 → Task2 흐름 구성Task1 동작실행 시작 로그 출력Task 상태 확인3초 대기Task2 활성화다시 상태 확인3초 대기종..
그래프 문제를 풀다 보면 노드 간의 연결 여부를 빠르게 판단해야 하는 상황이 자주 등장한다.이때 사용하는 대표적인 알고리즘이 바로 유니온 파인드(Union-Find) 이다. 유니온 파인드는 노드들을 여러 개의 집합으로 관리하면서집합을 합치고, 같은 집합인지 확인하는 연산을 빠르게 수행할 수 있는 자료구조이다. 이번 글에서는 유니온 파인드의 개념과 핵심 연산,그리고 성능을 향상시키는 경로 압축까지 정리해보려고 한다. ✍️ 유니온 파인드란?유니온 파인드(Union-Find)는여러 노드를 집합으로 묶고 관리하는 알고리즘이다. 이 알고리즘은 다음 두 가지 연산으로 구성된다.union 연산: 두 집합을 하나로 합치는 연산find 연산: 특정 노드가 속한 집합의 대표 노드를 찾는 연산즉,노드 a, b가 있을 ..
RTOS(Real-Time Operating System)는 일반 운영체제와 달리 작업의 처리 순서보다 정해진 시간 내에 작업을 완료하는 것이 핵심인 시스템이다. 이러한 특성 때문에 스케줄링 방식 역시 단순한 효율성보다 각 Task의 Timing Requirement와 Deadline을 보장하는 구조로 설계된다. 본 글에서는 RTOS 스케줄링의 기본 개념을 시작으로, 자동차 소프트웨어에서 널리 사용되는 OSEK/VDX 표준의 구조와 목적을 함께 정리한다. OSEK이 ECU 내부에서의 Task, Event, Alarm, Resource 등을 어떻게 관리하는지, 그리고 VDX가 이를 어떻게 ECU 간 분산 시스템으로 확장하는지를 중심으로 살펴본다. 또한 RTOS를 이해하기 위한 배경 지식으로 Process,..
문제[C++] 백준 1976: 여행 가자 GOLD 4https://www.acmicpc.net/problem/1976 접근 방법백준 1976번은 여행 계획이 가능한지 판단하는 문제다.여러 도시가 있고, 도시 간 연결 정보가 주어질 때 주어진 여행 계획대로 모든 도시를 이동할 수 있는지 확인해야 한다. 핵심 아이디어는 다음과 같다.여행 계획에 포함된 모든 도시가하나의 연결된 그룹(같은 집합) 에 속해 있는지 확인하면 된다. 이 문제는 도시 간 연결 여부를 계속 확인해야 하므로Union-Find(Disjoint Set) 자료구조를 사용하는 것이 가장 효율적이다. 상세 아이디어부모 배열 초기화 parent.resize(N + 1, 0);for (int i = 1; i 각 도시는 처음에 자기 자신을 부모로 가..
문제[C++] 백준 1717: 집합의 표현 GOLD 5https://www.acmicpc.net/problem/1707 접근 방법백준 1717번은 집합의 합집합과 포함 여부를 처리하는 문제로,대표적인 Union-Find(Disjoint Set) 자료구조를 사용하는 문제다. 문제에서 수행하는 연산은 두 가지다.0 a b → a와 b를 같은 집합으로 합치기 (Union)1 a b → a와 b가 같은 집합인지 확인 (Find)따라서 핵심은 각 원소가 어떤 집합에 속해 있는지를 효율적으로 관리하는 것이다. 이를 위해 parent 배열을 사용한다.vector parent; parent[i] : i의 부모 노드초기에는 모든 원소가 자기 자신을 부모로 가진다.for (int i = 1; i Find (대표 노드 ..
최근 자동차 산업은 단순한 기계 중심 구조에서 벗어나, 소프트웨어를 중심으로 기능이 정의되는 SDV(Software Defined Vehicle)로 빠르게 전환되고 있다. 기존 차량은 초기 설계 단계에서 모든 기능이 결정되고 이후 변경이 어려운 구조였지만, SDV는 OTA(Over-The-Air) 업데이트를 통해 지속적으로 기능을 개선하고 확장할 수 있다는 점에서 큰 차이를 가진다. 이러한 변화는 사용자에게 개인 맞춤형 경험을 제공하는 동시에, 자동차를 하나의 플랫폼으로 진화시키고 있다. 이러한 SDV를 구현하기 위해서는 단순히 소프트웨어만 중요한 것이 아니라, 이를 실제 하드웨어와 연결하는 구조에 대한 이해가 필수적이다. MCU 내부의 CPU, 메모리, 그리고 Peripheral(주변장치)와 레지스터를..
문제[C++] 백준 1707: 이분 그래프 GOLD 4https://www.acmicpc.net/problem/1707 접근 방법이 문제는 주어진 그래프가 이분 그래프인지 판별하는 문제이다.이분 그래프란, 정점을 두 개의 집합으로 나누었을 때 같은 집합 내에서는 간선이 존재하지 않는 그래프를 의미한다.이를 해결하기 위해 그래프를 탐색하면서 각 정점을 두 가지 색(0, 1)으로 칠하는 방식을 사용한다.인접한 두 정점은 반드시 서로 다른 색이어야 함만약 같은 색이 되면 → 이분 그래프 아님그래프는 여러 개의 연결 요소로 나뉠 수 있으므로, 모든 정점을 시작점으로 탐색을 수행해야 한다.탐색 방법은 DFS를 사용하였다. 상세 아이디어1. 그래프 구성 vector> graph; 인접 리스트 형태로 그래프를 구성..
문제[C++] 백준 2251: 물통 GOLD 4https://www.acmicpc.net/problem/2251 접근 방법이 문제의 핵심은 상태를 그래프로 보고 BFS로 탐색하는 문제이다.각 물통의 상태를 하나의 노드로 보고, 물을 옮기는 행위를 간선으로 생각하면 된다. 처음에는 세 물통 A, B, C의 상태 (A, B, C)를 모두 고려해야 할 것 같지만,전체 물의 양이 항상 일정하기 때문에 다음과 같이 단순화할 수 있다.전체 물의 양 = 항상 C의 초기값따라서 C = 전체 - A - B로 계산 가능즉, (A, B)만 알면 상태를 완전히 표현할 수 있기 때문에 visited[A][B] 형태로 방문 체크를 진행한다.탐색은 BFS를 사용하여 가능한 모든 상태를 순회하며, 그 중에서 A가 0인 상태일 때의..
문제[C++] 백준 1325: 효율적인 해킹 SILVER 1https://www.acmicpc.net/problem/1325 접근 방법백준 1325번은 효율적인 해킹 문제로,어떤 컴퓨터를 해킹했을 때 가장 많은 컴퓨터를 해킹할 수 있는 시작 노드를 찾는 문제다. 핵심 포인트는 다음이다.A → B 라는 관계는A를 해킹하면 B도 해킹할 수 있다는 의미가 아니라B를 해킹하면 A를 해킹할 수 있다는 의미다. 그래서 그래프를 그대로 저장하면 안 되고, 간선 방향을 반대로 저장해야 한다.이렇게 하면 “어떤 노드에서 시작했을 때 도달 가능한 모든 노드”를 DFS로 쉽게 탐색할 수 있다.graph[b].push_back(a); 상세 아이디어1. 그래프 구성graph[b].push_back(a)→ b를 해킹하면 a를 ..