iot

면접 준비로 공부했던 것들(3) - 임베디드 개발 1장

030binfolder 2024. 8. 1. 21:21

https://littlebinsuishere.tistory.com/m/15

 

면접 준비로 공부했던 것들(2)

https://littlebinsuishere.tistory.com/m/14 면접 준비로 공부했던 것들(1)필자: 전자전기공학부 4학년 졸업 예정, 올해 7월 말 취직 여름 휴가를 맞이하여(회사 1주일 다님)면접 준비로 공부했던 것들을 간

littlebinsuishere.tistory.com

 

2편에서 이어집니다!

 

필자: 임베디드 시스템 국비교육(전자전기공학부 - 대한상공회의소 서울기술교육센터에서 자율형 IoT 교육을 7개월 수강 - 7월 말 입사)

 

* 자율형 IoT ~ 전문가 교육(1기~4기): 기초 프로그래밍, 영상처리, ATmega128a / Arduino / STM32f.. 등 AVR 및  MCU 보드 제어, ubuntu 환경에서 BSP 교육 및 실습

 

면접을 임베디드 분야로 맞춰 준비하였기 때문에 이에 맞춰 작성하였습니다.

 

7. RTOS vs Non-RTOS BSP

 

BSP(Board Support Package)란 board(하드웨어)를 제어하기 위한 소프트웨어 묶음이란 뜻으로,

BSP의 구조는 RTOS(Real-Time OS)/Firmware와 Non-RTOS 시스템으로 구분할 수 있다.

 

 

* 시스템 별 BSP 구조

RTOS(Real-Time OS) / Firmware Non-RTOS(ex: Linux)
  User Application - File system image(app 실행 환경)
OS(Kernel) - Kernel image(OS 압축 이미지 파일)
Firmware
(하드웨어 직접 제어 코드)
User Application
(제품 기능 수행 코드)
Firmware - Boot Loader(메모리에 Kernel image를 로딩)
Hardware(Device) Hardware(Device)

 

두 시스템의 주요 차이점으로는 OS의 Kernel 역할의 유무라고 할 수 있을 것 같다.

 

또한 파일 시스템(File System, ~fs)이 RTOS/Firmware 시스템에 없기 때문에 소스 코드들(펌웨어 코드와 앱 코드)이 함께 묶여 최종적으로 CPU에 맞춰 만들어진 하나의 실행 파일만 생성된다.

 

(일부 RTOS에는 파일시스템이 존재하는데, 그 예로 VxWorks가 있다. 운영체제 공부할 때 공부해서 따로 포스팅할 예정이다...)

 

 

 

8. 왜 임베디드 분야에 C언어가 주로 쓰이는 가?, C vs C++

 

이는 포인터(C, C++) 때문이다.

 

1. 메모리 관리: 특정 메모리에 직접 접근해 값을 변경하거나 메모리를 동적 할당할 수 있다. 이는 임베디드 시스템의 한정된 메모리 자원을 최대한 활용할 수 있게 해준다.

 

2. 하드웨어 제어포인터를 통해 레지스터의 특정 비트나 필드를 직접 읽고 쓸 수 있어 하드웨어를 정밀하게 제어할 수 있다. ex) 포인터를 통해 GPIO 레지스터에 접근하여 입출력 제어

#define GPIO_PORT ((volatile unsigned int*)0x40021000)
*GPIO_PORT = 0x01; // GPIO 포트에 데이터 쓰기

 

이 밖에도 포인터를 사용하여 배열, 구조체와 같은 데이터 구조를 사용하여 성능 향상을 시킬 수 있고, 함수 간 데이터 전달 시 메모리 복사를 피해 메모리 사용량을 줄이고 성능을 개선할 수 있는 장점이 있다.

 

3. 효율적인 코드 생성: C언어는 컴파일 후에 하드웨어에 최적화된 어셈블리어로 변환된다. 때문에 성능이 좋고 자원 관리에 최적화된 코드를 만들 수 있고 또한 성능 극대화를 위해 필요 부분을 어셈블리어로 개발하여 서로 결합하여 사용할 수도 있다.

 

4. 이식성: C언어는 다양한 플랫폼에서 사용할 수 있어 하드웨어에 대한 의존성을 줄일 수 있다.

 

C++은 C언어에서 객체 지향적인 특성이 추가된 것 말고는 크게 차이점이 없기 때문에, 위 이유에 거의 해당된다. 

 

하지만 C언어가 좀 더 많이 쓰이는 이유(C++이랑 용도가 좀 다르기도 함)로는 크게 두 가지 이유가 있는 것 같다. (좀 불확실 함)

 

1. C언어가 더 오래 쓰였기 때문에 관련 라이브러리와 도구가 C++에 비해 더 많이 존재해 개발에 용이하다. 또한 오랜 기간 C언어로 작성된 시스템은 C언어로 호환성을 유지하려는 경우도 있을 것이다.

 

2. C++의 객체지향적인 특성(OOP)가 RTOS에 적절하지 않고, 오버헤드를 발생시켜 자원을 좀 더 소모하게 만드는 단점이 있다.

 

하지만 C++ 역시 임베디드 시스템 개발의 프로그래밍 언어로 잘 쓰이고 있기 때문에 C언어와 용도가 다르다 정도로 이해하면 될 것 같다.

 

 

 

4편(임베디드 시스템에서 많이 쓰이는 C언어 문법 정리)으로 이어집니다! 

'iot' 카테고리의 다른 글

면접 준비로 공부했던 것들(2)  (0) 2024.08.01
면접 준비로 공부했던 것들(1)  (2) 2024.08.01
자료구조 필기 .img  (2) 2024.07.03
라즈베리파이로 TCP/IP 소켓 통신  (0) 2024.04.09