Presentation is loading. Please wait.

Presentation is loading. Please wait.

Code Worrior SYSDEC <*SlideNumber*>.

Similar presentations


Presentation on theme: "Code Worrior SYSDEC <*SlideNumber*>."— Presentation transcript:

1 Code Worrior SYSDEC <*SlideNumber*>

2 CodeWarrior CodeWarrior IDE(integrated development environment)는 ARM과 Thumb 명령어를 타겟으로 하는 C, C++, ARM assembly language code를 개발하는 ARM Developer Suite에 사용되는 IDE이다. SYSDEC <*SlideNumber*>

3 New Project SYSDEC <*SlideNumber*>

4 Project 이름 입력 ARM executable image 생성을 위한 프로젝트 <*SlideNumber*>
SYSDEC <*SlideNumber*>

5 결과 SYSDEC <*SlideNumber*>

6 파일 추가 마우스 오른쪽 버튼 클릭 SYSDEC <*SlideNumber*>

7 파일 추가 (다른 방법) SYSDEC <*SlideNumber*>

8 파일 선택 SYSDEC <*SlideNumber*>

9 Build Target 선택 원하는 타겟 설정 SYSDEC <*SlideNumber*>

10 Build Target Debug, DebugRel, Release build targets Debug DebugRel
소스 파일의 각각의 라인에 대해서 디버그 정보를 생성 DebugRel 소스 파일의 각각의 라인에 대해서 적당한 수준의 디버그 정보를 생성 Release 디버그 정보를 생성하지 않음 SYSDEC <*SlideNumber*>

11 파일 추가 결과 SYSDEC <*SlideNumber*>

12 파일 그룹 생성 파일 관리 용이 SYSDEC <*SlideNumber*>

13 파일 그룹 생성 결과 (qsort_small)
SYSDEC <*SlideNumber*>

14 파일을 파일 그룹으로 이동 SYSDEC <*SlideNumber*>

15 이동 결과 파일 그룹 파일 이름 SYSDEC <*SlideNumber*>

16 파일이나 그룹의 삭제 SYSDEC <*SlideNumber*>

17 프로젝트 화면의 탭 Files 탭 Link Order 탭 Targets 탭 파일, 그룹, 서브프로젝트
CodeWarrior가 최종 결과 파일을 어떤 순서로 링크 하는가에 대한 정보 각각의 오브젝트 파일이 최종 binary 타겟 파일에 위치하는 순서 Targets 탭 Debug, Release, DebugRel SYSDEC <*SlideNumber*>

18 Build Target Setting 현재의 타겟 SYSDEC <*SlideNumber*>

19 텍스트 에디터 호출 파일 이름을 더블 클릭 SYSDEC <*SlideNumber*>

20 텍스트 에디터 SYSDEC <*SlideNumber*>

21 Build Target 내부 설정 SYSDEC <*SlideNumber*>

22 Target 이름 및 링커 종류의 설정 SYSDEC <*SlideNumber*>

23 Access Path User header 파일 혹은 library 파일의 search path 설정
C system header 파일 혹은 library파일의 search path 설정 SYSDEC <*SlideNumber*>

24 File Mapping 파일 이름의 확장자를 ARM C compiler와 같은 툴의 plug-in과 연계시킨다.
SYSDEC <*SlideNumber*>

25 Assembler 설정 SYSDEC <*SlideNumber*>

26 C 컴파일러 설정 SYSDEC <*SlideNumber*>

27 Qsort_small SYSDEC <*SlideNumber*>

28 Make make 버튼을 클릭한 후 error나 warning 없이 컴파일이 끝났다. <*SlideNumber*>
SYSDEC <*SlideNumber*>

29 Make Window warnings errors 그 밖의 message error가 난 위치
SYSDEC <*SlideNumber*>

30 Debugger의 선택 SYSDEC <*SlideNumber*>

31 Argument 설정 SYSDEC <*SlideNumber*>

32 Debugging과 Running Run 또는 Debug 버튼을 누르면 AXD (ARM eXtended Debugger)가 자동으로 실행된다. Run Debug SYSDEC <*SlideNumber*>

33 AXD의 실행 SYSDEC <*SlideNumber*>

34 ARM eXtended Debugger (AXD)
SYSDEC <*SlideNumber*>

35 Target simulated in software
디버깅 시스템의 타겟 ARMulator (Software) Architecture simulator Multi-ICE (Hardware) 또는 Vbox-pro JTAG 기반 ARM Debugger AXD RDI ARMulator Target simulated in software Multi-ICE ARM development board Remote Debug Interface (RDI) SYSDEC <*SlideNumber*>

