Software 22

Automotive Vehicle System: SOME/IP Protocol

최근 자동차 부품들이 SW기반으로 확장성과 변경이 용이하도록 설계가 되어 가고 있다. 마치 핸드폰처럼 하드웨어 변경이 아니라 SW 업그레이드를 통해서 기능의 향상을 하도록 되어 가고 있다. 자동차는 안전부품들과 라이프타임이 10년이라서 새로운 기능을 추가하기 쉽지 않은 구조이다. 그래도 점점 업그레이드를 할 수 있는 구조로 변해가는 추세이다. 왜냐면 SW가 주요처리를 하기 때문이다. 그래서 CAN 통신으로 전체 차량을 제어하는게 한계가 된 부분들이 있기에 각각의 ECU들이 Ethernet으로 연결이 되고 이후에 각ECU들이 새로운 기능을 사용이 자유롭게 이루어 지도록 SOME IP라는 프로토콜을 요구하고 있다. 그래서 간단히 정리를 해본다. SOME IP: Scalable Service Oriented ..

R3 UNO + WiFi (ATmega328 + ESP 8266) CH340 셋팅

알리에서 부품들을 대략적인 생각으로 구입을 했더니 정확하게 사용하는 방법을 몰라서 삽질을 하게 되더라. 보드에 WiFi는 있어야 나중에 MQTT 나 무선으로 명령을 보낼 수 있을 것 같아서 싼가격에 구입을 했는데 Dip switch로 조절 한다는 것을 몰라서 한동안 사용을 하지 못하고 있어다. Dip switch를 사용하고 싶은 목적에 맞게 ON을 해주고 하면 되더라. 하나씩 배워가면서 하고 있지만 계획을 만들고 시작해야겠다. 산으로 갈 수도 있겠다. 1. CH340 usb 드라이버는 필수 설치. 검색하면 중국사이트가 나온다. 2. Dip Switch를 3, 4번 ON 해주고, UNO WiFi 보드선택을 하고 프로그램 업로드 해본다. 3. 이후에는 ESP8266 용 보드 설치해주고 새롭게 프로그램 올려보..

Arduino 부품 테스트

발란스 로봇을 위한 부품들이 와서 하나씩 테스트를 해보는 중이다. 문제해결: 알리에서 구입한 아두이노는 usb 드라이버를 설치해 줘야한다. 드라이버 설치 이후에도 인식이 안되면 usb케이블도 바꿔 보고 아두이노 자체를 바꿔서 확인을 해봐야한다. 인식이 안되는 보드랑 usb도 있을 수 있다. UNO 보드는 코드 업로드 에러 발생하고 나노 보드USB 인식 안되는 현상은 해결이 안되서 새로 나노보드를 하나 구해서 테스트 중이다. 아두이노는 라이브러리 코드가 잘 되어 있어서 손쉽게 접근을 할 수 있었다. 조금만 더 정리해서 조립 및 움직임을 완성해야 겠다. 1. LED 점등 완료 with RTOS lib. 2. 초음파, 자이로, 서브모터 동작 확인 완료 다음 단계: 각 센서들을 동시에 처리하기 위해서 task처..

Arduino 개발 준비

우연히 옆자리에 러시아친구가 개인프로젝트로 로봇청소기를 만들고 있는걸 봤다. 3D프린터로 외형을 뽑고 모터를 돌리고 제어를 하고 있는 모습을 보니까 갑자기 나는 무엇을 할 수 있을까? 생각이 들었다. 그래서 어릴적부터 한번쯤 만들어보고 싶었던 자동차를 만들어 보기로 마음 먹었다. 일단 검색을 해보니 알리에 부품이랑 완제품까지 모든게 다 팔고 있었다. 왠지 완제품을 사서 하다가 포기하면 돈만 날린다는 생각에 빵판부터해서 아두이노를 이용해서 간단히 해볼 수 있는 것을 장바구니에 담기 시작했다. 그렇게 담아서 구매를 누르니까 완제품 가격이랑 비슷하게 나오더라. 그래도 대학다닐때는 아무것도 몰라서 시작도 못했는데 요즘은 정보가 넘쳐나기에 삽질을 어느정도 하면 만들수 있을 것 같은 자신감이 생기더라. 두바퀴로 균..

Dangling Pointer_ChatGPT code review

댕글링 포인터는 포인터가 값이 존재하지 않는 메모리주소를 가르키고 있다는 것이다. 댕글링 포인터가 발생이 되면 시스템에서 심각한 문제가 발생이 된다. Segment fault 라는 크래쉬가 발생이 된다고 보면 된다. A dangling pointer is a pointer that pointers to some non-existing memory location which means a deallocated memory block. A dangling pointer occurs at the time of the object destruction when the object is deleted or de-allocated from memory without modifying the value of the ..

Pointer in C 해석 포인터배열& 배열포인터

포인터를 해석하는 방법도 헷갈릴때가 많더라. 조금만 방심하면 이걸 어떻게 읽을까? 영어로 설명을 할때는 뭐라고 해야 할까는 또 다른 고민이더라 그래서 한국말을 잘 하는 사람이 영어도 잘하는 모양이다. int ***ptr[5]; //포인터 배열, 배열의 요소로 포인터변수를 가지게 된다. 배열의 값에 주소값이 들어간다는 것이다. 먼저 변수인 ptr 를 먼저 읽는다. 그 다음에 포인터를 읽을지 [5] 배열을 읽을지 결정을 해야한다. 이 경우에는 오른쪽을 먼저 읽고 왼쪽으로 넘어간다. 그래서 배열이 우선순위가 있기에 ptr은 인덱스가 5인 배열이다. 그 다음은 왼쪽에 있는 포인터를 읽어주고 데이터 타입을 붙여주면 된다. ptr 은 int 형 타입의 변수 인덱스가 5인 배열에 포인터에 포인터에 포인터인 변수다. ..

Big O complexity 되새김

다시 한번 개념에 대해서 생각하는 시간을 가지게 되었다. 프로그램에서 왜 빅오 개념이 중요한지는 내가 생각하는 빠르다 느리다는 것을 어떻게 일반화 시켜서 적용을 하는가에 대한 것이다. 사용하는 HW에 따라서 동일한 알고리즘의 성능이 다르게 나올 수 있기 때문에 빅오를 사용해서 알고리즘의 성능을 판단하는 부분이 된다. exponent (지수: 거듭제곱을 나타내는 수) logarithm (로그) O (1) 입력값이 커져도 처리 단계가 한 단계인 경우 O (log n) 처리하는 단계가 특정 요인에 의해서 줄어 드는 경우 O (n) Input이 N 만큼 단계가 필요한 경우 O (n log n) Input 의 수가 N번에서 해당 N 번당 필요한 단계들이 특정요인으로 줄어드는 경우 O (n^2) Input의 단계의..