프로그래밍 언어 76

C# winform에서 exe파일로 디버깅 쉽게하기

안녕하세요. 오늘은 C# winform exe파일로 디버깅을 쉽게하는방법을 알아보겠습니다.일반적으로 디버깅을위해서 Console.WriteLine함수를 많이 사용합니다. 기본적으로 이 함수를 사용하면 visual studio의 output탭에 메세지가 표시됩니다.이렇게되면 visual studio를 사용하지않고 exe파일을 실행했을때는 Console.WriteLine의 내용을 보지못합니다.visual studio에서 Console.WriteLine 했을 때 출력해 주는 형식을 변경해 줄 수 있습니다.변경해주는 방법은 두가지입니다.첫번째방법은 프로젝트내의 속성으로가서 변경하면 됩니다.Windows 애플리케이션은 기본 옵션입니다. 콘솔 애플리케이션으로 변경해주면 exe파일을 실행했을때 별도의 명렴프롬프트창이..

gcc를 이용해서 빌드를 Make로 하기

안녕하세요. 오늘은 Makefile에 대해 알아보겠습니다. 테스트하는 환경은 windows이고 MinGW를 이용해서 gcc를 사용합니다. (이 글을 이해하기위해서는 gcc사용방법을 알고있어야합니다) make란 소스코드를 컴파일하고 빌드하는 작업을 자동화하는 도구입니다. make는 Makefile이라는 파일을 읽어들여 작업을 수행합니다. Makefile에는 소스파일과 빌드과정에서 수행해야 할 명령어가 명시되어 있습니다.Makefile은 확장자가 없고 아래처럼 만들면 됩니다. main.c에는 HelloWorld!를 print하는 코드가 c언어로 작성되어있습니다. main.c를 오브젝트파일로 생성하려면 gcc -c main.c을 하면 됩니다main.o를 링크하고 main.exe라는 실행파일을 만들려면 gcc ..

파이썬으로 조이스틱 제어하기 (USB HID)

안녕하세요. 오늘은 조이스틱을 사용해보겠습니다. 조이스틱은 아래의 제품을 사용했습니다.https://www.devicemart.co.kr/goods/view?no=1377049해당제품은 라즈베리와 호환되는 제품인것같고 일반PC에서 사용하려면 USB 데이터를 받고나서 처리를 해줘야 합니다. USB HID 통신을 사용하고 파이썬을 이용했습니다.제품에 대한 데이터시트를 못찾아서 프로토콜 분석기를 이용해서 키가 눌렸을때의 데이터를 얻었습니다.해당 디바이스에서 아무것도 눌리지 않았을때 주기적으로 01 80 80 7F 7F 0F 00 00이 옵니다.왼쪽 방향키를 누르는경우 01 80 80 00 7F 0F 00 00이 옵니다. 그래서 해당 데이터일때 왼쪽으로 움직여주면 됩니다.모든 키의 데이터를 적으면 아래와 같습니..

C언어로 배열에있는 값을 대문자or소문자로 치환하기

안녕하세요. 오늘은 배열에 있는 값을 대문자or소문자로 치환해보는 함수를 만들어보겠습니다 먼저 알아야 할 내용은 아스키코드에있는 a~z, A~Z값입니다 a~z는 97~122이고 A~Z는 65~98입니다 각 문자의 차이는 32가 납니다 그래서 A에 32를 더하면 97이고 a입니다 이러한 방식으로 함수를 만들면 됩니다 #include void stringToUpper(char *str) { char s; int i; for(i=0; i='a')&&(s

Win32 파일입출력

