본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]이상만_2011년 8월 30일_일일보고서

by 알 수 없는 사용자 2011. 8. 30.
728x90
반응형

ARM 수업


source insight 기능



오른쪽 프로젝트 창에서 cstartup.s를 클릭합니다
잠깐 *.S는 어셈블리 파일입니다!!


위의 주석은 무시하고 조금 더 내려오면 #include "project.h"가 나옵니다
더블클릭하면 아래 그림처럼 선택이 됩니다


ctrl F를 누르면 아래처럼 project를 검색을 할 수 있습니다
하지만 어디에 포함되고 있는 프로젝트 단위로는 볼수 없는데...


좀더 자세히 보기 위해서 ctrl shift F를 누르면 아래 그림처럼 나오게 됩니다
어디에 포함되어 있는지 왼쪽을 보면 확인 할 수 있습니다

오른쪽에 option을 보면
프로젝터로 볼것인지 하위 디렉토리로 볼것인지 선택이 가능한데 프로텍트 와이들 선택해줍니다

참고 case Sensitive : 대소문자 구분입니다


enter나 serch를 클릭하여 넘어가면
포함하고 있는 곳이 차례대로 정리되어 나타납니다


 : 이렇게 생긴 버튼을 클릭하면 포함하고 있는 곳으로 바로 이동 할 수 있으면 다시 클릭하면 list로 돌아옵니다


source 분석은 숙제 >_<

ADS 1.2 DOWN 받는법

(그림을 일부러 잘 보이게 큼지막하게 넣었습니다 절대 공간 채울려는것이 아님)


www.filecrop.com 으로 접속합니다
그리고 검색창에 ads 1.2라고 검색하면 아래처럼 ads_1.2.rar이라고 나옵니다

세번째 줄에 downloadmegaupload를 클립합니다


megaupload사이트에 보시면 프리미엄 다운로드와 일반다운로드가 있습니다 일반 다운로드 경우에는 30-60초 정도 기다려야합니다 기다리고 아래 그림처럼 나오면 일반 다운로드를 클릭하여 다운 받습니다

해외사이트라 속도가 많이 느립니다 


ADS예제파일 받기

www.ohm.co.kr로 출판사 홈페이지에 접속합니다
왼쪽 상단에 카테고리 아래에 상품관련 자료실을 클릭합니다


자료실 2번째 페이지 제일 아래
315번 자료를 클릭하여 다운 받으면 됩니다

우리 모두 내일까지 준비 합시다!!!

급 추가 CRACK>>>>>>>>>>>>>>>>>>>>>>>>

저 같은 경우 crack이 없어서 ㅠ.ㅠ 추가로 찾았습니다 


저는 중국애들의 힘을 빌려 보기로 하였습니다
www.hackchina.com으로 접속하여
ads 1.2 crack으로 검색하면

아래 그림처럼 나오는데 하단부에 보시면 ads 1.2 crack file이 있는 것을 확인 할 수 있습니다

고마워 중궈~~~!!
받아서 압축풀면 license.dat파일이 있는데 ads설치 할때 넣어주면 됩니다!!

이외 설치는 알아서 합시다~~~!!!!



다시 한번
우리 모두 내일까지 준비 합시다!!!

===============================


API 수업


마우스


복습합시당
!!

 

마우스 메시지는 lParam의 상위 워드에 좌표를 가집니다

 

일단! 마우스왼쪽버튼 조작시 상황은 어떤것이 있을까요?

WM_BUTTONDOWN         : 눌렀을때

WM_BUTTONUP : 놓았을때

WM_DBLCLK                   : 더블클릭

WM_MOUSEMOVE           : 드래그 마우스를 누른체 이동

 -추가로 XBUTTON이 있지만 책에서 마우스를 팔아먹기 위한 상술이라고 하여 넘어갑니다

 

4가지의 상황이 발생합니다 간단하게 마우스를 눌렀을때와 놓았을때 그리고 이동할때인데 마우스가 이동하면 x,y축의 값이 때때로 변하게 되는데 이 좌표를 저장하는 것이

 

마우스의 위치 좌표 저장 lParam(x,y) 입니다

 

복습을 해보자면 lParam과는 반대로 키보드의 입력 값을 받는 것은 무엇일까요? 예 맞습니다 조합키 상태 확인 wParam 입니다

