'전체보기'에 해당되는 글 126건

  1. 2009.07.08 [소켓프로그래밍] setsockopt
  2. 2009.07.06 [WinAPI] BMP 파일에서 특정색상을 투명하게 출력하기
  3. 2009.07.03 [소켓프로그래밍] winsock.h 중복 재정의 에러, error C2011: 'fd_set' : 'struct' type redefinition
  4. 2009.06.16 tar 압축 명령어 정리
  5. 2009.06.10 [ARM] elf32-littlearm.lds 파일 분석
  6. 2009.06.10 [프로그래밍 일반] 링커 스크립트
  7. 2009.06.10 [ARM] Boot Code(Startup Code)
  8. 2009.06.04 [ARM7] LCD 사용자 문자 출력
  9. 2009.05.28 [ARM7] H-JTAG와 Wiggler형 JTAG 인터페이스 OK-JTAG의 사용법
  10. 2009.05.26 [프로그램] GNU ARM 을 설치하자.
2009. 7. 8. 20:44

[소켓프로그래밍] setsockopt

setsockopt

 

setsockopt 함수는 소켓 옵션을 설정하는 함수입니다.

 

int setsockopt (
        SOCKET
 s,
        int  
level,
        int
 optname,
        const char FAR *
  optval,
        int  
optlen
);

 

Parameters

s
[입력] 대상 소켓의 기술자(descriptor)를 명시합니다.

level
[입력] 소켓 옵션 레벨이 정의 되며, SOL_SOCKET 과 IPPROTO_TCP 중 하나가 될 수 있습니다.

optname
[입력] 셋팅 하기위한 소켓옵션 값입니다.

optval
[입력] 검색된 옵션을 저장 하기위한 데이터 버퍼를 포인트 합니다.

optlen
[입력]
optval 매개변수 버퍼의 크기

 

Remarks

setsockopt 함수는 지정된 소켓의 옵션을 특정한 형태(type), 상태(state)로 결합하기 위해서 지정한 소켓옵션 값을 셋팅하는 함수입니다. 비록 여러 프로토콜 레벨로의 소켓 옵션이 존재 할 순 있다 하더라도, 가장 우선하는 레벨이 존재하게 됩니다. 옵션은 소켓 연산에 영향을 미칩니다. 예를들어 발송된 데이터(OOB 데이터를 예로 들 수 있습니다) 를 일반 데이터 스트림으로 수신했을때나, 소켓으로 브로드캐스트(broadcast) 메세지를 전송할때 영향을 미치게 됩니다.

이 함수에서 사용 할 수 있는 두가지 형태의 소켓옵션이 있습니다. 활성화 또는 비활성화 시키기 위한 Boolean 옵션과, 정수형(integer) 또는 구조체를 요구하는 옵션이 있습니다. Boolean 옵션을 활성화 하기 위해서 optval 매개변수는 0이 아닌 정수를 포인트 하고, 비활성화 하기 위해서  0을 포인트 합니다. optlen 매개변수는 Boolean 옵션에 대해서는 sizeof(int)로 설정 해야만 합니다. 다른 옵션들에 대해서, optval 매개변수는 설정하고자 하는 정수(integer)나 구조체를 넘겨야 하고, optlen 매개변수는 정수(integer) 또는 구조체의 길이를 넘겨야 합니다. 아래에 setsockopt 함수에서 사용 할 수 있는 옵션들을 간단한 설명과 함께 나열 해 보았습니다.

 

level = SOL_SOCKET

옵션값(Value)

데이터형태(Type)

의미(Meaning)

SO_BROADCAST
 

BOOL
 

소켓으로 브로드캐스트(broadcast) 메세지를 전송 할 수 있도록 합니다.

SO_DEBUG

BOOL

디버깅 정보를 레코딩 합니다.

SO_DONTLINGER



BOOL


 

소켓을 종료(close)할때 보내지지 않은 데이터를 보내기위해서 블럭킹 상태가 되지 않도록 합니다. 이 옵션을 셋팅하는 것은 LINGER 구조체의 멤버중 l_onoff를 0으로 셋팅하고 SO_LINGER 옵션을 셋팅 했을때와 같은 효력을 발휘합니다.

