본문 바로가기

분류 전체보기837

C] epoll 사용법 epoll이란?epoll은 리눅스 커널 2.5.44부터 도입된 Multiplexing IO 함수로 다수의 파일 디스크립터를 모니터링 할 때 효율적이다. epoll은 epoll_event 구조체와 다음의 세 가지 주요 함수로 구성된다.epoll_create : epoll 파일 디스크립터 저장소 생성epoll_ctl : 저장소에 파일 디스크립터 등록 및 삭제epoll_wait : 파일 디스크립터의 변화를 대기   select와의 차이점select의 경우 매번 호출할 때마다 파일 디스크립터 집합을 사용자 공간에서 커널 공간으로 복사해야 하지만 epoll는 한 번 설정한 파일 디스크립터 집합을 커널 공간에서 유지하여 불필요한 복사를 방지한다. 따라서 많은 수의 파일 디스크립터를 다룰 때 epoll이 더욱 효율적.. 2024. 6. 24.
Makefile 작성법 Makefile이란?Makefile은 프로젝트의 컴파일, 빌드 및 기타 작업을 자동화하는데 사용되는 파일로 make라는 유틸리티와 함께 사용된다. Makefile은 일련의 규칙과 지시를 포함하고 있어서 해당 규칙에 맞게 작성하면 소스코드를 컴파일하는 과정을 간소화할 수 있다.   왜 Makefile이 필요한가?자동화: Makefile을 사용하면 여러 파일을 컴파일하고 링크하는 과정을 자동화할 수 있다.효율성: 의존성 파일의 타임스탬프를 비교하여 변경된 파일만 다시 컴파일하므로 빌드 시간을 줄여준다.재사용성: 프로젝트마다 반복되는 빌드 작업을 쉽게 재사용할 수 있다.일관성: 모든 개발자가 동일한 빌드 과정을 따르도록 할 수 있다.  Makefile 작성법을 익히기 위한 예제 프로젝트  디렉토리 구성/pro.. 2024. 6. 22.
VSCode ] 리눅스 시스템에 SSH로 연결하여 원격 작업하기 먼저 해당 Linux 시스템에 SSH가 설치되고 enabled 상태여야 한다. $ sudo apt update$ sudo apt install openssh-server$ sudo systemctl status ssh  원격작업할 PC에서 VS Code 확장 프로그램 Remote Development를 설치한다.   설치 후 우측 Remote Development 아이콘을 누른다.   F1을 눌러 팔레트를 열고 Remote-SSH를 검색한 후 Add New SSH Host를 선택한다. "ssh userID@HostIP" 형식으로 입력한다. SSH configuration file 경로를 선택한다.  아래와 같이 config 파일이 생성된다. 다시 F1을 눌러 명령 팔레트를 열고 Remote-SSH를 검색.. 2024. 6. 20.
STM32 ] GY-61(ADXL335) 3축 가속도센서 보드 : STM32F429ZI STM32보드에서 GY-61(ADXL335) 3축 가속도센서 값을 측정해봤다.  GY-61(ADXL335) 보통 아두이노랑 많이 쓰이는 MPU6050 같은 모듈은 안에 ADC가 내장되어 있어서 디지털 인터페이스로 값을 읽는데 이 모듈 같은 경우 각 축의 가속도 값을 아날로그로 출력한다. 데이터시트를 확인해보면 작동 전압 3V~5V이고 아날로그 출력 전압의 센터 값은 1.65V이다. Full scale 센싱 범위가 +/-3g이고 Sensitivity는 300mv/g니까 아날로그 출력은 0.75V에서 2.55V 사이로 스윙할 것이다. Sensitivity of accuracy +/-10%이다.  핀 아웃은 다음과 같다.       ADC다음은 STM32 보드의 데이터시트와 매뉴.. 2024. 6. 18.
라즈베리 파이에서 ll 명령어 사용하기 라즈비안에선 디폴트로 ll이 alias 등록이 안되어 다음과 같이 에디터를 열어 수정한다.  $ cd$ vim .bashrc  파일 중간에 alias 추가alias ll='ls -alF'    참고로 ls 명령어의 각 옵션이 뜻하는 건 다음과 같다.-a: 숨김 파일(파일 이름이 마침표 .로 시작하는 파일)을 포함해 모든 파일을 표시한다.-l: 파일에 대한 상세 정보를 길게(long format) 출력한다. 여기에는 파일의 권한, 소유자, 그룹, 크기, 마지막 수정 시간, 그리고 파일 이름이 포함된다.-F: 파일 이름 끝에 파일 타입을 나타내는 기호를 추가한다. 예를 들어, 디렉토리는 /, 실행 파일은 *, 심볼릭 링크는 @와 같이 표시된다. 2024. 6. 17.
Jetson Xavier NX ] NoMachine으로 원격 제어하기 젯슨 리눅스에는 vino VNC 서버가 기본 내장되어 있어서 공식문서에도 VNC를 통한 원격제어 방법을 소개하고 있으나 속도가 너무 느리다는 단점이 있다. 그리고 xrdp를 설치하고 윈도우 PC에 기본 내장된 원격 데스크톱 연결을 사용하는 방법도 있으나 얘도 마찬가지로 속도가 너무 느리다.    여기서는 그나마 준수한 성능을 보이는 NoMachine을 통한 원격제어 방법을 소개한다. 아래 링크의 설명을 따라 진행하였다. 링크 : https://kb.nomachine.com/AR02R01074    1. 젯슨 보드에서 arm용 nomachine을 다운받고 설치한다.wget https://www.nomachine.com/free/arm/v8/deb -O nomachine.debsudo dpkg -i noma.. 2024. 6. 16.
윈도우11 ] 파일탐색기 우클릭시 추가옵션표시 없애기 '추가 옵션 표시' 없이 윈도우10처럼 모든 옵션을 표시하는 법        관리자 모드로 명령프롬프트 실행하여 다음 명령어 입력 후 재부팅하면 모든 옵션이 바로 표시된다.reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve     만약 다시 원래 윈도우11의 표시방식으로 돌아가고 싶다면 아래 명령을 입력하면 된다.reg delete "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" /f 2024. 6. 15.
접지(Ground)의 종류 접지란? 접지는 이론적으로 전압이 0인 지점에 연결하여 전기적 기준을 설정하는 것을 의미한다. 접지의 종류는 신호접지(Signal ground), 섀시접지(Chassis ground), 대지접지(Earth ground 또는 Earth)로 나눌 수 있으며 각 심볼과 정의는 다음과 같다.  1. 신호접지 (Signal Ground) 신호접지는 주로 전자기기 내부의 신호 처리 회로에서 사용되는 접지이다. 이 접지는 신호의 기준 전위(0V)로 사용되며, 신호 간섭을 최소화하고 신호 품질을 보장하기 위해 중요한 역할을 한다.      2. 섀시접지 (Chassis Ground) 섀시접지는 전자기기의 금속 케이스 또는 섀시에 연결되는 접지이다. 이 접지는 기기의 외부 금속 케이스와 연결되어 케이스에 의한 전자파의 .. 2024. 6. 14.
STM32CubeIDE 1.15.0에서 Build Analyzer가 동작하지 않을 때 원래 ${ProjName}.elf 파일과 같은 폴더 내에 ${ProjName}.map 파일이 있으면 Build Analyzer에 메모리 사용량이 나타나야 하는데 안나타는 경우 빌드 후 새로고침 버튼을 누르면 동작한다. 아마 STM32CubeIDE 1.15.0 버전부터 바뀐 것 같다.    자동으로 새로고침하게 하려면 아래의 Refresh 설정을 On request가 아니라 Auto로 해두면 된다. Window > Preferences > STM32Cube > Build Views settings > Build Views Resfres Mode : Auto 2024. 6. 13.
ccs 프로젝트 빌드 과정 CCS에서 프로젝트를 Build하거나 Rebuild 할 때 다음의 절차를 수행한다. 1. makefiles 자동생성 프로젝트의 활성 빌드 구성 폴더(디폴트로는 Debug 폴더)에 하나의 makefile과 여러 *.mk파일을 생성한다. makefile: 자동 생성된 *mk file들을 포함하는 메인 makefile 빌드에 참여하는 모든 소스파일은 아래 *.mk 파일에 정의되어 있다. objects.mk subdir.mk subdir_vars.mk 2. gmake를 사용하여 clean (optional) Rebuild Project 또는 Clean Project 선택시 gmake clean 명령을 사용하여 활성 빌드 구성 폴더의 .obj, .pp, .out 파일을 삭제하고, makefile 및 .map 파일.. 2024. 6. 12.
C++ ] 문자열 탐색 및 조작 함수, find() 외 문자열 탐색 함수 find : 문자열/문자의 처음 등장 위치 찾기rfind : 문자열/문자의 마지막 등장 위치 찾기find_first_of : 문자 집합 중 하나라도 처음으로 등장하는 위치 찾기find_last_of : 문자 집합 중 하나라도 마지막으로 등장하는 위치 찾기find_first_not_of : 주어진 문자 집합에 없는 첫번째 문자 위치 find_last_not_of : 주어진 문자 집합에 없는 마지막 문자 위치 찾기 ✔️ 위의 문자열 탐색함수는 문자열 내에서 특정 조건을 만족하는 요소를 찾지 못했을 경우 string::npos를 반환한다. string::npos는 상수값으로 size_t 타입의 최대값이다.✔️ find와 rfind 함수는 주어진 문자열에서 특정 문자열 뿐만 아니라 단일 문자를.. 2024. 6. 11.
Jetson Xavier NX 냉각 팬 프로파일 변경 Jetson 보드는 PWM 제어를 통해 직접 팬 속도를 조절할 수도 있지만, 기본적으로 온도에 따라 자동으로 팬 속도를 제어하는 데몬인 nvfancontrol이 탑재되어 있다. 그 중에서도 Jetson Xavier NX 보드는 nvfancontrol 데몬이 참조하는 quiet와 cool이라는 두가지 팬 프로파일이 존재하고 각 프로파일의 구성은 다음과 같다.   프로파일 구성에는 Trip temperature, Hysteresis, Fan PWM value라는 요소가 존재하는데 팬의 속도가 빈번하게 바뀌는 것을 방지하기 위해 히스테리시스 특성을 이용해 제어한다.예를 들어 quiet 모드인 경우 46도에 도달하면 팬을 켜고 46-8(히스테리시스 값)=38도 이하로 떨어지면 팬을 끄는 식이다.  팬 프로파일 .. 2024. 6. 10.
Tkinter ] Python GUI 프로그래밍 Tkinter는 파이썬 설치시 기본적으로 내장된 표준 라이브러리로 별도의 설치 없이 바로 GUI 개발을 시작할 수 있다는 장점이 있다.  Tkinter의 주요 구성 요소Tk 객체 : GUI 애플리케이션의 메인 윈도우를 생성하는 핵심 객체이다. Tk()를 통해 생성된다.위젯(Widgets) : 사용자 인터페이스를 통해 상호작용할 수 있도록 도와주는 각종 UI 요소이다.Label : 텍스트나 이미지를 표시한다.Button : 사용자가 누를 수 있는 버튼을 제공한다.Entry : 한 줄의 텍스트를 입력받는 입력 필드이다.Text : 여러 줄의 텍스트를 입력받는 필드이다.Frame : 다른 위젯들을 그룹핑하고 레이아웃을 관리하는 컨테이너이다.배치 관리자(Layout Managers) : 위젝을 윈도우 또는 프레.. 2024. 6. 9.
Pyside6 ] 개발 환경 설정 with VSCode pyside6 설치 pip install pyside6       VScode에서 Qt for Python 익스텐션 설치        test.py를 만들고 공식문서에서 제공한 코드를 복붙한 후 콘솔에서 python test.py로 실행한다. https://doc.qt.io/qtforpython-6/tutorials/basictutorial/widgets.htmlimport sysfrom PySide6.QtWidgets import QApplication, QLabelapp = QApplication(sys.argv)label = QLabel("Hello World!")label.show()app.exec()    한줄 씩 살펴보면 다음과 같다.# command line arguments에 접근하기 위해.. 2024. 6. 8.
RJ45 커넥터에서 LED의 의미 RJ45 커넥터는 이더넷 연결을 위한 표준 인터페이스로 네트워크 상태에 대한 정보를 제공하는 LED 지시등이 내장되어 있다. 일반적으로 이 LED는 초록색과 노란색 2개가 존재하며 각 LED가 나타내는 의미는 다음과 같다.         위 내용이 일반적인 구성이며 PHY칩에서 LED 모드 설정을 변경할 수 있기 때문에 다른 의미를 내포할 수도 있다. 2024. 6. 7.
VirtualBox 해상도 조절 장치 > 게스트 확장 CD 이미지 삽입 후 설치     보기 > 게스트 디스플레이 크기 자동 조정 선택      만약 이렇게 해서 안되면 시스템 종료 후 > 설정 > 디스플레이 > 그래픽 컨트롤러를 VMSVGA에서 VBoxVGA로 변경       보기 > 가상 화면 1 > 해상도 조정 2024. 6. 6.
Ubuntu ] 한영전환키 설정 설정 > 지역 및 언어 > 설치된 언어 관리를 눌러 language support가 완전히 설치되지 않았다는 안내 창이 뜨면 설치 후 재부팅한다. 입력 소스에서 한국어(101/104키 호환)은 삭제해준다.   만약 입력 소스에서 Hangul이 안보이면 다시 설치된 언어 관리를 눌러 키보드 입력기가 IBus로 선택되어 있는지 확인한다.   터미널에서 다음 명령어를 치고 입력기 > 추가를 눌러 Hangul을 추가한다.ibus-setup   다시 설정 > 지역 및 언어 > 입력 소스에서 Hangul의 톱니바퀴 버튼을 클릭하고 한영전환키 옆의 추가 버튼을 누른상태에서 한영 키를 누르고 확인을 누른다.  이후 한영전환키를 눌러 한글을 입력할 수 있다. 2024. 6. 5.
STM32 ] microseconds 딜레이 함수 만들기 사용보드 : STM32F429ZI  먼저 타이머를 사용할건데 16-bit 타이머 중에 고르면 충분하다. 65.535ms까지 제어가 되는데 그 이상의 지연이 필요하면 HAL_Delay() 함수를 쓰면 되니까 말이다.여기선 TIM1을 쓴다.          TIM1는 APB2에서 클락을 공급받는다.  APB2 timer clock은 180MHz로 설정되어있다.     Prescaler 값은 180-1로 해서 1MHz(주기 1us) 클락을 얻고 Counter Period는 최대값으로 설정한다.    다음과 같이 코드를 작성한다. /* USER CODE BEGIN 0 */void delay_us(uint16_t us){ htim1.Instance->CNT = 0; while(htim1.Instance->CNT .. 2024. 6. 4.
Python ] 코드 실행 시간 ms 단위로 측정하기 + datetime 모듈 사용법 1. time 모듈 사용하기 import timestart_time = time.time()for i in range(1, 10000000): passend_time = time.time()elapsed_time = (end_time - start_time) * 1000print(f"start_time : {start_time}")print(f"end_time : {end_time}")print(f"elapsed_time : {elapsed_time} ms")  time 모듈은 아래와 같이 import하여 사용할 수 있고 현재시간을 초단위로 반환하는 time() 함수와 시간 지연을 생성하는 sleep() 함수가 많이 쓰인다.import time time 모듈에서 시간은 UNIX time을 기준으로 .. 2024. 6. 3.
Python ] leetCode 1861 - Rotating the Box 리트코드 1861번 문제 You are given an m x n matrix of characters box representing a side-view of a box. Each cell of the box is one of the following: A stone '#'A stationary obstacle '*'Empty '.' The box is rotated 90 degrees clockwise, causing some of the stones to fall due to gravity. Each stone falls down until it lands on an obstacle, another stone, or the bottom of the box. Gravity does not affect.. 2024. 6. 2.
Python 기본 문법 파이썬의 특징  ✔️ 동적인 자료형 결정변수에 값이 할당되는 시점에 데이터 타입이 동적으로 결정됨a = 1b = 1.0c = 'hello'print(type(a))print(type(b))print(type(c))   ✔️ 자동 메모리 관리개발자가 직접 메모리를 관리할 필요 없고, 자료형의 범위 또한 필요에 따라 자동으로 확장되기 때문에 일반적으로 고려할 필요 없다.    ✔️ 체이닝체이닝은 특히 메서드나 연산자를 연속적으로 연결하는 것을 의미한다.# strip() 함수는 공백을 제거하거나 특정 문자 또는 문자열을 제거함result = " Hello, World! ".strip().lower().replace("hello", "hi").strip('!')print(result)# 논리 연산자 체이닝age.. 2024. 6. 1.
Python ] leetCode 189 - Rotate Array 리트코드 189번 문제 Given an integer array nums, rotate the array to the right by k steps, where k is non-negative.  Example 1: Input: nums = [1,2,3,4,5,6,7], k = 3Output: [5,6,7,1,2,3,4]Explanation: rotate 1 steps to the right: [7,1,2,3,4,5,6] rotate 2 steps to the right: [6,7,1,2,3,4,5] rotate 3 steps to the right: [5,6,7,1,2,3,4]  Example 2: Input: nums = [-1,-100,3,99], k = 2Output: [3,99,-1,-100]E.. 2024. 5. 31.
더뉴 셀토스 가솔린 2.0 엔진오일 저렴하게 교체하기 드디어 첫 엔진오일을 교체할 시기가 다가왔다. 보통 기아 오토큐가서 엔진오일 교체하면 10~13만원 정도 한다고해서 좀더 저렴하게 교체하는 방법을 알아봤다.   교체시기      매뉴얼을 보면 2.0은 일반적으로 매 15,000 km마다 가혹 조건일때는 매 7,500 km마다 교체하면 된다고 한다. 나는가혹 조건을 따라서 7500km 마다 교체해주기로 했다.      추천오일 및 용량     매뉴얼에 추천오일 사양이 5W-20이라고 나와있고 4L가 들어간다고 한다. 근데 또 이게 인터넷에 엔진오일 교체 세트라고 파는 거랑 사양이 일치하지 않아서 좀 찾아보니 24년식 모델부터 엔진오일 추천 사양과 용량이 바뀐 거였다. 어쨌든 나는 매뉴얼에 나와있는대로 구입하기로 했다.     교체 비용 엔진오일 교체시 오.. 2024. 5. 30.
더뉴 셀토스 에어컨 필터 셀프 교체하기 차를산지 1년도 지났고 여름이 다가오면 에어컨을 켤 일이 많아질거 같아 에어컨 필터를 교체해주기로 했다. 내가 산건 3M에서 나온 초미세먼지 활성탄 필터이다. 모델명 : F6291구입가격 : 11,830원  활성탄 필터는 흡착성이 강한 탄소질로 된 물질을 필터 사이에 첨부한 필터로 어두운색을 띄는게 특징이다.셀토스 순정으로 장착된 필터도 어두운색을 띄는 활성탄 필터이다. 얘는 헤파 필터에 비해 미세먼지 여과능력은 떨어지지만 악취와 유해가스를 흡착하는 기능이 있다고한다.   교체방법 글로브 박스 양 옆을 누르면서 밖으로 꺼낸다.    저 동그란 부분이 밖으로 다 튀어나올 정도로 꺼내준 다음 아래쪽에 위치한 고리를 오른쪽으로 당기면 쉽게 떨어진다.    그럼 글로브박스가 완전히 내려와서 교체하기 쉬운상태가 .. 2024. 5. 29.
Ubuntu ] Some index files failed to download. 에러 해결 아래와 같은 문구가 뜨면서 sudo apt update가 안되는 현상이다. E: Some index files failed to download. They have been ignored, or old ones used instead.   링크 :https://www.tecmint.com/some-index-files-failed-to-download/ How to Fix “W: Some index files failed to download.” Error In UbuntuSometimes you might encounter the error “W: Some index files failed to download.” on Ubuntu when updating the system.www.tecmint.co.. 2024. 5. 28.
Ubuntu ] 시스템 복원 도구 timeshift 설치 우분투에서는 이것저것 설치하다가 의존성 문제로 도중에 망하고 첨부터 다시 시작하고 싶어지는게 한두번이 아니기 때문에 시스템 restore를 위한 timeshift 부터 설치해줬다. sudo apt-get install timeshift   우분투 버전이 20.04 미만이면 timeshift PPA repository를 추가해야한다. lsb_release -a 명령으로 우분투 버전을 확인할 수 있다.sudo add-apt-repository ppa:teejee2008/timeshift   GUI timeshift 앱을 실행한다. ext4 파일시스템을 사용하는 경우 스냅샷 타입 RSYNC를 선택한다. 파일시스템 타입은 cat /etc/fstab 명령으로 볼 수 있다.   그 다음 스냅샷을 저장할 디스크를 선.. 2024. 5. 27.
이더넷 트랜스포머의 역할 이더넷 트랜스포머의 역할에 대해 알아보자.   위 그림은 이더넷 인터페이스를 보여주는데 사실상 요약된 그림이고 실제는 다음과 같다. MAC(in CPU/MCU) ↔️ PHY ↔️ Transformer ↔️ RJ45 ↔️ UTP ↔️ RJ45 ↔️ Transformer ↔️ PHY ↔️ MAC(in CPU/MCU)    그럼 여기서 Transformer의 역할은 무엇일까?  가장 큰 역할은 다음의 두 가지이다.Galvanic Isolation : 두 회로간 직접적인 전기적 연결을 제거해 고전압 스파이크와 지상 루프 등의 전기적 간섭으로 부터 보호하는 것. (Galvanic Isolation을 제공하는 IC는 위 그림처럼 세로 점선을 그려놓는듯 하다..)Impedance Matching : 서로 다른 임피던.. 2024. 5. 26.
Ubuntu ] 안쓰는 ssd 사용하여 우분투 멀티부팅가능하게 설치하기 1. Rufus 다운로드 https://rufus.ie/ko/    2. Ubuntu 이미지 다운로드 Ubuntu 18.04 : https://releases.ubuntu.com/18.04/    3. Rufus로 Ubuntu 부팅 USB 만들기 부팅이미지를 선택하고 USB 장치가 올바르게 선택됐는지 확인한 후 설정값을 아래와 같이 하고 시작을 누른다. 경고문구가 뜨면 디폴트값 또는 예를 선택해주면 된다.     4. 안쓰는 ssd 메인보드에 장착 내 데스크탑 메인보드는 ASUS EX-A320M Gaming인데 m.2 슬롯이 하나 있다. 그래픽카드 아래 위치한 형태라 ssd 방열판이 있으면 더 좋았을뻔했지만 일단 장착해줬다.    5. ssd 디스크 정리 diskpartlist disksel disk c.. 2024. 5. 25.
일 평균 방문수 2000대 블로그의 월수익 공개 내 블로그의 일 평균 방문수는 2000 정도 된다. 개발 관련 글이 대부분이다 보니까 주중 방문자가 많고 주말이나 연휴가 되면 유입이 훅 떨어지는 편이다.  일간 방문수  주간 방문수  월간 방문수    그러면 일 평균 방문수가 2000인 블로그의 한 달 수익은 얼마나 될까? 최고 수익을 찍었던게 30.61불이고 지난 6개월간 월평균 수익은 25.95불로 3만 6천원 정도 되는 금액이다. 원래 돈을 목적으로 블로그하는 것도 아닌데 수익이 들어오니까 적은 금액이라도 꽤나 짭짤하다. 나중에 블로그가 성장하면 다시한번 수익 공개를 해보도록 하겠다.         그리고 내 블로그 방문수를 견인하는 효자글들..😋 2024. 5. 24.
Jetson Xavier NX에서 YOLOv5 구동하기 설치 방법은 아래 공식 문서를 참고했다.  https://docs.ultralytics.com/yolov5/tutorials/running_on_jetson_nano/#install-necessary-packages NVIDIA Jetson Nano DeploymentDetailed guide on deploying trained models on NVIDIA Jetson using TensorRT and DeepStream SDK. Optimize the inference performance on Jetson with Ultralytics.docs.ultralytics.comhttps://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 PyTorch .. 2024. 5. 22.