【 C 언어 】 #34 변수의 메모리 번지 이해하기

Language/C & C++ 2018. 4. 17. 10:44 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #34 변수의 메모리 번지(주소) 이해하기



 변수가 정의 될 때는 변수 값을 저장할 메모리 공간(정수형 변수는 4바이트)을 확보하고 그 주소를 지정(기억)하게 된다.  프로그래밍이 처리 되는 과정에서 데이터가 저장된 메모리의 번지를 이용해서 값을 불러오거나 처리할 수 있게 된다. 


▶ 문제  : 변수 i =0 와 j =1 를 선언하고 초기값 0과 1을 준다. 각 변수가 지정된 메모리 번지를 출력하라.


▶ 포인트 

  printf() 함수를 이용해서 메모리 번지를 출력 할 수 있으며, (정수형)값을 나타내는 %d 대신 %p 를 사용하며, 변수의 메모리 번지를 넘겨주기 위한 '번지 지정 연산자(&)'를 사용하면 번지를 출력할 수 있다. 



▶ 프로그램 : 




▶ 실행 결과 :



▶ 보충설명 :


j는 0062FE48~0062FE4B ,  4바이트의 메모리 공간으로 지정 되어 있으며 시작번지가 0062FE48 이다.  여기에 데이터 1의 값이 저장되어 있다.


i는 0062FE4C~0062FE4F ,  4바이트의 메모리 공간으로 지정 되어 있으며 시작번지가 0062FE4C 이다.  여기에 데이터 0의 값이 저장되어 있다.


아래 변수와 메모리와의 관계 도표를 보면 쉽게 이해가 갈 것이다.



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  



반응형
반응형

【 C 언어 】 #29-조건-순환문II (do while continue break)-이해하기


 단순 while문과 do while 문의 차이는 반복 실행 구간과 조건문을 분리한 것이 다르며, do-while 문과 while-do 문의 차이는 먼저 실행후 조건을 비교하는 것과 먼저 비교후 실행하는 것의 미묘한 차이가 있다. 따라서 프로그램의 상황에 맞는 형태로 프로그래밍 하면 된다.


▶ 문제 1  앞글에서 학습한 1부터 10까지 더하는 문제를 조건 순환문을 do(실행)~ while(조건)을 이용하여 작성하라.  

 

▶ 포인트 


 반복 조건으로 1 <= 10 까지만 반복하도록 한다.   증가 명령어로 i++; 을 사용


▶ 프로그램 : 




▶ 실행 결과 :





+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


▶ 문제 2 :  1부터 10까지 더하는 문제를 조건 순환문을 while(조건) 비교후 do(실행)~ 을 이용하여 작성하라.  

 

▶ 포인트 


  while 문을 조건 문 앞으로 배치하면 된다.  실행결과는 위와 동일하다.  다만 프로그램에 따라서 do while 문의 앞뒤 순서를 달리함으로서 미묘하게 달라질 수 있다.


▶ 프로그램 : 





▶ 실행 결과 :





▶ 소스코드 다운로드 :  


29 조건 순환문II (do while continue break)이해하기-문제.cpp


반응형
반응형

아두이노 기초 】 #04 밝기 (Fade IN / OUT) 제어 실험하기

 

 아두이노의 11번 포트와 GND포트에 LED를 직접 꽂고 Digital PWM 출력기능이 있는 digital 포트를 이용해 LED의 밝기를 조절 하는 회로를 구성한다. 

 동작 : 차츰 밝아 졌다가-Faid in, 다시 조금씩 어두워지도록-Faid out 한다)

 

 

 

▶ 실행(동작) 영상 :

 

Fade.ino
다운로드

# 아두이노 기초

반응형
반응형

【 아두이노 기초 】#03 LED ON / OFF 제어 실험하기

 

《 아두이노 보드 구조 》
아두이노를 가지고 본격적인 제어를 하기전에 먼저 보드 구조에 대해 설명 드립니다.

아두이노 핀 아웃

  아두이노는 위 이미지처럼 각각의 역할을 하는 핀(포트,port)으로 구성되어 있습니다. 전원을 연결하는 핀도 있고,
