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 |