목록전체 글 (114)
승코딩당당당
AUTOSAR Communication 구조는 소프트웨어 컴포넌트 간의 데이터 교환을 효율적으로 수행하고, 하드웨어와의 결합도를 낮추기 위해 계층적으로 설계되어 있다. SWC와 Runnable을 기반으로 기능을 분리하고, RTE를 통해 컴포넌트 간 통신을 추상화함으로써 시스템의 재사용성과 확장성을 확보한다. 이 과정에서 BSW는 하드웨어와 상위 애플리케이션 사이를 연결하는 핵심 역할을 수행하며, System Services, ECU Abstraction, MCAL로 구성된 계층 구조를 통해 하드웨어 의존성을 최소화한다. 또한 Com, Dcm, Dem과 같은 통신 및 진단 모듈과 PduR, CanIf, CAN Driver로 이어지는 통신 흐름을 통해 데이터가 실제 네트워크로 전달된다. 특히 NM과 CanS..
이번 실습에서는 AUTOSAR OS 환경에서 Task를 생성하고, 이를 주기적으로 실행하여 LED를 제어하는 과정을 수행하였다. 단순히 while문으로 LED를 제어하는 것이 아니라, AUTOSAR의 Task와 Alarm 기반 스케줄링 구조를 활용하여 실시간 시스템에서의 동작 흐름을 이해하는 데 목적이 있다. 특히, OS 레벨에서 Task가 어떻게 생성되고 실행되는지, 그리고 해당 Task가 실제 하드웨어 제어로 이어지는 과정을 직접 구현해보며 AUTOSAR 구조에 대한 이해를 높일 수 있었다. 실습 환경보드: TRK-MPC560XBMCU: MPC5606B개발 환경: mobilgene C StudioAUTOSAR Classic Platform 기반실습 목표AUTOSAR OS Task 생성 및 설정Task..
자동차 소프트웨어는 점점 더 복잡해지고 있으며, 다양한 제어기와 기능을 효율적으로 통합하기 위해 표준화된 플랫폼이 필수적으로 요구되고 있다. 이러한 흐름 속에서 등장한 것이 AUTOSAR 기반 소프트웨어 플랫폼으로, 하드웨어와 독립적인 구조를 통해 소프트웨어 재사용성과 안전성을 동시에 확보할 수 있도록 한다. 이 글에서는 소프트웨어 플랫폼의 개념과 필요성을 시작으로, AUTOSAR의 구조와 Classic/Adaptive의 차이, 그리고 실제 차량 시스템에서 중요한 역할을 하는 AUTOSAR OS의 핵심 요소(Task, Interrupt, Alarm, Resource 등)를 정리하였다. 특히 실시간 시스템에서 요구되는 스케줄링 방식과 우선순위 관리, 그리고 안정적인 동작을 위한 메커니즘까지 함께 다루며 전..
문제[C++] 백준 2606: 바이러스 SILVER 3https://www.acmicpc.net/problem/2606 접근 방법백준 2606번은 컴퓨터 바이러스 문제로,1번 컴퓨터가 바이러스에 감염되었을 때 연결된 다른 컴퓨터가 몇 대 감염되는지 구하는 문제다. 컴퓨터들이 네트워크로 연결되어 있기 때문에, 이를 그래프 탐색 문제로 볼 수 있다.문제의 핵심은 다음과 같다.컴퓨터 = 노드네트워크 연결 = 간선따라서 그래프 탐색(DFS 또는 BFS) 을 이용해서 1번 컴퓨터에서 시작하여 연결된 모든 컴퓨터를 방문하면 된다. 이번 풀이에서는 DFS(Depth First Search) 를 사용했다.먼저 그래프를 인접 리스트 형태로 저장한다.vector> graph;그리고 방문 여부를 확인하기 위해 배열을 사용..
문제[C++] 백준 10826: 피보나치 수 4 SILVER 5https://www.acmicpc.net/problem/10826 접근 방법백준 10826번은 N번째 피보나치 수를 출력하는 문제다.하지만 일반적인 피보나치 문제와 달리 값의 크기가 매우 커진다. 예를 들어 N이 커지면 피보나치 값은 수백 자리 이상의 정수가 되기 때문에long long 같은 기본 정수 타입으로는 저장할 수 없다.그래서 이 문제는 큰 정수(Big Integer) 를 직접 구현해야 한다.이를 위해 문자열(string) 을 이용해서 덧셈을 구현했다. 피보나치 점화식은 다음과 같다.F(n) = F(n-1) + F(n-2)하지만 문자열끼리 바로 덧셈이 되지 않기 때문에 문자열 덧셈 함수 add()를 만들어 계산했다. 문자열 덧셈의..
문제[C++] 백준 2749: 피보나치 수 3 GOLD 2https://www.acmicpc.net/problem/2749 접근 방법백준 2749번은 N번째 피보나치 수를 1,000,000으로 나눈 나머지를 구하는 문제다. 문제의 핵심은 N의 범위가 매우 크다는 것이다.N은 최대 10^18까지 주어질 수 있기 때문에, 단순히 피보나치 수열을 N까지 계산하는 방법으로는 해결할 수 없다. 이 문제를 해결하기 위해 피사노 주기(Pisano Period) 개념을 이용한다.피보나치 수열을 어떤 수 m으로 나눈 나머지는 반복되는 주기를 가진다.이 반복되는 길이를 피사노 주기라고 한다. 이 문제를 풀기 전에 백준 9471번 문제를 먼저 풀고 오는 것을 추천한다.관련 포스팅:https://xeungcoding.tis..
문제[C++] 백준 9471: 피사노 주기 SILVER 4https://www.acmicpc.net/problem/9471 접근 방법백준 9471번은 피사노 주기(Pisano Period) 를 구하는 문제다.피보나치 수열을 어떤 정수 m으로 나눈 나머지를 계속 계산하면 수열이 일정한 주기를 가지고 반복된다.이 반복되는 길이를 피사노 주기라고 한다. 예를 들어, 피보나치 수열을 3으로 나눈 나머지를 보면1 1 2 0 2 2 1 0 1 1 ...이렇게 특정 구간 이후부터 동일한 패턴이 반복된다.이 반복되는 길이가 바로 피사노 주기 k(m) 이다. 상세 아이디피사노 주기는 다음 성질을 가진다.k(m) ≤ m² − 1 즉, 최대 m^2번 정도만 확인하면 반드시 주기가 발견된다.그래서 반복문을 m * m 범위까..
📌 개요임베디드 시스템은 제한된 메모리와 낮은 연산 자원을 기반으로 동작하는 경우가 많기 때문에, 동일한 기능을 구현하더라도 코드를 어떻게 작성하느냐에 따라 성능과 자원 사용량이 크게 달라진다. 특히 MCU 환경에서는 ROM과 RAM이 모두 한정되어 있고, 실행 속도 또한 시스템 안정성과 직결되기 때문에 C 코드 최적화는 선택이 아니라 필수에 가깝다. 이번 글에서는 임베디드 C 코드 최적화를 메모리 관점, 실행 속도 관점, 데이터 처리 관점, 흐름 제어 관점으로 나누어 정리하였다. 단순히 “빠르게 만드는 방법”이 아니라, 메모리 절약과 실행 속도 향상 사이의 균형을 어떻게 잡아야 하는지에 초점을 두고 살펴본다. 또한 자료형 선택, 타입 변환 최소화, 비트 연산 활용, 루프 최적화, 인라인 함수 사용 등..
문제[C++] 백준 11725: 트리의 부모 찾기 SILVER 2https://www.acmicpc.net/problem/11725 접근 방법이 문제는 루트가 1번인 트리가 주어졌을 때, 각 노드의 부모를 출력하는 문제다. 트리는 사이클이 없는 연결 그래프이기 때문에,1번 노드를 기준으로 DFS를 한 번만 돌면서 부모를 기록해주면 해결된다. 구현 아이디어는 간단하다:graph : 인접 리스트 (양방향 그래프)ret[i] : i번 노드의 부모 노드 번호visited[i] : 방문 체크DFS에서void dfs(int before, int now){ visited[now] = true; ret[now] = before; // now의 부모는 before for (int i = 0; i 이렇게..
문제[C++] 백준 1850: 최소공약수 SILVER 1 https://www.acmicpc.net/problem/1850 접근 방법백준 1850번은 두 정수 A와 B가 주어졌을 때, 각각이 1로만 이루어진 수(1111… 형태) 라고 생각하고그 둘의 최대공약수에 해당하는 1의 개수를 출력하는 문제다. 핵심 아이디어는 다음과 같다.111…(A개) 와 111…(B개)의 최대공약수는1이 GCD(A, B)개 있는 수가 된다. 즉,두 수의 최대공약수를 먼저 구하고그 개수만큼 1을 출력하면 된다.따라서 문제의 본질은 두 수의 최대공약수(GCD)를 구하는 것이다.유클리드 호제법을 이용하면 효율적으로 계산할 수 있다.int GCD(ll a, ll b){ if (a % b == 0) return b;..