전체 글 99

[공통 PJT] 코드 리뷰 방법 정리

코드 리뷰란? 소프트웨어 개발 과정에서 다른 개발자나 팀 멤버들이 작성한 코드를 검토하고 평가하는 과정 이 과정은 일반적으로 코드의 품질, 가독성, 유지보수성, 버그의 유무 등을 확인하고 개선하기 위해 수행됨 코드 리뷰의 목적 1. 코드 품질 향상 - 리뷰를 통해 코드의 가독성, 유지보수성, 확장성 등을 개선하고, 버그를 사전에 발견하여 소프트웨어의 품질을 향상 2. 지식 공유와 학습 - 다른 개발자의 코드를 검토하고 의견을 나누는 과정에서 개발자들은 서로의 아이디어와 기술을 배울 수 있으며, 최신 개발 동향을 파악할 수 있음 3. 팀 협업 강화 - 리뷰를 통해 팀 전체의 코드 표준과 가이드라인을 준수할 수 있으며, 문제를 빠르게 해결하고 개선할 수 있음 일반적으로 코드 리뷰는 버전 관리 시스템(Git ..

[공통 PJT] Jira 및 JQL 활용 / Project Management 방법론

왜 Jira를 사용해야 하는가? 4가지 관점에서 볼 수 있음 1. Issue Tracking (Project Management) - 의미: 이슈 추적 (Issue Tracking)은 프로젝트의 작업 상태를 관리하고 추적하는 과정 - 특징: Jira는 강력한 이슈 추적 기능을 제공하여 이슈 생성, 할당, 우선순위 설정, 진행 상황 추적, 의견 공유 등을 통해 팀의 업무를 효율적으로 조율하고 업무 투명성을 확보 가능 2. Agile - 의미: 빠른 변경에 대응하고 가치를 신속하게 제공하기 위한 방식 - 특징: Jira는 Agile 방법론을 지원하며 *스크럼, 칸반, 익스트림 프로그래밍 등 다양한 방식으로 프로젝트를 구성하고 관리할 수 있음. Agile 보드를 사용하여 백로그 관리, 스프린트 계획, 작업 추..

Embedded System (6) : 객체 지향 프로그래밍, Qt & GUI Framework 예제

객체 지향 프로그래밍 (Object Oriented Programming) 프로그램을 객체라는 기본 단위로 나누고, 상호작용으로 구현하는 방식 함수 기반 절차 지향 프로그래밍 --> 소스 코드 변경 시, 함수들이 여러 곳에 영향을 끼칠 수 있어 유지 보수가 어려움 OOP는 이런 한계점을 극복 구조체 vs 클래스 단순하게 구조체에 함수 + *접근제한자가 추가된 것 접근 제한자 (Access Modifier) - 클래스 내에 멤버(필드, 메서드, 속성, 이벤트 등)에게 접근하는 것을 제한하는 역할 - 클래스 멤버의 default는 private / 구조체 멤버의 default는 public 접근 제한자 같은 클래스에서의 접근 하위 클래스에서의 접근 모든 곳으로부터의 접근 private O X X protec..

Operating System (16) : Bootloader, Booting Process, U-boot를 이용한 custom command 생성

하드웨어 제어에서, Interrupt의 중요성 키보드, 마우스, 네트워크 통신 등 이 모든 것은 바로 인터럽트이다. 인터럽트가 발생하면, 해당 인터럽트가 발생 시 호출되는 함수가 돌아와진다 -> 콜백 함수 펌웨어에서의 인터럽트 발생과 리눅스(OS)에서의 인터럽트 발생은 차이가 있다. 펌웨어에서의 인터럽트 발생 - 펌웨어는 하드웨어에 가까운 소프트웨어로, 하드웨어를 초기화하고, 특정 하드웨어 기능을 제어하는 역할 - 펌웨어에서 인터럽트가 발생하면, 펌웨어 내부의 인터럽트 핸들러가 직접 인터럽트를 처리 - 이 경우, 인터럽트 처리는 매우 간단하며, 빠른 처리 속도가 중요합니다. 리눅스(운영체제)에서의 인터럽트 발생 - 리눅스와 같은 운영체제에서 인터럽트가 발생하면, 커널에서 인터럽트를 처리 - 커널은 인터럽..

Embedded System (5) : Memory Map, LPAE, H/W 제어, Module Parameter

Memory Map 분석 Raspberry Pi Datasheet 다운로드 Google에 "bcm2711 pdf" 검색 후 다운로드하면 된다 Rpi의 메모리 맵은 아래와 같이 크게 3종류가 있다 - Legacy : 공식문서 default 메모리 주소 - Full 35 bit Address : high performance 용 주소 - Low peripheral : 현재 메모리 주소 공식 Document에 있는 주소는 Legacy (32-bit) 기준으로 서술되어있다. 하지만, Rpi4는 LPAE 기능으로 Full 35-bit Address 주소 체계를 쓰고 있다. LPAE( Large Physical Address Extention) ARM 칩셋에서 제공하는 기능 - 32bit system 에선 4GB ..

Embedded System (4) : Raspberry Pi와 Control Sensor 연동 및 IMU 제어

SenseHat 라즈베리 파이용 확장 보드, 여러 센서로 다양한 환경 데이터를 측정하고 표시할 수 있는 기능을 제공 - 자이로 센서, 가속도 센서, 기압 센서, 지자기 센서, 온/습도 센서 등 - 8x8 LED, 8방향 조이스틱 센스햇 설치 $ sudo apt-get update $ sudo apt-get install python3-sense-emu sense-emu-tools API Test # from sense_hat import SenseHat Driver 이용 (모듈을 제어할 수 있는 interface 역할) Driver 종류는 FND driver, Motor driver, LCD driver, LED driver 등이 존재 데이터시트는 LED2472G를 참고 8x8 LED를 이용한 표기 1...

Embedded System (3) : PWM, Motor 및 Raspberry Pi 연동

PWM(Pulse Width Modulation) 펄스 폭을 변조하여 아날로그 신호를 디지털로 표현하는 기술 임베디드 보드(디지털 장치)가 아날로그 형식으로 신호를 표현하기 위해서는 PWM을 이용해야 한다. PWM 펄스 폭 조절 - 굉장히 빠른 속도로 한 주기 안에서 HIGH 신호와 LOW 신호가 갖는 비율을 조절해서 마치 아날로그 신호인 것처럼 보이게 한다. Duty 비(duty cycle) PWM에서 펄스 폭과 주기 사이의 비율을 나타내는 값 다음 그림을 참고해보자. 위 그림: 주파수가 높음 - 좋지만, MCU가 빠른 속도를 낼 수 있는 한계가 존재 아래 그림: 주파수가 낮음 - 너무 낮다면, 깜박임이 눈에 보인다 -- High time : PWM 신호에서 펄스가 High 상태로 유지되는 시간 | 펄..

Embedded System (2) : 라즈베리파이를 이용한 통신, I2C, SPI 방식을 통한 프로그램 구현

라즈베리파이에 썼던 모듈(.py)을 르네사스보드 / ST보드(.c)에 사용하고 싶다 --> how? 1. 해당 모듈이 르네사스보드 or st보드도 지원하는 지(라이브러리 유무 등) 알아본다. 2. Datasheet와 메모리 맵을 보면서 bit operation을 통해 data를 읽어야 한다. 3. python으로 제작된 라이브러리를 c로 바꾼다. - class로 구현된 라이브러리를 함수로 변경 등 장치 연결 시, 기본적인 통신 방법 유선 통신 프로토콜 무선 통신 프로토콜 UART 적외선 SPI RFID I2C 블루투스 CAN WiFi *매 순간 신뢰성을 보장해야 하는 환경은 유선통신을 사용 BMP 280 정밀한 대기압 센서, 온도 측정 가능 SDA / SCL 핀이 존재 -> I2C 통신이 가능하다는 의미..

Linux에서 Application과 Device Driver의 interaction 구현

Application과 Device Driver 개발 1. Device File 제작 # mknod : 특수 파일 만드는 유틸리티 # device file을 만들 address, type과 major, minor number 설정 $ sudo mknod /dev/nobrand c 100 0 # 파일의 권한 설정 $ sudo chmod 666 /dev/nobrand 2. Device Driver 제작 nobrand.c 1 #include 2 #include 3 4 #define NOD_MAJOR 100 5 #define NOD_NAME "nobrand" 6 7 MODULE_LICENSE("GPL"); 8 9 // inode : Device File의 inode 정보를 가짐 10 // insmod 시, in..

Operating System (15) : Device Driver, Kernel Module 및 device file의 이해

Device Driver PC와 외부 하드웨어 장치가 서로 신호를 주고 받을 수 있도록 통신하는 것을 도와주는 소프트웨어 Firmware에서 임베디드 개발 - 중간 Layer가 없다 --> H/W memory map address에 직접 값 access가 가능 - 단점 : H/W 장비 교체 시, 모든 Firmware의 H/W 관련 코드를 수정해야 한다. Kernel - 공통적으로 쓰는 API 제공 --> 중간 layer 역할 - Kernel 소스코드만 새로운 H/W가 동작되도록 수정해서 다시 build하면, 다른 firmware를 수정할 필요 없음 - 단점 : 빌드 시간이 매우 길다 Kernel Module ( != Device Driver) - 커널에 들어가는 코드 덩어리 - 디바이스 드라이버를 "커널..