본문 바로가기

분류 전체보기894

MFC ] 리스트박스 스크롤 하단으로 내리는 법 // ... m_listBox.SetCurSel(m_listBox.GetCount() - 1); m_listBox.SetCurSel(-1); // ... 리스트박스의 가장 마지막 인덱스를 선택한다. 포커스를 다시 해제해 파란색으로 표시되지 않게하면 스크롤을 맨 아래로 이동하는 효과만 남는다. 2023. 9. 15.
MFC ] 다이얼로그 생성시 함수 호출 순서 처음 MFC 어플리케이션의 시작점인 WinMain()함수가 실행되고 InitInstance()함수를 호출하여 어플리케이션의 다이얼로그를 생성하고 .DoModal(); 함수를 호출하게 된다. DoModal() PreSubclassWindow() OnNcCreate() OnNcCalcSize() OnCreate() OnSize() OnMove() OnSetFont() OnInitDialog() OnWindowPosChanging() OnMove() OnWindowPosChanged() OnWindowPosChanging() OnNcActivate() OnActivate() OnShowWindow() OnWindowPosChanging() OnNcPaint() OnEraseBkgnd() OnChildNotif.. 2023. 9. 15.
Precompiled Header를 사용해 컴파일 시간 단축하기 1. 프로젝트에서 "stdafx.cpp" 파일을 만든다. stdafx는 Visual Studio에서 사용하는 미리 컴파일된 헤더 파일의 일반적인 이름으로 다른 이름을 사용해도 무방하다. 이 "stdafx.cpp" 파일은 이후 미리 컴파일된 헤더를 생성하는데 사용된다. 2. "stdafx.cpp" 파일에 아래 코드를 추가한다. #include "stdafx.h" 3. "stdafx.h" 파일을 만들고 무겁거나 자주변경되지 않을 헤더파일을 포함시킨다. #pragma once #include #include #include 4. 미리 컴파일된 헤더를 사용할 cpp파일에 아래 코드를 추가한다. #include "stdafx.h" 5. 프로젝트 우클릭 - 설정 - C/C++ - 미리 컴파일된 헤더 설정에서 "미리.. 2023. 9. 15.
MFC ] 멀티바이트 집합 사용시에도 현대적 UI 적용하기 Framework.h에 #ifdef _UNICODE, #endif 주석 처리 #ifdef _UNICODE #if defined _M_IX86 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") #elif defined _M_X64 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' v.. 2023. 9. 15.
C ] Data Types Range C type stdint.h type Bits Sign Range char uint8_t 8 Unsigned 0 .. 255 signed char int8_t 8 Signed -128 .. 127 unsigned short uint16_t 16 Unsigned 0 .. 65,535 short int16_t 16 Signed -32,768 .. 32,767 unsigned int uint32_t 32 Unsigned 0 .. 4,294,967,295 int int32_t 32 Signed -2,147,483,648 .. 2,147,483,647 unsigned long long uint64_t 64 Unsigned 0 .. 18,446,744,073,709,551,615 long long int64_t 6.. 2023. 9. 15.
MFC ] EditBox에서 편집하고 엔터치면 입력되게끔 하기 PreTranslateMessage(MSG* pMsg) 함수 재정의 BOOL AppDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다. // 키보드 입력시 if (pMsg->message == WM_KEYDOWN) { // 엔터키인 경우 if (pMsg->wParam == VK_RETURN) { // 현재 다이얼로그나 윈도우에서 포커스를 가진 컨트롤(윈도우)을 반환 CWnd* pFocusWnd = GetFocus(); // 컨트롤 ID가 에딧박스인 경우 입력처리 if (pFocusWnd != nullptr && pFocusWnd->GetDlgCtrlID() == IDC_EDIT_CMD) { OnBnClicked.. 2023. 9. 15.
MFC ] 클래스 마법사 오류 CCmdTarget 파생 클래스가 아닌 이 클래스에는 명령을 추가할 수 없습니다. 프로젝트 폴더에 가서 .vs 폴더을 다른 이름으로 바꾼 뒤 다시 프로젝트를 열면 .vs 폴더가 다시 생성되면 클래스 마법사가 된다. 리소스에서 구문분석을 하지 못했습니다. 리소스뷰에 다이얼로그에가서 버튼하나 만들어주고 빌드한뒤 다이얼로그랑 Resource.h에서 만들었던 버튼 삭제하면 됨 2023. 9. 15.
char, wchar_t, TCHAR char - 1바이트 문자 또는 숫자를 저장하기 위한 자료형 wchar_t - 2바이트로 문자를 저장하기 위한 자료형 wchar_t myString[] = L"Hello, World!"; TCHAR - 컴파일 환경에 따라 char 또는 wchar_t로 매핑되는 매크로로 Visual Studio 프로젝트 - 속성 - 고급 - 문자집합에서 멀티바이트 문자집합 사용시 char로, 유니코드 문자집합 사용시 wchar_t로 처리된다. TCHAR myString[] = _T("Hello, World!"); 2023. 9. 15.
MFC ] 엔터, ESC 키 입력시 종료되지 않게하기 엔터키 입력 시 종료되지 않게하기 OnOK 함수 재정의 OnOK() 호출 주석처리 void CRwrTesterDlg::OnOK() { // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다. //CDialogEx::OnOK(); } ESC 키 입력 시 종료되지 않게하기 OnCancel() 함수를 재정의해서 주석처리하면 Alt+F4가 눌리거나 다이얼로그의 X버튼이 눌린 경우에도 종료되지 않기 때문에 다른방법을 쓴다. PreTranslateMessage(MSG* pMsg) 함수 재정의 해당함수는 키보드 및 마우스 메시지를 번역하고 처리하기 전에 호출되는데 ESC키 입력시 바로 리턴하여 어플리케이션이 종료되지 않도록 한다. BOOL CRwrTesterDlg::PreTranslateMes.. 2023. 9. 15.
TMS320F28388D ] 부트 과정 Reset이 일어나면 먼저 PC(Program Counter)는 Reset Vector가 fetch되어있는 0x3FFFC0으로 설정된다. Reset Vector의 내용은 Boot ROM 영역에 있는 InitBoot 코드로 점프하는 것이다. Boot ROM은 한번만 프로그래밍 가능한 영역으로 공장 출하시 TI사가 부트로더 Software를 마스킹해둔 곳인데, 여기에 부트로더 역할을 하는 InitBoot 함수가 있다. InitBoot 코드가 실행되면 부트로딩을 위한 루틴을 수행하고 I/O 핀 상태에 따라 BootMode를 결정한 뒤 BootMode에 따라 온칩 메모리의 특정 Entry Point를 실행하게 된다. 참고로 Boot ROM에 마스킹된 Boot Code는 아래 경로에서 살펴볼 수 있다. C:\ti.. 2023. 8. 16.
TMS320F28388D ] Reset Sources 유저매뉴얼의 Reset Sources 테이블 첫번째 열이 Reset Source 목록이고 첫번째 행이 각 Reset이 발생했을 때 초기화되는 여부를 표시한다. Yes인 것은 해당 회로가 리셋 된다는 뜻이고, - 는 해당회로 기존 상태로 남는다는 뜻이며, Hi-z는 하이 임피던스 상태라는 뜻이다. Power-On Reset (POR) POR 회로는 칩에 전원이 인가되고 안정된 상태에 이르기까지 칩을 계속 리셋 상태로 묶어두는 회로로, GPIO 핀들의 글리치를 억제하고, 칩이 깨끗하게 시동 될 수 있게한다. POR이 발생하면 칩의 모든 회로는 리셋상태가 되고, IO핀은 Hi-Z 상태가 되며, /XRS 핀은 Low 신호를 출력하게 된다. 이때 /XRS 핀의 출력 신호는 칩과 연결된 다른 IC 소자들을 리셋 시.. 2023. 8. 14.
TMS320F28388D ] SPI Clocking Schemes / CPOL, CPHA 설정 TMS320F2838x칩 Clock Phase 설정에는 주의할 점이있다. 우선 SPI 통신을 하려면 CPOL(Clock Polarity)과 CPHA(Clock Phase)라는 두 가지 파라미터를 설정하는데 이 설정 조합에 따라 다음의 4가지 SPI 모드가 있다. 그리고 TMS320F2838x driverlib에도 Mode 설정이 존재하는데 CPOL은 동일하지만, CPHA를 설정할 때 주의가 필요하다. 보통은 CPOL, CPHA 설정에 따라 클럭과 데이터를 동기화하는 방법은 다음과 같다. CPOL = 0: IDLE 일 때 클럭이 LOW 레벨이다. CPHA = 0 : 데이터가 클럭의 first edge에서 캡쳐(샘플링)되고, 그 다음 edge에서 전파(출력)된다. CPHA = 1 : 데이터가 클럭의 seco.. 2023. 8. 14.
TMS320F28388D ] eCAP으로 ePWM 신호 Period와 Duty Cycle 측정 특정 주파수, 듀티사이클의 PWM신호를 생성하고 eCAP으로 PWM신호 측정    PWM 설정 ePWM의 TBCLK(Time Base Clock)은 아래 공식으로 설정하는데 prescale 값은 둘 다 1로 한다. TBCLK = EPWMCLK/(HSPCLKDIV * CLKDIV) Period를 25000으로 설정하고, Counter Mode는 up-down으로 한다. 카운터가 up-dwon 모드일 때 PWM 파형의 주파수는 TBCLK/(2*period)인데 EPWMCLK는 따로 클락설정이 없으면 디폴트가 SYSCLK/2여서 100MHz니까 100,000,000 / 50,000 = 2kHz가 된다.     Counter Compare 값은 18750으로 설정.  .. 2023. 8. 14.
TMS320F28388D ] ECAP ECAP CAP 은 Capture 의 약자로 펄스 신호의 시간정보를 검출하는 기능을 한다. 펄스의 Rising edge와 Falling edge 시간 정보를 확인하여 주기, 듀티 등을 측정할 수 있고, 펄스의 특정 edge에서 인터럽트를 발생시킬 수도 있다. ECAP의 사용 예 회전체의 속도 검출 신호의 Pulse period, Duty ratio 측정 출력이 PWM 타입인 센서의 정보 디코딩 ECAP의 특징 TMS320F28388D 칩에는 7개의 eCAP 모듈이 있다. 그리고 eCAP 모듈의 특징은 다음과 같다. 200MHz 시스템 클럭사용, 5ns의 시간 분해능 캡쳐 핀은 Input X-BAR를 통해 라우팅되므로 어떤 GPIO든 사용 가능 32-bit 타이머 기반 4개의 32-bit 타임 스탬프 캡쳐.. 2023. 8. 14.
만능기판에서 SOIC type IC 사용하기 + SMD 부품 납땜방법 나는 주로 2.54mm 피치의 만능기판이나 브레드보드를 사용하기 때문에 DIP type으로 된 IC를 구해서 쓰는데 DIP type 재고가 없어서 어쩔 수 없이 1.27mm 피치의 SMD(표면실장)부품으로 구입하는 경우가 있다. 이럴 땐 아래와 같은 변환기판을 이용하면 만능기판이나 브레드보드에서 사용가능하다. 변환기판 구입시에는 데이터시트를 보고 pin수, pitch, hole 규격이 맞는 것으로 구입한다. SMD 부품 납땜 방법 : https://m.vctec.co.kr/web/product/exso/pdf/smdsoldering.pdf 1. 납땜할 자리의 한쪽 끝에 미리 납을 묻혀둔다. 2. 핀셋 등을 이용하여 소자를 자리에 정확하게 맞춘 후 묻혀둔 납을 녹여 고정 시킨다. 3. 고정 후 납을 모든 .. 2023. 8. 14.
더뉴 셀토스 평탄화 제품 후기 / 고탄성 스펀지, 브리즈문 차박 보드 더뉴 셀토스 평탄화 제품 후기 HTML 삽입 미리보기할 수 없는 소스 셀토스는 2열 폴딩했을 때 트렁크랑 단차가 조금 있는 편이다. 그래서 아래 차박용 고탄성 스펀지를 구입하여 먼저 단차를 없애주었다. 구입가격 : 23,470원 구입링크 : http://item.gmarket.co.kr/Item?goodscode=1967756243 G마켓-스포티지QL 차박 평탄화 스펀지 매트 4... 일시품절 item.gmarket.co.kr 구입옵션 : 규격 : 고탄성 스펀지를 판매하는 곳은 많지만 이렇게 차박용으로 파는 제품들은 한쪽 끝이 대각선으로 재단이 되서 아주 자연스럽게 단차를 없앨수 있다. 그리고 스포티지QL용 제품이긴한데 크기가 셀토스에도 잘 맞았다. 이 위에서 바로 자도 될 정도로 적당히 푹신하고 위에 .. 2023. 8. 14.
형상관리 주요 용어 형상항목 (Configuration Item) : 형상관리의 대상이 되는 것으로서 전체 시스템의 구성 요소를 계층적으로 분할한 각 레벨의 항목을 가리킨다. 예를 들면, 하드웨어 경우 시스템-서브시스템-조립체(assembly)-부품 (part) 등이, 소프트웨어 경우, 시스템-서브시스템-프로그램 또는 문서 등을 가리킨다. 기준선 또는 기준문서 (Baseline) : 대상 시스템에 대한 기술적인 통제를 하게 되는 시점 (milestone) 또는 그 시점의 기준문서를 가리킨다. 기준선에서는 다음 단계를 진행할 것인지의 여부에 대한 의사결정 ('go/no-go decision making)을 하게 되며, 다음 단계를 진행하기로 결정한 경우 그 시점까지의 산출물은 다음 단계에 대한 기준선이 된다. 기준선에 대한 .. 2023. 8. 14.
차박시 방전방지, 트렁크에 카라비너 꽂는법 / 빼는법 / 빼고 트렁크 닫는법 HTML 삽입 미리보기할 수 없는 소스 트렁크 하단에 이렇게 생긴 고리가 있는데 이게 테일게이트의 잠금장치와 체결되면서 문이 닫혔다고 인식하는 원리이다. 따라서 테일게이트 잠금장치 부분에 아래 사진과 같이 카라비너를 꽂아주면 된다. 꽂았을 때 트렁크 안쪽 등이 꺼지는 것을 확인하면 방전방지가 잘 된 것이다. HTML 삽입 미리보기할 수 없는 소스 카라비너를 빼고 테일게이트 안쪽 닫힘 버튼을 누르더라도 트렁크는 이미 닫힌상태로 인식하고 있기 때문에 아무일도 일어나지 않는다. 그러니 테일게이트 바깥쪽 열림 버튼을 눌러야하는 데 그건 또 너무 높이 있어서 힘들다. 따라서 차키의 트렁크 열림 버튼이나 운전석의 버튼을 눌러주면 테일게이트의 잠금장치가 열리면서 카라비너가 자동으로 떨어져나온다. 그 뒤에 다시 테일게.. 2023. 8. 14.
신일 아웃도어팬 후기 / SIF-G2800 완충시간 및 지속시간 신일 아웃도어팬 SIF-G2800 구입 후기 HTML 삽입 미리보기할 수 없는 소스 이마트 일렉트로마트에서 카드할인받고 39900원에 구입하였다. HTML 삽입 미리보기할 수 없는 소스 맨위에 풍속조절버튼 그 아래 타이머 설정 버튼 그 아래 회전각도 설정 버튼이 있고 맨 아래에는 배터리 잔량표시 인디케이터가 있다. 선풍기에 손잡이가 달려있어서 텐트 천장에 걸어둘 수 있다. 걸어뒀을 때는 회전기능은 안외고, 탈부착 가능한 삼각대를 연결하고 거치해뒀을 때 회전기능이 작동한다. HTML 삽입 미리보기할 수 없는 소스 7800mAh 배터리를 내장하고 있다. 무게는 765g으로 가볍다. 컴팩트한 측면에선 다른 접이식 선풍기보다 아쉽다. HTML 삽입 미리보기할 수 없는 소스 파우치, 설명서, 삼각대, 본체, 카라.. 2023. 8. 14.
Difference between Cold Reset and Warm Reset Cold Reset : A cold reset is a method of resetting the system by completely turning off the power and then turning it back on. It is used to bring the system back to its initial state and can be used to resolve hardware-related issues. Caution needed when performing a cold reset as it may lead to data loss or affect system stability. Warm Reset: A warm reset is a method of restarting the system .. 2023. 8. 14.
강원도 삼척 미인폭포 미인폭포 주차 무료 *이용시간 하절기(3월~10월) 09:00~18:00 동절기(11월~2월) 09:00~17:00 *가는법 내비에서 여래사를 찍고 근처까지 간 주차표시판일 보일거다. 아래 그림에서 형광펜 칠한 곳에 주차해두고 걸어가면 된다. 가는 길은 내리막인데 내려가는 길에 올라오는 사람들 입에서 다시는 오지말자라고 얘기하는걸 두번이나 들었다. 실제로 가서 본 풍경은 매우 신비로우니 한번은 가보길 추천한다. 2023. 8. 14.
강원도 삼척 추암해수욕장 + 근처 무료 차박지 무료 차박지 증산 해수욕장 주차장 바로 옆에 화장실과 발씻는곳 있음 쓰레기 버리는 곳 있음 편의점 가까움 샤워실은 없음 걸어서 추암해수욕장까지 갈 수 있다. 2023. 8. 14.
강원도 동해 도째비골 해랑전망대 + 스카이밸리 해랑전망대 무료입장 운영시간 : ~ 21:00 스카이밸리 가는 방법이 2개 있다. 1. 해랑전망대 위치에서 걸어서 올라간 뒤 엘레베이터 타는 방법 2. 묵호등대에서 걸어가는 법 묵호등대 주차장이 좁기 때문에 성수기에는 해안가 노상주자창이나 주변 공영주차장에 주차한 뒤 1번 방법으로 가는 것이 낫다. 매주 월요일 휴무 * 이용시간 - 하절기(4월~10월) : 10:00 ~ 18:00 - 동절기(11월~3월) : 10:00 ~ 17:00 * 티켓발권 : 시설 이용시간 종료 1시간 전까지 * 체험시설 점검시간 : 12:00 ~ 13:00 2023. 8. 14.
강원도 삼척 환선굴 환선굴 주차는 무료 * 이용시간 동절기(11월~2월) : 09:30~매표마감 16:00 하절기(3월~10월) : 09:00~매표마감 17:00 주차장에 주차하고 매표소까지 10분정도를 걸어야한다. 그리고 환선굴 입구까지 계속 걸어올라가는 방법과, 중간에 모노레일 승강장에서 모노레일 타는 방법이 있다. 다른 블로그 후기에 모노레일 승강장까지 걸어가면 모노레일 타게 된다고 하는데 정말 그렇다. 하지만 모노레일은 앉을 공간도 부족하고 매우 느린데다 대기시간이 1시간이나 되서 여름만 아니라면 등산하는셈 치고 걸어올라가도 될 것 같다. 환선굴 관광에 걸리는 시간은 1-2시간 정도이다. 계단이 많고 미끄러우니 넘어지지 않게 조심해야한다. 2023. 8. 14.
경기도 광주 경안천습지생태공원 평소에 이용 제한시간이있고, 호우경보가 있는 경우 출입이 제한된다. 나무데크길이 잘되어있어서 산책하기 좋다. 2023. 7. 31.
구글 애드센스 첫 수익 정산 후기 작년 4월 블로그를 처음 개설한 이후 14개월만에 누적 수익이 100불을 돌파해서 이번에 정산을 받았다. 구글 애드센스 정산일은 매월 21일인데, 수익이 기준액(디폴트 100달러) 이상이 되면 지급수단으로 등록된 계좌로 수익금을 송금해준다. 나의 경우엔 수익금이 US$105.22 이었고, 지급수단으로 원화통장을 등록해둬서 수수료 공제하고 117,770원이 오늘 아침에 입금되었다. 2023. 7. 24.
Types of IC Packages IC 패키지 종류 https://electrical-information.com/package-types/ Types of IC Packages There are way too many different types of semiconductor (IC or transistor) packages. For example, SO electrical-information.com 2023. 7. 24.
W25Q64JV, SPI Interface NOR 플래시 메모리 데이터시트 분석 TMS320F28388D DSP 사용 기준으로 작성되었다. W25Q64JV 스펙 64Mbit(=8MB) 용량을 가진 Winbond사의 Serial Flash Memory이다. Pin Configuration 다음과 같이 핀을 연결한다. 데이터시트를 보면 모든 instruction 직전에 /CS핀의 falling edge가 필요하므로 /CS핀을 GND에 묶어두거나 하는 건 안된다. MCU SPI MOSI → Flash DI MCU SPI MISO ← Flash DO MCU SPI CLK → Flash CLK MCU CS용 GPIO → Flash /CS 작동전압은 2.7V to 3.6V이다. SPI Baud Rate TMS320F2838x 매뉴얼을 확인하면 설정 가능한 최대 SPI Baud Rate는 LSP.. 2023. 7. 24.
STM32 ] TouchGFX, 하드웨어와 상호작용하기 1. TouchGFX Designer에서 사용보드를 선택하고 New Project를 생성한다. 2. Designer 툴에서 GUI를 만들고 Generate Code를 한다. 3. 프로젝트 경로에 들어가면 .ioc 파일과 STM32CubeIDE 프로젝트 파일이 있다. 4. STM32CubeMX로 .ioc 파일을 편집하고 STM32CubeIDE로 .cproject를 열어 편집할 수 있다. 5. 하드웨어 상호작용 코드 작성 아래 경로에서 main.c와 gui관련 .cpp 파일을 수정할 수 있다. TouchGFX는 OS없이도 실행할 수는 있지만 그렇게 하면 다른 Task와 TouchGFX 함께 실행하기 어렵기 때문에 FreeRTOS 환경에서 테스트하며 개발되었고 자동생성 코드도 FreeRTOS와 같이 제공된다... 2023. 7. 18.
extern "C" {} extern "C" {} 는 .cpp 소스파일에서 C 스타일로 작성된 함수나 변수를 사용하기 위한 C++의 키워드로, extern "C" {} 문구를 사용하면 해당 블록 내에 있는 함수나 변수를 C 스타일로 링크하도록 지시할 수 있다. C++ 컴파일러는 C++ 언어의 특징을 따르는데, C++은 함수 오버로딩, 이름 맹글링(name mangling) 등의 기능을 지원하기 때문에 C 와는 다른 링킹 규칙을 가지고 있다. 따라서 extern "C" 키워드를 사용하면 C++ 코드에서 해당 블록 내에 선언된 C 함수나 C 변수를 호출 또는 참조할 때 C 스타일의 링킹 규칙을 따르도록 한다. extern "C" { // C 함수 extern void myCFunction(int arg); } extern "C" {.. 2023. 7. 18.