SO_DONTROUTE

BOOL

라우팅 하지 않고, 직접 인터페이스로 보냅니다.

SO_GROUP_PRIORITY




 

int




 

차후에 소켓그룹을 사용하기위해 예약 되어있습니다. 소켓그룹의 일부분인 소켓을 만들기위해 관련된 우선사항을 명시합니다.
(우아아아악~ 정말 해석 못해 먹겠네여... 원문을 첨가 하겠습니다)
Reserved for future use with socket groups. Specify the relative priority to be established for sockets that are part of a socket group.

SO_KEEPALIVE

BOOL

Keepalives를 전송합니다.

SO_LINGER
 

struct LINGER
 

아직 전송되지 않은 데이터가 있을 경우 소켓을 종료(close)할때 대기합니다.

SO_OOBINLINE
 

BOOL
 

일반 데이터 스트림(normal data stream)으로 out-of-band 데이터를 수신합니다.

SO_RCVBUF

 

int

 

데이터를 수신하기 위한 총 버퍼공간을 명시합니다. 요놈은 SO_MAX_MSG_SIZE 나, TCP Window의 크기와 상관이 없습니다.

SO_REUSEADDR
 

BOOL
 

이미 사용되고 있는 어드레스를 바인드 할 수 있도록 합니다.

SO_SNDBUF

 

int

 

데이터를 전송하기 위한 총 버퍼공간을 명시합니다. 요놈은 SO_MAX_MSG_SIZE 나, TCP Window의 크기와는 상관이 없습니다.

level = IPPROTO_TCP

TCP_NODELAY
 
BOOL
 

전송합병(send coalescing)을 위해 Nagle 알고리즘을 비 활성화 합니다.

Return Values

에러가 발생하지 않으면, setsockopt 함수는 0을 반환합니다. 에러가 발생하면, SOCKET_ERROR을 반환하면 WSAGetLastError 함수를 이용해서 특정 에러 코드를 얻어낼 수 있습니다.

Error Codes

WSANOTINITIALISED

이 함수를 사용하기 전에 성공적인 WSAStartup 함수의 호출이 없었습니다.

WSAENETDOWN 네트웍 서브 시스템에 에러가 발생했습니다.
WSAEFAULT

optval 또는 optlen 매개변수 중의 하나가 올바르지 않거나 optlen 매개변수의 값이 너무 작습니다.

WSAEINPROGRESS

블럭킹 윈속 v1.1 이 현재 진행 중이거나, 서비스 프로바이더가 콜백 함수를 여전히 처리하고 있습니다.

WSAEINVAL

level 매개변수가 잘못됐거나, 알 수 없는 값 입니다.

WSAENETRESET

SO_KEEPALIVE가 설정 되었을때, 접속이 타입아웃 되었습니다.

WSAENOPROTOOPT

알 수 없는 옵션이거나, 지원지지 않는 옵션을 사용 했습니다.

WSAENOTCONN

SO_KEEPALIVE가 설정 되었을때, 접속이 리셋 되었습니다.

WSAENOTSOCK

기술자(descriptor)가 소켓 기술자가 아닙니다.

 

QuickInfo

Windows NT : 사용가능
Windows : 사용가능
Windows CE : 버젼 1.0 그리고 그이후의 버젼에서 사용가능
Header :
          Win16/32 : winsock.h
          Win32-II : winsock2.h
Import Library :
          Win16 : winsock.lib
          Win32 : wsock32.lib
          Win32-II : ws2_32.lib

See Also

overview, bind, getsockopt, ioctlsocket, socket, WSAAsyncSelect, WSAEventSelect

 

 

출처 : DEVPIA 곽용진님 style  APIs

[출처] [Socket] setsockopt|작성자 임종배

2009. 7. 6. 12:31

[WinAPI] BMP 파일에서 특정색상을 투명하게 출력하기