36 AXD의 타겟 설정 (1) ARM920T로 바로 연결이 안 된다면 AXD 메뉴바의 Options  Configure Targets를 선택! SYSDEC <*SlideNumber*>

37 Debug Target의 설정 SYSDEC <*SlideNumber*>

38 Armulator로 설정 SYSDEC <*SlideNumber*>

39 Armulator의 설정 SYSDEC <*SlideNumber*>

40 AXD Window default break disassembled image point log window
SYSDEC <*SlideNumber*>

41 ARMulator를 이용한 Simulation
AXD의 Execute menu에서 “Go”를 선택 또는 “Go” 버튼을 클릭 Default breakpoint main()의 시작 지점에서 실행이 멈춤 실행의 계속 “Go”를 클릭 프로그램 실행을 반복하려면, File menu바에서 “Reload Current Image…”를 클릭 SYSDEC <*SlideNumber*>

42 Go SYSDEC <*SlideNumber*>

43 Qsort_small 실행 중 output이 console window에 나타난다. <*SlideNumber*>
SYSDEC <*SlideNumber*>

44 Qsort_small 실행이 끝난 후 SYSDEC <*SlideNumber*>

45 ARM7의 6가지 동작모드 User Mode 일반 응용 프로그램을 수행하는데 사용가능, FIQ Mode
IRQ보다 좀 더 빠른 인터럽트 처리를 위해 있는 것 IRQ Mode 일반적으로 I/O 장치로부터의 입력이 들어오면 반응하는 흔히 말하는 인터럽트 EXCEPTION Supervisor Mode OS중 서비스 영역에서 동작하는 Mode Abort Mode 명령어를 읽을 수 없거나 데이터를 읽거나 쓸 수 없는 상황에 사용 Undefined Mode ARM7에 정의되어 있지 않은 명령어를 만났을 경우에 발생. SYSDEC <*SlideNumber*>

46 ARM state RO~R7 R8~R12 SP(Stack pointer) LR(Link Register) PC CPSR
SPSR -PC(R15): R15는 다른 CPU에서의 PC와 같은 역할을 한다. ARM 어셈블러는 PC라는 키워드와 R15를 동일하게 취급. -SP (R13) :ARM7에는 스택을 위한 명령어가 따로 없다. SP라는 키워드를 사용하여 R13을 쓸 수 있다. -LR (R14):ARM7에서는 CALL, RET과 같은 명령어가 없다. 대신 Branch with link(BL)라는 명령어가 있는데, 해당 명령어를 수행하여 CALL과 비슷하게 다음에 수행될 PC(R15)값을 LR(R14)에 넣고 분기번지를 PC(R15)에 넣고 분기한다. 함 호출 시, 복귀할 명령어 주소가 저장되 있음 SYSDEC <*SlideNumber*>

47 -ARM7은 32bit status register(=PSR,CPSR)가 6개 있다.
CPU의 6개 동작 상태를 나타냄. N:연산결과가 마이너스 일 때 Z:연산결과가 0이었을 때 C:연산결과가 자리올림이나 내림이 발생한 경우 V:연산결과가 오버 플로우 됐을 때 -ARM7은 32bit status register(=PSR,CPSR)가 6개 있다. -CPSR: Flag bits + control bits -SPSR:이전에 저장된 프로그램 상태 레지스터 SYSDEC <*SlideNumber*>

48 IRQ_Stack EQU RAM_Limit IRQ 스택의 Top pointer정의(stack영역은 1k)
Mode_USR EQU 0X10 유저 모드 선택 비트 Mode_IRQ EQU 0X12 일반 인터럽트 처리 모드 Mode_SVC EQU 0X13 운영체제를 위한 보호 모드 IRQ_Stack EQU RAM_Limit IRQ 스택의 Top pointer정의(stack영역은 1k) SVC_Stack EQU RAM_Limit-1024 SVC메모리스택의 Top pointer(stack영역은 8k) USR_Stack EQU SVC_Stack-1024 USR 스택의 Top pointer I_Bit EQU 0X80 IRQ 불가능 F_Bit EQU 0X40 FIQ 불가능 SYSDEC <*SlideNumber*>

