실습 제목 |
6. 부트로더 기능 수정 및 명령어 추가 |
실습 자 |
|
실습 목적 |
- 부트로더 구성 및 동작의 이해 |
기초지식 및 자료 |
- 부트로더의 소스 파일의 이미지 생성 |
설비 및 준비물 |
-호스트 컴퓨터 : 실습용 노트북 (리눅스 시스템) |
주의 사항 |
작업 디렉터리 설정 확인 |
| |
실습 절차 기술 | |
led와 segment를 설정하는 방법을 익히고 main.c 와 command.c 를 수정하여, 원하는 결과를 얻는다.
| |
실습 결과 | |
main.c
command.c
unsigned int Getsegcode(int x) {
unsigned int code;
switch(x) { case 0x0: code = 0x3f; break; } return code; }
bool DoBtn(int argc, char **argv) volatile unsigned char * addr_button = 0x10500000;
unsigned char go; bool count = 0;
*addr_led = 0x00; while(1) { if((go = ~(*addr_button))==0x1){ //__REG8(0x10600000) = 0xff;
if(count == 1)count = 0; elsecount = 1;
//delay(10000); }
if(count == 1) *addr_led = 0xff; else *addr_led = 0x00;
} }
bool DoMinjung(int argc, char **argv) { volatile u16 * addr16_low = 0x10300000;
unsigned int v0, v1, v2, v3; u16 val;
if (!HexToInt(argv[1], &val, 16)){ return false; }
v0 = Getsegcode(val &0xF);
*addr16_low = (v1 <<8)|v0; *addr16_high = (v3 <<8)|v2; __REG8(0x10600000) = val; return true; }
bool DoTest(int argc, char **argv) bool count=0; int i=0, j=0;
if(StrCmp(argv[1], "led") ==0){ volatile u16 * addr16_low = 0x10300000;
unsigned int v0, v1, v2, v3; u16 val;
if (!HexToInt(argv[2], &val, 16)){ return false; }
v0 = Getsegcode(val &0xF);
*addr16_low = (v1 <<8)|v0;
while(1) {
__REG8(0x10600000) = val; user_wait(10000000); __REG8(0x10600000) = 0x00; user_wait(10000000); } } else if (StrCmp(argv[1], "text") ==0){ printLCD(1, "Kim"); } return true; }
| |
검토 및 고찰 | |
※ 소스 수정시 make를 꼭 해주어야 한다.
|
'공대생의 일기 > 2010年' 카테고리의 다른 글
[시스템분석및설계]ATM_package 설계 (0) | 2010.12.23 |
---|---|
[시스템 분석 및 설계]요약정리 (0) | 2010.12.23 |
[임베디드시스템]실습2 크로스 컴파일 구축 (0) | 2010.12.22 |
[임베디드시스템]실습1 리눅스 운영체제 설치하기 (0) | 2010.12.22 |
[임베디드시스템]정리 (0) | 2010.12.22 |