'toppers'에 해당되는 글 5건

  1. 2009.04.15 22일째 - 알람 샘플의 동작을 정리해 보다. (2)
  2. 2009.04.15 21일째 - 알람까지 분석하다
  3. 2009.04.15 20일째 - 여전히 문서 정리 중
  4. 2009.03.21 Start hardware-specific Initialization code call #1
  5. 2009.03.18 EZ-AT7 용으로 바꾼 다이어트 된 소스
2009.04.15 10:08

22일째 - 알람 샘플의 동작을 정리해 보다.

임성락 교수님과 이야기 하다가
교수님 제의로 알람이 동작하는 샘플을 하나의 전체 프로그램으로 보고
토퍼스 내에서의 동작을 추적하고 이를 정리해 보기로 했다.

교수님과 토의 하면서 진행하니 무척 분석이 빠르다.

소스 추적하고
내용 다시 점검하고
필요한 부분만 소스 요약 하고
프린터 뽑고
이를 정리하고

교수님과 나의 환상(?)적인 호흡으로

저녁 8시반에 끝내고 말았다.

아~~

뿌듯…

교수님이

우리가 목적으로 하는 로봇용 오섹을

만들어 가보는 것을 시작해 보자 신다.

좋구만요..


Trackback 0 Comment 2
  1. 2009.09.01 10:43 address edit & del reply

    비밀댓글입니다

  2. Uggs Outlet 2011.11.25 15:24 신고 address edit & del reply

    좋은 책은 친한 오늘 영원히 동일합니다.

2009.04.15 10:07

21일째 - 알람까지 분석하다

권오용이가 열심히 준비한 내용을 세미나 하였다.

세미나 내용은 알람 샘플에 대한 동작에 대한 조사 및 발표

흐흐

고생이 많았다고나 할까

생각보다 빠르게 오용이가 적응하고 있는 것 같다.

내용도 무척 알찼다.

임성락 교수님과 나 역시 다시 한번 세미나 하며

소스를 재검토 했다.

어떻게 보면 어려운 내용 없고
어떻게 보면 나름 대로 어렵고

쉽지만은 않은 것 같다.


Trackback 0 Comment 0
2009.04.15 10:04

20일째 - 여전히 문서 정리 중

날씨가 다시 쌀쌀해 졌다.

아침에 부랴 부랴 내려와서 약간 덜된 강의 준비하고 수업에 들었갔다.
흐흐…

학생들이 열심히 한다.
나만의 착각일지 몰라도 뿌듯하다.

모든 학생이 실습을 확실히 끝나도록 찾아가는 서비스를 제공하다 보니
강의가 늦게 끝났다.

그런데 원래 예정된 세미나가 다음주로 밀어 졌다.

흐흐

잘됐다는 생각에 미뤄 놓았던 자료를 올렸다.

결국 새로운 팀원은 합류하지 않았다.

다음주에 오려나..?

Trackback 0 Comment 0
2009.03.21 02:22

Start hardware-specific Initialization code call #1

toppers 의 루틴 중 가장 처음 분석한 위치는

OSEK 문서에서 설명하고 있는 것 중

“Start hardware-specific Initialization code call”

즉 하드웨어가 리셋 된 이후 StartOS() 가 호출 되기 전까지의 분석이다.

이 부분은 다음 그림과 같은 위치에 해당된다.

리셋 과 벡터 테이블



ARM 은 하드웨어 적으로 RESET 상태가 되면 벡터 테이블이 0 번지에 위치하게 되고 이후 RESET 테이블에 주소 즉 0 번지에 있는 루틴이 실행된다. 

EZ-AT7에 사용되는 프로세서인 AT91SAM7S 계열도 ARM 계열이기 때문에 벡터테이블이 존재하게 된다.

이 테이블은 toppers_osek/config/at91sam7s-gnu/vectors.s 파일에 정의되어 있다.

즉 가장 처음 시작 시점은 이 파일의 벡터 테이블이다. 이를 벡터 테이블에서 리셋 벡터는 init.s 의 start 라벨으로 점프하는 코드가 기술 되어 있다.


그림에서 보는 것과 같이

reset 은 start로 이동하고  data_abort_handler은 다른 쪽으로 점프하여 최종적으로 C 함수를 호출하게 된다.

Undefined instruction vector, software interrupt vector, prefetch abort vector, reserved vector는각각 init.s 의 핸들러로 호출하는데 결국 해당 루틴에서 무한 루프를 돌기 때문에 실제로는 프로세서가 멈추어 버리는 효과가 있다. 즉 특별한 처리를 하지 않는다는 의미가 된다.