49 부트 코드 작성 (시스템의 초기화 동작) 1. Entry point정의 2. 예외처리 벡터 설정
2. 예외처리 벡터 설정 3. 불필요한 하드웨어 동작 중지 4. 시스템 클록 설정 5. 메모리 시스템 초기화 6. 스택 영역 설정 7. IRQ예외처리 핸들러 설정 및 IRQ인터럽트 Enable 8. C에서 사용하는 변수 초기화. 9. C코드로 분기

50 1. Entry point정의 어셈블러로 구성되며 모든 프로그램에는 반드시 필요하다.
일반적으로 init.S, startup.s등의 이름을 사용한다. AREA Init, CODE, READONLY --- Define entry point EXPORT __main ; defined to ensure that C runtime system __main ; is not linked in ENTRY

51 2. 예외처리 벡터 설정 *Reset_Addr명령어는 Reset_Handler호출을 하게 된다.
2. 예외처리 벡터 설정 *Reset_Addr명령어는 Reset_Handler호출을 하게 된다. Vector_Init_Block LDR PC, Reset_Addr LDR PC, Undefined_Addr LDR PC, SWI_Addr LDR PC, Prefetch_Addr LDR PC, Abort_Addr NOP LDR PC, IRQ_Addr LDR PC, FIQ_Addr Reset_Addr DCD Reset_Handler Undefined_Addr DCD Undefined_Handler SWI_Addr DCD SWI_Handler Prefetch_Addr DCD Prefetch_Handler Abort_Addr DCD Abort_Handler DCD 0 ; Reserved vector IRQ_Addr DCD IRQ_Handler FIQ_Addr DCD FIQ_Handler

52 3. 불필요한 하드웨어 동작 중지 시스템 초기화를 방해하는 하드웨어 동작 중지 와치독 타이머 중지 예
3. 불필요한 하드웨어 동작 중지 시스템 초기화를 방해하는 하드웨어 동작 중지 와치독 타이머 중지 예 LDR r0, R0에 주소 0x 값을 기록한다. LDR r1, =0x0 @ R1에 설정할 레지스터 값을 기록한다. STR r1, [r0] @ R0주소에 R1을 기록한다.

53 4. 시스템 클록 설정 CLOCK 설정 예 LDR r0, =0x4C000014 @ R0에 CLKDIVN 레지스터의 주소 기록
4. 시스템 클록 설정 CLOCK 설정 예 LDR r0, R0에 CLKDIVN 레지스터의 주소 기록 LDR r1, =0x3 @ R1에 설정할 레지스터 값을 기록한다. @ FCLK : HCLK : PCLK = 1:2:4 STR r1, [r0] @ R0주소에 R1을 기록, CLKDIVN 설정 LDR r0, =0x4C @ R0에 MPLLCON 레지스터의 주소 기록 LDR r1, =0xa @ R1에 설정할 레지스터 값을 기록 @ 202.8MHz 출력 사용하도록 설정 STR r1, [r0] @ R0주소에 R1을 기록, MPLLCON 설정

54 5. 메모리 시스템 초기화 사용되는 메모리의 데이터 버스 폭, 억세스 타이밍 등
5. 메모리 시스템 초기화 사용되는 메모리의 데이터 버스 폭, 억세스 타이밍 등 LDR r0, R0에 BANKCON2 레지스터의 주소를 기록 LDR r1, R1에 설정할 레지스터 값 기록 STR r1, [r0] @ R0주소에 R1을 기록, BANKCON2 설정

55 스택 영역 설정 #define STACK_BASE_ADDR 0x33ff8000
#define UserStack STACK_BASE_ADDR - 0x /* USR 스택 base */ #define SVCStack STACK_BASE_ADDR - 0x /* SVC스택 base */ #define UndefStack STACK_BASE_ADDR - 0x /* Undef스택 base */ #define AbortStack STACK_BASE_ADDR - 0x /* Abort 스택 base */ /* IRQ mode stack */ orr r1,r0,#0x12 /* IRQ 모드 값 지정 */ msr cpsr_c,r1 /* IRQ 모드로 변환 */ ldr sp,=IRQStack /* IRQ 모드 스택 설정 */

56 7. IRQ예외처리 핸들러 설정 및 IRQ인터럽트 Enable
MOV R0, #Mode_SVC:OR:F_Bit ; Only IRQ enabled MSR CPSR_c, R0 Mode_FIQ / Mode_UNDEF/ Mode_ABT 등이 올 수 있으며 인터럽트가 불가능하게 세팅 Mode_SVC =>SVC 모드 선택 I_Bit =0X80=> IRQ Disable F_Bit =0X40=> FIQ Disable 즉, SVC 모드에서 IRQ 디스에이블 SYSDEC <*SlideNumber*>

