요술고양이의 Digital Life


 스타터분들께서 시작할 때 항상 부딛히는 문제나 트러블을 보자면 대부분 비슷 비슷한 문제를 겪는 것 같습니다. 가장 먼저 겪는 문제는 이쪽 분야에 아는게 없거나 또는 어디서 부터 어떻게 시작을 해야할지 모른다는 것이지요.. 그래서 제가 주로 사용하고 제가 운영하는 카페에서 작성하였던 가이드를 블로그에 수정하여 옮겨보고자 하였습니다.

 Micrcochip社의 PIC 프로세서를 이제 막 접해서 사용하거나 스터디를 하실 분들을 위한 초심자 가이드 입니다.

1. Microchip PIC란?

[그림 1] picMicro 시리즈

 (1) PIC(Peripheral Interface Controller) 개요 

 PIC란? Microchip社에서 개발한 RISC 프로세서로 내부에 롬과 램 및 컨트롤러를 탑재한 단일 마이크로프로세서입니다. 참고로 이와 같은 프로세서를 총칭하여 MCU(마이크로 컨트롤러 유닛)이라고 많이 부르며, PIC는 크게 8비트, 16비트, 32비트 계열로 제품군이 형성되어 있습니다. 8비트는 PIC10, 12, 14, 16, 17, 18 시리즈가 있으며, 16비트는 PIC24H, PIC24F, dsPIC30F, dsPIC33F 시리즈가 있고 32비트는 최근에 나온 것으로 현재 PIC32MX 계열이 있습니다.

 특히 8비트 제품군에서는 PIC10, 12는 소형 베이스 라인 PIC16은 미드레인지 PIC18은 하이엔드로 나뉘고, 16비트 제품군에서는 일반 컨트롤용 PIC24 시리즈와 DSP코어가 내장된 dsPIC 시리즈가 있습니다. (PIC14, 17은 특수하게 나왔던 디바이스로 현재는 찾아보기 힘듭니다.)

 (2) PIC 프로세서의 성능 및 장, 단점

 PIC의 일반적인 처리속도는(크리스탈, 레조레이터 사용 경우) 8비트 계열이 1 ~ 12MIPS, 16비트 계열이 30 ~ 40MIPS
32비트 계열이 최대 80 MHz, 1.53 DMIPS/MHz를 갖고 있습니다. 여기서 DMIPS는 Dhrystone Million Instructions Per Second의 약자로서 드라이스톤이라는 것은 프로세서의 종합적인 벤치마킹 기준입니다. MIPS라는 것은 각 프로세스마다 명령어 사이클에 상대적인 것이라 절대적일 수 없지만 대체로 PIC는 평균 이상의 처리속도를 보여주고 있습니다. 그리고 PIC의 철학(?)이 무조건 고성능 지향이 아닌 상황에 맞는 처리 능력과 용량을 갖는 프로세서를 지향하다 보니 ROM과 RAM 용량은 수 바이트 ~ 수 십K 정도로 다양하게 분포하고 있습니다. 

 이러한 PIC의 다양한 제품군은 프로세서 선택에 있어 어플리케이션에 따른 선택권이 있고, 각각 프로세서들간 핀호환이나 기타 컨트롤러가 비교적 호환이 잘 되는 편이라서 마이그레이션이 용이한 장점이 있습니다. 그리고 다른 회사와 달리 딱 한번 프로그래밍이 가능한 C 타입 양산용 디바이스가 있습니다. 

 PIC 학생들이 공부하기에도 부담이 없는 편이고, 마이크로칩 본사 홈페이지에서 샘플 신청이 가능하니 샘플을 신청하여 스터디 및 테스트 할 수 있습니다.