BOOL TransparentBlt(
  HDC
hdcDest,                                 //그려질 영역의 DC 핸들.
  int nXOriginDest,                              //그려질영역의 x 좌표.
  int nYOriginDest,                              //그려질영역의 y 좌표.
  int nWidthDest,                               //그려질 영역의 넓이
  int hHeightDest,                              //그려질 영역의 높이
  HDC hdcSrc,                                  //그릴 소스 DC 핸들  
  int nXOriginSrc,                               //그릴 소스의 x 좌표.
  int nYOriginSrc,                               //그릴 소스의 y 좌표.
  int nWidthSrc,                                 //그릴 소스의 넓이
  int nHeightSrc,                                //그릴 소스의 높이.
  UINT crTransparent                                 //비트맵에서 제외할 색상.RGB( ?, ?, ? )
);

 

HEADER :  #include <wingdi.h>

LINK       : Msimg32.lib , Msimg32.dll

Return Values

If the function succeeds, the return value is TRUE.

If the function fails, the return value is FALSE

 

  CDC* pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
  CDC MemDC;

  MemDC.CreateCompatibleDC( pDC );

  CRect rcItem( &(lpDrawItemStruct->rcItem) );

  CBitmap bmpIcon;

  bmpIcon.LoadBitmap( IDB_YAHOO_COMBO_IMAGE );

  CBitmap* pOldbmp = (CBitmap*)MemDC.SelectObject( &bmpIcon );

  ::TransparentBlt( pDC->m_hDC,
   rcItem.left, rcItem.top, 16, 16,
   MemDC.m_hDC, 0, 0, 16, 16,
   RGB( 255, 255, 255 ) );


'공부합시다 > WinAPI, MFC' 카테고리의 다른 글

[MFC] 프로세스 접근 권한 얻기  (0) 2009.10.06
[MFC] 리스트 컨트롤 폰트 바꾸기  (0) 2009.09.30
2009. 7. 3. 10:38

[소켓프로그래밍] winsock.h 중복 재정의 에러, error C2011: 'fd_set' : 'struct' type redefinition

원인
windows.h 가 구버전의 winsock.h 를 포함하고 있기 때문이다.

해결방법
#include <windows.h > 문장 위에 아래 문장을 추가해 준다.
#ifndef _WINSOCKAPI_
#define _WINSOCKAPI
#endif
2009. 6. 16. 14:13

tar 압축 명령어 정리

■ 하나의 파일로 묶기
tar cvf 파일명.tar 압축할폴더명
예) tar cvf backup.tar www

■ 압축하기
tar cvfz 파일명.tar.gz 압축할폴더명
예) tar cvfz backup.tar.gz www

■ 압축 풀기
1) 묶었을때>> tar xvf 묶은파일명.tar
2) 압축시에>> tar xvfz 압축한파일명.tar.gz

■ zip으로 압축하기 압축 풀기
zip 설명 보기 명령어 : zip
zip 파일이름 -x

■ rar로 압축하기 압축 풀기
unrar x 파일명
2009. 6. 10. 21:11

[ARM] elf32-littlearm.lds 파일 분석

링커 스크립트인 elf32-littlearm.lds 파일에 대한 분석이다.

링커 스크립트는 링커에게 코드배치를 이렇게 하라고 설명하는 파일이며, 더 자세한 내용은 다음의 포스트를 참조하자.



/* elf32-littlearm.lds 파일 */

//이 부분은 arm-linux-ld가 만들어 낼 최종 결과 파일의 포맷을 나타낸다.
//즉, little endian 포맷의 파일을 생성할 것인지,
//big endian 포맷의 파일을 생성할 것인지를 결정하는 역할을 한다.

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

//이 부분은 최종 결과 파일이 동작할 CPU의 architecture를 나타낸다.
//즉, 이 파일은 ARM CPU 상에서 동작한다는 의미이다.

OUTPUT_ARCH(arm)

//최종 결과 파일의 시작 지점을 나타낸다.
//즉, 여기서 파일의 시작 지점은 reset_handler가 된다.
//reset_handler는 Cstartup.s 파일에 정의되어 있다.

ENTRY(reset_handler)

//SECTIONS{ ... }부분은 링커(arm-linux-ld)가 입력 파일들의 섹션들을
//결과 파일의 어떤 섹션들로 위치시킬지를 결정하는 역할을 한다.

