본문 바로가기

분류 전체보기894

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.
STM32 ] USB Host MSC Board : STM32F429ZI (Nucleo 144)STM32CubeIDE : version 1.10.1Firmware Package : FW_F4 V1.27.1     Clock Configuration  USB 48MHz 클락을 설정하기 위해 HSE를 사용했다.          USB_OTG_FS 설정    보드가 Host 모드로 동작하게 설정해준다. USB Flash Drive는 자체전원이 없으니 VBUS를 통해 전원을 공급해주어야 한다.    그래서 USB_ID핀과, USB_SOF핀은 비활성화 됐는데, USB에서 ID핀은 On-The-Go (OTG) 기능을 지원하기 위해 사용되므로 호스트 또는 디바이스 기능만 가진 USB장치를 사용하는 경우 ID핀은 필요하지 않다. 그리고 SOF 타이밍 동기.. 2023. 4. 13.
C#, WinForms ] decimal to hex / hex to decimal converter 깃허브 주소 : https://github.com/joeteo/num2hex GitHub - joeteo/num2hex Contribute to joeteo/num2hex development by creating an account on GitHub. github.com 프로그램만 다운받기 : 먼저 디자이너에 대해 얘기해보면 comboBox는 사용자가 입력할 수 없게 DropDownStyle을 DropDownList로 만들었다. 그리고 콤보박스에서 선택된 항목이 변경되었을 때 호출되는 SelectedIndexChanged 이벤트 핸들러를 추가했다. 참고로 index는 처음 아무것도 선택하지 않았을 땐 -1이고 첫번째 아이템부터 인덱스 0으로 시작한다. 정수형 데이터 타입 선택 시 옆에 range를 보여.. 2023. 4. 12.
TFTP 프로토콜 TFTP 프로토콜 HTML 삽입 미리보기할 수 없는 소스 Trivial File Transfer Protocol의 약자로, 인터넷 프로토콜 스위트(IP Suite)*의 일부로서 파일 전송 프로토콜이다. TFTP는 TCP/IP 프로토콜 스택을 기반으로 하며, 그 중 UDP(User Datagram Protocol)를 이용하여 작동한다. 기본적으로 UDP 포트 69번을 사용하며, 전송할 파일의 이름과 위치를 포함하는 요청 메시지를 TFTP 서버에 보낸다. 이후 TFTP 서버는 파일을 찾아서 클라이언트에게 전송하는데, 전송 과정에서는 오류 검사와 재전송을 처리하는 기능이 내장되어 있다. TFTP는 파일 전송 속도가 느리고 오류 처리 기능이 FTP와 비교해 상대적으로 취약하다는 단점이 있지만, 작은 파일을 빠르.. 2023. 4. 10.
C ] float to hex / hex to float Converter 2023.04.09 - [프로그래밍/C# (WinForms)] - C#, WinForms ] float to hex / hex to float Converter C#, WinForms ] float to hex / hex to float Converter 필요에 의해서 만들었다. 내가 예전에 소개한 float to hex converter 사이트랑 달리 시스템 아키텍쳐에 따라 메모리에 저장된 대로 보여준다. 디자이너 부분을 먼저 살펴보면 Form은 사용자가 크기를 eteo.tistory.com 위 글에서 WinForms로 만든 float to hex / hex to float Converter를 C언어로 간단히 구현해 본 것. 예외처리나 옵션 없이 리틀엔디안으로 변환하는 기능만 넣었다. #include .. 2023. 4. 9.
C#, WinForms ] float to hex / hex to float Converter 엔디안을 선택하면 시스템 아키텍쳐에 따라 메모리에 저장된 대로 보여주고, Hex값은 0x 접두사를 붙이거나 혹은 공백 구분자를 두거나 선택할 수 있게했다. 디자이너 부분을 먼저 살펴보면 Form은 사용자가 크기를 변경할 수 없도록 FormBorderStyle을 FixedSingle로 하고 Form에 있는 Font들이 다 상속받을 수 있도록 기본 Font를 설정한다. 라디오버튼과 변환 부분은 panel을 사용해 구분 짓고, 변환 후 결과를 보여주는 textBox는 사용자가 copy만 할 수 있게 ReadOnly 속성을 true로 하였다. this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Font = new System.. 2023. 4. 9.
C#, LINQ ] Enumerable 클래스, Range(), Select(), Where(), ToArray() 메서드 LINQ LINQ(Language Integrated Query)는 .NET Framework에서 데이터 쿼리를 지원하기 위해 도입된 기술로, C# 및 VB.NET에서 사용할 수 있는 쿼리 언어이다. SQL과 유사한 쿼리 구문을 사용하여 데이터를 검색, 정렬, 필터링, 그룹화 및 조작할 수 있으며, System.Linq 네임스페이스에 속하는 다양한 클래스와 메서드를 제공한다. 이 네임스페이스에는 Enumerable, Queryable, Grouping, Lookup, OrderedEnumerable 등의 클래스가 포함되어 있고, Enumerable 클래스는 LINQ to Objects를 위한 확장 메서드를 제공하며, Queryable 클래스는 LINQ to SQL, LINQ to Entities, LIN.. 2023. 4. 9.