티스토리 뷰

Hobby/Book

[Book] 임베디드 프로그래밍 C코드 최적화

생각많은 소심남 2015. 6. 6. 17:50


 요즘 회사에서 진행하는 소프트웨어 교육에선 임베디드 프로세서와 관련된 내용을 다루고 있다. 특히 요즘 많이 쓰고 있는 ARM cortex을 직접 조작하면서 LED나 DC motor 같이 주변기기를 직접 해보기도 하고, 프로세서내에 내장되어 있는 인터럽트 핸들러나, 타이머/카운터등을 직접 조작해보면서 과제에서 요구하는 요구사항들을 구현해보곤 했다. 

 사실 이 주제이전에 들었던 들었던 내용이 C Programming과 SW Engineering 쪽이었는데, 그때는 내가 원하는 함수나 기능은 그냥 구현하고 싶은대로 구현하고 잘 동작도 되었다. 그런데 이런 환경 자체가 임베디드로 넘어오면서 그대로 사용할 수도 없게 되었다. 우리가 일반적으로 쓰는 PC가 아닌, 제한된 자원과 기기들을 사용해서 원하는 기능을 구현해야 됬기에 조금더 신경써야 할 부분이 많고, 더구나 이 부분은 하드웨어에서 제공하는 데이터시트를 읽으면서 개발을 진행해야 했기 때문에 조금더 어려움을 많이 겪었다. 이 때 가장 많이 느낀 부분이 바로 최적화가 필요하다는 점이다. 

 이 책에서 소개하고 있는 내용도 그런 부분을 중점적으로 소개하고 있다. 예를 들어서 임베디드에서의 포인터의 사용이라던가 변수의 위치에 따라서도 기능을 다르게 쓸 수 있다는 점도 소개하고 있고, 제품의 동작에 있어서 영향을 줄 수 있는 측면(메모리 할당, 자료형, 인자 등)에 대해서도 자세히 소개하고 있다. 물론 이런 내용들이 C를 배울때도 다루는 기본적인 내용이이긴 하지만, 임베디드를 개발하는 입장에서 바라본 측면에서는 조금더 이해하기 쉽도록 그 원인과 고려사항에 대해서 잘 표현해놓은 거 같다.

 참고로 주제의 구성은 다음과 같이 되어 있다.

 - 비트 연산 활용

 - 컴파일러 최적화와 코드 최적화

 - 포인터를 이용한 최적화

 - 임베디드 환경을 고려한 변수 선택법

 - 자료구조 다이어트 기법

 - 루프 최적화 기법과 최적화를 부르는 표현

 - 컴파일러 최적화와 ARM 환경의 최적화

 다만 이 책이 그렇게 많은 분량을 고려하고 만든 것이 아니기에 어쩌면 더 심도있는 내용과 다양한 주제를 원하는 사람에게는 맞지 않는 책일 수도 있다. 딱 이책의 제목처럼 코드의 최적화를 목적으로 작성되었기 때문에 최적화 외적으로 신경쓸 수 있는 부분인 디버깅이나 개발환경 구축에 대한 내용은 담지 않고 있다. 어쩌면 장점일수도 있긴 한데, 이책은 딱 어떤 아키텍쳐를 타깃으로 삼고 있지 않다. 물론 후반부에 ARM환경에서의 최적화부분을 언급하고 있긴 하지만, 그렇다고 딱 여기에만 국한되어 있는 것이 아니라 C를 주언어로 사용하는 임베디드 개발이라면 포괄적으로 볼수 있게 되어 있다.

 내가 조금 관심있게 본 부분은 메모리 구성과 포인터를 활용한 최적화 부분이었다. 나도 학부때는 동아리 활동하면서 AVR도 공부하고 그랬는데, 원체 C에서도 포인터 부분은 여러번 고민해야 답이 나오는 만큼 그냥 무작정 쓰기만 했었고, 그걸 왜 그렇게 해야 됬는지를 이해할 틈이 없었는데, 이번에 관련 교육을 받으면서도 쉬는 시간에 틈틈이 읽으면서 재미있게 봤던 것 같다. 아마 나처럼 개발 경험이 쪼금 있으면서 관련 내용이 가물가물한 사람한테는 최적의 책이 되지 않을까 싶다.

 참 그냥 개인적인 생각인데, 오히려 여기 나온 기법들은 딱 임베디드에만 국한되지 않더라도 C를 조금 공부하고 있는 사람이 코드를 어떻게 하면 조금더 효율적으로 구성할 수 있을까에 대해서 궁금한 여길때 봐도 좋을 책이라고 생각한다. 일반 PC를 타겟으로 한 프로그램 개발이라도 최적화부분은 성능 고려에 있어서 무시할 수 없는 부분이기 때문이다. 

댓글