본문 바로가기

전체 글840

How to Set a PXI Controller to Start Automatically When Powered How can I set a PXI controller to start up automatically when power is applied? PXI 섀시에 전원 공급 시 바로 시스템 시작하게 하는법 : BIOS 셋업 들어가서 아래와 같이 설정 1. Press the Power button on the PXI chassis, then press Del on the keyboard repeatedly to enter the BIOS. 2. Switch tabs to Advance and select Power/Wake Configuration as shown below. 3. Select Restore After Power Loss and select Turn On as shown below. 4.Sele.. 2023. 10. 4.
C++ ] enum class 사용법 enum class 선언 enum class를 정의할 때 명시적으로 기본 타입을 지정하지 않으면 int 형으로 설정된다. 또한 첫번째 멤버의 값을 지정하지 않은 경우 첫번째 멤버는 0으로 초기화되고 그 다음 멤버는 1씩 증가한다. enum class MyEnum { VALUE1, VALUE2, VALUE3 }; 열거형 멤버 접근 :: 연산자를 사용해 접근한다. MyEnum myVar = MyEnum::VALUE1; 정수값으로 변환 enum 클래스의 기본 타입이 int라고 해도 바로 정수값으로 변환되지는 않기 때문에 형변환 연산자를 사용해야 한다. int intValue = 0; MyEnum enumValue = MyEnum::VALUE1; if (intValue == enumValue) { // 오류! .. 2023. 10. 3.
윈도우 소켓 ] 논블로킹 소켓, ioctlsocket, 소켓 함수의 리턴 조건과 WSAEWOULDBLOCK이 리턴되는 상황 socket() 함수로 생성된 소켓은 기본적으로 블로킹 소켓이다. 그리고 블로킹 소켓은 소켓함수 호출 시 조건을 만족할 때까지 리턴하지 않는다. 주요 소켓 함수별 리턴 조건은 다음과 같다. accpet() : 접속한 클라이언트가 있을때 connect() : 서버에 접속 성공했을 때 send() : 응용 프로그램이 전송 요청한 데이터를 소켓 송신 버퍼에 모두 복사했을 때 recv() : 소켓 수신 버퍼에 도착한 데이터를 응용 프로그램이 제공한 버퍼에 복사했을 때 반면 논블로킹 소켓은 소켓함수 호출 시 조건을 만족하지 않아도 함수가 리턴하고 다음 코드가 수행된다. socket()으로 생성된 소켓을 논블로킹 소켓으로 소켓 모드를 변경하는 방법은 다음과 같다. u_long on = 1; if (ioctlsock.. 2023. 10. 2.
윈도우 소켓 ] 소켓 옵션, setsockopt, getsockopt, SOL_SOCKET 옵션들 setsockopt setsockopt 함수는 소켓 옵션을 설정하는 데 사용된다. int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); sockfd : 옵션을 설정할 대상이 되는 소켓을 식별하는 데 사용되는 소켓 디스크립터로, 소켓을 생성하고 열 때 반환되는 정수값이다. level: 설정하려는 옵션이 어느 레벨에 속하는지 지정한다. 주로 SOL_SOCKET 레벨을 사용하고, 특정 프로토콜 레벨 옵션인 경우, IPPROTO_IP, IPPROTO_IPV6, IPPROTO_TCP 등을 사용할 수 있다. optname: 설정하려는 옵션의 이름을 지정한다. 예를 들어, SO_BROADCAST, SO_KEEP.. 2023. 10. 1.
윈도우 소켓 ] connect 비동기로 처리하기 논블로킹 소켓으로 설정한 뒤 connect를 시도한다. connect 함수의 리턴값이 SOCKET_ERROR인 경우, WSAGetLastError()로 오류를 확인하여 WSAEWOULDBLOCK 인 경우 현재 백그라운드에서 연결이 진행중임을 나타낸다. writeSet에 소켓을 넣고 select 함수를 호출하여 타임아웃 시간 동안 write-ready 상태가 되는지 감지한다. select() 함수는 오류가 발생한 경우 -1, 타임아웃인 경우 0 그리고 이벤트를 감지한 경우 감지한 소켓 수를 리턴한다. // 논블로킹 모드로 설정 u_long nonBlockOpt = 1; if (ioctlsocket(cSocket, FIONBIO, &nonBlockOpt) == SOCKET_ERROR) { OutputDebu.. 2023. 9. 30.
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 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(folderPath, exePath); wchar_t* lastBackslash = wcsrchr(folderPath, L'\\'); if (lastBackslash != NU.. 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, SCPI GPIB (General Purpose Interface Bus) GPIB는 계측장비와 컴퓨터간 통신을 위한 인터페이스 표준이다. IEEE-488를 통해 데이터 전송, 제어, 통신을 위한 버스의 기계적 전기적 인터페이스가 표준화되어있다. 한 대의 PC(컨트롤러)에 여러 개의 계측장비를 연결할 수 있으며, 각 장치는 고유한 주소를 가지고 있어서 PC에서 SCPI 명령을 통해 여러 장치를 동시에 제어하고 데이터를 수집할 수 있다. SCPI (Standard Command for Programmable Instruments) PC와 계측 장비간 통신을 위한 명령 및 프로토콜 표준으로 IEEE-488.2에 정의되어있다. 사용자는 정의된 명령어 집합과 응답 포맷에 따라 프로그래밍을 통해 장비와 통신할 수 있다. .. 2023. 9. 15.
RS-422 RS-422 Specification Attribute Specification Cabling Point-to-Point, Single-ended Multi-drop Max Driver 1 Max Receiver 10 Maximum distance 1200m at 100kbps Maximum data rate 10 Mbps at 15m Signaling Balanced Maximum Nominal Voltage ± 7V Minimum Transmitter's Driver Output Voltage ± 2V Receiver Input Sensitivity ± 200mv Mark (1) Positive difference (A - B > 200mv) Space (0) Negative difference (A.. 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 실행해보기 https://www.ni.com/en/support/documentation/supplemental/13/national-instruments--net-support.html .NET Resources for NI Hardware and Software For .NET application development, National Instruments provides a Visual Studio add-on for test and measurement, Measurement Studio, and .NET driver APIs for use with National Instruments data acquisition, PXI instrumentation and third party instrumentati.. 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.