본문 바로가기

c언어

tapito의 AVR 정복기 - 4부. RAM을 이용한 스택 구현 tapito의 AVR 정복기 4부. RAM을 이용한 스택 구현 (c) tapitolife 스택? 스택(Stack)은 컴퓨터에서 후입선출의 방식으로 데이터를 저장하는 자료 구조를 말합니다. 후입선출(Last-In First-Out, LIFO)은 말 그대로 가장 나중에 저장된 데이터가 출력될 때는 가장 먼저 출력된다는 의미로서 주로 함수를 실행할 때 적용되는 개념입니다. 문자열로 이루어진 수식을 첫 글자부터 하나씩 읽어 들이면서 함수가 보이면 일단 연산 버퍼에 기억해 두었다가 버퍼에서 함수를 하나씩 꺼내 쓸 때 스택의 구조를 이용하는데, 이를 그림으로 표현하면 아래와 같습니다. 그림 1. Stack 자료 구조 스택의 작동 과정 push push은 스택의 끝에 데이터를 추가하는 동작입니다. pop pop은 스.. 더보기
소스로 보는 ATmega8535 – 2부. I/O Port 소스로 보는 ATmega8535 – 2부. I/O Port © tapitolife 1. I/O 포트의 구성 ATmega8535는 4개의 입/출력 포트가 지원됩니다. 각 포트는 8비트로 구성되어 있으므로 한 번에 4바이트의 데이터를 동시에 처리할 수 있죠. 그림 1. Pinout of ATmega8535 표 1. 각 핀에 대응하는 2진 값 핀 이름 Px7 Px6 Px5 Px4 Px3 Px2 Px1 Px0 2진 값 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 포트와 관련된 레지스터로는 DDRx, PORTx, PINx가 있습니다. 1) DDRx 포트의 방향을 설정합니다. 1이면 출력 전용, 0이면 입력 전용이며 각 핀별로 따로 설정할 수 있습니다. 코드 1. DDRx 사용 방법 01 : DDRA .. 더보기
숫자 출력 시리즈 1편 - 무지개 피라미드 숫자 출력 시리즈 1편입니다. 구 버전 Borland C++용 함수들을 썼기 때문에 현재 버전의 Visual Studio에서는 컴파일이 안 될 수 있습니다. /* * 삼각, 역삼각 숫자 출력 프로그램 * 작성자: tapitolife * http://tapito.tistory.com * http://kin.naver.com/profile/dkhighest * 사용 환경: Borland C++ 3.1, Windows 3.1 * */ #include #include #define BUFCOL 5 // 버퍼의 열 수를 설정합니다. #define BUFROW 8 // 버퍼의 행 수를 설정합니다. #define NUMMIN 1 // 숫자의 최소 값을 설정합니다. #define NUMMAX 40 // 숫자의 최대 값.. 더보기
C++ 공부 시작. 아니 뭐, 운전기전과에서 C++ 배운다는 거는 아닙니다. -,.-;; C++ 공부해 본 건 중학교 때 딱 1번 했었는데, 뭣 좀 만들려 치면 부족함을 많이 느끼게 되더라구요 ㅠㅠ 열혈 강의도 내용이 괜찮은 것 같았으나 예전에 "뇌를 자극하는 하드웨어 입문"이라는 책을 재미있게 읽었던 적이 있어서 시리즈로 나온 다른 책들에 대한 기대감에 "뇌를 자극하는~" 시리즈로 전부 골랐습니다. 흠, 그냥 4년제 컴퓨터 공학과 갈 걸 그랬나요? ㅎㅎ 요건 보너스. 핫트랙스에 공교롭게도 재고가 달랑 하나씩 남아있길래 전편 모두 질렀습니다. 더보기
문자열 크로스 예제 제가 예전에 네이버 지식iN에 답변했던 내용을 조금 수정해 보았습니다. 어떤 분께서 두 개의 문자열을 입력 받아서 공통으로 들어간 문자 하나를 찾아서 크로스 시키는 문제를 질문했었는데요 http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=109898667&qb=66y47J6Q7Je0IOq1kOywqA==&enc=utf8§ion=kin.qna&rank=1&search_sort=0&spq=0 그냥 다시 생각나길래 그 당시 제가 올렸던 답변을 조금 수정해서 다시 게시합니다. ㅋㅋ 일단 문자열을 전체적으로 TCHAR 형으로 조금 바꿔보았습니다. #include #include #include #include #include #include #.. 더보기
대/소문자 변환 예제 #include #include // 대문자인지검사합니다. #define ISUPPER(c) (('A' 더보기
C언어 표준 문자열 관련 함수 – ANSI, Wide Char별 함수 이름 정리 C 언어 표준 문자열 관련 함수 ANSI, Wide Char 별 함수 이름 정리 - by Tapitolife C언어에는 문자열 처리 방식이 크게 4가지가 있습니다. SBCS: 1글자의 크기가 1바이트인 문자세트입니다. 흔히 쓰는 ASCII 코드라고 보면 됩니다. 이 경우 한글을 포함한 로마자 외 다른 글자는 지원되지 않습니다. (도스를 생각하시면 되겠네요.) DBCS: 1글자의 크기가 2바이트인 문자세트입니다. 유니코드를 이야기하지는 않습니다. SBCS로 나타내기에는 너무 많은 글자들을 표현하는 방식으로 KS-X-1001과 같은 코드가 대표적입니다. MBCS: 문자의 종류에 따라 1글자의 크기가 다른 문자세트입니다. SBCS + DBCS의 짬뽕인데요. 아마 컴퓨터 처음 배우셨을 때 들으셨을 내용. 한글은.. 더보기
이동된 게시물입니다. 본 게시글은 블로그 개편으로 이동되었습니다. 아래 주소로 접속하여 주십시오. This article has been moved due to the the reorganization of the blog. Please visit the page linked below: この文書はブログの改編ので移動されました。下記の住所で接続して下さい。 http://blog.codingcat.kr/24 더보기
코드 컨벤션 정리 – 낙타, 파스칼, 헝가리안 코드 컨벤션 정리. 낙타 케이싱, 파스칼 케이싱, 헝가리안 표기법 - by Tapitolife 좋은 프로그래밍 습관을 만들기 위해 총 2편으로 좋은 코드 컨벤션을 정리 해 보았습니다. 그냥 거두절미하고 여기 첫 번째 포스팅에서는 변수 표기법에 대해 정리해 보았습니다. ▶ 변수명 표기법 상용 프로그램 하나 만들기 위해서 보통 여러 명의 개발자가 수 백만 라인의 코드를 작성합니다. 이 때 개발자들은 필요에 따라 변수, 상수, 함수 등을 선언합니다. 그런데 이때 문제가 생깁니다. ▶ 첫 번째 문제 상황 – 데이터 형의 혼란 개발자 여럿이 모여 수백만 라인의 코드를 작성하다 보면 자연스럽게 수 많은 변수/함수들이 선언됩니다. 이 때 그것들을 사용함에 있어 혼돈의 소지가 있습니다. "지금 이게 전역 변수였나?",.. 더보기
기능별로 묶어보는 레지스트리 함수 – 5편. 값의 조회/추가/수정/삭제 기능별로 묶어보는 레지스트리 함수. 5편. 값의 조회/추가/수정/삭제 - by Tapitolife 기본 값을 다뤄 보았다면 이제 이름을 갖는 다양한 형식의 값을 다뤄봅니다. — RegEnumValue 지정한 키가 가지고 있는 모든 값의 이름들을 가져옵니다. LONG WINAPI RegEnumValue( __in HKEY hKey, __in DWORD dwIndex, __out LPTSTR lpValueName, __inout LPDWORD lpcchValueName, __reserved LPDWORD lpReserved, __out_opt LPDWORD lpType, __out_opt LPBYTE lpData, __inout_opt LPDWORD lpcbData ); ○ hKey: 값들의 이름을 조회할 .. 더보기
기능별로 묶어보는 레지스트리 함수 – 4편. 기본값의 조회/수정 기능별로 묶어보는 레지스트리 함수. 4편. 기본값의 조회/수정 - by Tapitolife 키의 기본적인 조작을 해 보았다면 이제 기본 값을 다뤄봅니다. 기본 값이란 레지스트리 편집기 상에 나타나는 키(Key)가 갖고 있는 여러 개의 값 중에 이름이 없이 그냥 (기본 값)이라고만 나와 있는 것 문자열 형식의 값입니다. 뭐 이런 거죠 기본 값을 다루는 함수에는 다음과 같은 것이 있습니다. — RegQueryValue 지정한 키의 기본 값을 가져옵니다. LONG WINAPI RegQueryValue( __in HKEY hKey, __in_opt LPCTSTR lpSubKey, __out_opt LPTSTR lpValue, __inout_opt PLONG lpcbValue ); ○ hKey: 기본 값을 가져올.. 더보기
기능별로 묶어보는 레지스트리 함수 – 3편. 키의 조회/생성/삭제 기능별로 묶어보는 레지스트리 함수. 3편. 키의 조회/생성/삭제 - by Tapitolife (이 포스팅은 다음과 같은 사이트를 참고하여 작성되었습니다.) MSDN Registry Functions (Windows): http://msdn.microsoft.com/en-us/library/ms724875(v=VS.85).aspx 키를 열고 닫아 보았다면, 이제 그 사이에 뭔가를 해 봐야겠죠. ㅋㅋ 이번에는 서브키들의 목록을 조회하고, 생성/삭제를 해 봅니다. — RegEnumKey 지정한 키의 서브키들을 조회합니다. LONG WINAPI RegEnumKey( __in HKEY hKey, __in DWORD dwIndex, __out LPTSTR lpName, __in DWORD cchName ); ○ h.. 더보기
기능별로 묶어보는 레지스트리 함수 – 2편. 키의 열기/닫기 기능별로 묶어보는 레지스트리 함수. 2편. 키의 열기/닫기 - by Tapitolife (이 포스팅은 다음과 같은 사이트를 참고하여 작성되었습니다.) MSDN Registry Functions (Windows): http://msdn.microsoft.com/en-us/library/ms724875(v=VS.85).aspx 아래 함수는 키의 열고 닫기를 수행하는 기본적인 함수입니다. 파일을 다루기 위해서는 스트림을 통해 특정 파일을 열고, 작업하고, 닫는 것처럼 레지스트리도 '키'의 단위로 열고, 작업하고, 닫는 순서로 다뤄주시면 되겠습니다. — RegOpenKey 지정한 위치의 키를 엽니다. LONG WINAPI RegOpenKey( __in HKEY hKey, __in_opt LPCTSTR lpSub.. 더보기
기능별로 묶어보는 레지스트리 함수 – 1편. 완전 간단 레지스트리 소개 기능별로 묶어보는 레지스트리 함수. 1편. 완전 간단 레지스트리 소개 - by Tapitolife 레지스트리는 다음과 같이 구성 되어 있습니다. ▶ 키(Key): 일종의 폴더라고 보면 됩니다. 5개의 기본 키가 있으며 그 아래 트리 구조로 서브키들이 있습니다. 5개의 기본 키는 각각 다음과 같은 용도로 쓰입니다. * HKEY_CLASSES_ROOT: (약칭 HKCR) 파일 확장명과 그 확장명에 대한 연결 프로그램을 다룹니다. * HKEY_CURRENT_USER: (약칭 HKCU) 사용자가 구성한 윈도우 환경이 저장됩니다. 예를 들면, 효과음, 내게 필요한 옵션과 같은 주로 제어판에서 설정한 것들이 여기에 저장되죠. * HKEY_LOCAL_MACHINE: (약칭 HKLM) 윈도우 부팅에 필요한 장치 정보들.. 더보기