SECTIONS
{
    .text : {          //프로그램의 코드영역
        _stext = .;      //코드영역의 시작주소를 makefile로 부터 가져온다.
        *(.text)        //모든 입력 파일들(*)의 .text 섹션을 결과 파일의 .text 섹션에 위치시킨다.
        *(.rodata)      //readonly 파일들을 .text 섹션에 위치시킨다.
        *(.rodata*)    //그외 모든 데이터들을 .text 섹션에 위치시킨다.
        . = ALIGN(4);  //현재의 위치에서 4 바이트 단위로 놓겠다는 의미이다.
                                 // 즉, 4바이트 단위로 메모리를 정렬한다.

         _etext = . ;    //코드영역의 끝을 현재 위치포인트로 하겠다는 의미이다.
    }

    //데이터 영역
     //코드영역 시작주소부터 코드영역의 크기만큼 더한다음 주소 즉, 코드영역 다음 주소
    .data : AT ( ADDR (.text) + SIZEOF (.text) ) { 
        _sdata = .;
        *(.vectors)    //모든 입력 파일의 벡터 테이블을 데이터 영역에 포함
        *(.data)       //모든 입력 파일의 초기화 된 데이터를 데이터 영역에 포함
        _edata = .;
    }

     //bss 영역
     //noload = 적재하지 않는다.
    .bss (NOLOAD) : {
        . = ALIGN(4);
        _sbss = .;
        *(.bss)         //모든 입력 파일의 bss영역을 출력파일의 bss영역에 포함한다.
        _ebss = .;
    }
}
end = .;


2009. 6. 10. 20:34

[프로그래밍 일반] 링커 스크립트

일반적으로 대부분의 컴파일러는 다음의 과정을 거쳐 소스파일을 실행파일로 컴파일한다.


간단하게 얘기하면 소스 파일 -> 컴파일러 -> 오브젝트 파일 ->링커 -> 실행파일 -> 로더 -> 실행 의 순으로 진행된다고 볼 수 있다.

여기서 링크과정을 살펴보면 그림에는 없지만, 모든 링크 과정에는 링커 스크립트가 조정을 한다. 오늘은 이 링커 스크립트에 대해 알아보자.

링커 스크립트

링커 스트립트는 링커 명령 언어로 쓰여진다.

링커는 항상 링커 스크립트를 사용한다. 직접 제공하지 않으면 링커는 링커 실행파일에 컴파일된 기본 스크립트를 사용한다.

링커 스크립트의 주목적은 입력파일의 섹션이 어떻게 출력파일로 대응하는지와 출력파일의 메모리 상태를 어떻게 조정하는지를 지정하는 것이다. 대부분의 링커 스크립트는 이것으로 충분하다.

링커 스크립트 형식

링커 스크립트는 일련의 명령어로 이루어져 있다. 각 명령어는 키워드로 뒤에 아규먼트를 가지거나, 심볼에 할당될 수 있다. ';'으로 각 명령어를 구분한다. 공백은 일반적으로 무시된다.

파일이나 형식 이름과 같은 문자열은 보통 직접 입력한다. 파일명이 보통 파일명을 구분하는 ',' 같은 문자를 포함한다면 파일명을 쌍따옴표 안에 두어야 한다. 파일명에 쌍따옴표를 사용할 수는 없다.

링커 스크립트는 C와 같이 '/*' 와 '*/'로 둘러싸인 주석을 포함할 수 있다.

링커 스크립트의 간단한 예

많은 링커 스크립트는 매우 간단하다.

가장 간단한 링커 스크립트는 'SECTIONS'이라는 단 하나의 명령어를 가진다. 'SECTIONS' 명령어는 강력한 명령어이며, 'SECTIONS' 명령어는 출력파일의 메모리 구조를 기술한다.

다음의 예는 프로그램이 코드, 초기화된 자료, 초기화되지 않은 자료로만 이루어진다고 가정했을 때의 링커 스크립트이다. 또한, 입력파일에도 이 섹션들만이 나온다고 가정한 스크립트이다. 그리고, 코드가 주소 0x10000에서 로드되고 자료는 0x8000000에서 시작한다고 가정하자.

