파이썬, 3.6 버전 기준에서그림을 그려보려 한다.

그림은 수직선이 왼쪽에서 오른쪽으로 반복 이동함.

 

1) 그림을 그리기 위한 matplotlib 라이브러리를 다운로드하자.

* 윈도우 커멘드 창에서 : pip install matplotlib

* 다운로드 후 확인해보면, matplotlib-3.0.2 버전을 받음


2) 코드 작성을 한다.

코드는 다음 사이트 에서 좀 수정한 내용입니다. :https://stackoverrun.com/ko/q/12087716

코드 변수명등이 매끄럽지 않네요. 추후 정리 필요할 듯...

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
import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.animation import FuncAnimation 
 
list_var_points = (0123456789101112131415)
 
 
fig, ax = plt.subplots() 
xfixdata, yfixdata = 715 
xdata = 0
ydata = 0
 
# line width
plt.rcParams['lines.linewidth'= 20
# plot의 여백 삭제, 박스를 전체 크기로
plt.subplots_adjust(left=0, bottom=0, right=1, top=1, wspace=0, hspace=0)
ln, = plt.plot('ro-', animated=True)
 
def init(): 
    ax.set_xlim(015
    ax.set_ylim(015
    return ln, 
 
def update(frame): 
    ydata = list_var_points[frame] 
# (시작선x, 끝선x), (시작선y, 끝선y)
    ln.set_data([ydata,ydata], [yfixdata,xdata])    
    return ln,   
 
# ani = FuncAnimation(fig, update, interval=100, frames=range(len(list_var_points)), 
#      init_func=init, blit=True)
ani = FuncAnimation(fig, update, frames=range(len(list_var_points)), 
      init_func=init, blit=True) 
 
plt.show() 
 
cs



< 아래의 파란 선이 왼쪽에서... 오른쪽으로 반복 이동 함>



기타 참고 자료 : 

https://financedata.github.io/posts/faq_matplotlib_default_chart_size.html

https://matplotlib.org/users/customizing.html


추후 애니메이션 효과가 더 필요하다면

game 라이브러리를 사용하는 것이 더 좋지 않을까 함

참고 : http://programarcadegames.com/index.php?chapter=bitmapped_graphics_and_sound 





 


Posted by 고무함지
,

C언어에서...

어떤 기능이 잘 동작하고 있는지 감시하기 위해서 저는 종종 

static 변수를 사용합니다.


그 예를 한번  설명 드립니다.

다음과 같은 코드가 있습니다.  0.2초마다, 온도를 보고, 높은 온도가 되면 냉각 Fan을 돌립니다.

만약... 디버깅을 위해 print를 넣는다면 0.2초마다 프린트문이 나오는데, 

이 너무 빨리 자주  발생되는 디버깅은 ... 시스템을 느리게할 수 있고, 

프린트들이 추가로 더 들어갈 경우... 내용을 보기 매우 어려워집니다.


void main( void )

{

    int temperature =  0;

    while( 1 )

    {

        temperature = GetTemperature();

        if( temperature > 60)  // 온도가 60도를 넘으면, 냉각 Fan을 100 속도로 돌린다.

            SetFanSpeed( 100 ); 

        else  // 60도 이하에선 Fan을 Off ( 0 속도) 로 한다.

            SetFanSpeed( 0 );

        

      delay( 0.2); // 0.2 초 기다리고 다시 동작...

      printf(" Temp:%d \n", temperature);

    }

}


그래서 저는 아래와 같이 static 변수를 사용해서 디버깅을 합니다.

그러면... 보고자 하는 프린트문이... 아주 많이 찍히지 않고,

간간히 찍힙니다. 아래 빨간 내용 참고하세요.

특히나 CPU리소스가 작은 Embedded system에서는 아래와 같이

프린트문이 너무 많이.. 빨리.. 찍히지 않도록 하는 것이 중요합니다.


void main( void )

{

    int temperature =  0;

    while( 1 )

    {

        temperature = GetTemperature();

        if( temperature > 60)  // 온도가 60도를 넘으면, 냉각 Fan을 100 속도로 돌린다.

            SetFanSpeed( 100 ); 

        else  // 60도 이하에선 Fan을 Off ( 0 속도) 로 한다.

            SetFanSpeed( 0 );

        

      delay( 0.2); // 0.2 초 기다리고 다시 동작...

     {

         static int count = 0;

         if( (count%50 ) == 0)   // 0.2 초 * 50 = 10초에 한번 온도값을 본다.

         printf(" Temp:%d \n", temperature);

    count ++; // count 증가

     }

    }

}





Posted by 고무함지
,


오늘은 bit연산과 bit set 자료 구조에 대해 정리한 것을 올려봅니다.

어떤 상태정보를 저장하기 위해서 자료형을 선언해서 사용하는 방법은

C언어에서 당연한 방법이지만, 간단히 On Off 정보를 저장하기 위해서

char형 1byte, int형 4byte를 사용하는 것은 낭비입니다.


C++에서는 bitset class가 있어 이를 사용하면 되지만, 공부를 위해...

직접 만들어 봅니다. 제가 마이컴 코드를 배울 때는 대부분 이런 것들을

매크로로 만들어 사용하곤 했었는데요. 까먹기 전에 다시 정리해봅니다.


int LEDS 변수를 2진수로 하고 각 자릿 수가 LED0 ~ LED7의 on off상태를 

저장하는 것으로 구성한 코드입니다.

LEDS변수의 특정 자리를 OR 연산을 하면 특정 자릿수의 On을 설정할 수 있고,

LEDS변수의 특정 자리를 AND 연산을 하면, Off처리를 할 수 있습니다.


또한 아래의 if문장에서 처럼

And를 활용해서 bit의 상태를 확인할 수 있습니다.

i번째 자릿수의 bit가 on인지 off인지 확인하는 것이지요. 

" if(LEDS & (LED_ON << i)) "

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
#include <stdio.h>
#include <stdlib.h>
 
enum { LED0, LED1, LED2, LED3, LED4, LED5, LED6, LED7 };
enum { LED_OFF, LED_ON };
 
void main() {
    int LEDS = 0
 
// LED1번과 LED7번을 켠다.
    LEDS |= LED_ON << LED1;
    LEDS |= LED_ON << LED7;
 
    for (int i = 0; i < 32; i++) {
        if (LEDS & (LED_ON << i))
            printf("LED#%d ON\n", i);
        else
            printf("LED#%d OFF\n", i);
    }
 
// LED1번을 끈다.
    LEDS &= ~(LED_ON << LED1);    
 
    for (int i = 0; i < 32; i++) {
        if (LEDS & (LED_ON << i))
            printf("LED#%d ON\n", i);
        else
            printf("LED#%d OFF\n", i);
    }
}
 
cs



위의 내용을 논리 회로 형식으로 그려보면 아래와 같이 설명할 수 있습니다.

OR연산을 통해서 1을 OR해주면 켠 것은 그대로고, 꺼진 것은 켜집니다.

AND연산을 통해서 0을 AND해주면 끈 것은 그대로고, 켜진 것은 끕니다.


위의 AND연산에서 아래의 식은 특정 bit가 ON(high) 인지 OFF(low)인지

확인하기 위한 방법으로 사용될 수 있습니다. 확인하고 싶은 bit에 1을 ANd하면 그

bit의 결과만 뽑아볼 수 있지요.


0 & 1 = 0

1 & 1 = 1 

Posted by 고무함지
,

C언어를 공부하는데, 무료로 사용할 만한 프로그램이 많습니다만...

저는 윈도우즈 PC사용자를 위한 무료 툴을 정리해보았습니다.

 

: free C Development SW : 

 

 

1. Turbo C

Turbo C같은 DOS상에서 동작하는 툴을 사용해도 됩니다. 

저는 오랜만에 추억을 되살리고자... 터보C를 다시 한번 깔아봤네요.

90년대 대학을 다닌 저로서는 이걸로 수업을 받았습니다... 진짜... ^^

 

무료로 다운 받을 수 있는 경로는 아래입니다. 

 

http://sourceforge.net/projects/turbocforwindows-9/?source=typ_redirect


 

 

 

 

2. GCC설치

Dos상에서 gcc를 사용하는 것이 더 좋을 것 같아서 아래의 링크의 설명을 바탕으로

gcc를 단순하면서도 간편하고 좋네요. 참고하세요.

http://holawang.blogspot.kr/2014/02/gcc-installing-gcc-at-windowsmingw-or.html

 

gcc설치하고, cmd 처서... 거기서 빌드하고, 편집은 메모장에서 하는 방식으로 하면 좋네요.

1) notepad test.c

2) 노트패트가 실행되면 거기서 코딩하고

3) commend창에서는 gcc -o test test.c 를 쳐서 빌드하고

