본문 바로가기
반응형

컴퓨터/프로그래밍88

6 비트 CRC 소스 코드 6비트 0x43 CRC를 구하는 C 코드는 다음과 같다. uint8_t tableCRC6[64] = { 0x00, 0x03, 0x06, 0x05, 0x0C, 0x0F, 0x0A, 0x09, 0x18, 0x1B, 0x1E, 0x1D, 0x14, 0x17, 0x12, 0x11, 0x30, 0x33, 0x36, 0x35, 0x3C, 0x3F, 0x3A, 0x39, 0x28, 0x2B, 0x2E, 0x2D, 0x24, 0x27, 0x22, 0x21, 0x23, 0x20, 0x25, 0x26, 0x2F, 0x2C, 0x29, 0x2A, 0x3B, 0x38, 0x3D, 0x3E, 0x37, 0x34, 0x31, 0x32, 0x13, 0x10, 0x15, 0x16, 0x1F, 0x1C, 0x19, 0x1A, 0x0B.. 2023. 4. 19.
Visual Studio Code 자동 괄호 해제 Visual Studio Code에서 괄호 {나 주석 /*을 입력하면 자동으로 닫히는 } 나 */이 입력되는데 이것을 막는 방법은 다음과 같다. 설정에서 bracket을 입력하고 Auto Closing Brackets을 never로 설정한다. 2023. 3. 11.
사인 테이블 프로그래밍 사인 함수값을 구할 때 함수를 사용하지 않고 테이블을 사용할 수 있다. 사인함수의 1/4 주기만 테이블을 만들어 sin_table에 저장한다. 사인값을 구하는 코드는 다음과 같다. int sin_value(int x) { int i = x % L; if (0 2023. 1. 12.
MFC 사용을 위한 Visual Studio 설치 Visual Studio에서 MFC를 사용하기 위해서는 아래 그림의 오른쪽에서 "최신 v142 빌드 도구용 C++ MFC ..."를 체크해야 한다. 디폴트로 선택되어 있지 않기 때문에 직접 선택해야 한다. ☞ Visual Stduio 무료 버전 2023. 1. 4.
추상 데이터 타입 (ADT) 뜻 ADT(Abstract Data Type, 추상 데이터 타입)는 데이터를 사용자 관점에서 보는 것으로 데이터 구조는 정의하지 않고 어떻게 사용하는지를 정의한다. ADT에 대응되는 말은 Data Structure로 Data Structure는 데이터가 어떤 구조로 저장하는지에 대한 것을 정의한다. 예를들면, 스택이 있을 때 ADT에서는 스택 크기와 Push와 Pop 명령어만 정의한다. 사용자는 Push와 Pop 명령을 사용하면 스택을 사용할 수 있다. Data Structure 관점에서는 스택의 데이터 구조와 Push와 Pop일 구현되는 내부 구조를 정의한다. 프로그램 개발시 ADT와 Data Structure를 분리하면 Data Structure가 변경되어도 다른 프로그램을 수정하지 않아도 된다. 리눅스.. 2022. 12. 24.
정적할당, 동적할당, 자동할당 차이 변수 종류는 정적할당, 동적할당, 자동할당 변수로 구분할 수 있다. 1) 정적할당 (Static Memory Allocation) 정적할당 변수는 전역변수와 같이 프로그램이 실행되면 메모리를 할당하고 프로그램이 종료될때까지 사용하는 변수이다. 2) 자동할당 (Automatic Memory Allocation) 자동할당 변수는 지역변수와 같이 프로그램 실행 중 함수가 호출되면 함수내의 변수는 스택에 저장하고 함수를 빠져 나오면 스택에서 해제된다. 프로그램이 실행됨에 따라 스택에 저장되는 변수는 커졌다 작아졌다를 한다. 지역변수를 Local variable 또는 Automatic variable이라고 한다. 3) 동적할당 (Dynamic Memory Allocation) 동적할당 변수는 malloc 함수를 .. 2022. 10. 20.
MFC를 배우기 어려운 이유 현재 윈도우 프로그램을 개발할 때 대부분 C#을 사용하고 MFC는 많이 사용하지 않는다. MFC는 하드웨어 제어가 필요한 분야 등에서는 아직 사용된다. MFC는 윈도우 API를 사용하지 쉽도록 만든 Class 라이브러리이다. MFC는 매우 방대한 라이브러리로 제대로 사용하기위해서는 매우 많은 시간이 필요하다. MFC는 다른 언어에 비해 배우는데 시간이 비정상적으로 많이 필요하다. 윈도우 API를 사용하기 위해서는 윈도우의 내부 동작 원리를 알아야 한다. MFC는 라이브러리이기는 하지만 윈도우 API를 거의 그대로 사용하기 때문에 MFC를 사용할 때도 윈도우의 내부 동작 원리를 알아야 한다. 이것이 MFC를 배우는데 어려운 이유 중 하나이다. 배우는데 많은 시간이 필요할뿐아니라 작성된 프로그램에서 심각한 .. 2022. 9. 23.
프로그래밍의 미래 프로그래밍 언어와 기술은 프로그래밍을 더 쉽게 하고 더 높은 생산성을 가지는 방향으로 발전해왔다. 20세기 초의 기계에에서 어셈블리어, C, C++, C#, Java, Python 등으로 발전해왔다. 발전은 사용이 쉬운지와 성능이 좋은지 생산성이 높은지 등의 여러 요소가 종합되어졌다. 앞으로도 이러한 추세는 계속될것이고 미래에는 누구나 프로그래밍을 할수 있는 시대가 올것이다. 누구나 프로그래밍을 할수 있기 위해서는 새로운 프로그래밍 언어가 나와야 한다. 현재 가장 쉽다는 Python보다 쉬워야 한다. 2022. 9. 12.
Atom 파일 탭 여러 줄로 표시 Atom에서 파일 탭을 여러줄로 표시하려면 multiline-tab을 설치한다. 아래는 multiline-tab 실행화면 2022. 7. 1.
Call by value와 Call by reference 차이 함수에서 파라미터의 값이 사용되는 방식에 따라 Call by value와 Call by reference가 있다. Call by value Call by value는 함수내에서 파라미터를 변경해도 함수를 빠져 나왔을 때 파라미터가 변하지 않는 것이다. C는 기본적으로 Call by value이다. void main() { int a=1; fun(a); } void fun(int a) { a = 10; } 위의 코드에서 fun(a)을 실행해도 a는 1이다. Call by reference Call by reference는 함수내에서 파라미터를 변경하면 함수를 빠져 나와도 파라미터가 변하는 것이다. C는 기본적으로 Call by value이지만 포인터를 이용하여 Call by reference를 구현할 수 .. 2022. 5. 22.
3x3 역행렬 구하는 소스 코드 3x3 행렬의 역행렬을 구하는 C 소스코드는 다음과 같다. d = m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]); if(d!=0.) { id = 1 / d; im[0][0] = (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * id; im[0][1] = (m[0][2] * m[2][1] - m[0][1] * m[2][2]) * id; im[0][2] = (m[0][1] * m[1][2] - m[0][2] * m[1][1]) * id; im[1][0] = .. 2022. 5. 22.
오픈프레임웍스 개요 오픈프레임웍스(openFrameworks)은 오픈소스 프레임워크이다. 오픈프레임웍스는 비주얼 디자인에 중점을 둔 프레임워크이다. C++로 만들어져 있다. 오픈프레임웍스은 ofxUI 애드온을 사용할 수 있다. 2022. 5. 15.
MFC 사용을 위한 Visual Studio 설치 MFC를 사용하기 위해서는 Visual Studio를 설치할 때 옵션을 선택해야 한다. 설치를 변경하기 위해서는 시작 메뉴에서 Visual Studio Installer를 선택한다. 수정을 클릭한다. "C++를 사용한 테스크톱 개발"에서 "최신 v142 빌드 도구용 C++ MFC(x86 및 x6...)"을 선택한 후 수정을 선택한다. 설치가 완료되면 새 프로젝트 만들기에서 MFC 앱을 선택한다. 2022. 5. 13.
OpenCV 함수 - RGB HSV 변환 RGB 이미지를 HSV 이미지로 변환하는 함수는 다음과 같다. cvtColor(bgrimg, hsvImg, CV_BGR2HSV); HSV 이미지를 RGB 이미지로 변환하는 함수는 다음과 같다. cvtColor(hsvimg, bgrImg, CV_HSV2BGR); 2022. 5. 5.
Matlab plot 함수 빨강색 선 두께 2는 다음과 같이 설정한다. plot(x, y, 'r', 'LineWidth',2); 2022. 4. 29.
MFC 버전 MFC (Microsoft Foundation Class Library)는 1992년 처음 나왔다. 2015년부터 지금까지 MFC 14 버전을 사용하고 있다. 2015년이후로 업데이트가 거의 없다. 2022. 4. 17.
Callback 뜻 프로그래밍에서 Callback이란 인자로 전달되는 실행코드를 의미한다. 다음과 같은 C 코드에서 fun 함수를 호출할 때 파라미터로 callback 함수의 포인터를 전달하면 fun 함수에서 callback 함수가 실행된다. int main(void){ fun(&callback); } int callback(void){ } void fun(int (*fc)(void)){ fc(); } 2022. 4. 13.
부호 있는 정수형 변수 부호 있는 정수형 변수에서 최상위 비트는 부호비트이고 2's complement로 구현된다. 1바이트 부호 있는 정수형 변수는 다음과 같다. Hex Dec 00 0 01 1 02 2 7F 127 80 -1 81 -2 82 -3 83 -4 FF -128 2바이트 부호 있는 정수형 변수는 다음과 같다. Hex Dec 0000 0 0001 1 0002 2 7FFF 32767 8000 -1 8001 -2 8002 -3 8003 -4 FFFF -32768 4바이트 부호 있는 정수형 변수는 다음과 같다. Hex Dec 00000000 0 00000001 1 00000002 2 7FFFFFFF 2147483647 80000000 -1 80000001 -2 80000002 -3 80000003 -4 FFFFFFFF -.. 2022. 4. 2.
링 버퍼 저장 프로그램 버퍼에 저장하는 코드는 다음과 같다. Buf[Buf_idx++] = DATA; if(Buf_idx>=16) Buf_idx = 0; 버퍼에 저장된 데이터를 오래된 것부터 표시하는 코드는 다음과 같다. c1 = Buf_idx; for(c=0; c=16) c1 = 0; } 2022. 4. 2.
링 버퍼 프로그램 코드 링 버퍼에 데이터를 넣고 읽는 프로그램 코드는 다음과 같다. 링버터에 데이터를 넣는 코드는 다음과 같다. void data_write(u08 Data) { Buffer[Head++] = Data; if(Head>=64) Head = 0; } 링버터의 데이터를 읽는 코드는 다음과 같다. void data_read(u08 *Data) { if(Head != Tail) { *Data = Buffer[Tail++]; if(Tail>=64) Tail = 0; } } ☞ 링버퍼 2022. 3. 23.
파일 디스크립터(File Descriptor)란? 파일 디스크립터(File Descriptor)는 리눅스에서 파일을 다룰 때 각 파일에 할당하는 고유의 숫자이다. 윈도우에서 핸들과 같은 개념이다. 파일 디스크립터는 양의 정수이다. 다음과 같이 파일을 열면 fd가 파일 디스크립터 번호가 저장된다. int fd = open(filename, flags) 파일을 여는 중 에러가 발생하면 fd에 -1을 리턴한다. 2021. 9. 19.
Linux usleep 함수 Linux의 usleep 함수는 us 단위로 sleep 하는 함수이다. 시간 범위 usecs는 0~1000000 (1초) 이다. #include int usleep(useconds_t usec); useconds_t는 unsigned int 이다. POSIX에서는 usleep를 삭제하였고 nanosleep을 사용해야 한다. 2021. 9. 18.
이클립스 IDE 이클립스(Eclipse)는 Java로 만들어진 오픈소스 통합개발환경(IDE)이다. 이클립스는 2001년 IBM에서 처음 만들었다. Eclipse는 일식이나 월식이라는 뜻이다. Eclipse라는 이름은 그 당시 경쟁 상태였던 MS의 Visual Studio를 가리겠다는 의미로 지어졌다. 하지만, Sun microsystems은 자신의 회사이름이 Sun이기 때문에 Eclipse라는 이름을 싫어했고 이름 변경을 요구하기도 했다. Java로 만들어졌기 때문에 다양한 플랫폼에서 사용할 수 있다. 원래는 Java 개발을 위해 만들어졌지만 현재는 C, C++, Ada, Fortan, Python 등의 개발에 사용할 수 있다. 이클립스는 Java 개발에 많이 사용하고 임베디스 시스템의 마이크로 프로세서 개발에도 사용된.. 2021. 7. 26.
상태도와 상태천이 상태도(State Diagram)는 프로그램을 설계할 때 매우 유용한 도구이다. 복잡한 로직도 상태도로 나타내면 쉽게 이해될 때가 있다. 상태도의 예시는 다음과 같다. 원은 상태를 나태내고 화살표는 상태 천이(State Transition)를 나타낸다. 현재 상태에서 특정 조건이 되면 상태 천이가 발생한다. 2021. 7. 25.
소프트웨어 개발 수명 주기 소프트웨어 개발 수명 주기(Software Development Life Cycle, SDLC)는 소프트웨어를 계획, 개발, 시험, 운영하는 과정을 뜻한다. SDLC의 단계는 다음과 같다. Stage 1: Planning and Requirement Analysis (계획/요구사항 분석) Stage 2: Defining Requirements (요구사항 정의) Stage 3: Designing the Product Architecture (설계) Stage 4: Building or Developing the Product (개발/구현) Stage 5: Testing the Product (시험) Stage 6: Deployment in the Market and Maintenance (운영/유지보수) 2021. 7. 22.
Visual Studio Code의 가장 큰 단점 Visual Studio Code의 가장 큰 단점은 함수 리스트를 보여주는 Outline에 필터 기능이 없다는 것이다. 필터 기능이 없어서 변수, 함수 선언, 함수 등 너무 많은 것들이 표시된다. 그래서, 원하는 함수는 찾는 것이 너무 힘들다. 이것이 수정되지 않으면 VS Code를 계속 사용하기 어렵다. ☞ 관련 게시판 수정 settings의 Features - Explorer에서 함수, 변수 등 표시를 원하는 항목을 선택할 수 있다. 하지만, 함수선언을 안 보이게 하는 설정이 없다. 2021. 7. 19.
정수형 변수 범위 char : -128 ~ 127 unsigned char : 0 ~ 255 short : -32768 ~ 32767 unsigned short : 0 ~ 65535 int : -2147483648 ~ 2147483647 (10자리) unsigned int : 0 ~ 4294967295 (10자리) long long : -9223372036854775808 ~ 9223372036854775807 (19자리) unsigned long long : 0 ~ 18446744073709551615 (20자리) 2021. 7. 10.
CRC 프로그램 코드 XModem XModem에 사용되는 16비트 CRC 계산 코드는 다음과 같다. int calcrc(char *ptr, int count) { int crc; char i; crc = 0; while (--count >= 0) { crc = crc ^ (int) *ptr++ 2021. 7. 8.
라즈베리 파이 종류 라즈베리 파이 보드의 종류는 다음과 같다. Raspberry Pi 1 Model A+ (2014) Raspberry Pi 1 Model B+ (2014) Raspberry Pi 2 Model B (2015) Raspberry Pi 3 Model B (2016) Raspberry Pi 3 Model A+ (2018) Raspberry Pi 3 Model B+ (2018) Raspberry Pi 4 Model B (2019) Raspberry Pi Zero W (2017) Raspberry Pi Zero (2015) 2021. 7. 3.
Atom 에디터 컬럼 모드 키보드 변경 Atom에서 컬럼모드를 사용하려면 Alt 키를 누른 상태에서 마우스 좌클릭한 후 드래그하면 된다. Alt 키를 누른 상태로 입력해야 한다. 이 때 Tab을 누르면 Tab이 입력되지 않고 윈도우가 변경되는 문제가 있다. 이 때는 Alt 키를 Ctrl 등의 다른 키로 바꿀 수 있다. 다음과 같이 Sublime-Column-Selection에서 키를 변경할 수 있다. 2021. 6. 23.
반응형