Code Worrior SYSDEC <*SlideNumber*>.

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

컴퓨터와 인터넷.
ISA 심화 및 start.S code 분석 SIOR 15th 최재훈.
MicroVision.- STR711F Board MicroVision & ST Seminar ARM7TDMI Processor.
Linux/UNIX Programming
1. 개발 시스템 개요.
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
1. 신뢰할 수 있는 싸이트 등록 인터넷 익스플로러 실행 후 실행
Power Java 제3장 이클립스 사용하기.
Cross Compiler를이용한 커널 컴파일 및 포팅
컴퓨터 프로그래밍 기초 [Final] 기말고사
TMS320F2812의 GPIO의 이해.
시스템집적반도체 설계 검증 환경과 기법 Ch 7.
UNIT 06 JTAG Debugger 로봇 SW 교육원 조용수.
12장. 제어 장치 다루는 내용 CPU속의 제어장치 마이크로 연산 제어장치의 동작.
어셈블리 문법 보강 4월 10일.
System Programming 제1장 배경지식 시스템 프로그래밍.
시스템 보안 [Buffer Overflow] DEC, 15, 2013 By 박동혁.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
C / C++ Programming in multi platform
ARM 명령어 집합 Lecture #7.
컴퓨터정보공학부 서버 안내 [ IBM x3500 ] it.sangji.ac.kr ict.sangji.ac.kr 혹은
DK-128 ADC 실습 아이티즌 기술연구소
부트로더와 Self Programming
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
ARM Development Suite v1.2
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
타이머카운터 사용법 휴먼네트웍스 기술연구소
PSW : PROGRAM STATUS WORD
ATmega128 FND 실습 휴먼네트웍스 기술연구소
DK-128 개발환경 설정 아이티즌 기술연구소 김태성 연구원
임베디드 소프트웨어 설계.
AVR – ATmega103(ATMEL) Compilers & ISP
Chap 6.Assembler 유건우.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Linux/UNIX Programming
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
홀인원2.0 설치 메뉴얼.
영상처리 실습 인공지능연구실.
ARM Development Suite v1.2
DK-128 FND 실습 아이티즌 기술연구소
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Nessus 4 설치 정보보호응용 조용준.
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
DK-128 실습 타이머카운터 사용법 아이티즌 기술연구소
컴퓨터 시스템 하드웨어 컴퓨터 시스템 소프트웨어 C P U Control Unit 입 력 장 치 출 력 장 치 ALU
ARM Development Suite v1.2
Linux/UNIX Programming
7주차 실습 FPGA 보드 사용법.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
( Windows Service Application Debugging )
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
DK-128 개발환경 설정 아이티즌 기술연구소 김태성 연구원
DK-128 개발환경 설정 아이티즌 기술연구소
AT MEGA 128 기초와 응용 I 기본적인 구조.
13주 실습강의 학기, 소프트웨어 설계 및 실험(Ⅰ).
ARM Development Suite v1.2
논리회로 설계 및 실험 4주차.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
TVM ver 최종보고서
3.2 분기 명령어.
ARM Development Suite v1.2
ARM Development Suite v1.2
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
숙제 작성 및 제출 과정 김진하 2008/03/14.
Assembly 05 방호남 07 반지훈 09 박상욱.
ARM Development Suite v1.2
Presentation transcript:

Code Worrior SYSDEC <*SlideNumber*>

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

New Project SYSDEC <*SlideNumber*>

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

결과 SYSDEC <*SlideNumber*>

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

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

파일 선택 SYSDEC <*SlideNumber*>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Assembler 설정 SYSDEC <*SlideNumber*>

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

Qsort_small SYSDEC <*SlideNumber*>

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

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

Debugger의 선택 SYSDEC <*SlideNumber*>

Argument 설정 SYSDEC <*SlideNumber*>

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

AXD의 실행 SYSDEC <*SlideNumber*>

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

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*>

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

Debug Target의 설정 SYSDEC <*SlideNumber*>

Armulator로 설정 SYSDEC <*SlideNumber*>

Armulator의 설정 SYSDEC <*SlideNumber*>

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

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

Go SYSDEC <*SlideNumber*>

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

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

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

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*>

-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*>

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*>

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

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

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

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

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

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

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

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*>

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

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으로 초기화

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으로 모드 변화되면서 점프

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 0x123456 ; Angel semihosting ARM SWI ] Semihosting: 타겟에서 수행되는 코드중 I/O에 관련되는 코드를 캡쳐해서 I/O를 타겟에서 수행하는 것이 아니라 디버거를 구동하는 호스트 시스템에서 수행하는 기능이다. Semihosting은 SWI를 유발한다. 디버거랑 서로 Matche된 number이면 semihosting이 동작한다. SYSDEC <*SlideNumber*>

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*>

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에 저장하는 것.