4) test.exe를 실행해서 결과를 봅니다.

 

 

3. Tutorials point

웹 상에서 바로 프로그램 설치 없이 코딩과 컴파일 실행을 모두 해볼 수 있는 곳입니다.

아마도 물론 다양한 라이브러리를 제약 없이 쓰는 것들은 안될 것 같지만...... 

가볍게 C언어 기초 책을 보면서 따라 한다면, 이곳에 접속해서 공부하시는 것도 좋을 것 같습니다.

우선은 이 글을 읽으시면서, 한번도 프로그램을 설치해보지 않았다면, 먼저 방문해보세요.

 

투토리얼스 포인트: http://www.tutorialspoint.com/compile_c_online.php

          

추가로 집에 아이패드가 있는데, 아이패드에서 사파리 브라우저를 통해 이곳을 접근해서 코딩을 해도 문제 없이 되더라고요. 

실제 컴파일러가 아이패드에 올라온 것은 아닌 것 같고,

사이트의 서버에서, 빌드를 해주고, 그 결과만 text로 동적으로 보여주는 형식 같습니다.

 

 

4. 코드 블록 (code::Blocks)

 이건 최근에 안건데, 괜찮은 무료 IDE(통합개발 툴)이 많더군요. 그 중에서 하나 소개합니다.

