본문 바로가기

분류 전체보기879

C#, WinForms ] CRC Checker private void button1_Click(object sender, EventArgs e) { // 초기 디렉토리 설정 openFileDialog1.InitialDirectory = "C:\\"; // 파일 필터 설정 openFileDialog1.Filter = "모든 파일 (*.*)|*.*|텍스트 파일 (*.txt)|*.txt|바이너리 파일 (*.bin)|*.bin|데이터 파일 (*.dat)|*.dat"; // 마지막으로 파일 대화 상자에서 선택한 디렉토리를 기억하고, 다음번 파일 대화 상자를 열 때에는 이전에 선택한 디렉토리를 자동으로 선택 openFileDialog1.RestoreDirectory = true; if (openFileDialog1.ShowDialog() == DialogRes.. 2023. 5. 14.
C#, WinForms ] Drag & Drop 으로 파일 경로 얻기 파일 시스템에 액세스하기위해 using System.IO; 선언 Form의 AllowDrop 속성 true 일반적으로 Form이나 Control에는 파일을 Drop할 수 없기 때문에, 해당 Form이나 Control에 AllowDrop 속성을 true로 설정해주어야 한다. this.AllowDrop = true; DragEnter, DragDrop 이벤트 핸들러 추가 this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop); this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter); DragEnter 이벤트 : 사용자가 무언인가를 .. 2023. 5. 14.
C# ] delegate C#의 delegate는 메서드를 참조하는 객체로 C/C++의 함수포인터와 비슷한 개념이다. C#의 메서드포인터라고 보면 된다. 이 Delegate는 이벤트 핸들러나 콜백 함수를 구현하거나, 대리자 메서드를 호출하는 등 용도로 사용할 수 있다. using System; namespace ConsoleApp2 { class Program { static void Main(string[] args) { MyClass mc = new MyClass(); mc.Perform(); } } class MyClass { // 1. delegate 선언 private delegate void printInt2Consol(int i); public void Perform() { // 2. delegate 인스턴스 생성... 2023. 5. 14.
C++ ] stream 상속관계 ios_base : 다른 입출력 클래스들의 기반이 되는 클래스로서, 입출력 스트림의 상태와 플래그를 관리 ios : ios_base 클래스를 상속하며, 입출력 스트림의 상태와 플래그를 조작할 수 있는 멤버 함수를 제공 istream : 입력 스트림을 다루는 클래스. 콘솔 입력 및 파일 읽기 등을 다룰 수 있다. ostream : 출력 스트림을 다루는 클래스. 콘솔 출력 및 파일 쓰기 등을 다룰 수 있다. fstream : 파일 입출력을 다루는 클래스. 파일의 읽기 및 쓰기를 다룰 수 있다. stringstream : 메모리상에서 문자열을 읽고 쓰기 위한 클래스. std::string과 유사한 인터페이스를 제공하며, 문자열을 파싱하거나 변환하기 위한 용도로 사용된다. ifstream : 파일 입력에 특화된.. 2023. 5. 14.
C#, WinForms ] 폼 시작시, 종료시 이벤트 호출 순서 HTML 삽입 미리보기할 수 없는 소스 폼이 Show() 메소드로 호출되면 다음과 같은 순서로 이벤트가 발생한다. 1. 폼의 생성자(Constructor)가 호출된다. 2. 폼의 Load 이벤트(이벤트 핸들러)가 발생한다. 3. 폼의 Shown 이벤트(이벤트 핸들러)가 발생한다. 생성자는 Form 객체를 생성할 때 호출되며, Load 이벤트는 Form이 로드될 때 발생하고, Shown 이벤트는 폼이 처음 화면에 표시될 때 발생한다. 폼 Load 이벤트 호출 시점에는 폼과 관련된 컨트롤들이 메모리에 로드되고 초기화되지만, 아직 폼이 화면에 보이지는 않는 상태이다. 따라서 이 때 폼의 크기나 위치를 변경하거나, 다른 컨트롤의 위치나 크기를 폼에 맞게 조정할 수 있다. 또한 Form이 화면에 나타나기 전이므로.. 2023. 5. 14.
C#, WinForms ] program.cs C# 프로그램 진입점 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace Appname1 { internal static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } using 문을 .. 2023. 5. 14.
Winforms ] ToopStrip, MenuStrip 속성 ToolStrip 화살표클릭 - Dock 을 통해 ToolStrip의 위치를 정할 수 있으며 ToolStrip size는 Form의 size에 맞게 자동 조정된다. 그리고 아래 버튼을 클릭해 다양한 컨트롤을 ToolStrip 안에 추가할 수 있다. ToolStrip 을 선택하며 속성을 변경할 수 있고, ToolStrip 내의 컨트롤을 클릭하여 각자 속성을 변경할 수도 있다. ToolStrip 내의 컨트롤을 우클릭하여 주요 속성을 변경할 수도 있는데 ToolStripButton 의 경우 DisplayStyle 을 Text/Image/ImageAndText 중에서 선택할 수 있다. AutoSize 를 False로 하면 ToolStrip의 크기를 임의로 조절할 수 있다. 우클릭 - 이미지 설정 또는 속성의 I.. 2023. 5. 14.
Windows ] 윈도우에서 파일 Hex dump 하는 방법 파워쉘을 열고 아래 명령어 뒤에 hex dump할 파일 경로를 입력하면 된다. format-hex Format-Hex C:\Users\Username\Documents\example.bin Format-Hex 명령어는 내부적으로 아래의 과정으로 처리된다. Get-Content -Path [파일 경로] -Encoding Byte | Format-Hex 2023. 5. 14.
C# ] namespace 네임스페이스(namespace)는 C#에서 클래스, 구조체, 인터페이스 등을 그룹화하는 데 사용되며, 각 그룹에 대한 유일한 식별자 역할을 한다. 네임스페이스를 사용하면 다른 네임스페이스에선 동일한 이름의 클래스 등을 정의할 수 있어 클래스 이름이나 함수 이름 등이 충돌하는 것을 방지할 수 있으며, 클래스나 함수 등을 논리적으로 그룹화하여 코드의 가독성을 높일 수 있다. C#에서는 기본적으로 System이라는 네임스페이스가 제공되는데 이 네임스페이스에는 C#에서 기본으로 제공되는 클래스들이 포함되어 있다. 또한, 사용자가 직접 네임스페이스를 정의하여 사용할 수 있다. namespace MyNamespace { // 클래스, 구조체, 인터페이스 등의 정의 } 같은 네임스페이스 안에 있는 클래스들은 서로를 .. 2023. 5. 14.
C# ] NuGet 패키지 관리자 사용하여 프로젝트에 패키지 추가 C#에서 라이브러리를 추가하는 방법은 크게 두 가지가 있다. 1. NuGet 패키지 관리자를 사용하는 방법 : NuGet은 오픈 소스 라이브러리 패키지 관리 도구로, 이걸 사용하면 Visual Studio에서 간편하게 패키지를 검색하고 설치할 수 있다. NuGet을 통해 패키지를 설치하면 해당 패키지가 포함하는 라이브러리 파일들이 프로젝트에 자동으로 추가된다. 2. 프로젝트 참조를 사용하는 방법 : 프로젝트 참조를 사용하는 방법에는 두 가지가 있다. 2-1. DLL 추가 : DLL을 추가하는 방법은 프로젝트에서 외부 라이브러리를 사용하려는 경우에 사용된다. 추가할 DLL 파일을 프로젝트의 참조에 추가하면 해당 DLL에 있는 모든 클래스, 인터페이스, 메서드 등을 사용할 수 있다. - 프로젝트를 우클릭하고.. 2023. 5. 14.
WinForms ] 콘솔창 출력 솔루션 우클릭 Properties - Application 탭 - Output type : Console Application 선택 이제 Console.WriteLine();으로 출력할 수 있다. 2023. 5. 14.
Excel ] 엑셀 스타일 삭제하기 외부에서 가져온 엑셀 파일에 스타일이 굉장히 많이 존재하는 경우가 있다. 이렇게 많은 스타일은 파일의 용량을 커지게하고, 속도저하의 원인이 될 수 있으므로 꼭 필요한게 아니라면 삭제해주면 좋다. 1. 단축키 ALT + F11 을 눌러 Visual Basic을 연다. 파일 - 옵션 - 리본 사용자 지정 에서 개발도구를 체크 한 뒤 개발 도구 탭에서 Visual Basic을 클릭해도 된다. 2. 삽입 - 모듈 3. 모듈에 아래 텍스트를 입력한다. Sub 셀스타일삭제() Dim 스타일 As Style Dim 개수 As Long For Each 스타일 In ActiveWorkbook.Styles If 스타일.BuiltIn = False Then On Error Resume Next 스타일.Delete 개수 = .. 2023. 5. 14.
Excel ] 그림 개체 한번에 선택하기 홈 - 찾기 및 선택 - 개체 선택 클릭 개체선택이 활성화된 상태에서는 드래그 앤 드롭으로 원하는 범위의 개체들을 선택할 수 있다. 선택 후 다시 한번 개체선택을 눌러 주면 비활성화 된다. 홈 - 찾기 및 선택 - 선택 창 오른쪽에 개체 선택 창이 나타난다. 홈 - 찾기 및 선택 - 선택 창 아무 개체나 클릭 후 서식 - 선택 창을 눌러 나타나게 할 수도 있다. 2023. 5. 14.
[C#] 현재 .NET SDK에서는 .NET 6.0을(를) 대상으로 하는 것을 지원하지 않습니다. .NET SDK 버전 확인 dotnet --list-sdks Visual Studio 2022는 .NET Core 6.0을 기본적으로 지원하며, .NET 6 SDK도 함께 제공하니 Visual Studio 2022를 사용하면 된다. 2023. 5. 14.
C언어 ] setjmp(), longjmp() setjmp()와 longjmp()함수를 사용하기 위해서는 먼저 setjmp.h를 포함해야한다. #include 쉽게 생각하면 setjmp()는 시스템 복원 지점을 만들고, longjmp()는 시스템 복원을 하는 것과 같다. setjmp() int setjmp(jmp_buf env); setjmp() 함수는 현재의 위치(스택 환경)을 저장하고, 나중에 longjmp() 함수를 호출되었을 때 그 위치로 다시 돌아가는 데 사용된다. longjmp() void longjmp(jmp_buf env, int val); longjmp() 함수는 setjmp() 함수를 통해 저장된 위치로(스택환경으로) 프로그램 실행을 이동(복원)하는 데 사용된다. longjmp() 함수가 호출되면 setjmp() 함수 호출 이후에 .. 2023. 5. 7.
C언어 ] leetCode 2181 - Merge Nodes in Between Zeros You are given the head of a linked list, which contains a series of integers separated by 0's. The beginning and end of the linked list will have Node.val == 0. For every two consecutive 0's, merge all the nodes lying in between them into a single node whose value is the sum of all the merged nodes. The modified list should not contain any 0's. Return the head of the modified linked list. Exampl.. 2023. 5. 7.
CRC-16-CCITT CRC-16-CCITT의 다항식(Polynomial)은 아래와 같다. XMODEM, YMODEM 등에 쓰이는 방식이다. 이 다항식의 16진수 표현 CRC-16-CCITT 함수 uint16_t UpdateCRC16(uint16_t crc_in, uint8_t byte) { uint32_t crc = crc_in; uint32_t in = byte | 0x100; do { crc 2023. 5. 7.
CRC-32 CRC (Cyclic Redundancy Check) 는 데이터 전송 과정에서 오류를 검출하거나 파일의 무결성을 검증하기 위한 방법으로, 그 과정에서 여러 종류의 다항식이 쓰일 수 있는 데 가장 널리 사용되는 CRC 다항식은 CRC-16-CCITT와 CRC-32이다. CRC 다항식 종류 : https://en.wikipedia.org/wiki/Cyclic_redundancy_check 그 중 CRC-32의 다항식(Polynomial)은 아래와 같다. 이 다항식을 16진수로 표현한게 0x04C11DB7이고, reverse한 값이 0xEDB88320이다. 다항식을 16진수로 표현하는 방법은 먼저 x의 차수에 해당하는 비트에 1을 쓴다. 나머지 비트는 0으로 한다. 그럼 바이너리로 아래처럼 되는데 이걸 31번.. 2023. 5. 7.
C언어 ] 맵 자료구조 구현 map 생성시 사이즈를 직접 결정할 수 있도록 해보았다. 근데 링버퍼처럼 범용적으로 쓸 거 같진 않아서 사실 고정길이배열로 mapManger 구조체안에 둬도 될 것 같다. map.h #include "main.h" #define MAP_MAX_KEY_LEN20 // 맵 자료구조 typedef struct { char key[MAP_MAX_KEY_LEN+1]; uint32_t value; } map_t; // 맵 자료구조 관리 구조체 typedef struct { map_t* maps; uint32_t currentSize; uint32_t maxSize; } mapManager_t; void map_create(mapManager_t* mapManager, map_t* maps, uint32_t maxS.. 2023. 5. 7.
TMS320F28388D ] CM, C28x 코어 진입점으로 점프 CM 먼저 CM코어의 경우는 Application 실행을 위한 Entry Point는 0x200001 이고 해당 주소로 점프하면 된다. https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/923512/tms320f28388d-cm-core-code-jump-to-execution-giving-meets-error-asking-for-how-to-do TMS320F28388D: CM core code jump to execution giving meets error, asking for how to do - C2000 microcontrollers forum - .. 2023. 5. 7.
WinForms ] ImageList와 ColorDepth 속성 ImageList는 이미지를 저장하고 관리하는 데 사용되는 컨트롤인데, ImageList를 사용하면 다른 컨트롤에서 이미지를 쉽게 가져올 수 있으며, 동일한 이미지를 여러 컨트롤에서 사용할 수 있다. 도구상자에서 imageList를 추가하면 하단에 imageList가 나타난다. 우클릭 - 이미지 선택 아래 이미지 컬렉션 편집기에서 imageList의 멤버를 추가할 수있다. 0번 인덱스부터 추가되며 순서 변경이 가능하다. 이렇게 추가된 이미지 리스트를 Button, CheckBox, ComboBox, Label, ListBox, ListView, MenuStrip, PictureBox, RadioButton, TabControl, ToolBar 컨트롤 등 다양한 컨트롤에서 불러다 쓸 수 있다. 사용시 주의.. 2023. 5. 7.
리모콘 분해 탑면 가운데 IC칩이 보이고 그위에 24MHz 오실레이터와, IR transmitter가 있고 아래 커패시터가 있다. 바텀면에는 돔 스위치가 보인다. 평소에는 스위치가 오픈되어 있다가 가운데 부분을 누르면 단락되어 전기 신호가 흐른다. 고무패드에 스위치가 닿는 접점부위가 뾰족하게 되어있다. TV버튼 안눌리게 하려고 고무패드를 잘랐다. 검은 종이같은 걸로 막아두면 될 것 같다. 2023. 5. 7.
데이터 크기 단위와 네트워크 속도 표기, MBps <-> Mbps 변환 이더넷 속도가 100Mbps 라고하면 초당 몇 메가바이트를 전송할 수 있을까? 얼핏보면 100메가바이트를 전송할 수 있는 속도처럼 보이지만 그렇지 않다. 100Mbps는 초당 100 메가'비트'를 전송할 수 있는 속도를 나타낸다. 1바이트는 8비트이니 초당 12.5메가바이트를 전송 할 수 있는 속도이다. 여기서 하나 더 주의할 점이 네트워크 속도 표기 시 붙은 M은 SI 단위체계를 따르는 것이다. 즉 K는 10^3, M은 10^6을 의미한다. 하지만 우리가 일반적으로 데이터의 크기를 나타낼 때는 이진수 체계에서 용량을 표현하는 방식으로 생각하기 때문에 MB는 2^20을 의미하고 12,500,000 / (2^20) = 11.9 이다. 결론은 네트워크가 ideal한 상태에서 초당 전송 가능한 데이터의 크기는.. 2023. 5. 7.
Online CRC 계산 사이트 CRC 계산 사이트 https://crccalc.com/?crc=01020304&method=crc32&datatype=hex http://www.sunshine2k.de/coding/javascript/crc/crc_js.html https://www.lammertbies.nl/comm/info/crc-calculation 파일 CRC 계산 사이트 https://emn178.github.io/online-tools/crc32_checksum.html https://simplycalc.com/crc32-file.php 2023. 5. 7.
1구 콘센트를 다이소 2구 콘센트로 교체하기 다이소에서 이천원짜리 2구 콘센트를 구입한다. 1. 작업 전 차단기를 내린다. 2. 일자드라이버로 기존 커버를 벗겨낸다. 3. 위 아내 나사를 풀어 콘센트를 들어낸다. 4. 기존 전선 연결 위치를 사진찍어 놓는다. 5. 일자드라이버로 홈을 누르며 기존 선을 당겨서 빼낸다. 6. 다이소에서 산 2구 콘센트로 교체한다. 접지선이 있는 경우엔 연두색 접지부에도 연결한다. 7. 다시 커버를 씌우면 끝 2구 콘센트로 사용 가능하다. 2023. 5. 7.
Visual Studio 언어를 영어로 바꾸기 도구 - 도구 및 기능 가져오기 언어 팩 - 영어 설치 도구 - 옵션 환경 - 국가별 설정 - English - 확인, 재시작 2023. 5. 7.
TMS320F28388D ] CSS에서 bin 파일 생성하는 법, filling a hole with 0xFF not 0x00 프로젝트를 빌드하면 기본적으로 .out 실행파일이 나오는데 바이너리 파일을 생성하기 위해서는 TI에서 제공하는 유틸을 사용하면 된다. 아래 경로에 있는 툴이고, 이걸 ccs의 post build step 기능으로 빌드와 동시에 bin 파일이 생성되게 할 수 있다. C:\ti\ccs[Version No]\ccs\utils\tiobj2bin 프로젝트 우클릭 - Build - Steps - Post-build steps 해당 부분에 아래 문구를 적는다. C28x 코어 "${CCS_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin" "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/ofd200.. 2023. 4. 23.
TMS320F28388D ] 라이브러리 램에 복사해 실행 Flash API 라이브러리를 램에 올려서 실행할 필요가 있다. 단순히 time critical 코드를 고속으로 사용하려는 것 뿐만은 아니고 예를 들어 부트로더를 만들 때 필요하다. Application이 코드영역에서 한창 동작하고 있는데 이 코드영역을 중간에 erase하려고 하면 프로그램이 halt될 것이 아닌가. 하지만 전부 Ram에서 동작하는 함수를 사용하면 코드영역을 침범해 조작해도 halt 되지 않는다. 근데 Flash API를 호출해서 사용하는 copyData()라는 사용자정의 함수가 있다고 하면 이걸 Ram에 올린다고 다 되는 게 아니라, 그 안에 있는 모든 함수들이 램에서 동작해야하고 사용하는 버퍼도 램에 올라간 데이터여야 한다. 아래와 같은 과정을 거치지 않고 Flahs API를 사용한다.. 2023. 4. 22.
TMS320F28388D ] Flash API 사용 일단 아래 경로에 있는 FlashAPI 라이브러리를 복사해 프로젝트 안에 가져온다. C:\ti\c2000\C2000Ware_[Version No]\libraries\flash_api\f2838x\cm\lib 그리고 아래 경로의 FlashAPI를 사용하기 위한 헤더가 모여있는 폴더도 복사해서 프로젝트에 가져온다. C:\ti\c2000\C2000Ware_[Version No]\libraries\flash_api\f2838x\cm\include\FlashAPI 그리고 Include search path에 추가해준다. 복사해서 가져오지 않아도 c2000ware 폴더 내 경로를 추가하면 되긴하지만 선호하지 않는방법이다. 이제 아래 헤더를 include하면 FlashAPI를 가져다 쓸 수 있다. #include ".. 2023. 4. 20.
TMS320F28388D ] TI 제공 부트로더 사용해서 CPU2, CM application 다운로드하기 사용방법은 README.txt 파일에서 찾을 수 있다. When the application starts, the serial connection is with the SCI module which is owned by CPU1. Only commands designated for CPU1 are acceptable at this point before booting CPU2.  If a CPU2 command is selected, the application asks the user for a different option.  After booting to CPU2, either with "Run CPU1 Boot CPU2" or "Reset CPU1 Boot CPU2," CPU.. 2023. 4. 19.