본문 바로가기

프로그래밍(TA, AA)/C C++

[C] 임베디드 시스템 간단히 훑기

코드를 더 작고 빠르게 만드는 모든 개발자들의 염원일 것입니다. 이러한 요구는 PC 환경에서보다 임베디드 환경에서 더 간절한 것입니다. 메모리나 대용량 보조 기억장치들의 가격이 내려가고 프로세서의 속도가 나날이 발전하는 현 PC의 상황에서 최적화는 어찌보면 귀찮은 일에 불과할지도 모르지만, 크기와 리소스의 제약을 받는 임베디드 환경에서는 중요한 사안입니다. 최적화 방법은 프로세서에 따라서 달라질 수 있습니다. 특정 프로세스에서는 빠른 속도를 제공하는 방법에 다른 프로세서에서는 성능을 떨어뜨리는 방법이 될 수 있습니다. 


최적화는 간단한 문제가 아닙니다. 최적화를 어설프게 시도했다가는 오히려 낭패를 볼 수도 있습니다. 부작용 없이 최적화를 적용하기 위해서는 개발에 사용되는 프로그래밍 언어와 툴, 그리고 개발하는 시스템의 특징, 특히 프로세서의 특징을 정확히 파악해야 합니다. 프로세서의 특성에 따라 사용된 최적화 방법이 약이 될수도, 독이 될수도 있기 때문입니다. 


최적화는 등가교환(trade-off)입니다. 최적화를 통해 크기와 속도 모두를 얻을 수는 없습니다. 현재 가장 필요한 것은 서택하여 선택된 것에 집중해야 합니다. 



임베디드 시스템이란?


PC는 여러 작업을 할 수 있습니다. 문서 작업뿐만 아니라, 그래픽이나 각종 멀티미디어 관련 작업, 프로그램 개발 등 필요한 소프트웨어만 설치하면 원하는 작업을 할 수 있습니다. 즉 PC는 범용 목적의 컴퓨터입니다. 하지만, 임베디드 시스템은 특정한 목저을 가지고 설계됩니다. 이러한 기능적 요소들을 적절히 제공하려고 하드웨어를 제어하는 프로그램을 내장시켰고, 사용자는 간편하게 버튼만 누르면 서비스를 받을 수 있습니다. 또한, 현재 진행상태나 시관과 같은 정보들은 LCD와 LED 등을 통해 보여줍니다. 이처럼 임베디드 시스템은 범용의 목적이 아닌 정해진 용도에 국한된 기능을 제공해줍니다. 범용의 목적이 아니므로 각 시스템은 특수 목적을 가지고 제작되기 때문에 시스템을 구성하는 장치나 소프트웨어가 제한적입니다. 



임베디드 시스템의 구현


임베디드 시스템의 구현은 하드웨어로만 구현할 수도 있고 하드웨어와 소프트웨어를 병행하여 구현할 수도 있습니다. 즉 시스템에서 어떤 기능이 동작하려면 회로를 이용해서 직접 하드웨어로 구현할 수도 있고, 소프트웨어로 구현할 수도 있습니다. 그렇다면, 둘 중 어느 것이 더 좋은 방법일까요? 하드웨어만 사용해서 구현한다면 빠른 속도를 지원하지만, 기능을 수정하거나 확장하기가 어렵습니다. 다시 추가 설계를 하여 하드웨어를 다시 생산해야 하기 때문에 시간과 비용이 많이 소비됩니다. 하지만, 소프트웨어와 병행한다면 비용을 많이 줄일 수 있고, 기능의 수정이나 확장이 쉬워집니다. 그래서 대부분의 임베디드 시스템은 하드웨어와 소프트웨어를 병행하여 개발합니다. 또한, 소프트웨어의 실행 속도를 빠를게 하려고 성능이 좋은 프로세서를 사용하기도 합니다.