아날로그 신호(0V~5V) 입력 핀과 디지털 신호(0V 또는 5V)를 입력하거나 출력할 수 있는 핀으로 구성되어 있습니다.

 핀을 포트(port)라고도 부르는데요, 영어로 항구라는 뜻이며, 항구로 배가 들어오거나 나가듯 신호가 들어오고 나가기 때문에 핀을 포트(port)라고도 부릅니다.
 아두이노에서는 코딩을 통해 이런 포트로 신호(전압과 전류)를 출력 시켜 LED를 켜거나 끌 수 있게 됩니다. '아날로그 In핀'은 아날로그 값인 0V에서 5V 사이의 값을 입력받아 처리하는 핀으로 입력만 가능한 핀이며, '디지털 In/Out핀'은 0V 아니면 5V 두 개의 값을 입력하거나 출력이 가능한 핀입니다. 
  그리고 모든 신호는 각 포트에서 나와서 GND(그라운드, 또는 - 마이너스) 로 흘러 들어가게 연결되어야 합니다.  
( 마치, 건전지를 사용할 때, +에서 나온 전기가 전구나 회로를 거쳐 -로 연결되는 구조와 같습니다 )  
따라서 LED 연결을 예로 들면,   전기가 들어가야하는 LED의 + 리드선(다리)과  빠져나가는 - 리드선이 있는데,   +리드선을 아두이노의 신호가 나오는 포트에 연결하고, -리드선을 아두이노의 GND로 연결해주게 됩니다. 

LED의 +리드선과 -리드선

  따라서 기본적으로 아두이노에서 제어하는 형태는, 아날로그 핀으로 들어오는 신호(전압)를 가지고 디지털 핀으로 어떤 다른 신호를 입력 받거나 출력하게 되는 구조이며, 또는 여러개의 디지털 핀중에서 특정 디지털 핀으로 들어오는 신호를 가지고 판단해서(코드의 if문 등으로) 다른 디지털 핀으로 LED를 켜거나 하는 등의 출력을 내보낼 수 있는 형태로 제어하게 됩니다.

  참고로, 아두이노는 코딩과 같은 소프트웨어의 개념과 전압/전류/전기신호/전자부품의 이해와 같은 하드웨어적인 부분을 함께 이해해야 제어할 수 있기 때문에, 현재 설명드린 의미를 처음부터 완전하게 이해하기는 쉽지 않을 거예요. 따라서, 우선 설명을 듣고 완전히 이해하지 못하더라도 다음 실습으로 안내를 따라 계속 진행해보세요.

  이런 실습들이 계속 경험으로 쌓이다보면, 이전에 이해되지 못하던 부분이 다른 부분에서 퍼즐 맞추어지듯 종합적으로 이해되기 시작할 거예요. 그러니, 초반에 어렵거나 이해못하고 넘어가는 부분에 대해 염려하지 말고, 자신감을 가지고 시작해 보세요.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 13번 포트와 GND가 인접해 있기 때문에 아래 처럼 연결하면  브레드 보드를 이용 하지 않고 손 쉽게 LED를 동작 시켜 볼 수 있다.  

 

 

▶ 실습 방법 : LED 를 위 그림과 같이 연결하여 아래 프로그램에 의해 1초 마다 ON / OFF 동작을 하도록 실습해 본다. 

 

 주의 :  LED 극성에 주의, LED의 +단자(보통 긴 다리)를 13번 포트에 연결하고 -단자를 GND에 연결하여야 한다.  본래 전자회로에서 LED를 순방향 연결하여 켤 경우 직렬로 적당량의 저항(100Ω ~ 500) 저항을 연결하여야 LED 및 회로가 보호된다.  그러나 아두이노의 경우 손상이 가지 않도록 포트내부적으로 처리 되어 있기에 LED 하나 정도 직결 하여 간단히 실험하기에는 크게 문제가 없다. 

 

 

▶ 포인트 : 브레드 보드를 이용하지 않고 저항 연결 없이 그리처럼 GND와 인접한 13번, 12번, 11번 포트 등을 이용하면 된다. 

 

 

▶ 프로그램 : 

 

const int LED = 13;   // LED 는 디지털핀이라 선언
 
