| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- .so 라이브러리
- pthreads
- SQLite
- rtsp
- qt widget
- 멀티클라이언트
- 임베디드
- 개발자 취준
- IOT
- yocto
- 리눅스 커널 드라이버
- 캐릭터 디바이스
- 임베디드 리눅스
- 라즈베리파이
- systemd
- 디바이스 트리
- 바이브 코딩
- 디바이스 트리 작성법
- 커널 모듈
- /dev
- udev
- cdev
- 라즈베리파이 카메라
- 데몬 프로세스
- 금융권 취준
- raspberry pi 4
- wiringpi
- 가계부 개발
- 취준
- ioctl
- Today
- Total
목록전체 글 (80)
이로또
1. DTS(Device Tree Source)란?라즈베리파이와 같은 임베디드 시스템에서는 하드웨어 장치의 연결 정보를 커널에 알려주기 위해 Device Tree를 사용합니다. ALSA SoC 드라이버는 CPU DAI(I2S)와 Codec DAI를 연결해야 하며, 이를 DTS 오버레이로 정의합니다.DTS → DTB(Device Tree Blob) → DTBO(Device Tree Blob Overlay) 순으로 컴파일 후 /boot/overlays에 적용합니다.2. mydriver-overlay.dts 작성MAX98357A는 단순한 I2S DAC이므로, simple-audio-card를 사용하여 CPU DAI와 Codec DAI를 연결합니다.이때, 드라이버에서 설정한 compatible과 dts파일의 c..
1. 프로젝트 개요이번 프로젝트의 목표는 Raspberry Pi에서 MAX98357A와 같은 단순 I2S 기반 DAC를 활용하여 음악 재생 전용 ALSA 드라이버를 직접 구현하는 것입니다. 기존에 제공되는 드라이버는 기능이 많고 복잡하기 때문에, 단순히 오디오 출력만 필요한 환경에서는 불필요한 기능을 제거한 경량 드라이버(minimal driver)를 사용하는 것이 유리합니다.왜 직접 구현했는가?MAX98357A는 I2S 입력만으로 작동하는 매우 간단한 DAC이지만, 기존 드라이버에는 DAPM(Dynamic Audio Power Management), GPIO(SD_MODE) 제어 등 사용하지 않는 코드가 포함되어 있었습니다.단순한 오디오 재생 기능만 필요했기 때문에 불필요한 기능을 제거하고 유지보수가 ..
1. 서론이 글에서는 HC-05 블루투스 모듈을 사용해 STM32와 Raspberry Pi 간 무선 시리얼(UART) 통신을 설정하는 방법을 다룹니다.목표는 STM32에서 측정한 데이터를 라즈베리파이로 무선 전송하고, 프로젝트의 센서 이벤트 시스템과 연동하는 것입니다. 2. HC-05 모듈 소개 및 하드웨어 연결HC-05 핀 구성VCC: 3.6V~6V 입력 (일반적으로 5V)GND: GNDTXD: 데이터 송신 (STM32 RX와 연결)RXD: 데이터 수신 (STM32 TX와 연결)EN/KEY: AT 모드 진입 시 사용 (필요할 경우)핀 설정Connectivity > USART6 클릭Mode: AsynchronousBaud Rate: 9600Word Length: 8 BitsParity: NoneStop ..
2편에서는 Polling 방식에서 Rising Edge 감지(prev/curr 비교)를 통해 중복 감지를 막고 안정적인 속도 측정을 구현했습니다. 하지만 Polling 방식은 루프를 계속 돌며 센서 상태를 확인해야 하므로 CPU 점유율이 높고, 빠른 이벤트 처리에 한계가 있었습니다.이번 편에서는 STM32의 GPIO Interrupt(EXTI)를 사용하여 이벤트 기반 처리로 전환하고, 기존 중복 방지 로직의 한계를 해결하기 위해 시간 기반 디바운싱(MIN_DETECTION_INTERVAL)을 적용한 과정을 다룹니다.1. 인터럽트 전환 이유Polling의 문제점:센서 상태를 계속 읽어야 하므로 CPU 점유율 증가빠른 이벤트를 놓칠 가능성 존재인터럽트의 장점:이벤트 발생 시점에만 CPU가 반응 → 낮은 점유..
1편에서는 지자기 센서 4개를 이용한 차량 속도 측정 시스템을 Polling 방식으로 구현했습니다. 하지만 실제 차량 테스트에서는 다양한 문제가 발생했습니다. 이번 편에서는 Polling 방식 유지 + 문제 해결 중심 최적화 과정을 다룹니다.구현 로직1. 센서 중복 감지 방지 로직센서 중복 방지는 아주 중요합니다.센서가 계속 눌린 상태(GPIO_PIN_SET) 를 유지하면, HAL_GetTick()이 계속 불려서 속도 계산이 잘못되는 문제가 발생합니다.이를 방지하려면 센서 입력을 단순히 SET인지만 확인하지 말고, 직전 상태(이전 값)와 현재 상태를 비교해서, 딱 한 번만 감지되도록 구현했습니다. A1 센서가 처음 눌렸을 때 한 번만 반응하도록 하기if (state_A == 0 && prev_A1 == ..
개발 환경OS: Ubuntu 20.04.6 (VirtualBox)Qt: 6.9.1 (공식 Qt Online Installer)OpenCV: 4.x (Ubuntu 패키지)CMake: 3.29.6 (Kitware 공식 빌드)OpenSSL: 3.3.1 (소스 빌드, /usr/local/openssl-3)IDE: Qt Creator (Desktop Qt 6.9.1 GCC 64-bit)1. Qt 6.9.1 설치Qt 공식 Online Installer 다운로드실행 후 Qt 6.9.1과 Qt Creator 설치설치 후 ~/Qt/6.9.1/gcc_64 경로 확인2. OpenCV 설치 및 Qt 프로젝트 설정1) OpenCV 패키지 설치sudo apt updatesudo apt install libopencv-dev pk..