(2) PIC 중에서 자주 접할 수 있는 디바이스

 PIC 프로세서는 비교적 보급?이 잘 된 ATMEL社의 AVR 처럼 왠만한 전자부품 사이트에서 팔지 않으므로 접하기 힘든 프로세서중 하나였으나 최근 전자부품 사이트에서 구입이 용이해졌습니다. 이 중 처음 시작하시는 분들이 자주 보았을 만한 디바이스로는 PIC12F675, PIC16F84(A), PIC16F877(A), PIC18F452 정도입니다. 위에 열겨한 디바이스의 공통점이라면 8비트 계열의 베이스, 미드레인지, 하이엔드 부분에서 평균적인 성능을 보이는 디바이스들 입니다. 다시 말하자면 General Purpose(일반적인 목적용 - 기본 디바이스)인 것이죠, 이 중 스타터 분들께는 최소 PIC16F877A 정도로 시작을 하시는 편이 좋습니다. 국내에선 책도 많이 발간된 PIC16F84A가 있긴 하지만 솔직히 너무 오래된 프로세서이고 기능이 적으므로(어느 정도 스터디하면 금새 밑천이 다 드러나는?) 시작은 PIC16F877A 부터 시작하시고 어느정도 익히셨으면 PIC18 시리즈 그 다음에 16비트 계열 순으로 접하시는 것이 도움이 될 것 같습니다. 그 이유는 상위로 갈 수록 같은 내부 컨트롤러라도 설정 및 개념이 조금씩 확장되기 때문입니다. 간단히 말해 PIC16, 18, dsPIC에서 SPI와 같은 동일한 컨트롤러를 내장하고 있더라도 상위 모델에선 하위 모델보다 세부설정이 가능합니다.

(3) 피해야 할 것들

 커뮤니티에서 간혹 PIC 시리즈 중에 PIC16F가 아닌 PIC16C 계열을 판매하거나 초보에게 좋은 디바이스라며 추천하는 사람이 있는데, 대부분 구형 프로세서가 많은 편이고 해당 C 타입은 OTP(one-time programmable)이라고 하여 딱 한번 밖에 프로그래밍이 가능한 디바이스이니 무턱대고 구입해서 낭패를 보지 마시길 바랍니다. 


2. 컴파일러와 개발 툴 및 개발 장비

2.1 개발환경 
 
(1) MPLAB IDE


[그림 2] MPLAB IDE 실행화면


 MPLAB IDE는 Microchip社에서 제공하는 무료 IDE 입니다. IDE란 통합 개발 환경(Intergrated Developement Environment)의 약자로 MPLAB IDE는 컴파일러가 아닌 코드 작성 및 컴파일을 도와주는 통합 개발 환경입니다. MPLAB IDE는 PIC 관련 컴파일러와 대부분 연동 사용 가능하며, 시뮬레이션 기능, 롬 및 램 사용량 확인, 상용 RTOS 및 시뮬레이션과 같은 서드 파티 툴과 연동을 통하여 다양한 기능을 수행할 수 있습니다. 단, MPLAB IDE를 사용하면서 주의할 점은 MPLAB IDE에서는 유니코드 관련 언어 지원이 미비하여, 윈도우 계정이 한글로 되어 있거나 프로젝프 파일 또는 경로에 한글이 있을 경우 정상 동작을 하지 않으니 꼭 유의하시어 윈도우즈 계정을 영문으로 사용하시길 바랍니다. MPLAB IDE에 자세한 기능 설명 및 다운로드는 아래 링크를 참고 하시길 바랍니다. 

관련 홈페이지:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002 

간단한 사용 방법:
http://cafe.naver.com/micropic/59 (가입필요)


2.2 컴파일러 

(1) MPASM, MPASM30, MPASM32

  MPLAB IDE 설치 시 자동으로 설치되는 PIC용 어셈블리어 컴파일러입니다. 순서상으로 8비트, 16비트, 32비트용이며, 어셈블리어로 프로그램 작성 시 해당 디바이스에 맞게 컴파일러를 선택하시면 됩니다. 

(2) MPLAB C18, C30, C32

 Microchip社에서 제작한 PIC 전용 C언어 컴파일러 입니다. C18은 PIC18 시리즈 전용이며, C30은 16비트 계열, C32는 32비트 계열을 지원합니다. 이 컴파일러는 MPLAB IDE와 연동하며 사용하며, 보통 다른 컴파일러와 달리 링커 스크립트라고 하는 디바이스별 기본 설정이 되어있는 파일을 필요로 합니다.(C32는 제외) 그러므로 컴파일 시 MPLAB IDE 프로젝트에 꼭 포함시켜야 하며, 링커 스크립트 수정을 통하여 디바이스에 대한 컴파일러 설정을 변경해줄 수 있습니다. 위 컴파일러는 스튜던트 버젼이 무료로 제공되며, C18과 C30은 60일은 정품과 동일 그 이후는 옵티마이징 레벨이 떨어지는 버젼이며, C32는 코드 제한이 있는 무료 버전으로 제공되고 있습니다. 