void setup() {
pinMode(LED, OUTPUT); // LED출력핀으로 설정
}
 
void loop() {
repeatedly:
  digitalWrite(LED, HIGH); // LED를 켠다
  delay(1000);               //  1초 동안 대기
  digitalWrite(LED, LOW); //  LED를 끈다
  delay(1000);        //  1초 동안 대기

 

}

 

▶ 스케치 프로그램 사용법 :

 

스케치 화면을 처음 실행 시키면 아래와 같은 화면이 실행 되고, 크게 setup() 함수 영역과 loop() 함수 영역으로 나뉜다.  사용할 함수를 선언하거나, 기본적인 셋팅 사항을 setup() 영역에 입력하고, 실제로 반복루프 형태로 처리되어 실행되어야 할 내용들은 모두 loop() 영역에 입력하면 된다.

 

 

 

 스케치 프로그래밍은 C프로그래밍 베이스라고 보면 되는데, C프로그램 작성시 비교적 간단한 프로그램도 디버깅(실행 에러 잡기)으로 인해 몇 일을 헤메는 경우가 많았던 C프로그램과 달리 스케치 프로그래밍은 매우 쉽다. 기존 C 프로그래밍에서 해줘야 했던 세세한 설정이나, 메모리 번지 지정, 자질 구레한 설정들을 내장 함수 및 라이브러리 형태로 대부분 제작되어 있기 때문에 사용자는 프로그램 동작과 직결되는 핵심 구문만 프로그래밍 하면 쉽게 동작이 되도록 하였다. 이런 라이브러리 또한 오픈 소스 형태로 되어 있어, 전세계의 아마추어 및 전문 프로그래머에 의해 지금도 업데이트 되고 있다.    

 

 프로그래밍을 실행 시키기 전 반드시 해야 할 것이 있다. 

아래 처럼 아두이노 보드를 PC의 USB 포트에 연결하고서 보드 설정(아두이노 우노 일 경우 → "Arduino/Genuino Uno") 과  포트 설정을 올바르게 선택해주어야 한다. 

 연결 포트는 PC가 달라지거나 아두이노 보드가 바뀌면 달라질 수 있다.  일반적으로 (Arduino/Genuino Uno) 라고 표시가 되어 있는 포트를 선택하면 된다. 

 아두이노 나노의 경우 이런 표시가 없는데, 보통 com1, com2 이 외 하나의 포트가 나타나고 이를 선택하면 문제가 없다. 

 또한 매번 설정을 할 필요는 없는데, 동일한 연결을 다시 시도하게 되면 이후에는 자동으로 선택이 되어져 있어 별다른 선택을 할 필요가 없다. 

 

 

 

↓ 아두이노 동작을 위해서는 프로그램을 코딩하고 코딩된 내용을 컴파일 및 아두이노 보드로 업로도 하여야 한다.  

 

 

프로그램 메뉴 이외에 별도의 컴파일 과 컴파일&업로드 버튼이 있으니 간편하게 실행시킬 수 있다. 

 

↓ 아래 처럼 코딩하고 나서 저장 및 업로드 버튼을 눌러 저장해주고 

컴파일 버튼과 업로드 버튼을 눌러 주면 된다. 

(업로드 버튼은 컴파일 과정을 포함한다)

 

 (단축키) 

스케치 메뉴의 컴파일(Ctrl+R) & 업로드(Ctrl+U)  

 

 

 

▶ 실행 결과(영상) :

 

  

 

 

13 포트 바로 아래에 칩 형태의 내장된 LED가 있는데, 13번 포트에 연결된 LED와 같은 동작을 한다고 보면 된다. ↓

 

반응형
반응형

  #26 중첩 순환문 이용하여 구구단 출력하기


  중첩 순환문을 이용하여 간단하게 구구단을 출력하는 코딩연습을 해본다. 

구구단을 위한 주요 알고리즘을 먼저 작성하고 단표시나 구분 등의 치장을 하는 순서로 작성하라.


▶ 문제 : 1단~9단 까지의 구구단을 완성하고 구구단 사이에 ------ 1 단 ------ ...  와 같은 구분기호를 넣어 작성하라.