SECTIONS
{
    . = 0x10000;
    .text : {*(.text)}
    . = 0x8000000;
    .data : {*(.data)}
    .bss : {*(.bss)}
}

SECTIONS 명령어는 다음에 오는 대괄호로 묶인 일련의 심볼 할당과 출력 섹션 명이 나온다.

특별한 변수인 '.' 은 항상 위치 카운터를 저장한다. '.'에 값을 대입하면 위치 카운터가 변경된다. 그래서 출력 섹션에 공백을 만들 수 있다. 위치 카운터는 절대로 뒤로 움직이지 않는다.

.text : {*(.text)} 줄을 살펴보면, 출력 섹션 '.text'가 정의될 때 현재 위치 카운터의 값으로 주소를 정한다. 현재 위치 카운터의 값은 윗줄에서 0x10000이므로 '.text' 섹션의 주소는 0x10000이 된다. '.text' 섹션은 어셈을 공부했다면 많이 본 코드 영역을 의미한다.

마찬가지로 아래쪽에 데이터 영역과 bss 영역의 주소를 정해주는 문장을 볼 수 있다.



링커 스크립트에 대한 더 자세한 문법을 알고 싶다면 아래의 페이지를 참조하자. 위의 내용은 아래 페이지의 도입부를 간략하게 정리한 것이다.

http://korea.gnu.org/manual/release/ld/ld-mahajjh/ld_3.html
2009. 6. 10. 11:36

[ARM] Boot Code(Startup Code)

1. Reset (장치를 켜거나 리셋)
2. 0번지로 점프
3. reset handler
4. low level init 호출(하드웨어 초기화)
5. remap
6. 메모리 초기화
    6-1. Stack 영역 초기화
    6-2. Data 영역 초기화
    6-3. BSS 영역 초기화
//여기까지 boot code(or startup code)

7. main 호출
2009. 6. 4. 15:13

[ARM7] LCD 사용자 문자 출력

텍스트형 LCD 모듈에서 사용자 정의 문자를 보내는 방법에 대해 알아보자.

보통 기본적으로 텍스트형 LCD 모듈은 LCD 콘트롤러를 내장하고 있어서, 이것의 내부에 있는 CG ROM안에는 192개(일본어형) 또는 240개(유럽형)의 기본 문자 폰트를 가지고 있어서 사용자가 화면에 표시하고자 하는 문자 코드를 DD RAM에 써주기만 하면 이것에 해당하는 폰트가 자동으로 CG ROM에서 찾아져서 화면에 디스플레이 된다.

그러나 한글과 같이 정의되어 있지 않은 문자를 출력하려면, 사용자가 문자를 정의해서 사용해야 하는데, 이와 같이 사용자 정의문자를 지정하는데 사용하는 메모리가 CG RAM이며, 이 CG RAM에는 5x7 도트를 사용하는 경우에 최대 8문자까지 정의할 수 있고, 5x10도트의 경우에는 최대 4문자까지 정의하여 사용할 수 있다.

<5x8에서 '가'를 그린 모습>


LCD 모듈의 CG RAM에 사용자 정의문자를 작성해 넣는 방법은 다음과 같다.

1. 가로가 5칸이므로 한바이트로 표현이 가능하다. 따라서 한줄을 한바이트로 정의하며, 총 8줄이므로 한글자는 8바이트가 된다.

2. 토트를 검게 표시하고 싶은 부분을 1로 하고 공백부분은 0으로 한다. 일반적으로 8번째 줄은 커서를 표시하기 위해 비우기도 한다.

3. 위의 '가'란 문자를 정의한다고 하면, 5칸으므로 8비트(1바이트)로 표시할 때 상위 3비트는 필요가 없다. 그리고 검게 표시된 부분은 2번째 비트이다. 따라서 이것을 2진수로 나타내면 xxx00010(x는 don't care)이고, 16진수로 나타내면 0x02가 된다.(don't care를 0이라 둔다면)