관련 홈페이지:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=81

(3) CCS-C


[그림 3] CCS-C

 CCS社에서 제작한 C 컴파일러로 Microchip社에서 나온 컴파일러 외 양대산맥(?)중 하나 입니다. CCS-C는 PCB, PCM, PCH, PCD로 나누어 최근 출시된 32비트 계열을 제외한 대부분 PIC 디바이스를 지원합니다. 그 중 PCB는 8비트 계열 중 베이스라인을 지원하는 컴파일러로 PIC12, 16(일부)를 지원하며, 무료로 MPLAB IDE와 함께 제공되고 있습니다. CCS-C는 다른 컴파일러와는 달리 자체적으로 라이브러리를 제공하여, PIC 내부 컨트롤러를 쉽게 사용할 수 있으며, 어느 디바이스를 막론하고 동일한 라이브러리 함수 명령어로 내부 컨트롤러를 설정하고 제어 할 수 있다는 큰 장점이 있습니다. 이러한 특성으로 인해 결과물을 빠르게 작성할 수 있는 컴파일러이고 가격도 다른 컴파일러에 비해 저렴한 장점이 있습니다. 다만, 몇몇 버그성 오류로 인해 사용자 선호도가 약간 극과 극으로 나뉘는 경향이 있지만 빠른 업데이트를 보여주고 있습니다.

관련 홈페이지: http://ccsinfo.com

(4) HiTECH-C


[그림 4] HiTECH-C

 
 Hi Tech社에서 제작한 C 컴파일러로 CCS-C와 양대산맥에 있는 컴파일러입니다. PIC 전 시리즈 컴파일러를 제공하고 있고, 각각 계열별로 컴파일러가 나뉘어 있습니다. CCS-C처럼 특별한 기능이나 특징은 없지만 PIC 컴파일러 중 안정성이 뛰어난 편이라 많은 개발자들이 선호하는 컴파일러이기도 합니다. 마이크로칩에서 제공하는 예제 코드 중에서 HiTECH-C 코드도 많은 편인점을 고려할 때 마이크로칩사에서도 서드 파티 컴파일러중 가장 신뢰하는 컴파일러가 아닐까 생각이 듭니다. MPLAB C 시리즈와 HiTECH C는 비슷해서 코드도 일부만 수정하면 거의 호환이 잘 되는 편입니다.

관련 홈페이지:
http://www.htsoft.com


2.3 개발툴

(1) PICkit2 & 3, ICD2 & 3, Real ICE


[그림 5] Microchip社 개발툴


 Microchip社에서 제공하는 대표적인 PIC용 프로그래머 및 디버거로써 가장 일반적으로 많이 사용되는 툴입니다. 이 중 ICD2(또는 ICD3)가 가장 많이 사용되고 있으며, 모두 USB 인터페이스로 동작합니다. 위의 툴을 기능순으로 나열해보면 PICkit 시리즈 -> ICD 시리즈 -> Real ICE 순이며, 각각 특별하게 기능차이가 큰 것은 아니고 디버그의 능력 및 내부 롬 프로그래밍 속도 차이에 기인합니다. 예를 들어, ICD시리즈는 모든 디바이스 디버그가 가능하지만 Real ICE 보다 디버그 능력(하드웨어 브레이킹 포인트 갯수 등)이 떨어집니다. 스타터 분들께는 심플한 PICkit 시리즈 정도로 충분하며 최근에 업데이트로 32비트 디바이스도 지원하게 되었습니다. 일반적으로 PICkit나 ICD 정도면 새로운 디바이스가 나올 때 마다 내부 프로그램 등이 업데이트가 되기 때문에 향후 지속적으로 사용이 가능합니다.

