본문 바로가기

분류 전체보기894

Doxygen Doxygen은 코드 문서화 도구로, 코드에 대한 자동화된 문서를 생성하는 데 사용된다. 주석을 특정 형식으로 작성하여 코드의 클래스, 변수, 함수 등을 문서화할 수 있다. Doxygen 주석의 일반적인 구조는 '/**'로 시작하고 '*/'로 종료되며, 주석 내부에는 여러 줄의 설명, 태그, 파라미터, 리턴 값 등을 추가할 수 있습니다 /** * @brief Brief description of the item. * * Detailed description of the item. This can span multiple lines. * * @param param1 Description of the first parameter. * @param param2 Description of the second p.. 2023. 9. 29.
파일 디스크립터 파일 디스크립터(File Descriptor, FD)란 Linux 혹은 Unix 계열 운영체제에서 프로세스가 파일 또는 네트워크 소켓과 같은 입출력 리소스에 대해 접근할 때 사용하는 추상적인 식별자이다. 윈도우에선 HANDLE이라고 부른다. 파일 디스크립터는 0이 아닌 정수값을 가지며 C언어에서는 int 형식으로 표현된다. 유효하지 않거나 오류인 경우를 나타내는 음수값과 다른 목적으로 고정된 0부터 2를 제외하고, 프로세스가 파일을 열거나 소켓을 생성할 때 일반적으로 3부터 시작해 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당한다. 이렇게 할당된 파일 디스크립터를 사용하여 프로세스가 열려있는 파일에 시스템 콜을 사용하여 접근할 수 있다. Reference: https://en.wikiped.. 2023. 9. 28.
C++ ] .ini 파일 포맷, 설정 파일 입출력 방법 .ini 파일 포맷 .ini 파일은 텍스트 파일로 주로 설정 데이터를 저장하는 데 사용된다. 그리고 각 설정은 섹션과 키-값 쌍으로 구성된다. [섹션] 키=값 [Database] ServerName=MyServer Port=5432 [User] Username=JohnDoe Password=Secret123 아래 소개할 함수들은 Windows API의 일부로 Windows.h를 포함해야 사용할 수 있으며, 설정 파일에서 구성 데이터를 읽어올 때나, 설정파일에 구성 데이터를 쓸 때 사용할 수 있다. GetPrivateProfileInt 섹션과 키를 사용하여 .INI 파일에서 설정 값을 찾으며, 설정 값을 정수(INT) 형태로 반환한다. 만약 해당 섹션이나 키를 찾지 못하면 기본값으로 설정된 nDefault.. 2023. 9. 27.
C++ ] 람다식 사용법 및 람다식으로 콜백 구현 람다식(lambda expression)을 사용하면 코드 내에서 명시적인 함수 정의 없이도 익명함수를 생성하고 사용할 수 있게 해준다. 이런 함수는 주로 한번만 사용하거나 특정 상황에서만 필요한 경우 유용하다. 람다식의 기본 구조 [캡처](매개변수) -> 반환형 { // 람다 함수 본문 // ... } [캡처] { // 람다 함수 본문 // ... } 1. [캡처] : 외부 변수를 사용하기 위해 외부 범위의 변수를 캡처할 수 있다. [ ] 안에 캡처할 변수를 지정한다. [] : 아무것도 캡처하지 않음 [변수] : 특정 변수를 값 복사로 캡처 [&변수] : 특정 변수를 레퍼런스로 캡처 [=] : 모든 외부 변수를 값 복사로 캡처 [&] : 모든 외부 변수를 레퍼런스로 캡처 2. (매개변수) : 람다 함수의.. 2023. 9. 26.
C++ ] std::thread 스레드 사용법 스레드 라이브러리 스레드를 사용하는 주요 목적은 병렬 프로그래밍을 통해 여러 작업을 동시에 실행시켜 프로그램의 효율성을 높이는 것이다. 예전에는 멀티스레드 프로그래밍을 하기 위해서든 윈도우의 경우 Win32 API를 사용하거나, 리눅스는 POSIX thread (pthread) API를 사용하었는데 C++ 11부터는 C++ 표준 라이브러리에서 스레드를 지원되기 때문에 헤더를 포함하고 std::thread 클래스를 사용하면 된다. 1. 기본 사용법 std::thread 생성자는 스레드가 시작될 때 실행할 함수를 인자로 받는다. 이 때 함수는 글로벌 함수, 멤버 함수, 람다 표현식 등 다양한 형태일 수 있는데 하나씩 살펴보자. 1.1 글로벌 함수 전달하기 #include #include using names.. 2023. 9. 25.
C++ ] 가변인자 받아서 string 또는 CString으로 출력하기 가변인자 받아서 string으로 출력하기 vsnprintf() 함수는 실제로 버퍼에 출력하지 않고도 필요한 버퍼 크기를 계산할 수 있으므로 char[] 를 사용하지 않고 string 자체의 내부 버퍼를 사용할 수 있다. vsnprintf()실제로 버퍼에 출력하지 않고도 필요한 버퍼 크기를 계산할 수 있으므로 일반적으로char[] 별도의 버퍼가 전혀 필요하지 않고 크기를 계산 std::string하고 해당 크기에 할당한 다음 std::string출력을 위해 의 자체 내부 버퍼를 사용하면 됩니다. , 예: string vString(const char* format, ...) { string line; va_list args; va_start(args, format); int len = vsnprintf(n.. 2023. 9. 24.
C++ ] std::map 자료구조 사용법 map은 키-값 쌍을 저장하고 검색하는 데 사용되는 자료구조 중 하나로 사용법은 아래와 같다. 1. map 헤더파일 포함 #include 2. map 객체 생성하기 생성시 키와 값의 자료형을 지정해야하는데 개인적으로는 문자열 키와 함수포인터 값을 가지는 map을 자주사용한다. map myMap; 3. 원소 추가하기 (insert) 원소를 추가할 때는 키-값 쌍을 pair 객체로 전달하여 추가하는데 insert 함수를 사용하는 방법도 있고 아래의 4번을 사용하는 방법도 있다. 각 키는 고유해야 하며, 각 키에 대응하는 값이 하나씩 존재하게 된다. pair 객체를 만들때는 pair로 생성하거나 make_pair 함수를 사용해도 되고 혹은 {} 중괄호를 사용하는 방법도 있다. 또한 map는 중복을 허용하지 않.. 2023. 9. 23.
C++ ] 레지스트리 등록하여 윈도우 시작시 앱 자동 실행 하기 레지스트리 등록하여 윈도우 시작시 앱 자동 실행 하기 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER를 사용하면 현재 로그인한 사용자의 시작 프로그램으로 등록하고, HKEY_LOCAL_MACHINE을 사용하면 모든 사용자에게 적용된다. 위 경로에서 "새 문자열 값"을 선택하고 값 이름은 프로그램을 식별할 만한 이름으로 지정하고, 값 데이터에는 실행할 프로그램의 경로를 입력하면 윈도우 부팅 시 등록한 프로그램이 자동실행된다. // 실행파일의 경로 알아내기 wchar_t exePath[MAX_PA.. 2023. 9. 22.
Windows 프로그래밍 시 OutputDebugString 사용해 디버깅 정보 출력하기 + 가변인자 받아서 디버깅 정보 출력 OutputDebugString은 Windows 프로그래밍 환경에서 디버깅 세션에 디버깅 정보를 출력하는데 사용되는 함수이다. 이 함수는 프로젝트 문자집합 설정이 멀티바이트냐 유니코드냐에 따라 OutputDebugStringW 또는 OutputDebugStringA로 정의된다. #ifdef UNICODE #define OutputDebugString OutputDebugStringW #else #define OutputDebugString OutputDebugStringA #endif // !UNICODE 먼저 Windows.h 를 포함하고 OutputDebugString 함수를 호출해 디버깅 세션에 출력할 문자열을 넘긴다. ANSI 문자열을 사용하는 경우 그냥 출력하면 되고 유니코드 문자열을 출력할 땐.. 2023. 9. 21.
ATE ATE, Automatic Test Equipment는 다양한 방산 무기체계 디바이스의 성능을 자동으로 시험하고, 판별하여 전시해주는 시험 장비로 보통 디바이스에 전기적 신호를 전달하고 측정할 수 있는 모듈과 Pass/Fail 결과를 전시할 수 있는 디스플레이로 구성된다. 2023. 9. 20.
C++ ] 현재 실행중인 실행파일의 경로 얻기, GetModuleFileName 현재 작업 디렉토리의 경로는 GetCurrentDirectory 함수로 확인할 수 있다. 한편 실행파일이 위치한 경로의 경우 운영체제에 따라 확인하는 방법이 다른데 윈도우에서는 Windows.h 를 포함하고 GetModuleFileName() 함수를 사용하면 현재 실행중인 실행파일의 path를 알 수있다. GetModuleFileName는 유니코드를 사용하냐 ANSI를 사용하냐에 따라 GetModuleFileNameW 또는 GetModuleFileNameA로 정의된다.  wchar_t exePath[MAX_PATH];GetModuleFileName(NULL, exePath, MAX_PATH);wchar_t* folderPath = new wchar_t[wcslen(exePath) + 1];wcscpy(f.. 2023. 9. 19.
연비운전 - 셀토스 2.0 가솔린의 공인연비 12.3~12.9km/l 도심에선 8~9km/l, 고속도로에선 12~14km/l 정도 나오는 것 같다. - 3,000km 탄 셀토스 평균 연비 - 연비운전을 위한 주행 조건 1. 신호등이나 도로혼잡으로 인한 정차가 없어야 한다. 2. 경제속도(일반도로 70~80km/h, 고속도로 90~100km/h)로 계속 달릴 수 있어야한다. 3. 오르막이 없고 탄력주행을 위한 내리막 길이 많아야 한다. - 자동차 연비 높이는 습관 1. 급출발을 하지 말 것 2. 급제동을 하지 말 것 3. 평상시 차량의 무게 줄이기 4. 불필요한 공회전 하지 말기 5. 타이어 공기압 체크하기 6. 주기적으로 차량 점검하기 2023. 9. 18.
C++ ] Winsock2의 bind 함수와 functional 헤더의 std::bind 함수 충돌 방지 Winsock2 라이브러리와 C++ 표준 라이브러리인 functional 헤더를 모두 포함에서 사용하는 경우 bind함수 때문에 충돌할 수 있다. Winsock2의 bind함수는 전역함수로 전역 네임스페이스에 속해있기 때문에 using namespace std; 를 했더라도 전역 bind 함수가 우선 호출된다. Winsock2 bind함수를 호출할 때는 ::bind로 전역 네임스페이스의 bind를 호출하고 C++표준 라이브러리의 std::bind함수를 호출할 때는 std::bind로 명시적으로 써주면 충돌을 피하고 가독성을 높일 수 있다. #include #include int main() { // Winsock2 라이브러리의 bind 함수 호출 ::bind(socket, ...); // C++ 표준 라.. 2023. 9. 17.
전동 블라인드 모터 후기 / 4만원으로 수동블라인드를 스마트전동블라인드로 바꾸기 (알리익스프레스) 알리익스프레스에서 체인 롤러 방식의 전동 블라인드 모터를 구입하였다. 품목 : M616EGWT, Type B EU Plug 플러그 변환할 필요 없이 국내 콘센트에 잘 맞았다 구입가격 : 할인받아서 44,000원 링크 : https://ko.aliexpress.com/item/1005005677238932.html?spm=a2g0o.order_list.order_list_main.5.66c8140f1NHOT1&gatewayAdapt=glo2kor 구성품 본체, 어댑터, 리모콘, 설명서, 풀리 추가 부속품으로 교체가능한 모터 풀리가 3개 더 들어있었는데 자기집 블라인드 볼 체인에 가장 잘 맞는거를 테스트해보면서 찾으면 된다. 처음 리모콘으로 조작할 때는 많이 안움직일거다. 어플과 연동해서 upper limi.. 2023. 9. 16.
취업성공수당 100만원 수령 후기 국민취업지원제도 1유형 또는 2유형 참가자중 취업 후 1년간 계속 근무시 최대 150만원 지급하는 제도이다. 지급 대상 지급 요건 및 지급액 신청 방법 국민취업지원제도 - 취업지원관리 - 취업성공수당 관리 - 취업성공수당 지급 신청 https://www.kua.go.kr/uaptm010/selectMain.do 국민취업지원제도 국민취업지원제도 정보시스템 회원은 2년을 주기로 재동의 절차를 거쳐 동의한 경우에만 회원자격을 유지할 수 있습니다. 개인정보 수집∙이용 동의일로부터 2년이 되는 까지 기간 내 재동의를 www.kua.go.kr 하단의 파란색 버튼을 눌러 신청한다. 제출 서류 온라인으로 신청하면 그 자체가 신청서가 되기 때문에 따로 신청서를 첨부할 필요가 없다. 그리고 취업 및 근속사실을 증명할 증빙.. 2023. 9. 15.
GPIB (General Purpose Interface Bus) GPIB (General Purpose Interface Bus) GPIB는 계측 장비와 컴퓨터 간의 통신을 위한 하드웨어 인터페이스 표준이다. 1960년대에 Hewlett-Packard (현재 Keysight Technologies)에서 개발되었으며, IEEE-488이라는 공식 표준으로 채택되었다.GPIB는 한 대의 컨트롤러(보통 PC)와 최대 15개의 계측 장비를 연결할 수 있으며, 각 장치는 고유한 주소를 가지고 있어서 컨트롤러가 특정 장치를 선택하고 명령을 전송하여 제어할 수 있다.  IEEE-488.1 : GPIB의 하드웨어 인터페이스 및 전기적/기계적 사양을 정의한다.IEEE-488.2 : IEEE-488.1의 하드웨어 표준을 기반으로 소프트웨어 레벨의 통신 규약을 정의한다. IEEE-488... 2023. 9. 15.
RS-422 (+ RS-232/422/485 비교) RS-422 Specification AttributeSpecificationCablingPoint-to-Point, Single-ended Multi-dropMax Driver1Max Receiver10Maximum distance1200m at 100kbpsMaximum data rate10 Mbps at 15mSignalingBalancedMaximum Nominal Voltage± 7VMinimum Transmitter's Driver Output Voltage± 2VReceiver Input Sensitivity± 200mvMark (1)Positive difference (A - B > 200mv)Space (0)Negative difference (A - B SignalsTx+, Tx-, R.. 2023. 9. 15.
C++ ] 멤버 함수 포인터 사용하기 / 함수포인터 대신 std::function 사용 / using으로 별칭 사용 멤버 함수 포인터 선언 returnType (className::*pointerName)(parameterTypes); 멤버 함수 포인터에 함수 주소 대입하기 멤버 함수 포인터에 함수 주소를 대입할 때는 일반 함수포인터와는 다르게 & 연산자를 생략할 수 없다. returnType (className::*pointerName)(parameterTypes) = &className::memberFunctionName; 멤버 함수 포인터 호출하는 법 className object; // 클래스의 인스턴스 생성 (returnType)(object.*pointerName)(arguments); 만약 클래스의 멤버인 멤버 함수 포인터를 멤버 함수 내에서 호출한다면 아래처럼 하면 된다. (this->*functionP.. 2023. 9. 15.
스위치의 접점 SPST, SPDT, DPST, DPDT 스위치 또는 릴레이 등의 소자는 내부 접점 구조에 따라 SPST, SPDT, DPST, DPDT 등으로 분류된다. 각 단어의 뜻은 다음과 같으며, 스위치의 연결 유형을 결정하는 두 가지 요소는 Pole과 Throw 이다 SPST : Single Pole Single Throw SPDT : Single Pole Double Throw DPST : Double Pole Single Throw DPDT : Double Pole Double Throw . Pole : Pole은 동일한 물리적 스위치(same lever, knob or button)으로 제어할 수 있는 회로의 수를 의미한다. Single Pole 스위치는 하나의 회로를 제어할 수 있고, Double Pole 스위치는 두개의 회로를 동시에 제어할 .. 2023. 9. 15.
NI-VISA example 실행해보기 NI-VISA 설치 후  예제코드 위치:Examples: \National Instruments\NI-VISA\Examples\DotNET 참고 문서 위치Help: \National Instruments\NI-VISA\Documentation   예제폴더에 들어가면 .NET 예제와 C예제가 있다.  C프로젝트 설정 프로젝트 우클릭 - 설정 - C/C++ - 일반 - 추가 포함 디렉터리에 아래 경로 추가C:\Program Files\IVI Foundation\VISA\Win64\Include 프로젝트 우클릭 - 추가 - 기존항목, 아래경로의 visa64.lib 추가 C:\Program Files\IVI Foundation\VISA\Win64\Lib_x64\msc 또는 링커 설정을 통해 추가할 수도 있다.".. 2023. 9. 15.
UniFlash 사용 방법 UniFlash 설치파일 링크 : https://www.ti.com/tool/UNIFLASH UNIFLASH Software programming tool | TI.com 20 MHz MCU with 128KB Flash, 10KB SRAM, 16-bit Sigma-Delta ADC, dual DAC, DMA, 2 OpAmp, 160 seg L MSP430FR2000 — 16 MHz MCU with 0.5KB FRAM, 0.5KB SRAM, comparator, UART/SPI, timer MSP430FR2032 — 16 MHz MCU with 8KB FRAM, 1KB SRAM, 10-bit ADC, UART/SPI www.ti.com CCS에서 빌드하면 기본 출력물이 .out인데 UniFlash 툴을 .. 2023. 9. 15.
VISA (Virtual Instrument Software Architecture) What is VISA?VISA는 Virtual Instrument Software Architecture의 약자로 응용 프로그램과 계측기 간의 통신을 가능하게 하는 Test & Measurement 업계의 표준이다.계측기는 보통 USB, LAN, GPIB, PCI/PCIe(PXI/PXIe)등 다양한 연결을 지원하고 로우레벨에서는 이러한 물리적 인터페이스에 따라 각기 다른 방식으로 데이터 통신이 이루이지는데, 이로 인한 중복 개발을 피하고 통신과정을 더욱 단순화하고 표준화하기 위해 계측기와 어플리케이션 간 Interface I/O를 관리할 중간계층으로 VISA가 등장하게 되었다.VISA를 사용하면 물리적 인터페이스가 USB든 LAN이든 PXI든 로우레벨에서 이루어지는 세부사항을 알 필요없이 계측기에 액세.. 2023. 9. 15.
Momentary switch and Latching switch Latching switches Latching switches are switched on by the user and then remain on until switched off again. They do not require continuous compression from the user. Latching switches can be found in the home and are used for things like light switches, central heating switches or on stereos. Momentary switches Momentary switches require continuous compression. They will switch on when the user.. 2023. 9. 15.
Notepad++ ] 수정된 파일 자동으로 새로고침하기 (파일 모니터링) 보기 - 모니터링 파일의 변화를 모니터링하는 리눅스의 tail -f 명령어와 같은 기능이다. 설정 - 환경설정 - 기타 - 파일 상태 자동 확인 설정으로 가능하다. 2023. 9. 15.
'const char []'에서 'char *'(으)로 변환할 수 없습니다. 아래 방식으로 해결 가능 또는 프로젝트 우클릭 속성 - C/C++ - 언어 - 준수모드를 아니오로 설정 char* str = "Hello World\r\n";// error const char* str = "Hello World\r\n"; char str[] = "Hello World\r\n"; const char* pchar = str; 2023. 9. 15.
MFC ] 사용자 지정 메시지와 메시지 처리기 만들기, SendMessage, PostMessage 메뉴에서 프로젝트 - 클래스 마법사 - -Dlg클래스 선택 - 사용자 지정 메시지 추가로 추가하는 방법도 있다. 방법 먼저 사용자 지정 메시지를 정의한다. #define MY_MSG1(WM_USER + 1) #define MY_MSG2(WM_USER + 2) Windows API에는 미리 정의된 메시지 상수가 많이 있지만, 애플리케이션의 필요에 따라 추가적인 사용자 지정 메시지를 정의할 수 있는데, 이때 WM_USER를 사용하여 사용자 지정 메시지의 베이스 값을 설정한다. WM_USER의 값은 0x0400으로 (WM_USER + n) 이런식으로 정의하면 다른 시스템 또는 프레임워크 메시지와 충돌하지 않도록 할 수 있다. 다음은 다이얼로그 헤더에 메시지 처리기를 추가한다. afx_msg LRESULT My.. 2023. 9. 15.
Windows Command Prompt 배경색, 글자색, 글꼴 바꾸기 명령 프롬프트 제목표시줄에서 우클릭 - 속성 에 들어가 화면 배경과 화면 텍스트 색, 그리고 글꼴을 바꿀 수 있다. 이렇게 GUI로 설정한 내용은 명령 프롬프트 창이 실행될 때마다 적용되며, 사용자가 다른 설정으로 변경하지 않는 한 계속 유지된다. 단, 색의 경우 시스템명령어를 통해 현재 실행중인 프롬프트의 색만 설정을 바꿀 수 있다. color /? 명령어를 입력하면 도움말을 볼 수 있다. 2023. 9. 15.
Tftpd64 사용해서 TFTP 서버로 설정하는 방법 Tftpd64를 실행시키면 디폴트로 TFTP Server 서비스는 켜져있고, 서버 인터페이스는 디폴트로 127.0.0.1에 바인딩 되어있다. 디테일한 내용은 Setting 화면에서 설정할 수 있다. Tftp Server 탭을 활성화하고, 서버 네트워크 인터페이스와 서버의 베이스 디렉토리를 선택한다. 참고로 디폴트 디렉토리는 C:\Program Files\Tftpd64인데 권한 문제로 작동안할 가능성도 있으니 다른 폴더를 지정해주는게 좋다. https://www.youtube.com/watch?v=GigPU3ge6pE 2023. 9. 15.
D-SUB Overview D-sub 커넥터는 D-subminiature의 약자로, D모양의 금속 쉘 내부에 2열 이상의 커넥션(핀 또는 소켓)이 있는 것이 특징이다. D-sub 도입 당시엔 컴퓨터에 사용되는 가장 작은 커넥터여서 subminiature(초소형)이라는 이름이 붙었다. Types 쉘 크기와 핀 또는 소켓 수, Male/Female 타입에 따라 여러 종류가 있다. 주로 RS-232, RS-485와 같은 직렬 통신에 DB-9 커넥터를 사용하고, 컴퓨터와 디스플레이간 연결에 DE-15 커넥터를 사용한다. Pin Numbering 2023. 9. 15.
C] strstr 함수 구현 strstr() 함수는 substring을 찾는 함수로 str1에서 str2를 찾는다. str2의 길이가 0이면 str1을 리턴, str2를 못찾으면 NULL을 리턴, str2를 찾았으면 str1에서 str2 시작 위치의 포인터를 리턴한다. const char* my_strstr(const char* str1, const char* str2) { char* ret; int found = 0; if (*str2 == 0) { ret = str1; } else { for(; *str1 != 0; str1++) { if(*str1 == *str2) { const char *s1 = str1; const char *s2 = str2; while(*s1 == *s2 && *s2 != 0) { s1++; s2++;.. 2023. 9. 15.