728x90
반응형
ATmega 128
Data Memory Map
$ = 0x
GPIO(intel = PORT
EEPROM은 구조에서 떨어져있기에 따로 컨트롤러를 두고 사용함
EEPROM을 동작 시킬수 있는 메카니즘이 따로 존재
EEPROM 쓰기 함수
• Bits 15:12 – Reserved
-되어있는 비트는 쓰지 않는다.
DDRA - Port A Data Direction Register
입,출력을 결정하는 레지스터 방향 레지스터
0 : 입력 1 : 출력
*((volatile unsigned char *)0x3A)=0x01; // 0x3A의 주소(DDRA)로 가서 0x01을 저장 즉 8비트이므로 0000 0001와 같다. PA0만 출력
unsigned uiCnt;
for(uiCnt=0;65000>uiCnt;++uiCnt); // 컴파일러가 자체적으로 최적화를 해서 uiCnt에 65000을 넣어 딜레이가 안생김
// 해결방법 변수선언할때 volatile를 선언해서 변수선언하면 최적화를 안함
volatile unsigned uiCnt;
for(uiCnt=0;65000>uiCnt;++uiCnt); // uiCnt가 0부터 65000까지 딜레이 생김
선행처리 명령문
선행처리 명령문 실습
#define [매크로명] [처리할 매크로]
ex)
#define DDRA (*((volatile unsigned char *)0x3A)) // 전처리 과정에서 DDRA를 (*((volatile unsigned char *)0x3A))로 치환
매크로 함수
매개변수가 존재하는 매크로는 매크로 함수 또는 함수와 유사한 매크로(function-like macro)라고 한다.
매크로 함수 예제
// 3+2*3+2이기에 11이 출력 선행처리부분은 먼저 연산후 출력하지 않음
// 이를 해결하기위해 ( )를 쓰면 (3+2)*(3+2)이기에 25가 제대로 출력
//매크로를 두줄 이상 에 걸쳐서 정의할 경우 \사용하여 줄바꿈을 명시하지만 기본적으로 한줄로 정의하는 것이 원칙이다.
매크로 함수를 이용한 실습
LED 실습 소스 중 딜레이주는 for문을 매크로 함수로 대체
전처리후 생기는 .i파일을 확인하면 매크로가 치환된걸 확인할수가 있다.
컴파일후 .i파일 생성 방법
해당 디렉토리에서 makefile파일에 CFLAGS = -g$(DEBUG)이 부분에 추가로 gcc 옵션인 --save-temps를 입력후 저장
소스파일
연결리스트 & 동적 할당
자바에서는 동적 할당 해제(free)에 대해서 신경쓰지 않는다. JVM이 자동으로 해제한다.
연결 리스트 실습
struct _node *Next; // 자신 참조형 포인터 typedef라고해도 Node가 선언되기 전이기에 struct _node라고한다.
// *을 빼면 무한대이므로 크기를 측정할수가 없어서 컴파일과정에서 error 그러므로 포인터변수를 사용해야한다.
Head=malloc(sizeof(Node)); // Node크기만큼 메모리 동적 할당 받음
New1->Next=New2; // Head->Next->Next=New2;와도 같다
for(Temp=Head;Temp!=0;Temp=Temp->Next) //이 for문은 해제한 Head를 중심으로 잡고 있으므로 잘못된 for문
{
free(Temp);
}
{
free(Temp);
}
main.c의 구조
main.c의 구조
연결 리스트 실습
for(Temp=Head;Temp!=0;Temp=Temp->Next) // Head가 살아있기에 main.c에서의 for문과 달리 사용해도 상관이없다.
{
printf("%c->",Temp->Data);
}
{
printf("%c->",Temp->Data);
}
while(0!=Temp) // 기준인 Head를 다음으로 넘기고 삭제하기에 이 while은 main.c에서의 for문과 달리 문제가 없다.
{
Head=Head->Next;
free(Temp);
Temp=Head;
}
{
Head=Head->Next;
free(Temp);
Temp=Head;
}
main2.c의 구조
소스파일
728x90
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
20140422서상우_수업보고서 (19) | 2014.04.22 |
---|---|
20140421 일일보고 박영주 (17) | 2014.04.21 |
20140418 문대영 일일보고서[11번] (17) | 2014.04.18 |
2014년 4월 16일 일일업무일지 김해성 [출번 9번] (26) | 2014.04.16 |
안녕하세요! 13기 임기준입니다. (28) | 2014.04.15 |
20140414 업무일지 김재성 출석번호 7 (18) | 2014.04.14 |
2014년 4월 11일 업무일지 -김용우 [출석번호 6번] (32) | 2014.04.11 |
2014.04.10 -업무일지 출석번호 5번 김상엽 (16) | 2014.04.11 |