(2) 공개 개발 프로그램 및 툴

 IC-Prog

 PIC 롬라이팅 프로그램으로 많이 사용되는 프로그램입니다. 특히 JDM 프로그래머와 함께 PIC16F84A, PIC16F877A 롬 프로그래밍에 많이 사용하는 프로그램이 아닐까 싶습니다. 단, 지원하는 디바이스가 PIC16 및 PIC18 일부 디바이스만 지원하며 처음 시작하시는 분들이 사용하기에 간편한 프로그램 입니다.

관련 홈페이지: http://www.ic-prog.com
사용방법: http://cafe.naver.com/micropic/5


WINPIC

 다양한 디바이스를 지원하는 PIC 롬라이팅 프로그램입니다. 그외 다양한 프로그래머를 지원하고 프로그래머에 관한 설정을 세세히 할 수 있기 때문에 공개 프로그램중 활용성이 높은 프로그램입니다.

관련 홈페이지: http://freenet-homepage.de/dl4yhf/winpicpr.html
사용방법: http://cafe.naver.com/micropic/150


PICer

 일본의 Y.Onodera라는 분이 제작한 프로그램 입니다. 패러럴 포트를 사용하며, 전용 프로그래머 회로도와 같이 공개한 프로그램 입니다. 비교적 많은 PIC 디바이스를 지원하며, 현재 USB 버젼으로 새로 개발 중인데 공개로 할 지 미공개(라이센스?)로 할 지 고민하시는 것 같습니다. 만약 USB 버젼을 공개로 내놓을 경우(하드웨어의 경우 FT232를 쓴 버젼입니다.) 16비트의 dsPIC까지 지원 예정이니 심플하고 성능이 훨씬 좋은 프로그램을 기대해봐야겠습니다.

관련 홈페이지: http://einst.hp.infoseek.co.jp
일어번역: http://j2k.naver.com/j2k_frame.php/korean/einst.hp.infoseek.co.jp/PICer/PICer4.html
사용방법: http://cafe.naver.com/micropic/6


PIC-PG1, PIC-PG2, PIC-PG3

 올리멕스社에서 공개한 프로그래머로 PIC-PG1의 경우 제가 아래 링크로 소개한적이 있습니다. 이중 PG1과 PG2는 시리얼 방식이고 PG3는 패러럴 방식으로 비교적 간단한 부품으로 롬라이터 기기를 제작해볼 수 있습니다. PICkit2나 ICD2의 구입이 어려우신분들은 아래의 홈페이지에서 해당 회로도를 참고하여 제작해보시길 바랍니다.

관련 홈페이지: http://www.olimex.com/dev/index.html
사용방법: http://cafe.naver.com/micropic/7


3. PIC 특징 및 사용상 유의할 점

(1) PIC 입출력 설정

 PIC의 포트 입출력은 TRISx 레지스터 설정을 통해 이루어 집니다. 입출력 설정이야 0 또는 1로 하니까 특별할 것은 없지만 요로코롬 설명하는 이유는 AVR 쓰시는 던 분들 때문인데, 입출력 설정이 AVR과는 반대이기 때문입니다. PIC에서는 포트 입출력 설정시 AVR과 반대로 0은 출력, 1은 입력 입니다. 쉽게 외우는(?) 방법은 '0'utput과 '1'nput이라고 외우는 것이지요~ 혼동하지 마시길 바랍니다.

(2) SPI 모듈 핀 설정

 PIC에서 SPI 모듈을 사용하기 위해선 해당 핀을 입출력 설정을 해줍니다. SDO(MSIO) 핀은 출력으로 SDI(MOSI)는 입력으로 먼저 설정을 해주어야 합니다. 그런데 또 요로코롬 설명하는 이유는 AVR과 SPI 핀의 연결방법이 다르기 때문입니다. 아래 그림을 일단 살펴보도록 합니다.


[그림 6] ATMEGA128 SPI 모듈



[그림 7] PIC dsPIC33FJ256GP710 SPI 모듈


 [그림 6, 7]에서 푸른색으로 칠한 부분을 잘 보시면, AVR은 같은 핀끼리 PIC는 크로스 연결을 한 것을 볼 수 있습니다. 이는 AVR에서는 SPI 설정 시 AVR MCU가 마스터냐 슬레이브냐에 따라 입출력 방향이 달라지기 때문이고, PIC는 마스터, 슬레이브에 관계없이 SDO(MISO)는 데이터 출력, SDI(MOSI)는 데이터 입력으로만 동작 되기 때문입니다. 기존 AVR 사용자 분들 께서는 혼동하지 마시고 데이터 시트를 꼭 확인하시길 바랍니다.