▶ 포인트 바깥 쪽 순환문(i)은 1단~9단 까지의 앞자리를 나타내고 안쪽 순환문 (j)는 1~9까지의 두 번째 배수를 채워 주는 순환문의 역활을 한다.



▶ 프로그램 : 






▶ 실행 결과 :




▶ 소스코드 다운로드 :  


26 중첩 순환문 이해하기.cpp






반응형
반응형

【 라즈베리파이 】 #03 RaspberryPi OS 부팅 

먼저,  라즈비안을 처음 설치하게 되면, Local 지역,  Timezone 설정, WiFi Country(지역) 설정과 같은 메뉴가 자동으로 뜨는데요,  영국으로 되어 있는 기본설정으로 놓고 창 닫기를 눌러 우선 넘어가야 합니다.  
한글 폰트가 설치 되지 않은 상태에서 Local 지역을 Korea로 변경할 경우 경우 아래처럼 메뉴가 깨져 나와 어떤 메뉴인지 구분하기 어려워집니다.

 

• 그럼, 아래 처럼 라즈비안으로 부팅이 되면, 다음 순서로 진행합니다. 
네트워크 설정을 가장 먼저해야하는 이유는 인터넷이 되어야 필요한 설치파일을 다운로드 받아 설치 및 업데이트 등을 진행할 수 있기 때문입니다. 

네트웍설정 → ②라즈비안 update /upgrade ③ 한글폰트 설치 → ④ 한글 입력기 설치 → 한글자판 및 표준시간설정 → ⑤ LAN/블루투스 동글 등 설치

 

아래 처럼 라즈비안 우측 상단에 있는 네트웍 연결 기호를 마우스 
우클릭 한 다음, Wireless & Wired Network Settings를 클릭 하면 
그 아래 그림과 같은 설정 창이 나타난다

 

 

 

• 가정에서는 유동(다이나믹) IP를 사용하는 경우가 대부분 이다

 

 

 

DNS 서버 주소는 위와 같이 대표 서버 중 하나를 사용한다. 

( 168.126.63.1 ) Search 주소는 168.126.63.1 서버로의 접속이 잘 되

지 않을 경우 세컨 서버로 연결시키기 위한 주소이며 168.126.63.2 

주소를 사용하면 된다. 

터미널(Terminal) 창을 통해 IP를 확인 한다(명령어 : ifconfig)

 ( ipconfig가 아닌 ifconfig 임에 유의 )

 

 

위와 같이 네트웍이 연결된 정보를 확인 할 수 있다.  만약, 제대로 설정하였음에도 불구하고 네트웍 연결이 되지 않을 경우에는 리부팅후 다시 시도해보고, 네트웍 케이블 접속도 확인 해보기 바란다.

 

 

위와 같이 웹브라우저를 통해 인터넷이 가능하다.  

다만 한글 폰트가 깨져 나오기 때문에 다음 글에서 이 문제를 해결하기 위한 한글 폰트 설치를 진행해 볼 예정이다.

반응형
반응형

※  #25 중첩(다단) 조건문과 scanf 사용 이해하기


  조건문인 if... else 구문을 중첩해서 사용하면 다양한 조건에  수 대응 할 수 있는 프로그래밍을 코딩할 수 있고 scanf 를 이용하여 숫자를 입력 받아 처리 할 수 있다. 


▶ 문제 : 정수형으로 X값을 7로 설정하고 1~10의 값을 입력받도록 한다. 입력 받은 값과 X값을 비교하여 큰 경우, 작은 경우, 같은 경우(정답)를 각각 중첩 if 문을 통해 출력하도록 한다. 


▶ 포인트 


int x = 7,   int a   if 문과 else if 문으로 구성,  한 줄 printf문으로 끝날 경우 중괄호는 생략할 수 있음.



▶ 프로그램 : 





▶ 실행 결과 :





▶ 소스코드 다운로드 :  


25 중첩 조건문과 scanf문 이해하기.cpp





반응형

【 C 언어 】#24 sizeof 연산자 이해하기

Language/C & C++ 2018. 3. 16. 17:03 Posted by 엑소더스팩토리
반응형