4. 이런식으로 8줄을 모두 정의한다.

5. 8줄을 묶어주기 위해 배열을 선언하는게 편하다. 소스로 나타내면 다음과 같을 것이다.

unsigned char font[8] = {0x02, 0x1A, 0x0A, 0x0A, 0x0B, 0x0A, 0x0A, 0x02};

이를 활용하여 한가인이라는 문자를 출력하는 프로그램을 작성하였다. (소스 일부임)

int main()
{
  InitLCD();
  SetFont();
  SendToLCD(10x80); //set ddram
  SendToLCD(00x03);  //하트
  SendToLCD(00x00);  //한
  SendToLCD(00x01);  //가
  SendToLCD(00x02);  //인
  SendToLCD(00x03);

  return 0;
}

void InitLCD()
{
  //LCD 제어 시작
  *PIO_PER = DBUS|RS|RW|EN|BL;        //병렬 입출력 활성화
  *PIO_OER = DBUS|RS|RW|EN|BL;       //  출력 활성화

  SendToLCD(10x3c);  //function set
  SendToLCD(10x06);  //Entry mode
  SendToLCD(10x1C);  //cursor shift
  SendToLCD(10x0C);  //Display On
  SendToLCD(10x01);  //Clear Display
  return;
}


void SetFont()
{
  int i;
  unsigned char font[] = {0x0a, 0x1e, 0x020x1b, 0x1a, 0x020x100x1e,  //한
                0x020x1a, 0x0a, 0x0a, 0x0b, 0x0a, 0x0a, 0x02,   //가
                0x090x150x150x150x090x000x080x0f,  //인
                0x000x0a, 0x1b, 0x1f, 0x1f, 0x0e, 0x040x00};   //하트

  SendToLCD(10x40);
  for(i=0; i<32; ++i)
  {
    SendToLCD(0, font[i]);
  }
  return;
}



결과 화면이다.


2009. 5. 28. 18:18