57 8. C에서 사용하는 변수 초기화 소프트웨어 동작을 위한 메모리 구조
Boot code image의 R/W data의 writing이 가능하기 위해 image를 RAM으로 copy해야 한다.

58 8. C에서 사용하는 변수 초기화. ROM에 있는 데이터를 RAM으로 COPY RAM ZI을 0으로 초기화
IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data) IMPORT |Image$$RW$$Base| ; Base of RAM to initialize IMPORT |Image$$ZI$$Base| ; Base and limit of area IMPORT |Image$$ZI$$Limit| ; to zero initialize LDR r0, =|Image$$RO$$Limit| ;ROM 데이터의 포인터를 가져온다. LDR r1, =|Image$$RW$$Base| ; RAM 복사 LDR r3, =|Image$$ZI$$Base| ; Zero init base => top of initialized data CMP r0, r1 ; ROM과 RAM의 데이터가 다른지 비교 BEQ %F1 0 CMP r1, r3 ; Copy init data LDRCC r2, [r0], #4 ; LDRCC r2, [r0] + ADD r0, r0, #4 STRCC r2, [r1], #4 ; STRCC r2, [r1] + ADD r1, r1, #4 BCC %B0 1 LDR r1, =|Image$$ZI$$Limit| ; Top of zero init segment MOV r2, #0 2 CMP r3, r1 STRCC r2, [r3], #4 BCC %B2 ROM에 있는 데이터를 RAM으로 COPY RAM ZI을 0으로 초기화

59 9. C코드로 분기 모든 초기 설정이 완료되면 C함수를 수행할 수 있다. 임베디드의 경우 main 함수를 사용하는 경우도 있지만 대부분 Main또는 C_Entry와 같은 함수를 사용한다. IMPORT C_Entry // 응용 프로그램으로 진입 [ :DEF:THUMB ORR lr, pc, #1 BX lr CODE16 ; Next instruction will be Thumb ] BL C_Entry BX lr //모드변화를 하면서 점프함. //즉 ARM->Thumb 또는 Thumb->ARM으로 모드 변화되면서 점프

60 semihosting Semihosting: 타겟에서 수행되는 코드중 I/O에 관련되는 코드를 캡쳐해서 I/O를
MOV r0, #0x18 ; angel_SWIreason_ReportException LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit [ :DEF: THUMB SWI 0xAB ; Angel semihosting Thumb SWI | SWI 0x ; Angel semihosting ARM SWI ] Semihosting: 타겟에서 수행되는 코드중 I/O에 관련되는 코드를 캡쳐해서 I/O를 타겟에서 수행하는 것이 아니라 디버거를 구동하는 호스트 시스템에서 수행하는 기능이다. Semihosting은 SWI를 유발한다. 디버거랑 서로 Matche된 number이면 semihosting이 동작한다. SYSDEC <*SlideNumber*>

61 Load and store Multiple instructions
Load (memory->register) and store (register->memory_ multiple instruction은 블록 단위로 memory의 데이터 내용을 모든 범용 레지스터들로 load하거나 반대로 모든 범용 레지스터들의 내용을 memory로 story하기 위해 사용한다. LDM/STM 명령어를 사용하는 동안은 Interrupt를 수행하지 못한다. 스택관련 스택과 관련없이 LDMFD/STMFD LDMIA/STMIA LDMED/STMED LDMIB/STMIB LDMFA/STMFA LDMDA/STMDA LDMEA/STMEA LDMDB/STMDB SYSDEC <*SlideNumber*>

62 Setup interrupt /exception vectors
If the ROM is at address 0 this is just a sequence of branches B Reset_Handler //B 무조건 분기 명령어 ;현 위치에서 Reset_Handler로 분기 B Undefined_Handler B SWI_Handler B Prefetch_Handler B Abort_Handler NOP ; Reserved vector B IRQ_Handler B FIQ_Handler ELSE MOV R8, #0 ADR R9, Vector_Init_Block LDMIA R9!, {R0-R7} STMIA R8!, {R0-R7} LDMIA R9!,{R0-R7} => 8개 레지스터에 저장될 내용(4byte*8=32bytes)을 R9가 가리키는 주소로부터 읽어서 R0,R1,R2,R3,R4,R5,R6,R7에 저장하는 것.


Download ppt "Code Worrior SYSDEC <*SlideNumber*>."

Similar presentations


Ads by Google