'Avr'에 해당되는 글 2건
- 2009.04.23 Volatile 한정자
- 2009.04.22 [avr] 확장형 데이터 타입
Volatile 한정자
보통 프로그램 실행시 속도를 위해 CPU에서 데이터를 메모리에서 직접 읽어오지 않고, 캐시(Cache)를 통해서 읽어오게 된다. 하지만, 하드웨어에 의해서 변경되는 값들은 캐시에서 바로 반영되지 않기 때문에 캐시를 통해 읽어오지말고, 직접 메모리에서 읽어와야한다.(속도는 조금 늦춰지긴 한다.)
- 하드웨어가 사용하는 메모리는 volatile로 선언해 줘야 한다.
#define rTEMP1 (*(volatile unsigned char *)0x30000028)
#define rTEMP2 (*(volatile unsigned char *)0x30000032)
2. 컴파일러 최적화가 임의로 코드를 변경하는 것을 방지한다.
단계별 최적화 옵션을 사용하게 되면 컴파일러에 따라 전체 코드상 사용되지 않는 DeadCode등은 아예 삭제되거나 무시되는 경우가 있다. 이러한 점은 프로그래머의 의도와는 다르게 기계적 해석에 따라 결과물이 나올 수도 있게 된다. 이러한 경우 프로그래머의 의도가 명확한 경우 volatile을 사용하여 컴파일 최적화를 하지 않게 지정할 수 있다.
출처: No Day But Today
'공부합시다 > 임베디드' 카테고리의 다른 글
[ATmega128] RS232 시리얼 통신 관련 레지스터 정리 (0) | 2009.04.28 |
---|---|
[ATmega1128] ATmega128은 Little endian일까 Big endian일까 (2) | 2009.04.24 |
[AVR] DDRA, PORTA를 찾아보자. (1) | 2009.04.23 |
[DK-128] LED 순차적으로 점멸하기 (0) | 2009.04.22 |
[avr] 확장형 데이터 타입 (0) | 2009.04.22 |
[avr] 확장형 데이터 타입
1
AVR 컴파일러의
확장 데이터형
가)
sfrb, srfw
①
특수기능 레지스터(SFR)을 나타내는 지시어로 sfrb는 바이트 단위 레지스터를 sfrw는 워드단위의 레지스터를 나타낸다.
②
srfb
#define
sfrb_(x,x_) \
extern
"C" volatile unsigned char x asm(#x_) 로 정의 되어있다.
③
srfw
#define
sfrw_(x,x_) \
extern
"C" volatile unsigned int x asm(#x_) 로 정의 되어있다.
④
사용법은 다음과 같다.
sfrb
심볼1 = IO레지스터주소값;
sfrw 심볼2 = IO레지스터주소값;
나)
sfr 데이터형들의
용도
①
헤더 파일에 sfr 데이터형들로 정의된 I/O 레지스터 이름들을 사용하여, 레지스터에 직접 값을 대입할 수 있다.
다)
헤더 파일에 정의된 레지스터
①
DDR
데이터의 방향성을 지정해주는 레지스터. 해당되는 포트를 1로 정해주면 출력이 되고 0으로 지정해주면 입력이 된다. 기본적으로는 input으로 설정되어있다
예) DDRA=0xff;
DDRF=0x00;
②
PORT
출력을 담당한다. 해당되는 핀에 1이나 0을
써주면 그 값이 핀으로 나가는 것이 PORT의 역할이다.
예) PORTA
= 0x01; PORTF = 0xf0;
③
PIN
DDR이 0으로 설정되었을 때 해당되는 핀의 값을 받아들이는 역할을 한다.
'공부합시다 > 임베디드' 카테고리의 다른 글
[ATmega128] RS232 시리얼 통신 관련 레지스터 정리 (0) | 2009.04.28 |
---|---|
[ATmega1128] ATmega128은 Little endian일까 Big endian일까 (2) | 2009.04.24 |
Volatile 한정자 (0) | 2009.04.23 |
[AVR] DDRA, PORTA를 찾아보자. (1) | 2009.04.23 |
[DK-128] LED 순차적으로 점멸하기 (0) | 2009.04.22 |