목록전체 글 (74)
뽕구의 개발일지
toPDF 깃허브 주소 GitHub - Heojiuk/toPDF: 여러 이미지를 하나의 PDF로 통합하는 툴 입니다.여러 이미지를 하나의 PDF로 통합하는 툴 입니다. Contribute to Heojiuk/toPDF development by creating an account on GitHub.github.com이미지를 하나의 PDF로 만들어주는 툴왜 만들었나?기관에 제출할 때 여러 증빙 이미지를 PDF 한 파일로 제출하는 경우가 있습니다.구글에 "PDF 합치기" 검색 후 지원되는 사이트를 이용했었는데, 민감정보 올리는게 제법 꺼려지더라고요.그래서 완전 로컬에서만 동작하는, 민감정보 걱정없는 툴을 하나 만들었습니다.아 물론 바이브코딩도 연습할겸어떻게 만들었나?클로드 코드로 초기 설계 및 개발제미나이로..
OTA(Over-the-Air)는 차량 ECU 소프트웨어를 원격으로 업데이트하는 기술입니다. 이번 프로젝트는 전체 무선 업데이트 인프라가 아닌 ECU 측 수신, 검증, 반영 흐름에 초점을 맞췄습니다. MCAL에 이어서 OTA를 HL만도 책임님께서 직접 강의를 해주셨습니다. 이 파트는 두번째 개인 프로젝트가 진행됐어요. 핵심 포인트는 아래와 같습니다.업데이트 중 전원이 꺼지거나 Reset 됐을 때 어떻게 정상 동작하도록 처리할 것인가. 업데이트 중 보안 취약점은 어떻게 관리할 것인가. 정상적으로 다운되면, 메모리 덮어쓰기메모리의 App 영역을 Primary와 Redundancy 영역으로 나누어를 관리합니다. 다운로드 중 전원을 끄거나, 업데이트가 끊기면 App 바이너리의 검증이 깨져서 ECU가 App의 진..
이번 과정에서는 STM32와 Keli, CubeMX를 활용해서 임베디드 환경에서 C를 더 효율적으로 쓰는 방법을 알아봤습니다.STM32L0 Nucleo로 레지스터 제어부터 HAL/LL 드라이버, BSP 포팅까지 다뤘고, HAL/LL 판단 기준과 volatile 최적화 과정을 다루었고, 핵심은 아래 네 가지입니다. volatile 키워드가 왜 필요한지BSRR/BRR로 핀을 원자적으로 제어하는 법HAL과 LL을 나눠 쓰는 기준BSP 라이브러리 포팅 과정 volatile, 컴파일러의 최적화로 인한 삭제를 예방volatile을 붙이면 컴파일러가 변수 접근을 최적화로 지우지 않고 매번 메모리에서 읽고 씁니다. 인터럽트가 바꾸는 플래그처럼 코드 흐름과 무관하게 값이 바뀌는 대상엔 필수죠. while문 앞 count..
지난 글에서 TRACE32로 칩을 들여다보는 법을 다뤘다면, 이번엔 그 칩을 표준대로 제어하는 법을 배워보았습니다. 이전에는 MCU 동작 속도를 줄이기 위해 레지스터를 직접 제어했었습니다.데이터시트를 직접 참고해가며 진행해서 굉장히 불편했던 기억이 있네요. 이를 해결하기 위해 MCU 추상화 레이어인 MCAL을 각 제조사에서 제공해서 쉽고 안전하게 레지스터에 접근하도록 제공해줍니다. 이번에는 HL만도의 ECU SW개발 책임님께서 직접 오셔서 하나부터 열까지 실무 중심의 강의를 진행해 주셨습니다. MCAL이란?MCAL(Microcontroller Abstraction Layer)은 MCU 레지스터를 직접 감싸는 최하단 드라이버 계층입니다.칩이 바뀌어도 MCAL만 갈아치우면 위쪽 API는 그대로 쓸 수 있어요..
일반적으로 SW 디버깅이라고 하면, 브레이크포인트를 걸거나 출력으로 상태를 확인하거나 메모리를 확인합니다. 임베디드 레벨에서 디버깅이란, 이에 더해 디버깅 툴을 통해 MCU 명령어 Set 기반 분석, bootloader 분석, 실시간 어셈블리어 분석까지 가능하게 됩니다. 이때 필요한 게 하드웨어 디버거인데, 자동차 쪽에서는 대표적으로 TRACE32라는 녀석이 쓰입니다. 이번 과정에서 다룬 건 크게 네 가지입니다. 하드웨어 디버거란?빌드 결과물 차이(bin/hex/elf)브레이크포인트 활용법STOP 방식과 TRACE 방식 하드웨어 디버거란?Lauterbach TRACE32TRACE32는 Lauterbach라는 독일 회사의 디버거입니다.디버그 본체와 프로브 같은 하드웨어, 그리고 PowerView라는 소프트..
제가 자동차 분야로 도전하게 된 계기는, 실무에서 CAN을 직접 다뤄봤던 경험에서 시작됐습니다.그래서 IVS 교육과정 중에서도 차량용 통신시스템 강의가 제일 기대됐어요. 차량용 통신시스템 강의에서 주로 다룬 것은 크게 4가지 입니다.CAN이 BUS를 쓰는 이유충돌을 우선순위로 예방하는 arbitrationVector 툴로 가상 ECU 만들어서 통신하기진단통신 UDS (흐름 정도만)CAN이 BUS 쓰는 이유옛날엔 노드끼리 선을 직접 잇는 P2P(점대점) 방식을 썼습니다.노드가 늘수록 와이어와 커넥터가 증가했고, 차를 가볍게 만들려는데 배선이 무게와 비용을 키우는 역효과가 났어요. 가장 큰 문제는 확장 한계였습니다. 노드를 하나 추가할 때마다 배선이 기하급수로 늘어나니까요. 그래서 나온 게 BUS 방식입니다..
지난번엔 아두이노 라인트레이서로 하드웨어를 직접 굴려봤어요.이번엔 한 계단 올라가서, 진짜 자동차에 들어가는 MCU인 인피니언 AURIX TC275를 만졌습니다. 그런데 이번엔 만진 보드보다 개발 방식이 더 낯설었어요.코드를 손으로 안 짜고, 로직을 그림으로 그리면 코드가 알아서 튀어나오더라고요. 이번 과정에서 제가 직접 한 건 세 가지입니다.AURIX TC275로 BSW 작성Simulink로 ASW 모델링 및 코드 제너레이션Stateflow로 ACC(적응형 크루즈) 모델링AURIX 보드, BSW부터먼저 왜 자동차에 인피니언 AURIX냐가 궁금했는데요. 현대차가 AURIX를 채택하면서 많은 Tier(부품사)들이 따라간 영향이 크다 합니다.과거 독일이 A-SPICE, ISO 26262 같은 기능안전 표준을..
C언어는 학부때 C언어 입문으로 처음 만졌고, 이후 실무에서 STM32를 다루면서 써봤어요.나름 익숙한 언어라고 생각했습니다. 하지만 자동차 SW에서 C를 쓰는 법은 달랐고, 이 강의에서 대략적인 감을 잡을 수 있었습니다.문법 보다는 메모리, 속도, 안전을 우선하는 언어 활용법이라고 생각이 듭니다. 그리고 학부때 라인트레이서 다들 해봤다고 하시던데, 저는 안해봤어요.재밌게 라인트레이서 만들어서 하드웨어 제어도 살짝 맛봤습니다. 임베디드 C는 메모리를 신경 쓰는 C문법은 똑같은 C인데, 임베디드에서는 결국 RAM과의 싸움입니다. PC 프로그램은 RAM에 올라가서 돌지만, 임베디드는 ROM(플래시)에서 프로그램을 한 줄씩 읽어가며 동작한다고 배웠습니다. 전원이 켜지면 스타트업 코드가 초기값들을 플래시에서 R..
4일간 SW공학과 A-SPICE에 대해 학습하였습니다. 처음엔 정보처리기사 딸 때 내용들이라 익숙했어요. V-Model, 개발 방법론, 응집도와 결합도 같은 것들. 그런데 자동차 SW 관점으로 다시 보니 느낌이 좀 달랐습니다."개발 방법론대로 개발해"가 아니라, 고객 요구사항을 만족하는 결과물이 나왔다는 걸 어떻게 증명할 것인가?에 더 가까웠어요. 이번에는 SW공학과 A-SPICE를 가볍게 정리해보도록 하겠습니다. 자동차 SW는 코드만으로 설명되지 않는다강의 초반의 내용들은 소프트웨어가 코드로만 만들어지지 않는다는 거였습니다. 요구사항명세서, 설계서, 테스트 결과서, 매뉴얼 같은 산출물까지 포함해서 소프트웨어라고 봐야 한다는 거죠.방산쪽에서도 많이 느꼈지만, 차량 SW 쪽에서도 이 부분이 중요하다는 걸 ..
3일간 차량 전장시스템에 대해 학습하였습니다. OT 때 일주일 단위로 회고를 남기겠다 해놓고, 반년치를 몰아 쓰고 있네요.. 이번 과정은 경기과학기술대학교에서 진행됐습니다. 직접 차량을 뜯어서 내부 구조를 배우는 시간이라 입과 전에도 너무 기대됐던 과정이었습니다.어릴때 아버지가 카센터를 하셨어서, 차 분해되어 있는건 자주 봤는데도 말이죠 ㅎㅎ 집이 용인이라 시흥까지 매일 운전해서 다녔는데, 아침마다 네비 찍고 톨게이트 지나는 걸로 하루가 시작됐습니다. 이번에는 그 3일간 배운 내용을 간단히 정리해보도록 하겠습니다. 어떤 과정이었나차량 전장시스템 이해 과정은 3일, 총 21시간으로 진행됐습니다. 자동차 전기·전자제어의 기초 이론을 배우고, 그걸 바로 차량과 진단 장비로 실습해보는 구성이었어요. 1..