본문 바로가기

전체 글841

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.
TMS320F28388D ] TI 제공 부트로더 & Flash programmer 툴 사용하기 관련 문서   TI가 ROM에 마스킹 해둔 부트로더 중 SCI boot와 Flash programmer를 사용해 어플리케이션을 program 해보자.   전체 Flow 요약해보면 Boot Mode를 SCI Boot로 바꾸고 SCI ROM bootloader를 사용해 flash kernel 코드를 통째로 램에 복사해 올힌다. 그리고 RAM에 올린 flash kernel을 실행하여 User Application을 Flash에 Program한다.     먼저 내장 SCI bootloader를 사용하기 위해 bootmode를 SCI/Wait Boot로 변경해야 한다.   만약 컨트롤 카드를 쓰고 있다면 S2 스위치로 bootmode를 변경하면 되고, 아닌 경우 해당 b.. 2023. 4. 18.
STM32CubeIDE 등 Eclipse 기반 IDE 에서 Ctrl + / 등 단축키 안먹힐 때 혹시 한컴 입력기로 바뀌었다 확인해본다. 아예 삭제하는 방법 위의 사진에서 '언어 기본 설정'을 누른다. 한국어 - 옵션 클릭 한컴입력기 클릭하고 제거 2023. 4. 16.
STM32 ] TFTP Bootloader Board : STM32F429ZI (Nucleo 144) STM32CubeIDE : version 1.10.1 Firmware Package : FW_F4 V1.27.1 아래 예제 기반 C:\Users\J\STM32Cube\Repository\STM32Cube_FW_F4_V1.27.1\Projects\STM324x9I_EVAL\Applications\LwIP\LwIP_IAP 일단 위 경로에서 flash_if.h, flash_if.c tftpserver.h, tftpserver.c 파일을 가져온다. main.h에는 다음과 같이 USER APPLICATION 에서 사용하는 플래시 주소가 선언되 었다. 용어를 어디에선 Page라고 쓰고 어디선 Sector라고 하는데 둘은 같은말이다. #define USER_.. 2023. 4. 16.
STM32 ] TFTP Server 파일 송수신 + USB Host MSC int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART3_UART_Init(); MX_FATFS_Init(); MX_USB_HOST_Init(); MX_LWIP_Init(); tftpd_init(); while (1) { MX_LWIP_Process(); MX_USB_HOST_Process(); } } USB와 랜케이블 연결 아래경로에서 tftpd64 를 다운받아 설치한다. https://bitbucket.org/phjounin/tftpd64/downloads/ phjounin / tftpd64 / Downloads — Bitbucket For large uploads, we recommend using the API. Ge.. 2023. 4. 15.
STM32 ] TFTP Server Board : STM32F429ZI (Nucleo 144) STM32CubeIDE : version 1.10.1 Firmware Package : FW_F4 V1.27.1 아래 경로 예제의 tftpserver.h, tftpserver.c 참조 C:\Users\jo\STM32Cube\Repository\STM32Cube_FW_F4_V1.27.1\Projects\STM324x9I_EVAL\Applications\LwIP\LwIP_TFTP_Server STM32보드를 TFTP 서버로 운용하며 클라이언트의 요청을 받아서, 클라이언트로부터 이더넷을 통해 파일을 수신해 보드에 연결된 USB MSC에 저장 또는 USB에 저장된 파일을 이더넷을 통해 클라이언트에게 송신 순서대로 살펴보자. void tftpd_init(.. 2023. 4. 14.
Eclipse 기반 IDE에서 Code Formatter 설정하기 STM32CubeIDE 자동생성 코드의 tabsize는 2칸인데 디폴트 Formatter의 tabsize는 4칸이라 안맞아서 수정해 줄 필요가 있다. Window > Preferences > C/C++ > Code Style > Formatter New를 클릭해 built-in profile을 base로 해서 커스텀 profile을 생성할 수 있다. 가장 많이 사용하는게 K&R 아니면 BSD인 것 같은데 둘의 대표적 차이는 K&R은 중괄호를 same line에서 시작하고 BSD는 next line에서 시작한다는 점이다. // K&R if (isRunning) { // do something } // BSD if (isRunning) { // do something } 지금은 BSD에서 tab size를 .. 2023. 4. 14.
JDK (Java Development Kit) 설치 1. 오라클 사이트에서 윈도우용 JDK를 다운받는다. https://www.oracle.com/java/technologies/downloads/#jdk20-windows 2. 실행해 기본경로로 설치하고 경로를 기억해두자. 3. 시스템 환경 변수 편집 변수 이름 : JAVA_HOME 변수 값 : C:\Program Files\Java\jdk-20 (설치경로) 변수 이름 : CLASSPATH 변수 값 : %JAVA_HOME%\lib 변수 이름 Path에 아래와 같이 추가 %JAVA_HOME%\bin 4. CMD창에서 java --version 명령어를 치고 잘 설치되었는지 확인한다. 2023. 4. 13.
인터넷 익스플로러 엣지로 자동전환 안되게 하는 법 아래 경로로 이동한다. C:\Program Files (x86)\Microsoft\Edge\Application\112.0.1722.39[버전]\BHO 폴더 안에 다음과 같은 파일이 있는데 IE에서 Edge로 자동전환하게 하는 프로그램이다. 삭제하는 것은 찜찜하니 다음과 같이 폴더명을 바꿔주면 된다. 2023. 4. 13.