본문 바로가기

분류 전체보기894

STM32 , 디지털 금고 프로그래밍으로 구현 ( 시프트 레지스터 응용 ) 시프트 레지스터를 응용한 디지털 금고를 프로그래밍으로 구현하였습니다. 올바른 비밀번호인 3190을 순서대로 입력하면 LED가 오른쪽 왼쪽으로 번갈아 이동하면서 켜지고, 틀린 번호를 입력하면 LED가 깜빡이면서 초기화 되서 다시 입력해야 합니다. 버튼 3, 1, 9, 0 은 PG0-3 과 연결해두었고 버튼 2, 4, 5, 6, 7, 8 은 PC7-12 와 연결해두었다. LED는 PD0-5 이다. D 플립플롭은 입력과 출력이 버퍼와 마찬가지이다. 시프트 레지스터라서 처음 입력이 1으로 고정이고 각 플립플롭의 출력 Qa, Qb, Qc, Qd의 값은 0으로 초기화된 상태에서 시작하기 때문에 올바른 순서대로 클락펄스를 주어야 비트 1이 이동한다. 소스코드 /* USER CODE BEGIN PFP */ void J.. 2022. 5. 24.
STM32 , 동기식 / 비동기식 상향/ 하향 카운터 프로그래밍으로 구현하기 ( JK 플립플롭 , IC 7490 / 7492 ) 4비트 상향 카운터 4비트 하향 카운터 main.h 먼저 main.h 에 플립플롭에 필요한 변수들을 묶어 구조체로 정의해주었다. 함수에 매개변수를 여러개 둘 필요없이 보다 간략하게 짤 수 있다. /* USER CODE BEGIN Private defines */ typedef struct { uint8_t clockbefore; uint8_t Q; uint8_t Qbar; }JKFF; /* USER CODE END Private defines */ 사실 하드웨어의 동작과 달리 여기서 Qbar의 역할은 없는데 그냥 넣었다. main.c 뒤에 나오는 memset 함수 사용을 위해 string.h 를 포함해주었다. /* USER CODE BEGIN Includes */ #include /* USER CODE .. 2022. 5. 23.
STM32 , 외부 인터럽트 ( EXTI ) 사용하기 EXTI는 External Interrupt의 약자로 인터럽트 Interrupt란 CPU(프로세스)가 프로그램을 실행하고 있을 때 입출력 하드웨어 등의 장치 등에서 예외상항이 발생하여 처리가 필요한 경우 프로세서에게 알려 처리할 수 있도록 하는 기능이다. 결과물 첫번째 스위치를 누르면 오른쪽으로 점멸하며 이동 두번째 스위치를 누르면 왼쪽으로 점멸하며 이동 세번째 스위치를 누르면 전체 점등 네번째 스위치를 누르면 전체 꺼짐 STM32F42시리즈는 다음과 같은 EXTI 구조를 가지고 있다. 각각의 PA0~PH0 핀이 EXTI0 에 연결되고 PA1~PH1이 EXTI1에 연결되는 식이다. 따라서 PD0번과 PC0번을 동시에 EXTI 용도로 설정할 수 없다. 위 사진에 보이듯이 EXTI0 - EXIT4 는 개별 .. 2022. 5. 22.
STM32 , UART 통신 사용하여 시리얼 모니터에 Hello world ! 출력하기 [ UART 통신 정의 ] 시리얼 통신 중 UART 통신에 대한 정리 UART (Universal Asynchronous Receiver Transmitter, 범용 비동기식 직렬 포트): PC와 타겟보드가 통신할 때 가장 기본으로 사용하는 포트. Windows 컴퓨터에서는 제어판 장치관리자의 COM으로 시작하는 포트가 UART 통신 포트에 해당 장점 : 많은 CPU와 PC에 기본적으로 달려있어 호환성이 좋다. 단점 : 1대1 통신만 가능하다. STM32보드에는 비동기식 UART 포트와 동기/비동기가 모두 가능한 USART 포트가 있으며 둘의 차이는 클락 펄스이다. 동기 : 별도의 클락핀이 추가로 필요하다. 전송속도가 빠르다. 데이터 송수신 효율이 좋다. 비동기 : 클락없이 데이터만 보내기 때문에 8 Bit의 데이터마다 Start.. 2022. 5. 22.
비트 마스크 기법 , 원하는 비트만 조작하기 비트 마스크 기법은 정수의 이진수 표현을 자료구조로 쓰는 기법을 말합니다. 아래 숫자를 초기상태로 사용해 예제를 진행해 보겠습니다. 최하위비트는 0번이고 최상위비트는 15번이라고 지칭하겠습니다. 1. 특정 비트를 1로 만들기 |= 연산 사용. 내가 켜고 싶은 비트는 1 나머지는 0 15, 11, 7, 3번 비트 켜기 이전 상태와는 상관없이 다른 비트는 건들지 않고 내가 켜고 싶은 비트만 1로 만듭니다. #include int main() { unsigned short num = 23130; // 0x5a5a num |= 0x8888; printf("0x%04x\n", num); return 0; } 결과 2. 특정 비트를 0으로 만들기 &= 연산 사용. 내가 끄고싶은 비트는 0 나머지는 1. 혹은 내가 .. 2022. 5. 21.
[ 아두이노 ] 풀업저항 , 풀다운저항 달아서 버튼 ( 스위치 )누르면 불켜지는 회로 구성하기 다리가 4개인 버튼을 사용해서 스위치를 누르면 불이 켜지고 누르지 않았을 때는 불이 꺼지도록 해보겠습니다. 플로팅 현상 위 사진처럼 회로를 구성했을 때 버튼을 누르지 않았을 땐 2번핀에 0이 입력되고 눌렀을 땐 1이 입력된다고 생각하기 쉬운데 실제로는 그렇지 않다. 스위치가 눌러졌을 땐 5V가 맞지만 열려있을 땐 주변 디지털 입출력핀에 영향을 받아 1일 수도있고 0일 수도 있는 부유하는 플로팅 상태이다. 그래서 버튼을 눌러도 내 의도대로 실행되지않는다고 느낄것이다. 스위치 사용한건 아래와 같은 다리가 4개인 버튼이다. 각각 위아래 다리가 연결되어 있고 오른쪽 왼쪽은 스위치로 떨어져있다. 버튼을 눌렀을 때 4개의 다리가 모두 연결된다. 다리가 2개인 버튼도 같은방식으로 사용 가능하다. 풀다운저항 소스코드 .. 2022. 5. 21.
STM32 , 4비트 병렬 가산기( IC 7483 ) 소스코드로 구현 ( 호환보드 사용 ) 호환보드에 대한 설명은 아래 링크에 있습니다. https://eteo.tistory.com/65 호환보드에서 버튼 4개(PG0-PG3)을 사용했고 가산기의 Sum을 표현하는데 LED 4개(PD4-PD7)를 사용하고 Carry-Out을 표현하는데 LED 1개(PD2)해서 총 LED 5개를 사용했다. 그리고 F-M점퍼선으로 따로 선을 빼서 버튼 4개(PE6-PE3)를 더 추가하였고 Carry-In 역할을 하는 input으로 PC8을 사용했다. 참고로 버튼은 호환보드의 버튼이 풀업으로 되어 있어서 따로 뺀 버튼 또한 마찬가지로 풀업으로 구성했다. 소스코드 /* USER CODE BEGIN WHILE */ while (1) { ttl74138(); /* USER CODE END WHILE */ /* USER C.. 2022. 5. 20.
STM32 , IC 74138 디코더 소스코드로 구현하기 ( Nucleo-144용 I/O 호환보드 사용 ) 결과물 다음과 같이 74138을 3x8디코더로 사용했을 때의 기능을 STM32보드 사용해 소스코드로 구현하기. 주의할 것은 디코더의 출력이 Active low라 default가 high고 해당되는 핀만 low신호가 나간다. 사용의 편리를 위해 Nucleo-144용 I/O 호환보드를 사용하였다. 출처 : https://cafe.naver.com/cortexworld/948 Nucleo-144용 I/O 보드 대한민국 모임의 시작, 네이버 카페 cafe.naver.com LED1~LED8 은 PD0~PD7 포트를 사용하고 SW1~SW4 는 PG0~PG3 포트를 사용하고 있다. 주의할 것은 이미 호환보드에서 사용하려고 reserved 된 포트가 있어서 내가 추가로 빼려면 겹치지 않게 잘 골라야한다. 아쉽게도 호.. 2022. 5. 20.
STM32 레지스터 직접 접근해서 LED를 이용한 카운터, 7 segment FND 출력 제어하기 먼저 PC8, 9, 10, 11 핀을 output 모드로 사용해 0x0-0xF 까지의 카운터를 구현하였고, PD0, 1, 2, 3, 4, 5, 6 핀을 output 모드로 사용해 FND에 0-9까지의 숫자를 출력하였다. 참고로 핀을 선택할때 내가 한 것처럼 이어진 핀을 선택해야 나중에 코드짜기가 쉽다. 그리고 아무리 MODER 에 원하는 값을 대입해도 현재 해당 GPIOx 핀이 MX 툴에서 활성화된게 아무것도 없으면 모드 설정이 안되더라.. 아마 MX_GPIO_Init(); 함수 내에 설정이 안되서 그런거 같은데 MODER은 MX툴 쓰는게 편한거 같다. unsigned char 배열을 사용해 0x0부터 0xF까지의 숫자를 미리 넣어주었다. /* USER CODE BEGIN 2 */ GPIOC->MODER.. 2022. 5. 19.
STM32CubeIDE , 디지털 논리회로 , 게이트 소스코드로 구현하기 AND / OR / NOT / NAND / NOR / XOR / XNOR GATE PFP 안에는 함수의 원형을 선언해둔다. /* USER CODE BEGIN PFP */ GPIO_PinState and(GPIO_PinState input1, GPIO_PinState input2); GPIO_PinState not(GPIO_PinState input); GPIO_PinState or(GPIO_PinState input1, GPIO_PinState input2); GPIO_PinState nand(GPIO_PinState input1, GPIO_PinState input2); GPIO_PinState nor(GPIO_PinState input1, GPIO_PinState input2); GPIO_PinState xor(GPIO_PinState input1, GPIO_PinState inp.. 2022. 5. 19.
STM32 레지스터에 접근해 GPIO 제어하기 보드명 : STM32F429ZI 직접 메모리를 들여다보고 레지스터에 접근해 출력을 제어해보도록 하겠다. 이전 게시글의 코드를 그대로 사용한다. 2022.05.19 - [MCU/STM32 (ARM Cortex-M)] - [STM32CubeIDE] STM32 개발보드 GPIO 제어하기 (by MCU/MPU Selector) [STM32CubeIDE] STM32 개발보드 GPIO 제어하기 (by MCU/MPU Selector) 보드명 : STM32F429ZI 개인 참고용 자료입니다. 새 프로젝트 생성 보드선택 프로젝트명 짓고 생성 프로젝트 매니저에서 다음 체크 주변장치 별로 소스파일, 헤더파일을 따로 생성해준다. RCC (Reset and eteo.tistory.com 아래와 같이 파란선에서 원하는 위치에 중.. 2022. 5. 19.
STM32CubeIDE ] STM32 개발보드 GPIO 제어하기 ( by MCU/MPU Selector ) 보드명 : STM32F429ZI 개인 참고용 자료입니다. 새 프로젝트 생성 보드선택 프로젝트명 짓고 생성 프로젝트 매니저에서 다음 체크 주변장치 별로 소스파일, 헤더파일을 따로 생성해준다. RCC (Reset and Clock Configuration) 을 수정 Debug는 Serial Wire로 설정 이 보도는 ST-Link/V2 가 보드에 포함되어 있어 외부에 별도 장비를 연결할 필요 없이 보드에 usb를 연결해서 디버깅할 수 있다. 타이머 설정 이더넷과 USB_OTG_FS는 disable 되어있는지 확인 클락 다음과 같이 설정 Clock은 External / Internal, Low speed / High Speed 에 따라 LSE, LSI, HSE, HSI 로 구분할 수 있다. LSE (32.76.. 2022. 5. 19.
C언어 ] 프로그래머스 Lv. 1 - 핸드폰 번호 가리기 문제 설명 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 phone_number는 길이 4 이상, 20이하인 문자열입니다. 입출력 예 phone_number return "01033334444" "*******4444" "027778888" "*****8888" 나의 풀이 #include #include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. char* solution(cons.. 2022. 5. 17.
C언어 ] 프로그래머스 Lv. 1 - 자연수 뒤집어 배열로 만들기 문제 설명 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 n return 12345 [5,4,3,2,1] 나의 풀이 #include #include #include int* solution(long long n) { // 리턴할 값은 메모리를 동적 할당해주세요. long long copyn=n; int count=0; while(copyn>0){ copyn=copyn/10; count++; } int div=10; int* answer = (int*)malloc(sizeof(int)*count); for(int i=0;i 0) { answ.. 2022. 5. 17.
[ 아두이노 ] 핸드 제스처로 RC카 제어 ( 9축 기울기센서 , 블루투스 모듈 사용 ) 프로젝트 인원 : 2인 소요기간 : 4일 준비물 아두이노 2개 모터드라이버 L298N DC모터 4개, 차체 프레임 타이어 등 (알리익스프레스 구입) 9V & 1.5V AA 건전지 & 3.7V 2000mah 리튬이온배터리 HC-06 블루투스 모듈(슬레이브) HC-05 블루투스 모듈(마스터) mpu9250 9축 기울기센서 모듈 회로도 1 RC카 제어를 위한 데이터를 송신하는 부분 (Master) 1.5V 건전지 4개를 직렬로 연결한 배터리 홀더를 사용해 아두이노의 vin에 전원을 공급한다. 자이로 센서로 측정한 데이터를 i2c통신을 통해 읽어와서 실시간 핸드 무브먼트를 확인한다. AT명령어로 마스터 모드로 설정한 HC-05 블루투스모듈을 통해 현재의 핸드 제스처에 따라 RC카 컨트롤을 위한 데이터를 슬레이브.. 2022. 5. 17.
C언어 ] 프로그래머스 Lv. 1 - 내적 문제 설명 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이) 제한사항 a, b의 길이는 1 이상 1,000 이하입니다. a, b의 모든 수는 -1,000 이상 1,000 이하입니다. 입출력 예 a b result [1,2,3,4] [-3,-1,0,2] 3 [-1,0,1] [1,0,-1] -2 #include #include #include // a_len은 배열 a의 길이입니다. // b_len은 배열 b의 길이입니다. int solution(int a[], size_t a_l.. 2022. 5. 17.
C언어 ] 프로그래머스 Lv. 1 - 나머지가 1이 되는 수 찾기 문제 설명 자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다. 제한사항 3 ≤ n ≤ 1,000,000 입출력 예 n result 10 3 12 11 #include #include #include int solution(int n) { for(int i=1;i 2022. 5. 17.
C언어 ] 프로그래머스 Lv. 1 - 두 정수 사이의 합 문제 설명 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요. a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다. a와 b의 대소관계는 정해져있지 않습니다. 입출력 예 a b return 3 5 12 3 3 3 5 3 12 #include #include #include long long solution(int a, int b) { long long answer = 0; if(a==b) return a; if(a 2022. 5. 17.
C언어 ] 프로그래머스 Lv. 1 - 없는 숫자 더하기 문제 설명 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 1 ≤ numbers의 길이 ≤ 9 0 ≤ numbers의 모든 원소 ≤ 9 numbers의 모든 원소는 서로 다릅니다. 입출력 예 numbers result [1,2,3,4,6,7,8,0] 14 [5,8,4,0,6,7,9] 6 #include #include #include // numbers_len은 배열 numbers의 길이입니다. int solution(int numbers[], size_t numbers_len) { int answer = 45; for(.. 2022. 5. 17.
STM32CubeIDE 다운로드 받고 새 프로젝트 만들기 아래 사이트에 가서 원하는 버전 다운로드를 신청한다. https://www.st.com/en/development-tools/stm32cubeide.html STM32CubeIDE - STMicroelectronics STM32CubeIDE - Integrated Development Environment for STM32, STM32CubeIDE-RPM, STM32CubeIDE-Lnx, STM32CubeIDE-Win, STM32CubeIDE-DEB, STM32CubeIDE-Mac, STMicroelectronics www.st.com 이름과 메일주소를 입력하면 다운로드 링크가 메일로 온다. 압축을 해제하고 실행하여 설치한다. 새 프로젝트 만들기 보드를 선택하고 next를 눌러 프로젝트명을 입력하고 프로.. 2022. 5. 16.
[ 라즈베리 파이 ] Raspberry Pi 3 B OS ( 라즈비안 ) 설치하고 초기설정하기 ( 데비안 리눅스 기반 ) 준비물 : 라즈베리파이 어댑터 (5V/3A) 5핀 마이크로 sd카드 카드리더기 hdmi선 키보드, 마우스, 모니터 1. 라즈베리파이 이미저 다운받아서 sd카드에 부팅 이미지 굽기 https://www.raspberrypi.com/software/ 마이크로 sd카드를 sd카드 리더기에 꼽고 pc에 인식시킨다. 라즈베리파이 이미저 실행 후 운영체제 선택 저장소로 sd카드 선택 쓰기 클릭 2. OS설치 및 부팅 라즈베리파이 뒷면에 SD카드 꼽고 어댑터, 모니터, 마우스, 키보드 연결 바로 OS 설치화면이 뜬다. 와이파이 설정은 나중에 해도 된다. Update Software는 언어팩받고 패키지 업데이트 하느라 한참 걸린다. 재시작하면 GUI 첫화면을 볼 수 있다. 메뉴가 영어로 된 것이 더 편할 것 같아서 P.. 2022. 5. 16.
디지털 시계 만들기, IC 7404 / 4020 / 7490 / 7492 / 7447 / 7410 시계가 잘 작동하는지 확인하기 위해 빨리 카운트 되게끔 세팅해놓고 찍었다. 디지털 시계의 전체 회로도 구성 발진회로 → 분주회로 → 카운터회로 → 디코더회로 → 표시회로 1. 발진회로 7404 칩과 0.01μF 커패시터, 100K옴 가변저항 하나씩을 사용하였다. 가변저항(Potentiometer)은 3개의 핀이 있는데 양쪽 핀을 쓰면 최대 저항을 고정적으로 쓸 수 있고 가운데 핀과 어느 한 쪽 핀을 쓰면 드라이버나 손으로 돌려서 저항값을 조절할 수있다. 일반저항과 같이 극성이 없고 멀티미터로 와이퍼를 조절한 현재상태의 저항 수치를 측정할 수 있다. 가변저항의 원리 2. 분주회로 4020 칩을 사용하였다. 4020의 핀 배치도 4020칩은 14 bit binary ripple(비동기식) 카운터인데 Freq.. 2022. 5. 15.
IC 7476 , JK 플립플롭 , NOT 게이트를 이용한 무안정 멀티바이브레이터 , 인코더 / 디코더 등 용어정리 1. IC 7467, JK 플립플롭 하강에지 트리거로 작동한다. J(Set)이 1 K이 0일 때 Q를 1로 만들고 J가 0이고, K(Reset)가 1일때 Q를 0으로 만든다. JK가 둘다 0이면 이전상태에서 불변이고, JK가 둘다 1일 때는 Toggle(반전)이 된다. 프리셋과 클리어 기능을 사용하지 않을 땐 high, high 신호를 주고 프리셋이 low일땐 Q를 1로 만들고 클리어가 1일땐 Q를 0으로 만든다. 2. NOT 게이트를 이용한 무안정 멀티바이브레이터 인버터(NOT게이트) 3개와 커패시터, 저항으로 구성한 무안정 MV 회로이다. (위)A지점과 (아래)B지점의 파형 예상 A지점에서는 커패시터와 저항을 통해 충전과 방전을 반복한다. 점차 방전되어 첫번째 게이트 1번 입력에 low 신호를 주기 .. 2022. 5. 15.
디코더 IC 7442 / 74138 / 7447 , BCD to 7segment decoder & 7seg LED ( FND ) 제어 (+ BCD란) 1. 7442, BCD to Decimal Decoderactive low output   2. 7447, BCD to 7-Segment Decoder 와 FNDLamp test, BI/RBO, RBI는 active low라서 사용 안할 땐 HIGH(5V)입력을 주면 된다. Lamp test는 모든 불이 잘 들어오는지 확인할 때 쓴다. output은 active low         FND(Flexible Numeric Display)는 애노드(+)타입 캐소드(-)타입이 있는데애노드 타입은 COM(공통단자)에는 5V를 입력하고 원하는 단자에 low 신호를 줘서 led를 켜는 타입이고캐소드 타입은 COM(공통단자)에 GND를 입력하고 원하는 단자에 high 신호를 줘서 led를 켜는 타입이다. 실습에는 애.. 2022. 5. 14.
IC 74 시리즈 AND / OR / NOT / XOR 게이트, 전가산기 / 반가산기 구현 , 4 bit binary Adder Subtractor 1. IC 7408의 AND게이트 IC7408 핀배치도 실습시 input에는 아무것도 안꽂고 output에만 선을 꽂아도 불이 들어왔는데 이는 플로팅현상으로 인한 것으로 주변 노이즈에 의해 불이 들어올 수 도 있고 안들어 올 수도 있다. 그러니 반드시 input 에 1 또는 0의 값을 넣어줘야 정확한 결과를 확인 가능하다. 또한 330옴 저항을 사용하였는데 high level output voltage가 3.4V인 것을 감안하면 더 낮은 저항을 써도 될 것 같다. 2. IC 7432의 OR게이트 IC 7432 핀배치도 3. IC 7408, 7486, 7432 (AND/XOR/OR) 사용 전가산기 구현 IC 7486 (XOR 게이트) 핀 배치도와 truth table input으로 A, B, carry-i.. 2022. 5. 11.
저항의 직렬 / 병렬 연결시 합성 저항 계산 저항의 직렬 연결직렬로 연결된 저항의 합성 저항은 각 저항을 더한 값이다.   저항의 병렬 연결병렬로 연결된 저항의 합성 저항은 각 저항의 역수의 합의 역수이다.두개의 저항 R1, R2가 병렬로 연결된 경우에는 합성 저항을 다음과 같이 계산할 수 있다.      병렬 및 직렬 저항기 계산기 (디지키):https://www.digikey.kr/ko/resources/conversion-calculators/conversion-calculator-parallel-and-series-resistor 2022. 5. 11.
NodeMCU 를 Arduino IDE에서 사용하기 위한 환경 설정 방법 아두이노 IDE를 설치하고 보드를 사용하려면 "툴"에서 사용할 보드와 포트를 선택해야 하는데 처음 설치 상태에서는 NodeMCU 보드가 보이지 않는다. 그래서 먼저 보드 매니저를 통해 등록을 진행한다. 1. IDE-파일-환경설정 2. 추가적인 보드 매니저 URLs에 아래 링크 입력 후 확인 http://arduino.esp8266.com/stable/package_esp8266com_index.json 3. 툴-보드-보드매니저, esp8266 선택 후 설치 4. 툴-보드-ESP8266에서 NodeMCU 1.0을 선택 5. 툴-포트 선택 만약 어떤 포트인지 모르겠다면 장치 관리자 보면서 포트를 꼽았다 빼면 된다. 혹시 포트 인식이 안된다면 usb 드라이버를 다운받아 설치해주면 된다. 본인의 nodeMCU가.. 2022. 5. 4.
[ C언어 ] 프로젝트 : 이중 연결 리스트로 구현한 도서 관리 프로그램 - (6) - 링크드 리스트와 삽입 정렬 , 함수포인터 , 노드 삭제 , 메모리 할당 해제 이어서 이중 연결 리스트로 구현한 도서 관리 프로그램의 노드 삭제, 삽입정렬, 메모리 할당해제 기능 등을 소개한다. 2022.05.02 - [Language/C] - [C언어] 프로젝트 : 이중 연결 리스트로 구현한 도서 관리 프로그램 - (5) - 링크드 리스트와 파일 입출력, 노드 추가 깃허브 주소 : https://github.com/joeteo/BookManager_C GitHub - joeteo/BookManager_C: Book Mangager program in C Book Mangager program in C. Contribute to joeteo/BookManager_C development by creating an account on GitHub. github.com void del.. 2022. 5. 3.
[ C언어 ] 프로젝트 : 이중 연결 리스트로 구현한 도서 관리 프로그램 - (5) - 링크드 리스트와 파일 입출력 , 노드 추가 도서 관리 프로그램 개선 5탄이자 마지막. 자료구조를 기존의 배열에서 이중 연결 리스트(Doubly Linked List)로 바꾸었다. 2022.04.25 - [Language/C] - [C언어] 프로젝트(삽질일기) : 도서 관리 프로그램 - (4) - 파일 입출력 - fopen/fopen_s, .bin 바이너리 파일 읽기/쓰기 이건 개선이라기보다 거의 새로 짜는거에 가까웠다..프로젝트 처음 시작할때 자료구조를 먼저 결정하고 ADT를 정의하는 것의 중요성을 체감한다. 참고로 이중 연결 리스트는 헤드/테일 더미노드가 있고 꼬리쪽에 삽입하는 버전이다. 사실 처음에는 진짜 제일 간단한 단순 연결 리스트(Single Linked List)로 구현하려고 했었는데 여기까지 온 이유가 있다. 내가 프로그램을 만들면서.. 2022. 5. 2.
[ Visual Studio ] CRT 라이브러리로 메모리 누수 탐지하기 Visual Studio에서 CRT 라이브러리를 사용해 메모리 누수 탐지하는 방법 1. 소스 상단에 아래 지시문을 포함한다. #define _CRTDBG_MAP_ALLOC #include #include 2. 종료지점 직전에 아래 코드를 추가한다. _CrtDumpMemoryLeaks(); 3. F5를 눌러 디버그 모드로 실행 후 종료한다. 테스트를 위해 어떤 함수안의 free를 주석처리하고 디버그 모드로 실행한 뒤 그 함수를 호출하고 종료해보았다. 아래와 같이 메모리 누수가 감지되었다고 뜬다. 나는 테스트해본거라 어느위치에서 누수가 된건지 알고있지만 모르겠다면 4. 메인함수 안쪽 상단에 아래 코드를 넣고 매개변수로는 위에서 본 번호인 111을 넣은 뒤 디버그 모드로 다시 실행한다. _CrtSetBreak.. 2022. 5. 2.