안녕하세요. 오늘은 Win32로 파일입출력을 해보겠습니다 파일입출력을 할때 함수 4개만 사용하면 됩니다. 파일을 프로그램과 연결하는 CreateFile, 파일을 읽는 ReadFile, 파일을 쓰는 WriteFile, 파일을 닫는 CloseHandle 이렇게 4가지입니다. * CreateFile 함수 HANDLE CreateFile( [in] LPCSTR lpFileName, [in] DWORD dwDesiredAccess, [in] DWORD dwShareMode, [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes, [in] DWORD dwCreationDisposition, [in] DWORD dwFlagsAndAttributes, [in, opti..

Win32 문자집합 설정

안녕하세요. 오늘은 Win32 유니코드에 대해 알아보겠습니다 문자열을 저장할때 일반적으로 char s[] = "wowon"을 저장하면 아래처럼 공간이 할당됩니다 1바이트에 영문자 1개가 저장됩니다. 한글을 저장할때 2byte를 사용하고 영문자를 저장할때 1byte가 저장된다고 해보겠습니다(UTF-16) 두가지 방식으로 "원원 won"을 저장해보겠습니다 멀티 바이트 문자 집합(MBCS) 한글은 2byte, 영문자는 1byte로 저장됩니다 유니코드 문자 집합 한글이던 영문자던 2byte로 저장됩니다. c언어에서 유니코드를 위한 자료형이 있습니다. wchar_t이고 크기는 2바이트입니다. 멀티 바이트의 장점은 낭비되는 공간이 없습니다. 단점은 글자의 개수와 공간의 크기가 일치하지 않는 것입니다. 유니코드의 장..

테라텀(Tera term) 매크로 알아보기

안녕하세요 오늘은 테라텀(Tera term) 매크로에 대해 알아보겠습니다. 시리얼통신을 사용할때 매크로를 사용하면 손쉽게 커맨드를 전달할 수도있고 맞나 판단 할 수도있습니다. 테라텀의 매크로는 TTL 확장자를 사용하고 Tera Term Language의 줄임말입니다. 테라텀에서 하는 명령어 입력/출력/판단을 자동으로 매크로를 만들어서 사용할 수 있습니다. 테라텀 매크로의 커맨드들은 아래의 사이트에 자세히 나와있습니다. 커맨드들 중에서 자주 사용하는 커맨드를 알아보겠습니다. 자세한 사항과 다른 기능들은 아래의 사이트에서 찾아서 사용하면 됩니다. https://ttssh2.osdn.jp/manual/4/en/macro/command/ UART로 테스트하고 RX랑 TX를 연결해서 보내고 바로 받게 했습니다. ..

C# 스레드 사용하기

안녕하세요. 오늘은 C# 윈폼환경에서 스레드를 사용해보겠습니다. 가장많이 스레드를 쓰는 이유는 메인스레드에서 UI를 변경할경우 렉이 걸리게되는데 그때 스레드를 사용합니다 위의 동영상처럼 버튼을 클릭하면 숫자가 1씩 올라가고 버튼을 클릭하면 숫자가 멈추는 프로그램을 해볼겁니다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 public partial class Form1 : Form { Thread th; int num=0; bool flag = false; public Form1() { InitializeComponent(); } private ..

어셈블리언어 변수선언하기

안녕하세요 . 오늘은 어셈블리언어 변수선언을 해보겠습니다 변수선언은 section .bss와 section .data에 합니다 section .bss 초기화하지 않은 변수를 선언합니다. 변수를 선언할때 변수의 크기를 넣어줘야합니다. resb 1byte resw 2byte resd 4byte resq 8byte resb(Reserve Byte) resw(Reserve Word) resd(Reserve Doubleword) resq(Reserve Quadword) 선언은 「변수명 크기 개수」순서로 하면 됩니다. 1 2 3 section .bss i resb 1 ; 크기가 1byte이고 변수명이 i이고 1개 선언 j resw 2 ; 크기가 2byte이고 변수명이 j이고 2개 선언 cs section. data..

어셈블리언어로 HELLO WORLD 출력하기

어셈블리언어로 HELLO WORLD 출력해보겠습니다 사용할 컴파일러는 SASM입니다. 설치를 하고 Settings옵션에 들어가서 아래처럼 설정합니다 NASM은 리눅스, MAC, 윈도우에서 지원하는 무료 어셈블러입니다. 세팅을 하고 새 프로젝트를 만듭니다 1 2 3 4 5 6 7 8 9 10 11 12 %include "io64.inc" section .text global CMAIN CMAIN: ;write your code here xor rax, rax ret Colored by Color Scripter cs 1번째줄은 매크로 함수를 인클루드 하는것입니다. 5번째줄에 보면 section .text이 있는데 section은 코드를 작성할때 부분부분 나눠서 작성하는 곳입니다 일단 크게 3가지로 나눠보겠..