임베디드 SW란?
임베디드 SW는 특정 하드웨어 시스템 내에서 실행되도록 설계된 소프트웨어이다. 다시 말해, 하드웨어가 특정 기능을 수행하거나 특정 장치를 제어하도록 한다. 범용 컴퓨터와 달리 제한된 리소스 내에서 한정된 기능을 효율적으로 수행하는데 최적화되어 있다.
제품군으로는 가전 제품, 자동차, 의료기기, 통신기기 등에 적용되며, 형태로는 펌웨어, 디바이스 드라이버, 미들웨어, (특정 하드웨어에 종속되는) 애플리케이션 소프트웨어, 부트로더, 네트워크 스택, 실시간 제어 소프트웨어 등 굉장히 많은 분야가 임베디드 SW에 속해있다.
필요한 하드웨어 지식
임베디드 SW에 관심을 가지는 하드웨어 전공자도 많겠지만, 소프트웨어 전공자도 꽤나 많을 것이다. (실제로, 임베디드 SW 직종의 70%는 소프트웨어 전공자라고 한다) 하지만 당연하게도, 하드웨어와 밀접한 분야인 만큼 기본적인 하드웨어 지식은 필수적이다.
그 중, 개인적인 소견으로 가장 중요한 지식은 회로라고 생각한다. 회로도를 보고 내가 제어해야하는 부품이 무엇이고 어떻게 제어해야 하는지에 대해 알아야하는 것이 가장 기본적이고, 회로도 상의 부품을 실제 보드에서 찾을 수 있어야하며, 전원(Vcc)과 GND(그라운드) 위치를 찾을 수 있어야 한다.
회로도를 이해하지 못했다면, 예를 들어 (+)와 (-)를 반대로 연결해서 쇼트를 발생시켜 버린다면 회로도가 타버릴 수도 있고, 최악의 경우 연결되어 있던 컴퓨터까지 날라갈 수도 있다.
이 밖에도 각종 하드웨어 디버깅 도구의 사용법, 각종 입출력 인터페이스에 대해 이해해야 한다.
필요한 소프트웨어 지식
당연하게도 언어, 특히 C언어에 대해 깊게 숙지해야 한다. 1byte에 여러 정보를 담기 위해 비트 연산을 하는 것은 매우 흔한 일이며, 시간 및 공간 최적화를 위해 여러 테크닉이 사용된다. 이러한 기술을 적지적소에 유연하게 사용하기 위해서는 언어에 대한 지식은 필수이다. 저수준 프로그래밍을 위한 어셈블리, 테스트 및 스크립팅을 위한 파이썬을 함께 알아두면 매우 좋다.
하드웨어와 밀접한 분야인 만큼 운영체제에 대한 지식도 필요하다. 임베디드 리눅스의 리눅스 커널, 드라이버, 파일 시스템 등의 개념을 이해해야 하고, RTOS에서의 태스크 스케줄링, 인터럽트 처리 방법을 이해해야 한다. 리소스가 부족하다면, OS를 직접 구현해야 하는 경우도 있다.
또한 계층형 아키텍처 패턴나 이벤트 드리븐 아키텍처 패턴과 같은 아키텍처 패턴을 알고 있어야 효율적인 개발을 수행할 수 있고, 각종 테스트 (유닛 테스트 등), 버전 관리, 개발 프로세스 자동화 등 개발자라면 알아야하는 지식도 가져야 한다.
임베디드는 왜 ARM을 쓰는가
ARM은 32bits MCU로, 가격도 싸고 소비 전력도 적고 내장된 주변 장치도 많으며, 칩 면적이 작아 소형화에 유리하다. 또 고성능 시리즈의 경우 캐시 메모리와 파이프라인(한 데이터 처리 단계의 출력을 다음 데이터 처리 단계의 입력으로 이어지게 만듦)을 사용한다.
가격이 싼 이유 중 하나는 제조업이 아니기 때문인데 CPU를 설계도만 만들어서 라이센스를 판매한다. 많은 자원이 소모되는 CPU 설계도를 반도체 회사가 구매하여 제조한다. 두 번째는 구조가 전부 모듈 형식으로 구성되어 간단하다. 이 두 가지 이유로 가격이 저렴하다.
'현생 > 임베디드' 카테고리의 다른 글
FreeRTOS - Interrupt (0) | 2024.08.07 |
---|---|
FreeRTOS - 임계 영역 (0) | 2024.08.06 |
FreeRTOS - Naming Rule & Task (0) | 2024.08.05 |
임베디드 OS - RTOS란 무엇일까 (0) | 2024.08.04 |
임베디드 개발자에게 필요한 전기 기본 상식 (0) | 2024.08.03 |