4. 트러블 슈팅 가이드 및 FAQ

(1) 프로그램 및 컴파일러 관련

Q. MPLAB IDE를 실행하면 로고만 뜨고 바로 꺼져 버립니다.

A. MPLAB IDE는 한글을 제대로 지원하지 않습니다. XP 사용자 계정이 한글일 경우 실행이 안되는 경우가 있습니다. XP 계정을 영문으로 수정해주세요.

Q. MPLAB IDE에서 파일을 찾을 수 없다고 나오면서 컴파일이 되지 않습니다.

A. MPLAB IDE에서는 한글을 제대로 지원하지 않습니다. 프로젝트 및 소스 파일이 한글이거나 또는 경로에 한글이 들어가 있으면 안됩니다. 영문으로 변경해주세요. 예) c:\프로젝트\test.mcp (x)

Q. MPLAB IDE에서 C18 또는 C30, C32의 라이브러리 및 인클루드 헤더 파일을 찾을 수 없다고 나오면서 컴파일이 되지 않습니다.

A. C18 또는 C30, C32의 설치 경로를 먼저 확인해주시고, 메뉴 - Project - Set Language Tool Location을 선택하여 해당 컴파일러의 위치나 라이브러리 디렉토리 위치를 수동으로 설정해주세요.

Q. MPLAB IDE에서 C18 또는 C30 컴파일러의 위치를 설정해주었는데, 라이브러리를 찾을 수 없다고 나오면서 컴파일이 되지 않습니다.

A. MPLAB C에서는 특별하게 링커스크립트라는 파일이 필요합니다. 해당 컴파일러의 설치 폴더에서 lnk 또는 gld 라는 확장자를 가진 파일이 있습니다. 해당 디바이스와 동일한 이름을 갖고 있는 파일을 프로젝트에 추가시켜주세요.

Q. C18에서 큰 용량의 배열 변수를 선언할 수 없습니다. 어떻게 해야하나요?

A. 이럴경우엔 링커스크립트를 수정해주어야 합니다. 만약을 위해서 링커스크립트를 프로젝트 폴더에 복사해서 프로젝트에 추가하여 사용하시길 바라구요 아래와 같이 변경해주시면 해당 크기 만큼 배열 변수를 선언할 수 있습니다.

예) PIC18F4550

#pragma
udata bigdata
u08 buffer[512];
#pragma udata

먼저 buffer[512]와 같이 대용량 변수 취급 시 필요한 작업으로 먼저 #pragma udata bigdata 같이 섹션을 만들어 줍니다.
여기서 udata 정의되지 않은 램데이터를 뜻하고 bigdata는 임의로 정한 이름입니다.

<변경 전 PIC18F4550 링커스크립트>

// File: 18f4550.lkr
// Sample linker script for the PIC18F4550 processor

LIBPATH .
FILES c018i.o
FILES clib.lib
FILES p18f4550.lib

CODEPAGE   NAME=vectors    START=0x0            END=0x29           PROTECTED
CODEPAGE   NAME=page       START=0x2A           END=0x7FFF
CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000       END=0xF000FF       PROTECTED
ACCESSBANK NAME=accessram  START=0x0            END=0x5F

DATABANK   NAME=gpr0       START=0x60           END=0xFF
DATABANK   NAME=gpr1       START=0x100          END=0x1FF
DATABANK   NAME=gpr2       START=0x200          END=0x2FF

DATABANK   NAME=gpr3       START=0x300          END=0x3FF
DATABANK   NAME=usb4       START=0x400          END=0x4FF          PROTECTED
DATABANK   NAME=usb5       START=0x500          END=0x5FF          PROTECTED
DATABANK   NAME=usb6       START=0x600          END=0x6FF          PROTECTED
DATABANK   NAME=usb7       START=0x700          END=0x7FF          PROTECTED
ACCESSBANK NAME=accesssfr  START=0xF60          END=0xFFF          PROTECTED
SECTION    NAME=CONFIG     ROM=config
STACK SIZE=0x100 RAM=gpr3

 변경전 내용입니다. 위에서 gpr1, gpr2 영역을 합치면 512바이트 크기나 나오므로 합쳐서 큰 램 영역으로 선언을 해주도록 하겠습니다. 

<변경 후 PIC18F4550 링커스크립트>

// $Id: 18f4550.lkr,v 1.3 2004/08/23 18:08:22 curtiss Exp $
// File: 18f4550.lkr
// Sample linker script for the PIC18F4550 processor

LIBPATH .
FILES c018i.o
FILES clib.lib
FILES p18f4550.lib

CODEPAGE   NAME=vectors    START=0x0            END=0x29           PROTECTED
CODEPAGE   NAME=page       START=0x2A           END=0x7FFF
CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000       END=0xF000FF       PROTECTED
ACCESSBANK NAME=accessram  START=0x0            END=0x5F

DATABANK   NAME=gpr0         START=0x60           END=0xFF
DATABANK   NAME=largebank       START=0x100          END=0x2FF  PROTECTED
DATABANK   NAME=gpr3       START=0x300          END=0x3FF
DATABANK   NAME=usb4       START=0x400          END=0x4FF          PROTECTED
DATABANK   NAME=usb5       START=0x500          END=0x5FF          PROTECTED
DATABANK   NAME=usb6       START=0x600          END=0x6FF          PROTECTED
DATABANK   NAME=usb7       START=0x700          END=0x7FF          PROTECTED
ACCESSBANK NAME=accesssfr  START=0xF60          END=0xFFF          PROTECTED
SECTION    NAME=CONFIG     ROM=config
SECTION NAME=bigdata RAM=largebank
STACK SIZE=0x100 RAM=gpr3

 위처럼 gpr1과 gpr2 영역을 하나로 합쳐서..
largebank라는 임의의 이름을 지어주고 큰 영역으로 만듭니다. 그리고 하단에 섹션을 아까 변수 선언 시 임의로 정했던 bigdata로 설정해줍니다. 그러면 buffer 변수는 앞으로 위에 largebank로 설정 된 램 영역에 위치하게 됩니다. 

(2) 개발 툴 관련

Q. ICD2 사용 시 ICD0019: Communications:  Failed to open port: (Windows::GetLastError() = 0x0, '작업을 완료했습니다.')라는 메세지가 나오면서 동작 하질 않습니다.

A. 위의 메세지는 ICD2를 사용하는 USB 포트를 중복 접속할 때 생기는 오류로 간단하게 해볼 수 있는 방법으로는 프로그래머를 none으로 놓고 ICD2를 연결 해제한 후 다시 연결하고 ICD2를 선택하여 정상동작하는지 확인 하는 방법입니다. 자세한 사항은 아래 링크를 참고해주세요. http://cafe.naver.com/micropic/247

Q. PICkit2를 사용하는데 MPLAB IDE에서 컴파일 후 프로그래밍 하면 디바이스가 동작이 잘 되는데, PICkit2 전용 프로그램으로 hex 파일을 라이팅 하면 디바이스가 정상동작 하지 않습니다.

A. hex 파일에 건피그레이션 비트 설정이 포함되지 않아서 hex 파일만 라이팅 하면 정상 동작하지 않는 것입니다. 그러나 MPLAB IDE에서 라이팅 시에는 정상 동작하는 이유는 MPLAB IDE에서 라이팅을 하게 되면 컨피그레이션 비트 설정을 포함하여 롬 라이팅을 시도하기 때문입니다. 이럴 때는 일단 먼저 컴파일 후 메뉴 - File - Export.. 를 선택하여 컨피그레이션 비트 내용을 포함하여 hex 파일을 내보내기를 하고 PICkit2 전용 프로그램으로 그 내보낸 hex 파일을 라이팅하면 정상 동작 될 것 입니다.

(3) 하드웨어 관련
(4) 기타



< Revision >

2008.12.27 이전 - PIC32 추가, ICD3, Pickit3 내용 추가
2008.12.27 DMIPS 내용 수정 및 추가
2009.01.16 전반적인 내용 수정 및 추가

Comment +4