IRQ vector와 FIQ 벡터는 AIC IVR 또는 FVR 에 설정된 루틴을 호출하게 된다.

이런 부분은 나중에 인터럽트 처리에서 다시 설명할 것이므로 여기서는 reset이후 start를 호출한다는 것만 기억하자.

AT91SAM7S의 부팅시 메모리 맵 특성

ARM에서 RESET 후 부팅되기 위해서는 보통 0 번지에 플래쉬 메모리가 할당되거나 NAND 부팅을 하기 위한 SRAM 이 할당된다.
AT91SAM7S 역시 ARM 코어를 사용하므로 이와 동일한 처리가 필요하다.
그런데 AT91SAM7S 프로세서는 0 번지에 할당된 메모리는 없다. 즉 0 번지는 실제로 메모리가 존재하지 않는 빈 공간이다.

다음 그림은 이런 상태를 나타낸 것이다.



이런 상태에서 프로세서가 RESET 되면 플래쉬 메모리가 0 번지에 맵핑 된다. 즉 플래쉬 메모리는 0x0000 0000 ~ 0x000F-FFFF 에서도 접근이 가능하고 0x0010 0000 ~ 0x001F FFFF 에서도 접근이 가능하게 된다.

이런 상태를 그림으로 보면 다음과 같다.


플래쉬 메모리의 영역이 1 M 바이트로 잡혀 있지만 실제로는 256K 바이트만 있으므로 접근 가능한 주소 공간은
0x0000 0000 ~ 0x0003_FFFF 와 0x0010 0000 ~ 0x0013_FFFF 이다.
이런 상태에서 MC_RCR 레지스터의 RCB 비트에 1을 써 넣으면 0 번지는 SRAM  메모리에 맵핑된다.
이것을 그림으로 보면 다음과 같다.



SRAM 메모리의 영역이 1 M 바이트로 잡혀 있지만 실제로는 64K 바이트만 있으므로 접근 가능한 주소 공간은
0x0000 0000 ~ 0x0000_FFFF 와 0x0020 0000 ~ 0x0020_FFFF 이다.
이런 상태에서 MC_RCR 레지스터의 RCB 비트에 1을 써 넣으면 0 번지는 다시플래시 메모리에 맵핑된다.
즉 MC_RCR 레지스터의 RCB 비트에  1을 써 넣을 때마다 맵핑 상태가 토글링 된다.

 
Trackback 0 Comment 0
2009.03.18 17:41

EZ-AT7 용으로 바꾼 다이어트 된 소스

EZ-AT7 용으로 일일히 바꾼 소스는 다음과 같다.
분석하고 싶은 사람은 다운로드 받아서 분석하며 된다.

다이어트된 소스



다이어트 된 디렉토리 구조은 다음 그림과 같다.




samples/alarmtest

AlarmTest.oil
Makefile
alarm_test_ram.elf
alarm_test_ram.elf.map
alarm_test_ram.ld
alarm_test_rom.bin
alarm_test_rom.elf
alarm_test_rom.elf.map
alarm_test_rom.ld
alarm_test_samba.ld
alarm_test_samba_ram.bin
alarm_test_samba_ram.bin.map
alarm_test_samba_ram.bin_elf
implementation.oil
kernel_cfg.c
kernel_id.h
samba_ram.tcl
template.c

toppers_osek/config/at91sam7s-gnu


AT91SAM7.h
aic.c
aic.h
cpu_config.c
cpu_config.h
cpu_context.h
cpu_defs.h
cpu_insn.h
cpu_support.S
data_abort.c
debug.S
init.s
interrupts.h
interrupts.s
irq.s
systick.c
systick.h
tool_config.h
tool_defs.h
vectors.s

toppers_osek/config/at91sam7s-gnu/ez_at7


ez_at7.make
mytypes.h
osek_interface.c
sam7.lds
sys_config.c
sys_config.h
sys_defs.h
sys_support.S

toppers_osek/include


kernel.h
osek.h
t_config.h
t_stddef.h

toppers_osek/kernel


alarm.c
alarm.h
check.h
event.c
interrupt.c
interrupt.h
osctl.c
osek_kernel.h
resource.c
resource.h
task.c
task.h
task_manage.c

toppers_osek/sg


lego_nxt.sgt
sg.exe

toppers_osek/sg/impl_oil


impl_os_bcc1.oil
impl_os_bcc2.oil
impl_os_ecc1.oil
impl_os_ecc2.oil

toppers_osek/syslib/at91sam7s-gnu/ez_at7


hw_sys_timer.c

 

Trackback 1 Comment 0