wParam에 대해 궁금하신 분은 앞으로 돌아가셔서 복습 하셔요 ㅋㅋㅋ

 

자 다시 lParam으로 돌아와서 마우스가 움직인 xy좌표를 받는다고 했습니다 어떻게 받을까요?  아래 그림과 같이 4byte공간에 2byte씩 나누어 x y를 저장합니다

 

 

lParam 크기 : 4byte (unsigned long)

상위 2byte y좌표

하위 2byte x좌표

HIWORD(lParam) = LOWORD(lParam)

 

x = LOWORD(lParam)

y = HIWORD(lParam)

 

추가로 참고를 하자면

 

wParam에서

WM_CHAR : 문자키 입력을 받고

WM_KEYDOWN : 가상키코드를 받습니다

 

메세지마다 Param에 들어오는 값은 다릅니다

 

본문예제를 보겠습니다

 

static int a;
  static int b;
  static BOOL bNowDraw = FALSE;

  switch(iMessage){
  case WM_LBUTTONDOWN:
    a = LOWORD(lParam);
    b = HIWORD(lParam);
    bNowDraw = TRUE;
    return 0;

  case WM_MOUSEMOVE:
    if(bNowDraw == TRUE)
    {
      hdc = GetDC(hWnd);
      MoveToEx(hdc,a,b,NULL);
      a = LOWORD(lParam);
      b = HIWORD(lParam);
      LineTo(hdc,a,b);
      ReleaseDC(hWnd,hdc);
    }
  return 0;

  case WM_LBUTTONUP:
    bNowDraw = FALSE;
    return 0;

 

 

위의 예제는 3가지 상태를 나열해 놓았습니다

case WM_LBUTTONDOWN:

case WM_MOUSEMOVE:

case WM_LBUTTONUP:

 

왼쪽버튼을 누르고 이동 버튼에서 손을 놓습니다 이러한 과정을 거치게 되면  창에는 이동한 거리만큼 라인이 그려진걸 확인 있습니다

 

변수 bNowDraw 재선 그리고 있는지를 저장합니다

변수 xy 마우스의 위치를 저장합니다

 

마우스를 그리는 부분은

      MoveToEx(hdc,a,b,NULL);
      a = LOWORD(lParam);
      b = HIWORD(lParam);
      LineTo(hdc,a,b);

입니다

 

부분은 쉽게 설명하자면 MOVETO 시작지점 / ab 이동하는 중간값 / LINETO 마우스가 도착한 지점을 뜻합니다

 

더블클릭

: 더블클릭을 하게 되면 그렸던 선이 사라지는 코드를 작성하겠습니다 화면을 지우는 것은 InvalidateRect 함수를 호출하여 작업영역을 무효화 해버리면 됩니다 코드는 아래와 같습니다

      

case WM_LBUTTONDBLCLK:

       InvalidateRect(hWnd,NULL,TRUE);

       return 0;

 

하지만 의도와는 다르게 동작하지 않습니다 왜냐하면 더블클릭에 대한 메시지를 지원하지 않기 때문입니다 쉽게 말해 더블클릭을 하면 LBUTTONDOWN 빠르게 두번 동작하는 것으로 받아들이기 때문입니다 더블클릭을 받아들이기 위해서는 style에서 내가 더블클릭을 원하노라 !!1 하고 의사 표시를 하여야 합니다 코드는 아래와 같습니다

 

WndClass.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS

 

더블클릭이란 마우스를 두번 누르기만 하는 것이 아니라 일정한 영역안에서 정해진 시간안에 연속적으로 눌러야 되는 신경쓰이는 작업입니다

 

 

타이머


:
키보드와 마우스는 사용자의 동작에 의해 발생하지만 그렇지 않은 경우도 있는데 그중에 하나가 타이머 입니다 한번 지정해 놓으면 연속적으로 계속 발생합니다

 

UNIT SetTimer(HWND hWnd, UNIT nIDEvent, UNIT uElapse, TIMERPROC lpTimerFUNC);

 

윈도우가 메시지를 받으니 hWnd는 그대로 사용하고 nlDEvent는 타이머 번호를 지정합니다 1개의 타이머를 사용할 경우 1을 주면 됩니다 세번째 인수는 타이머 주기를 나타내는데 단위는 1/1000초입니다  1000 1초를 뜻하여 1000으로 지정합니다 네번째 인수는 호출될 함수를 지정하는데 사용한다고 하는데 책에서는 좀 뒤에서 언급할려는 듯합니다

 

현재 시간을 구할때는 SYSTEM GetLocalTimer는 함수를 사용하지만 이 역시 좀 뒤에서 언급하나 봅니다

 

SetTimer(hWnd,1,1000,NULL)

 

 

 

소스예제

static TCHAR sTime[128];
  

switch(iMessage){
  

case WM_CREATE:
    SetTimer(hWnd,1,1000,NULL);
    return 0;
  case WM_TIMER:
    GetLocalTime(&st);
    wsprintf(sTime,TEXT("
지금 시간은 %d:%d:%d입니다"),st.wHour,st.wMinute,st.wSecond);
    InvalidateRect(hWnd,NULL,TRUE);
    return 0;
  case WM_PAINT:
    hdc = BeginPaint(hWnd,&ps);
    TextOut(hdc,100,100,sTime,lstrlen(sTime));
    EndPaint(hWnd,&ps);
    return 0;

 

WM_TIMER메시지는 wParam으로 타이머 ID를 전달 받으면 lParam에서 타이머 메시지 발생시 호출될 함수의 번지가 전달되고 GetLocalTimer함수로 시간을 조사 한 후 출력을 위해 sTime 문자열로 변환을 해둡니다(wsprintf) 시간이 바뀔때 마다 갱신하기 위해 InvalidateRect 호출하고 있습니다

 

GetLocalTimer -> wsprintf -> sTime -> InvalidateRect -> TextOut -> KillTimer

 

이제 종료를 합시다 타이머를 종료하기 위해선 죽여야 하는데요...

 

KillTimer(hWnd,1);

 

천번째 인자는 핸들이고 두번째 인자는 타이머의 ID 나타냅니다 ID 1이기 때문에 1 두었습니다


결과


 

자 아주 중요하다는 그리고 자주 사용한다는

SendMessage

 

위 프로그램의 문제점

처음 실행한 직후에 시간이 보이지 않고 1초 정도 경과한 후부터 시간이 보입니다

 

해결책!! SendMessage

: 메시지는 사용자의 동작이나 시스템의 상황 변화에 의해 발생하는 것이 원칙이지만 강제로 메시지가 발생하는 것처럼 만들어야 할 때는 이 함수를 사용하여 hWnd윈도우로 Msg메시를 보내면 됩니다

 

case WM_CREATE:
    SetTimer(hWnd,1,1000,NULL);
    SendMessage(hWnd,WM_TIMER,1,0);
    return 0;

 

하지만 또 하나 문제점이 있습니다

시간이 지날때 마다 깜빡거리는 것입니다

 

InvalidateRect(hWnd,NULL,FALSE);

이전에 출력되었던 시간 위에 갱신된 시간이 덮여서 출력됩니다 시간 문자열의 길이가 짧아질 경우 뒤쪽 문자열이 지워지지 않아 잔상이 남게 됩니다 세번재 인자를 TRUE 바꾸면 됩니다

InvalidateRect(hWnd,NULL,TRUE);

 

static RECT rt={100,100,400,120};으로 사각영역을 설정하여 주면 사각형 바깥쪽은 전혀 건드리지 않기 안에 부분만 거드리기 때문에 그리는 속도가 현저하게 빨라져 왠만해서는 깜박임이 눈에 보이지 않습니다

 

SANSU과제

30미만의 두정수의 덧셈 암산 문제를 3초 간격으로 계속 출제하라 입력은 받지 않아도 상관 없고 주기적으로 문제만 출제한다

 

추가하거나 수정해야 될 코드

 

#include <time.h>

static temp1;

static temp2;

 

srand(time(NULL));

 

temp1= rand()30%;

temp2 = rand()30%;

 

SetTimer(hWnd,1,3000,NULL); 3초로 세팅

 

wsprintf(sTime,TEXT("SANSU %d + %d = %d입니다"),temp1,temp2,temp1+temp2);


결과>> 빠른 확인을 위해 시간을 0.5초로 줄였습니다


와 움직인다~~!!! 와 신기하다~~!!
참고>>움직이는 GIF를 만들어주는 사이트
http://bbom.org/tools/ani.html

사이트에 사진을 넣고 실행을 하면 gif로 만들어 줍니다
728x90