티스토리 뷰
시작하기전에...
이글은 연재성글이 아니라, 본인의 프로젝트(작업) 진행시 일어난 문제를 해결하는 과정을 올리는 글임을 다시 한번 밝힙니다.
본 문에 나오는 __flash 지정자라는 표현은 저만의 임의 표현이며, 올바른 표현은 아닙니다만, 형지정자(const, volatile)와 같은 위치에 쓰이며, 그 의미도 코드나 변수가 놓일 메모리를 가르키는 곳을 나타내는 것이므로, 지정자라는 표현이 많이 벗어난 표현은 아닙니다.
본문
Bootloader 두번째글에서 언급했던, __flash 지정자(IAR 확장 키워드)를 사용하지 못하는 당연한 이유를 알게되었습니다.
알다시피, ATmega128 은 Flash 영역이 0x0000 ~ 0x1FFFF 까지 입니다. 그런데, 매뉴얼을 보니 __flash 지정자는
0x0000 ~ 0xFFFF 를 지시할수 있는 지시자였네요. NEAR_F 라는 CODE 세그먼트에 영역에 위치하니, NEAR_F 세그먼트가 선언되어야 합니다.
Fatal Error[e72]: Segment NEAR_F must be defined in a segment definition option (-Z, -b or -P)
Boot Section 만 사용하는 *.xcl 설정으로는 위와 같은 에러가 나는 것은 당연한 것입니다.
ATmega128 에서 Boot Section 은 최대 0x1E000 ~ 0x1FFFF 입니다.
Bootloader를 만드는 경우나, 문자상수를 나타내는 포인터를 플래쉬(코드영역)로 놓으려면, __farflash 를 사용하여야 합니다.
__farflash는 0x0-0xFFFFFF 영역을 지시할수 있습니다.
위에 언급한대로 정말 당연한 문제였던 것이었습니다. 역시나 컴파일러 매뉴얼이나, 기술노트등을 잘 살펴봐야 하는 것입니다. 단지 조금은 짧은 영어가 문제입니다.
아직 __eeprom 지시자를 쓸수 있게끔 하는 법은 모르겠습니다. 수요가 공급을 만들듯이, 뜻하는 곳에 길이 있다는 것을 다시한번 깨닫게 해주는 하루였습니다.
아래는 Bootloader 에서 Application 으로, Application 에서 Bootloader로 전환하는 코드입니다.
disable() 은 전체인터럽트금지 명령을 define 한것입니다.
#define GoApp() do{ disable(); /* Enable change of interrupt vectors */ MCUCR = (1 < < IVCE); /* Move interrupts to application flash section */ MCUCR = 0; ((void (*)())0x0000)(); }while(0) #define GoBoot() do{ RAMPZ = 1; ((void (*)())0x1E000)(); }while(0)
- 참고 문서 -
IAR 기술노트
ATmel 어플노트 AVR106
EWAVR_CompilerReference.pdf - 컴파일러 매뉴얼
'Hardware' 카테고리의 다른 글
삑소리로 보드체크 (0) | 2006.06.05 |
---|---|
“구운 CD의 수명은 기껏해야 5년에 불과” (0) | 2006.06.05 |
AVR BootLoader 구성하기(2) (0) | 2006.06.03 |
AVR BootLoader 구성하기 (0) | 2006.06.03 |
PC용 리모콘 제작 (1) | 2006.06.03 |
- Total
- Today
- Yesterday
- Network Inspector
- cartoon
- Embedded System
- Battle
- Mabinogi
- humor
- Linux
- Military
- network
- Life News
- Assembly
- Tech News
- 프리랜서로 살아남는 법
- diary
- Reverse Engineering
- console
- 짤방 및 아이콘
- 나비효과
- medical
- 3D Engine
- Information Processor
- Web Programming
- wallpaper
- WDB
- 야마꼬툰
- win32
- C#
- BadCode
- 막장로그
- USB Lecture
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |