C30 컴파일러에서는 I/O포트의 이름을 이용하여 포트 전체를 엑세스 할 수 있으며, 구조체를 이용하여 I/O 포트의 특정 비트도 엑세스할 수 있다. 이들 I/O 포트 변수들은 헤더 파일에서 각각 정의되어 있으며, 링커가 각각의 메모리 영역을 맵핑해 주고 있다. 디바이스 헤더파일 중 P24FJ128GA010.h 파일을 열어서 보면 PORTD의 각 비트들에 대해 구조체로 선언한 것을 볼 수 있다.


 링커스크립트 파일인 P24FJ128GA010.gld 파일을 열어 보면 다음과 같이 I/O포트 변수들의 어드레스를 선언한 것을 볼 수 있다. 이들 어드레스는 데이터 시트의 PORTD 어드레스와 동일한 값을 가지고 있다. 따라서 이들 I/O포트 변수를 이용하여 실제 I/O포트의 입출력을 제어 할 수 있다.



소스코드

#include <p24fj128ga010.h> 
#include <stdio.h>

int main(void) 

    TRISD = 0x0000; 
    PORTDbits.RD0 = 1; 
    
    while(1); 
}


결과

C 소스 코드

#include <stdio.h> 

// 프로그램 메모리 영역에 상수 위치 시키기 
const unsigned __attribute__ ((space(psv), address(0x2000))) 
    table[10] = {0,1,2,3,4,5,6,7,8,9};

// 데이터 메모리 영역에 변수 위치 시키기 
int __attribute__ ((address(0x900))) x = 5; 

// 프로그램 메모리 영역에 함수 위치 시키기 
int __attribute__ ((address(0x2100))) square(int a);

int main(void) 

    int i, y;

    y = square(x); 
    printf("square = %d\n", y);

    for(i=0;i<10;i++) 
    { 
        printf("table[%d] = %d\n", i, table[i]); 
    } 
    while(1); 


// square 함수 정의 
int square(int a) 

    return (a * a); 
}


결과
Watch창의 Address 필드에 P라고 되어있는 부분은 프로그램 메모리 영역이라는 표시이다.

'PIC' 카테고리의 다른 글

C30 컴파일러의 I/O 포트 액세스  (0) 2011.04.04
C30 컴파일러 속성(Attribute)  (1) 2011.04.01
MPLAB IDE - C30 컴파일러 사용 [PIC24FJ128GA010]  (0) 2011.03.31

+ Recent posts