이건 제가 직접 아직 써보지는 않아서, 세아슈님 블로그 포스팅을 여기에 소개합니다.

 

http://blog.naver.com/y007com/220146166293

 

 

5. Microsoft에서 Visual Studio 2015 무료 버전

 

마이크로소프트에서 드디어...... 무료로 visual studio를 배포하고 있습니다.

C언어 문법 공부용으로는 가장 좋은 것 같습니다. 인터페이스가 조금 복잡할 수 있지만,

컴파일을 하지 않아도, 실시간으로 문법체크를 하는 강력한 기능을 제공합니다.

엑셀이나, 워드 등에서 실시간으로 문법이 틀린 경우 빨간 밑줄을 자동으로 그려서 경고를 주는 것처럼

비주얼 스튜디오에서도 이러한 기능을 제공하고 있습니다.

 

https://www.visualstudio.com/ko-kr/products/visual-studio-community-vs.aspx 

Posted by 고무함지
,

 

변수나 함수의 사용시 특정 모듈이 아닌 프로그램을 구성하는 모든 모듈에서 한 전역 변수 / 전역 함수를 접근 할 수 있도록 지정자 (specifier)를 사용할 수 있고, extern을 사용해서 이 선언을 할 수 있습니다.

 

예를 들면 아래처럼 두 개의 파일이 각각 있습니다.

 

Main.c 파일

 

extern int value = 0;

 

Int main( void)

{

value = 3;

}

Ex.c 파일

 

void Print_data( void)

{

Printf("%d", value);

}

 

Main.c에서 선언된 value파일은 원래는 main.c 파일에서만 사용이 가능하지만, extern선언을 통해서 ex.c 파일에서도 사용이 가능하게 됩니다.

 

Posted by 고무함지
,