[ARM7] H-JTAG와 Wiggler형 JTAG 인터페이스 OK-JTAG의 사용법

 ARM 개발에 있어 사용자 프로그램의 다운로드와 프로그램의 디버깅을 할 수 있게 해주는 JTAG 에뮬레이터는 수십만원에서 수백만원에 이르는 비교적 고가의 개발장비이며, 여기에 사용되는 디버거 소프트웨어가 수백만원이 하므로 아마추어들은 사용하기가 어렵다.

 이러한 이유로 좀더 저렴하고 쉽게 사용할 수 있는 Wiggler라는 저가형 간이 JTAG 인터페이스가 있는데 이를 개발한 Macraigor사(http://www.macraigor.com)는 현재 더 이상 이러한 Wiggler JTAG 인터페이스를 지원하지 않고 있어, 여러 가지의 변형된 Wiggler 호환형 제품들만이 널리 사용되고 있다.

<Wiggler 호환형 JTAG 인터페이스>

 이러한 Wiggler 호환형의 JTAG 인터페이스를 사용하려면 하드웨어뿐만 아니라 이를 구동할 수 있는 운용 소프트웨어도 무료로 쉽게 구할 수 있어야 한다. 아마추어도 쉽게 구할 수 있는 무료 소프트웨어로 H-JTAG이란 프로그램이 널리 알려져 있다.

 H-JTAG은 Wiggler 호환의 JTAG 인터페이스와 함께 사용할 수 있는 디버그 도우미(debug agent)용의 무료 소프트웨어로서 http://www.hjtag.com 사이트에서 제공하는 H-JTAG Server 및 H-Flasher 프로그램으로 구성된다.
홈페이지에 접속해서 프로그램을 설치하자.



빨간색으로 네모친 곳을 클릭하여 H-JTAG을 다운받고 설치파일을 실행하자.




약관에 동의하고 다음


설치될 경로를 지정해주고 다음



설치가 완료되었다.


H-JTAG Server 프로그램은 내부적으로 H-Flasher 프로그램과 연계하여 ARM 소자에 내장되거나 또는 외부에 확장 인터페이스된 플래쉬 메모리를 프로그래밍하는 기능을 가진다. 이를 이용하면 SAM-BA GUI프로그램을 대신하여 사용자 프로그램을 다운로드할 수 있다.


H-JTAG Server를 실행시켜보자.


현재 장치가 연결되어 있지 않으므로 UNKNOWN이라고 표시된다. JTAG 인터페이스로 PC와 ARM을 연결하자.


사진에는 잘 보이지 않지만 JTAG에 보면 선마다 GND, TDI, TDO, TCK, TMS, VCC가 써있으며 거기에 맞게 ARM의 해당핀에 연결해주면 된다.

연결해준뒤 H-JTAG Server의 Operations-Detect Target을 해주면 장치를 읽게 되고 다음과 같이 화면이 바뀌게 된다.

<ARM CORE가 감지된 모습>

다시 H-JTAG Server에서 Setting - LPT JTAG Setting(패러럴포트이면) 메뉴를 선택하여 아래의 그림과 같이 설정한다.



H-JTAG Server에서 Setting - LPT Port Setting 메뉴를 선택하여 아래 그림과 같이 설정해준다.



Setting - Target Setting 메뉴으로 가서 아래 그림과 같이 설정한다.



Option 메뉴를 선택하여 아래 그림과 같이 설정한다.


Flasher - Start H-Flasher 메뉴를 선택하여 H-Flasher프로그램을 실행하여 아래와 같이 설정해주자.


<자신의 해당하는 모델을 선택하자>

<설정을 저장한다.>



이제 사용자 프로그램을 SAM-BA가 아닌 JTAG을 이용해서 전송해보자.

H-Flasher를 살펴보면 좌측에 Programing이란 항목이 있다.


 Type에는 Hexa 파일을 전송할건지, 바이너리 파일을 전송할건지등을 결정할 수 있다. 보낼 데이터의 타입에 맞게 설정해준다.
 Dst Addr은 Flash Base Address로 설정해준다.
 Src File에는 ...을 클릭해 소스를 선택해주자. 경로를 직접 써줘도 된다.

그리고 Type 옆에 있는 Program을 클릭하면 전송을 하게 된다.

<이로서 전송완료>


SAM-BA를 이용할 경우 TST로 10초간 리셋을 시켜줘야하는 불편함이 있지만 JTAG을 이용하는 경우 바로 전송이 가능하다는 장점이 있으므로 자주 애용하자.
2009. 5. 26. 11:38

[프로그램] GNU ARM 을 설치하자.

GNU ARM 홈페이지에 접속한다.

http://www.gnuarm.org/


홈페이지 상단 프레임에 FILES를 선택하면 GNUARM 바이너리 파일과 소스 파일들이 있다. 소스파일은 컴파일을 해줘야하니 편하게 바이너리 파일(실행파일)을 받자.


설치파일을 실행시키자.


다음을 클릭


약관에 동의하고 다음


설치할 경로를 지정해주고 다음


설치할 패키지를 선택해주고 다음(full installation 권장)


시작메뉴에 등록될 이름을 선택하고 다음(시작메뉴에 등록되지 않길 원한다면 아래 체크박스 체크)


GNU ARM Tool-chain을 Cygwin에서 사용할 것이므로, “Install Cygwin DLLs”는 선택하선 말 것. 만약 이것을 선택했다면, GNU ARM Uninstall을 실행한 후 처음부터 다시 설치한다.

이제 다음부터 나오는 대화 상자들은 계속 진행하도록 하고 “Install” 여부를 묻는 대화 상자가 나오면 “Install”을 선택한다. 인스톨을 다 마치면, “Finish”를 묻는 대화 상자가 나오는데, 그냥 “Finish”를 눌러 설치를 끝내면 된다.

제대로 설치 됐는지를 확인하기 위해 cygwin을 실행시켜보자.


$ arm-elf-gcc -v 라고 쳐서 버전이 제대로 나온다면 설치 완료.


만약 아래와 같은 화면이 나온다면,
Cygwin에  C:\cygwin\bin 안의 cywin1.dll 파일을 C:\GNUARM\bin 로 복사하고
다시 명령을 실행하면 된다.