#include <stdio.h>
int main(void) {
int a = 11;
//int b = 22; // b도 연습해 보자.
int* pa = NULL;
//pa = &a; // 포인터 기본 예제, 보통 여기서 끝나는데, 주소를 직접 넣고 싶다면 아래와 같이 하자.
//pa = 0xABCD; // 주소를 대입했으니 이건 문법에러, 좌측은 int*, 우측은 int 즉 형이 틀려 에러!
//pa = (int *)0xABCD; // 문법은 맞지만 0xABCD는 적법한 주소가 아니다! 어디를 가리키는지 모르는 위험한 주소다.
//pa = (int*)0x004ff76c; // 안전빵 메모리 위치인 a의 주소를 가리켜 보자. ASLR 옵션이 Yes 상태라서, 다시 실행할때마다 주소가 바뀐다.
pa = (volatile unsigned int*)0x0019fedc; // ASLR 옵션을 끄고, a의 주소를 입력해보자.
//printf("a= %d\\r\\n", a);
//printf("&a= %p\\r\\n", &a);
//printf("*pa= %d\\r\\n", *pa);
printf("%d\\r\\n", a); // a= 11 출력
*(volatile unsigned int *)0x0019fedc = 999; // a= 999;
printf("%d\\r\\n", a); // a = 999 출력된다.
return 0;
}
주소로 직접 제어하기 때문에
DDRA, PORTA가 정의된
#include <avr/io.h>도 필요 없어진다.
#include <avr/io.h>
#include <avr/interrupt.h>
int main(void) {
DDRA = 0x99;
PORTA = 0x11;
while(1) {
}
}
#define F_CPU 16000000UL
int main(void) {
*(volatile unsigned int *)0x3a = 0x99;
*(volatile unsigned int *)0x3b = 0x11;
while(1) {
}
}
아래 3개 레지스터의 주소 할당하기