※  24 sizeof 연산자 이해하기


  변수 또는 문자열이 차지하는 메모리의 크기를 알수 있는 연산자가 바로 sizeof 연산자 이다.


▶ 문제 : char, int, double 형이 찾이 하는 메모리 크기를 i, j, k 변수를 지정하여 구하라.  sizeof 연산자 사용


▶ 포인트 


char i;  int j; double k; 를 선언하여 sizeof() 연산함수를 이용해 구한다. 



▶ 프로그램 : 




▶ 실행 결과 :



▶ 소스코드 다운로드 :  

24 sizeof 연산자 이해하기.cpp





반응형

【 C 언어 】#23 캐스트 연산자 이해하기

Language/C & C++ 2018. 3. 13. 20:10 Posted by 엑소더스팩토리
반응형

※  23 캐스트 연산자 이해하기 


  정수형을 연산하다보면 실수 값이 나오는 경우가 생긴다. 이 때 데이터 형을 변환해주는 연산자를 사용하면 소숫점 이하 값을 문제 없이 출력할 수 있다.


▶ 문제 : a = 3,  b = 2 를 정수형으로 선언 하고 ,  a 나누기 b 를 수행한 결과 값을 나타 낸후, 캐스트 연산자(double)를 사용하여 소숫점 이하까지 정확히 출력하도록 하라. 


▶ 포인트 


a / b 를 수행하면. 1.5가 출력되어야 하지만, 1이 출력 되다.  캐스트 연산자를 사용하여 소수점 이하까지 모두 출력하도록 해보자. 



▶ 프로그램 : 





▶ 실행 결과 :


▶ 소스코드 다운로드 :  

23 캐스트 연산자 사용하기.cpp




반응형

【 C 언어 】#22 비트 연산자 이해하기

Language/C & C++ 2018. 3. 9. 16:10 Posted by 엑소더스팩토리
반응형

※  22 비트 연산자 이해하기 ( |, &, ~ , ^  , 《, 》 )


  비트 연산자는 2진수를 연산하기 위한 것으로써, 비트 연산자를 이용하여 쉽게 2진수 값(비트)를 바꿀 수 있다. 이를 위해 2진수 , 8진수, 10진수, 16진수 등의 개념에 대해 함께 이해를 하여야 한다.


▶ 문제 : ch= 255, mask =0x7F 값을 가지고 비트 연산자인 &, ~, ^, 》, 《 들을 사용하여 연산된 결과 값을 출력하라. 


▶ 포인트 


10진수와 2진수, 8진수, 16진수와의 관계 


  십진수

 2진수 

 8진수 

 16진수 

 0

  0000 

000 

 1

 0001

001

 2

 0010

002 

 3

 0011

003 

 4

 0100

004 

 5

 0101

005 

 6

 0110

006 

 7

 0111

007 

 8

 1000

010 

 9

 1001

011 

 10

 1010

012 

 11

 1011

013 

 12

 1100

014 

 13

 1101

015 

 14

 1110

016

 15

 1111

017 

 16

10000

020 

10 


 & (AND 연산자) 는 논리곱으로서 두 비트가 모두 1일 때만 결과 값이 1이 되고 나머지는 0이 된다.  ( 특정 비트를 0으로 만들때 유용하게 사용된다)


 ~ (NOT 연산자) 는 부정으로서 0을 1로 , 1을 0으로 논리 값을 반전 시킨다.

^ (베타OR) 는 두 개의 비트가 서로 다른 값일 때만 1이 되고 나머지의 경우에는 모두 0이 된다.  ( ch ^ ch : 같은 값을 ^하기 때문에 무조건 0이 됨으로 ch 값을 0으로 만들 때 많이 사용하는 방법이다)

→ 》 (비트 이동) 는 1비트씩 오른쪽으로 이동 한다. 왼쪽 새로 채워지는 비트는 0이 된다.

 《 (비트 이동) 는 1비트씩 왼쪽으로 이동 한다. 오른쪽 새로 채워지는 비트는 0이 된다. 


▶ 프로그램 : 





▶ 실행 결과 :


▶ 소스코드 다운로드 :  

 21 논리 연산자 이해하기.cpp


반응형