728x90
반응형
ARM
---------------------------------------------------------------------------------------------------
API
문자열 리소스
: 윈도우즈에서 문자열도 일종의 리소스로 취급.
리소스에 문자열을 정의해 두고 필요시 읽어와 사용할 수 있음.
장점 - 문자열을 코드와 분리해 따로 관리 가능.
insert-> resource -> String Table
--> Caption에 문자열 입력. ID 설정
: 현재 실행되고 있는 프로그램의 핸들을 가져오는 함수.
:문자열 리소스를 읽어오는 함수.
① 현재 실행되고 있는 프로그램 핸들
② 문자열 ID
③ 문자열 읽을 버퍼
④ 버퍼 길이
GDI
: Graphic Device Interface
: 모든 출력 장치(화면, 프린터 등)를 제어하는 윈도우즈 모듈
GDI object
: GDI가 그래픽 출력에 사용하는 도구 ( 펜, 브러시, 폰트, 비트맵, 팔레트, 리전...)
일종의 구조체, 선언문은 비공개, GDI object 생성함수로 핸들을 리턴받아 사용 함.
GDI object 를 모아 놓은 것 = DC , DC에서 사용할 오브젝트 선택후 이용.
--> default - 따로 지정하지 않을 때.
BeginPaint, GetDC 함수에서 default로 선택된 GDI object 를 사용하게 됨.
--> default를 바꿀 때 - 함수로 핸들 얻어 지정.
(*) 스톡 오브젝트(Stock Object ) : 윈도우즈 기본 제공하는 GDI 오브젝트. OS부팅시부터 만들어져 있음.
_사용할 스톡 오브젝트의 핸들 값 얻기_
: ① ( = 사용하고자 하는 스톡 오브젝트)을 지정해서 리턴되는 핸들값 가져옴.
_오브젝트 지정_
: ② ( = Get으로 가져온 핸들값)를 사용하도록 설정. 이전에 설정된 핸들값을 리턴함.
_ex_
HDC hdc;
PAINTSTRUCT ps;
HBRUSH MyBrush; //사용할 브러시
HBRUSH OldBrush; //이전 브러시
HPEN MyPEN; //사용할 펜
HPEN OldPEN; //이전 펜
hdc = BeginPaint(hWnd, &ps);
//---------------------------
MyBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH);//LTGRAY_BRUSH핸들값얻어 MyBrush에 저장
OldBrush=(HBRUSH)SelectObject(hdc,MyBrush); // MyBrush 선택.이전값 저장
MyPEN=(HPEN)GetStockObject(WHITE_PEN); // WHITE_PEN 핸들값 얻어오기.
OldPEN=(HPEN)SelectObject(hdc,MyPEN); // MyPEN 선택.이전값 저장
Rectangle(hdc,50,50,300,200); //선택한 My PEN&Brush로 사각형 그리기
SelectObject(hdc,OldBrush); //사용후 복구
SelectObject(hdc,OldPEN);
MyBrush=(HBRUSH)GetStockObject(NULL_BRUSH); // 투명브러쉬 핸들값 얻기
OldBrush=(HBRUSH)SelectObject(hdc,MyBrush); // 선택. 이전값 저장.
Rectangle(hdc,30,30,200,100); // 투명브러쉬, 기본펜으로 사각형 그리기
SelectObject(hdc,OldBrush); // 사용후 복구
//---------------------------
EndPaint(hWnd, &ps);
return 0;
}
T/C 사용위한 초기화 순서
- 타이머 카운터에 전원 공급 [PMC_PCER]
- 초기화위해 T/C의 클럭 비활성화 [TC_CCR]
- 초기화위해 T/C의 인터럽트 모두 비활성화 [TC_IDR]
- 초기화위해 T/C의 상태레지스터 클리어 - 상태레지스터는 한번 읽으면 자동으로 0값으로 클리어됨 [TC_SR]
- 모든 인터럽트 비활성화 (다른 인터럽트 신호 발생 금지) [AIC_IDCR]
- T/C의 인터럽트 발생시 실행할 함수의 벡터(주소) 지정 [ AIC_SVR [P-ID] ]
- T/C의 인터럽트 소스모드와 우선순위 설정 [ AIC_SMR [P-ID] ]
- T/C의 인터럽트 클리어 [AIC_ICCR]
- 타이머 카운터 모드 설정 [TC_CMR] : (분주비 설정(1초에 얼마씩나누어셀지) | RA, RB, RC 중 레지스터 선택)
- 타이머 카운터의 인터럽트 모드 선택 [TC_IER]
* RC compare interrupt 사용시(비교모드 사용) 비교값 설정 [TC_RC]
- 인터럽트 중 타이머카운터(T/C의 PID값 사용) 사용하도록 설정 [AIC_IECR]
- T/C 의 0번 사용하도록 설정[TC_CCR] -> 카운터 시작됨
①클럭 공급 ② 소프트웨어적 카운터 리셋 후 클럭 공급
- 타이머 카운터에 전원 공급 [PMC_PCER]
- 초기화위해 T/C의 클럭 비활성화 [TC_CCR]
- 초기화위해 T/C의 인터럽트 모두 비활성화 [TC_IDR]
- 초기화위해 T/C의 상태레지스터 클리어 - 상태레지스터는 한번 읽으면 자동으로 0값으로 클리어됨 [TC_SR]
- 모든 인터럽트 비활성화 (다른 인터럽트 신호 발생 금지) [AIC_IDCR]
- T/C의 인터럽트 발생시 실행할 함수의 벡터(주소) 지정 [ AIC_SVR [P-ID] ]
- T/C의 인터럽트 소스모드와 우선순위 설정 [ AIC_SMR [P-ID] ]
- T/C의 인터럽트 클리어 [AIC_ICCR]
- 타이머 카운터 모드 설정 [TC_CMR] : (분주비 설정(1초에 얼마씩나누어셀지) | RA, RB, RC 중 레지스터 선택)
- 타이머 카운터의 인터럽트 모드 선택 [TC_IER]
* RC compare interrupt 사용시(비교모드 사용) 비교값 설정 [TC_RC]
- 인터럽트 중 타이머카운터(T/C의 PID값 사용) 사용하도록 설정 [AIC_IECR]
- T/C 의 0번 사용하도록 설정[TC_CCR] -> 카운터 시작됨
①클럭 공급 ② 소프트웨어적 카운터 리셋 후 클럭 공급
_소스코드_
#include "TIMER.h"
//#include "DBGU.h" // ONE 함수 있는 곳
volatile unsigned int ICNT;
void TIMER_INIT(void)
{
PMC_PCER =1<<TC0; //타이머 카운터에 전원 공금
TC0_CCR =1<<CLK_DIS; //초기화 위해 클럭 꺼줌
TC0_IDR =0xFFFFFFFF; //인터럽트 모두 비활성화
TC0_SR; //상태 레지스터를 읽으면 자동으로 내용 삭제됨.(초기화)
AIC_IDCR =0xFFFFFFFF; // 전체인터럽트 비활성화
AIC_SVR[TC0] =(unsigned int)MY_CNT; // T/C의 인터럽트 발생시 호출할 벡터 주소 = MY_CNT
AIC_SMR[TC0] =(2<<SRC_TYPE) |(0<<PRIO); // T/C의인터럽트 소스모드 설정
AIC_ICCR = 1<<TC0; // T/C의 인터럽트 클리어
TC0_CMR =(1<<CPCTRG)|(4<<TCCLKS); //분주비 설정 (MCK/?), PC compare mode로 설정
TC0_IER =1<<CPCS; //RC compare enable
TC0_RC =49; //비교할 값 (RC 레지스터에 저장) 1초=49152(48KHz에서)
AIC_IECR =1<<TC0; //타이머카운터 인터럽트 활성화
// TC0_CCR =1<<CLK_EN; //TC0에 클럭 공급
// TC0_CCR =1<<SW_TRG; // & 카운터 리셋 & 클럭 공급
return ;
}
void DELAY(unsigned short usValue)
{
ICNT=0;
TC0_CCR =1<<CLK_EN; //TC0 start.
TC0_CCR =1<<SW_TRG; // └중간의 함수처리시간으로 인한 오차를 줄이기위해 카운트 직전에 호출.
while(usValue>ICNT); //인자로 받은 usValue 값만큼 delay 됨.
return;
}
void MY_CNT(void) // 인터럽트 발생시 호출된 함수.
{
TC0_SR;
++ICNT; // 1/1000 초 마다 계산됨.
}
/*{
TC0_SR; // 인터럽트 발생값 다시 0으로 초기화
TC0_CCR =1<<CLK_DIS;
//-----------할 일 ----------------
ONE(); //0번 pin 에 연결된 LED toggle
//-------------------------------
TC0_CCR =1<<CLK_EN; // 카운터 재시작
TC0_CCR =1<<SW_TRG;
return ;
}*/
_main.c_
int main(void)
{
TIMER_INIT();
LED_INIT();
while(1)
{
DELAY(1000); // 1초
ONE(); // LED toggle
}
return 0;
}
---------------------------------------------------------------------------------------------------
API
문자열 리소스
: 윈도우즈에서 문자열도 일종의 리소스로 취급.
리소스에 문자열을 정의해 두고 필요시 읽어와 사용할 수 있음.
장점 - 문자열을 코드와 분리해 따로 관리 가능.
_문자열 리소스 작성_
insert-> resource -> String Table
--> Caption에 문자열 입력. ID 설정
_소스 추가_
LRESULT OnPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
TCHAR str[256]; //문자열 저장 버퍼
hdc = BeginPaint(hWnd, &ps);
//---------------------------
//LoadString(g_hInst,IDS_STRING1,str,256);//문자열리소스읽어와버퍼에 저장
LoadString(GetModuleHandle(NULL),IDS_STRING1,str,sizeof(str));
TextOut(hdc,10,10,str,lstrlen(str)); //저장된 문자열 출력
//---------------------------
EndPaint(hWnd, &ps);
return 0;
}
{
HDC hdc;
PAINTSTRUCT ps;
TCHAR str[256]; //문자열 저장 버퍼
hdc = BeginPaint(hWnd, &ps);
//---------------------------
//LoadString(g_hInst,IDS_STRING1,str,256);//문자열리소스읽어와버퍼에 저장
LoadString(GetModuleHandle(NULL),IDS_STRING1,str,sizeof(str));
TextOut(hdc,10,10,str,lstrlen(str)); //저장된 문자열 출력
//---------------------------
EndPaint(hWnd, &ps);
return 0;
}
(*) HINSTANCE GetModuleHandle (NULL) ; |
int LoadString (①HINSTANCE hInstance, ②UINT uID, ③LPTSTR lpBuffer, ④int nBufferMax); |
① 현재 실행되고 있는 프로그램 핸들
② 문자열 ID
③ 문자열 읽을 버퍼
④ 버퍼 길이
GDI
: Graphic Device Interface
: 모든 출력 장치(화면, 프린터 등)를 제어하는 윈도우즈 모듈
GDI object
: GDI가 그래픽 출력에 사용하는 도구 ( 펜, 브러시, 폰트, 비트맵, 팔레트, 리전...)
일종의 구조체, 선언문은 비공개, GDI object 생성함수로 핸들을 리턴받아 사용 함.
GDI object 를 모아 놓은 것 = DC , DC에서 사용할 오브젝트 선택후 이용.
--> default - 따로 지정하지 않을 때.
BeginPaint, GetDC 함수에서 default로 선택된 GDI object 를 사용하게 됨.
--> default를 바꿀 때 - 함수로 핸들 얻어 지정.
(*) 스톡 오브젝트(Stock Object ) : 윈도우즈 기본 제공하는 GDI 오브젝트. OS부팅시부터 만들어져 있음.
_사용할 스톡 오브젝트의 핸들 값 얻기_
HGDIOBJ GetStockObject (① int fnObject); |
_오브젝트 지정_
HGDIOBJ SelectObject (② int fnObject); |
_ex_
LRESULT OnPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
{HDC hdc;
PAINTSTRUCT ps;
HBRUSH MyBrush; //사용할 브러시
HBRUSH OldBrush; //이전 브러시
HPEN MyPEN; //사용할 펜
HPEN OldPEN; //이전 펜
hdc = BeginPaint(hWnd, &ps);
//---------------------------
MyBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH);//LTGRAY_BRUSH핸들값얻어 MyBrush에 저장
OldBrush=(HBRUSH)SelectObject(hdc,MyBrush); // MyBrush 선택.이전값 저장
MyPEN=(HPEN)GetStockObject(WHITE_PEN); // WHITE_PEN 핸들값 얻어오기.
OldPEN=(HPEN)SelectObject(hdc,MyPEN); // MyPEN 선택.이전값 저장
Rectangle(hdc,50,50,300,200); //선택한 My PEN&Brush로 사각형 그리기
SelectObject(hdc,OldBrush); //사용후 복구
SelectObject(hdc,OldPEN);
MyBrush=(HBRUSH)GetStockObject(NULL_BRUSH); // 투명브러쉬 핸들값 얻기
OldBrush=(HBRUSH)SelectObject(hdc,MyBrush); // 선택. 이전값 저장.
Rectangle(hdc,30,30,200,100); // 투명브러쉬, 기본펜으로 사각형 그리기
SelectObject(hdc,OldBrush); // 사용후 복구
//---------------------------
EndPaint(hWnd, &ps);
return 0;
}
728x90
'코스웨어 > 11년 내장형하드웨어' 카테고리의 다른 글
9월 15일 일일보고서-[내장형]김정우 (19) | 2011.09.15 |
---|---|
[내장형]황세선 2011년 9월 14일 (24) | 2011.09.15 |
[내장형]정선주 2011년 9월 9일 (10) | 2011.09.10 |
[내장형]심재원_2011년09월08일 (10) | 2011.09.08 |
[내장형]김동화_2011년_9월6일_일일보고서 (17) | 2011.09.06 |
[내장형]최남식-2011년9월5일 일일보고서 (11) | 2011.09.06 |
[내장형]윤민석-2011년 9월 2일 일일보고서 (10) | 2011.09.02 |
AT91SAM7S의 USART(DBGU) (0) | 2011.09.02 |