Software/Embedded system 14

Automotive Vehicle System: SOME/IP Protocol

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

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의 단계의..

fmt 와 Variadic function 정리

fmt 는 format을 줄여서 표현한 부분이다. Formatted I/O with functions 이고 대표적으로 printf 와 scanf 가 있다. Variadic function이란 가변 함수란 의미이다. 정의가 되어 있는 않는 인수를 가지고 함수를 만들수 있다는 의미이다. printf 가 해당하는 함수 이다. A variadic function is a function of indefinite arguments or operands. C 언어에서는 stdarg.h header파일을 통해서 api를 사용할 수 있다. The stdarg.h is a header in the C standard library of the C programming language that allows function..

Sizeof()for struct and pointer with pack()  64bit system

64bit system을 사용하게 되면 기본적으로 알아야 하는 메모리 구조와 Struct 의 사이즈에 대해서 알아봤다. 64bit system에서 사용되는 메모리에 접근해서 처리하는 단위가 8byte 로 되어 있다고 보면 된다. 그래서 포인터의 사이즈를 읽어 보면 8byte로 되어 있다. 32 bit system (x86): 4byte 단위 64 bit system (x64): 8byte 단위 구조체에서는 멤버변수중에서 제일 큰 사이즈에 맞추어져서 패딩이 된다. 그래서 구조체의 사이즈를 읽어보면 패딩된 부분에 의해서 사이즈가 크게 읽히게 된다. 이렇게 시스템에서 한번에 읽기 좋은 구조로 패딩이 되면 빠른 처리가 되게 되지만 실제로는 메모리를 낭비하게 되고 각비트별로 값을 담아서 전달을 할때는 해당 값의 ..