Embedded 6

[C 언어] [Embedded] 메모리 동적 할당에 대해 (2)

오늘은 지난글에 이어 Embedded system에서 메모리 동적할당을 대체하여 사용가능한 기법에 대해 적어보려 한다. 먼저 지난 포스팅에서 말한 동적할당의 리스크는 아래와 같다. 1. 동적할당의 리스크 1. 메모리 할당 실패에 따른 예외처리 - malloc을 이용했을 때 NULL pointer를 반환받았을 경우 2. 디바이스 속도 저하 - malloc에 의한 코드 동작 속도 저하로 잠재적 품질 리스크 발생 3. 메모리 공간 예측 실패 - malloc으로 할당시 관리 테이블로 인해 할당받은 메모리보다 더 많은 점유로 인해 메모리 부족 현상 발생 2. 대체가능한 기법들 위의 리스크를 줄일 수 있는 기법들을 몇가지 소개하려 한다. 이러한 기법들은 내가 실제로 개발하면서 적용해본 것도 있고, 전문 서적 또는 ..

Embedded 2023.01.19

[C 언어] [Embedded] 메모리 동적 할당에 대해 (1)

지난번 Embedded환경에 대한 간략한 설명과 함께 Endian mode와 컴파일러 최적화 오류 등에 대해 알아보았다. 오늘은 Firmware 개발자라면 누구나 쉽게 사용하고 있는 동적할당에 대해 몇가지 적어보려고 한다. 1. 동적할당이란? 먼저 동적할당이라는 개념부터 간단히 설명해보려 한다. 프로그래밍을 하다보면 데이터를 임시로 저장하거나 다른 이벤트의 인수로 데이터를 넘겨야 하는 경우가 있다. 데이터의 크기를 미리 알 수 없는 경우가 대부분이고 여러 조건에 따라 데이터의 크기와 유효범위가 달라질 수 있다. 아래 코드를 보자 (억지로 예제를 만든 것이니 참고만 하길) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #define SIZE 10 int func1(v..

Embedded 2023.01.17

[C 언어] [Embedded] Endian mode

PC를 기반으로 C 언어를 사용하는 사람은 크게 상관 없지만 Embedded를 하는 사람이라면 반드시 알고 있어야 하는 Endian mode라는 것에 대해 오늘 알아보고자 한다. 1. Endian mode 이것은 데이터가 어떻게 메모리에 저장되는지를 나타내는 방식이다. 쉽게 생각해서 메모리를 기차라고 비유한다면 위 그림처럼 사람들을 기차에 어떤 방향으로 순서대로 태울지에 관한 정의라고 보면 된다. 대부분의 시스템에서는 Little endian mode를 사용하지만 대표적으로 모토롤라의 경우 Big endian mode를 사용한다. 2. Endian mode를 왜 신경써야 하는가? Endian mode를 신경써야 하는 이유는 위그림을 기준으로 설명해보자면, A~D까지의 사람이 T1이라는 기차에 탄 것은 동..

Embedded 2023.01.14

[C언어] [컴파일러] [Embedded] 최적화와 오류에 대해

오늘은 Embedded환경에서 컴파일러의 역할과 최적화 오류에 대해 적어보려고 한다. 많은 Embedded 개발자가 항상 고민하는 부분은 메모리 사용량과 최적화, 시스템 속도 등일 것이다. 물론 최근에는 메모리 가격이 정말 많이 내려가서 메모리를 고려하지 않고도 Embedded Firmare를 만드는데 문제가 없긴 하다. 그래도 알아두어서 나쁠것은 없으니 한번 알아보도록 하자. 일반적으로 메모리를 많이 사용하면 속도를 올릴 수 있고, 메모리를 최적화 하려면 일부 속도를 포기해야 한다. 두개의 관계를 Trade-off 관계로 어느 것을 중점적으로 최적화 해야 할지 고민해야 하는 부분이다. 1. 개발자의 최적화 기법 개발자가 직접 최적화 코드를 고민하여 넣는 방법이다. 변수의 범위를 예측하여 최적화된 타입으..

Embedded 2023.01.11

방향

무엇인가를 시작할때는 방향이 참 중요하다. 내 경험과 노하우를 어떤 방향으로 적는 것이 좋을지 많이 고민이 되었고, 지금은 정리가 좀 된 것 같다. 가능하다면 하루에 한번씩 업데이트를 할 예정이고 내가 다루는 내용은 다소 거칠고 순서가 바뀔 수는 있겠지만 전체적으로는 아래의 내용을 써볼까 한다. C - 기초 - 개발 방법 이론과 현실 - 모듈화 표준화 라이브러리 - 컴파일러와 최적화 - 신뢰성, 클린코드 - 고급 포인터 활용 노하우 Embedded - 기초 - HW의 이해 - 콘솔, printf의 이해 - OS, NonOS 에 대하여 - Memory access - 외부장치(Pheriperal) - 통신 (UART) IoT - 무선 통신의 이해 - Platform - BLE - ZigBee - Platf..

Embedded 2023.01.07
728x90