전체 글 100

[공통 PJT] Agile 개발 방법론 정리

SW 방법론에서의 Agile 정의 - 짧은 주기의 개발 단위를 반복하며 프로젝트를 완성해가는 것 - 스프린트 단위(디자인 -> 개발 -> 테스트)를 반복 고객과 개발자의 지속적인 소통으로 변화하는 요구 사항을 신속하게 반영 가능 개인보다는 팀의 목적을 우선시, 고객의 의견을 가장 높은 가치로 둔다. 팀원들의 주기적인 회의 및 제품 시현을 통해 잠재적인 버그 수정과 미흡한 기능 추가 가능 프로젝트를 진행하면서 고객으로부터 즉각적인 피드백을 통한 수정, 보완 가능 팀원들의 주도적이며 자발적인 개발 문화로 프로그램 전체의 품질 향상에 기여 가능 Agile 개발의 등장 배경 폭포수 개발론 - 가장 오래된 SW 개발론 - 요구 사항이 바뀌거나 수정하려면 다시 맨 처음부터 수정해야 하는 불편함 존재 이러한 단점을 ..

[공통 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..