thread 6

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 9 - 프로세서란

안녕하세요.   드디어 디버깅의 영역에서 벗어나 프로세스의 영역으로 들어오게 되었습니다. 프로세스 부분도 양이 많아서, 배워야 할 것이 적지 않을 것으로 생각됩니다.  책 내용을 천천히 정리해 가는 것으로 생각하면 좋을 것 같습니다.  1. 프로세스란?  리눅스 개발자 입장에서 프로세스는 리눅스 시스템 메모리에 적재되어 실행을 대기하거나 실행하는 실행 흐름을 의미합니다.  프로세스를 관리하는 자료구조이자 객체를 태스크 디스크립터(task descriptor)라고 부르고 task_struct구조체로 표현합니다. 이 구조체에 프로세스가 사용하는 메모리 리소스, 프로세스 이름, 실행 시각, 프로세스 아이디(PID), 프로세스 최상단 주소와 같은 속성정보가 지정되어 있습니다. 그러나 이것만으로 프로세스의 흐름까..

IT/Linux Kernel 2025.03.12

임베디드 프로그래밍에서 알아야 할 volatile 키워드

임베디드 소스코드를 보다 보면 가끔 변수 타입 앞에 단어 volatile 하나가 더 붙어 있는 경우를 볼 수 있습니다. 뭐 특별한 기능을 하고 있는 것 같지도 않은데 말이죠.  1. volatile의 정의  영어 단어로서 volatile 의미는 휘발성의, 불안정한, 휘발하는 뜻을 가지고 있습니다. 이런 의미로 프로그래밍에서 volatile은 컴파일러에게 특정 변수의 값이 프로그램 흐름에 의해 예측할 수 없으므로, 항상 메모리에서 직접 읽고 쓰도록 지시하는 키워드입니다.  최적화 과정에서 해당 변수의 값이 캐시 되지 않도록 보장하고 주로 하드웨어 레지스터, 멀티스레드 환경의 공유 변수, 인터럽트 핸들러에서 사용되는 변수에 적용됩니다.  2. 하드웨어 코드 예시  변수의 값을 최적화하지 말고 메모리에서 직접..

Embedded 2025.01.06

[도서 실습] Qt5 and OpenCV4 Computer Vision – The GazerW Application (영상 녹화하기, 썸네일)

안녕하세요. 이전 내용은 카메라에 접근하고 정보를 얻고 실제 영상을 재생방법에 대해 알아보았습니다. 이번에는 영상을 어떻게 녹화하는지 확인해 보겠습니다. 단순한 방법으로는 카메라로부터 영상을 캡처하는 동안, 매 프레임을 압축해서 영상파일에 기록하는 것입니다. OpenCV에 포함된 videoio module의 VideoWriter Class에서 이런 간단한 기능을 제공합니다. 1. Utilities Class 파일 생성 파일 저장 경로와 이름을 자동으로 생성될 수 있게 클래스 하나를 만듭니다. 실제 코드 부분만 공유하였고, 해더 파일이나 중복된 부분은 생략했습니다. 부족한 부분은 첨부한 파일을 확인하면 됩니다. - 함수선언을 보면 폴더 경로를 가져오고, 파일 이름 생성하고, 파일 이름에 확장자를 붙여 절대..

Programming/Qt 2024.04.21

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – The GazerW Application (FPS 계산하기)

안녕하세요. FPS라고 하면 게임에서 많이 볼 단어이지만 영상에 처리 많이 사용하는 용어이기도 합니다. 그래서 간단하게 정의를 찾아보고 테스트해 보겠습니다. 1. FPS란 동영상을 물리적으로 환원하면 시간상 연속된 정지 사진들의 모음으로 볼 수 있는데, 이 각각의 정지 사진 하나를 '프레임'이라 부른다. 이런 사진 토막들이 1초에 몇 장 보이느냐, 즉 프레임이 보이는 속도를 가리켜 'Frame Rate', 우리말로 옮기면 프레임률이라 하며, 단위로는 'fps' 혹은 국제 표준인 'Hz'를 쓴다. 간혹 모니터 주사율(refresh rate)과 헷갈리는 일이 있는데, 이는 단위가 같지만 완전히 별개의 개념이다. 모니터 주사율의 단위는 'Hz'로 표기하고, '화면 재생 빈도'라고 하며 모니터가 그래픽 카드에서..

Programming/Qt 2024.04.19

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – The GazerW Application (Thread를 이용한 카메라 영상 출력)

안녕하세요. 이번 내용은 Thread를 이용해서 카메라 영상을 GUI 멈춤 현상 없이 출력하는 것입니다. 단순하게 OpenCV 기능으로 카메라 객체를 불러와서 ESC 키를 누르기 전까지 프레임을 화면에 재생하는 기능을 만들 수도 있습니다. 그러나 그렇게 하면 단순기능은 되지만, GUI 화면이 멈추는(freeze) 현상이 발생합니다. 그래서 GUI가 실행하는 Thread에 재생과 녹화를 소스를 포함하는 것이 아니라, 별도의 스레드(Thread)를 만들어 재생, 녹화하는 것을 동작하게 하는 것입니다. 1. 클래스 생성 - 기존의 GazerW_Day2 소스에서 추가해서 작업을 진행합니다. - GazerW 프로젝트에서 오른쪽 마우스를 클릭해서 "Add New..." 그리고 class 추가를 눌러서 Capture..

Programming/Qt 2024.04.11

[도서 실습] Qt 5 and OpenCV 4 Computer Vision – The GazerW Application (Qt Library를 이용해서 카메라 영상 출력)

안녕하세요. 이전 내용에서는 OpenCV 라이브러리를 이용해서 카메라 영상을 출력해 보았습니다. 그러나 한 가지 단점이 있는 것은 Qt 프로그램과 함께 OpenCV 라이브러리도 가지고 있어야 하고 실행파일의 용량도 커질 수 있다는 것이었습니다. 만약 단순한 영상 출력 프로그램을 만든다고 한다면 OpenCV를 사용하지 않고 Qt라이브러리를 이용해서 영상을 출력을 해줄 수 있다면 좀 더 가벼운 프로그램으로 만들 수 있을 것으로 생각되어 확인해 보았습니다. 1. 소스 추가 - 아래의 소스 내용은 일부분만 설명되었고 전체 소스는 첨부파일을 참고하시면 됩니다. - 단순하게 Qt Library로 영상을 출력하기 위해서는 기존에 QGraphicSence와 QGraphicsView 오브젝트 대신해서 QCamera와 Q..

Programming/Qt 2024.02.15