임베디드 프로그래밍  

         
전체 기타 | WinCE | Delphi | VisualC | ARM | Media | SE | 마리오네트 | Java | wdm | JTAG | 영상처리 | 인증 | 질문/답변 | H/W | 알고리즘 | Platform | .net | VB | PPC | Network | android | QT | WWW | Linux |
이종수 박사 ARM 이론강의 요약
하창호03-18 17:35 | HIT : 6,597
1. 교재
- ARM System-On-Chip Architecture (교보)
- ARM Architecture Reference Manual (PDF)

2. 주의점
- 데이터 공간은 8bit 사용, ARM에서 int 는 32 bit
- 주소공간은 2^32 = 4 GB
- *(int *)(100) = 0x12345678; // 4개의 주소공간에 저장됨
- 5년 후 ARM 은 쿼드 페러럴 까지 갈것이다.
- IRQ 보다 FIQ를 먼저 처리한다.
- DSP + RISC
- Cache 수동작업 요령 알아야 한다
- 암은 플로팅포이트 연산은 지원하지 않는다.
- Coprocessor 16개 까지 붙일 있다.
- S3C2410은 MMU = Coprocessor 15번에 붙어 있다.
- 멀티코어는 메모리를 공유하는 것 Coprocessor 와 연결 할 때
- 멀티프로세서는 메모리를 각각 따로 가지고 있는 것 DSP 와 연결 할 때
- 메모리 억세스시 Alignment 포인터 변수의 메모리 공간은 2의 배수여야 한다.
- *(int *)(102) = 0x1234; 는 다운 *(short *)(102) = 0x1234; 는 정상 동작
- 32 비트 데이터를 1 번지 부터 사용하면 죽는다. 0이나 4번지 부터 사용하면 정상
- __packed 사용하면 Alignment 맞지 않아도 스스로 알아서 함
- char i; int j; 선언시 i는 4 byte 사용
- Alignment 가 잘못 되면 잘 익셉션이 발생하거나 죽는다.
- 3개의 버스를 가지고 있다. Core 200MHz, AHB 100MHz, APB 50MHz
- 외부로 연결되는 버스는 AHB 이다.
- 스택 초기화는 C로 할 수 없다.
- 레지스터는 주소가 없다.
- 특수명령레지스터는 레지스터가 아니고 메모리 이다.
- ARM 7은 폰노이먼 아키텍쳐 3 파이프 라인
- ARM 9은 하버드 아키텍쳐 5 파이프 라인
- 데이터비트수와 CPU 처리 비트 수는 상관없다.
- 암명령어 (ARM 32bit, Thumb 16bit, Java 8bit, DSP Extention)
- S3C2410 = ARM920T = ARM9TDMI + MMU
- ARM940T = ARM9TDMI + MPU
- 가격 ARM920T > ARM940T
- 현재 100 번지 명령 수행시 PC 값은 108 번지 이다.
- 각 모드에 따른 레지스터 갯수 파악해 놓자

3. GCC 사용
- make 실행시 "make: `Ex07.elf' is up to date." 라고 나오면 make clean 명령을
실행 후 make 하면 정상 동작함
- 한번 make 한 후에는 elf 파일만 ARM 다운에 끌어다 놓은 후 빌드 버튼만으로
재컴파일이 가능하다.
- 한글 디렉토리 허용안함

4. 어셈블러
- /, % 연산 명령어 없음
- i % 4 대신 i & 0x03 사용 한다.
- 큰수를 더했을 때 ADD 뒤에 S(ADDS)를 붙이지 않으면 케리가 발생되지 않는다.
- 케리가 있는 덧샘은 ADC 이다 케리가 있는 큰수의 덧샘은 ADCS 이다.
- 5 - 3 = 케리 1
- 3 - 5 = 케리 0
- 5 - 5 = 케리 1
- APM 에서 Optimisation Level 을 결정하여 디버그 정보를 자세하게 볼 수 있다.
- ARM9TDMI sk ARM920T 처럼 디버그 기능이 탑재된 CPU 여야 한다.
- SUB reg1, #0, reg2 못씀 SUB reg1, reg2, #0 사용가능
- BIT SET => ORR reg1, reg1, #(1<<해당비트)
- BIT CLEAR => BIC reg1, reg1, #(1<<해당비트)
- 부호 반전 => RSB
- 비트 반전 => MVN
- CMP 는 S 옵션을 붙이지 않는다.
- 상수 저장 MOV r0, #0x100 또는 LDR r0, =0x100 사용
- LDR 뒤에 상수 사용시 # 대신 = 사용
- ADD r1, r2, r3 와 ADD r1, r2, r3, LSL r4 의 실행 시간 차이는 한클럭 차이이다.
- r0 = 5
- x8 MOV r0, r0, LSL #3
- x5 ADD r0, r0(= 1 처럼됨), r0, LSL #2
- x7 RSB r0, r0(= 1 처럼됨), r0, LSL #3
- 로테이트 기능은 어셈블 ROR, ROX 등을 써서 사용하는게 좋다.
- 곱셈시 큰수 곱할경우 부호 비트가 덮어서져서 지워질 수도 있으므로 64비트 곱셈명령 추가되었다.
- r1 = 0x12345678; r2 = 0x000000ab 일때
- MUL r0, r1, r2 와 MUL r0, r2, r1 중 먼저것이 더 속도가 빠름
- 64 비트 변수형 "long long" 임
- 64 비트 형 곱셈 명령은 MULL 임 케리 있는 명령은 SMULL 임
- 리스크에서는 레지스터를 경유하지 않은 메모리간 복사는 안된다. 시스크에서는 된다.
- 그러므로 메모리 오퍼레이션을 줄이는게 중요하다.
- STR reg1, [reg2] reg1을 reg2가 가르키는 주소공간에 넣어라
- LDRH 는 16진수만 읽어 온다 그리고 앞쪽은 0으로 체워진다.
- LDRSH 는 부호가 있는 16진수만 읽어 온다 그리고 앞쪽은 0으로 체워진다.
- LDRB 는 8진수만 읽어 온다 그리고 앞쪽은 0으로 체워진다.
- LDRSB 는 부호가 있는 8진수만 읽어 온다 그리고 앞쪽은 0으로 체워진다.
- STRH 는 16진수만 저장 한다 그리고 앞쪽은 0으로 체워진다.
- STRB 는 8진수만 저장 한다 그리고 앞쪽은 0으로 체워진다.
- MOV r0, #100
- MOV r1, #0x12345678 일경우
- STR r1, [r0] 이고 빅엔디언일 경우
- [100] 12
- [101] 34
- [102] 56
- [103] 78 이 된다.
- 여기서 r0가 102 라고 하면 에러가 난다. Alignment 때문
- MOV r1, #100
- LDR r0, [r1] => r0=10, r1=100
- LDR r0, [r1, #4] => r0=20, r1=100
- LDR r0, [r1], #4 => r0=10, r1=104
- LDR r0, [r1, #4]! => r0=20, r1=104
- 코사인 등의 소수 연산은 룩업테이블을 만들어서 사용
- 빅엔디언은 큰수쪽을 작은번지에
- 리틀엔디언은 작은수쪽을 작은번지에
- LDRCCH(o)
- ADDCCS(o)
- LDRBS(x) => LDRSB(o)
- LDRBNE(x) => LDRNEB(o)
- 메모리 블럭 복사간 대기시간 없음 최대 속도 복사 하기위해
- 60(15개 레지스터 * 32 bit)바이트를 60바이트 단위로 복사 하기 위해
- LDMIA r1!, {r3, r4, ... (14개)} 블럭단위 읽기
- STMIA r2!, {r3, r4, ... (14개)} 블럭단위 쓰기를 사용
- ARM CPU의 강점 3가지
- 쉬프터 연산자
- 멀티플 로드 / 스토어
- 조건 연산자
- CPSR 과 SPSR 은 일반 명령어로 수정할 수 없다.






36  ARM :: 인터럽트 핸들링    하창호 2007·08·29 4459
35  ARM :: CC 와 Slick Editer & T32 를 연동 프로젝트...    하창호 2007·02·15 4253
34  ARM :: T32 매크로 팁 중 현재 디렉토리 가져오는 방법    하창호 2007·02·08 3795
33  ARM :: 플레쉬에 대해서    하창호 2006·04·12 3875
32  ARM :: 삼성 반도체 홈페이지 Flash S/W 및 PocketStore I...    하창호 2006·04·12 4270
31  ARM :: MMU (memory management unit)    하창호 2005·03·10 4204
30  ARM :: ARM 프로세스이해 교육완수 예제    하창호 2004·03·23 4449
29  ARM :: S3C2410 터치스키린 이용한 그림판 제작 예제    하창호 2004·03·22 5703
28  ARM :: 이종수 박사 ADS, SDT, GCC 를 이용한 예제    하창호 2004·03·22 4878
27  ARM :: S3C2410 LCD에 아날로그 시계 출력하기 (숙제 3)    하창호 2004·03·22 5971
26  ARM :: S3C2410 LCD에 이미지 출력하기 예제    하창호 2004·03·19 6477
25  ARM :: [ASM] 1부터 10 까지 더하기 GCC 사용    하창호 2004·03·19 4024
24  ARM :: [ASM] LOOP 를 이용한 메모리간 복사 GCC 사용  …3  하창호 2004·03·19 4239
 ARM :: 이종수 박사 ARM 이론강의 요약    하창호 2004·03·18 6597
22  ARM :: ARM Down, GCC 를 받을 수 있는 곳    하창호 2004·03·18 3641
21  ARM :: SMDK2410(S3C2410) Board Reference    하창호 2004·03·18 3823
20  ARM :: S3C2410X USER'S MANUAL    하창호 2004·03·18 3493
19  ARM :: SDT 관련문서    하창호 2004·03·18 3336
18  ARM :: GCC 관련문서    하창호 2004·03·18 3462
17  ARM :: ARM명령어요약    하창호 2004·03·18 3655
16  ARM :: 이종수 박사 ARM 뛰어넘기 교재    하창호 2004·03·18 4999
15  ARM :: ARM Architecture Reference Manual  …1  하창호 2004·03·18 3523
14  ARM :: 에디터 (숙제 2)    하창호 2004·03·17 3548
13  ARM :: S3C2410 IIS를 이용한 사운드 출력 예제    하창호 2004·03·17 4381
12  ARM :: S3C2410 Keyboard와 LCD 제어하기 예제    하창호 2004·03·17 4372
11  ARM :: S3C2410 Keyboard 제어하기 예제    하창호 2004·03·17 4194
10  ARM :: DNW 시리얼을 사용하여 프로그램을 다운로드 및 실행하...    하창호 2004·03·17 5612
9  ARM :: APM DownLoader 방식과 DNW DownLoader ...  …1  하창호 2004·03·17 3852
8  ARM :: S3C2410 간단한 알람 시계 예제 (숙제1)    하창호 2004·03·16 5003
7  ARM :: S3C2410 Watch Dog Timer 사용 예제    하창호 2004·03·16 4483
6  ARM :: S3C2410 타이머와 인터럽트로 LED 불켜기    하창호 2004·03·16 4336
5  ARM :: ARM 프로세스의 이해 강의 자료    하창호 2004·03·16 4942
4  ARM :: S3C2410 시리얼로 값 입력받는 계산기 만들기    하창호 2004·03·16 4212
3  ARM :: CPU 최대 주파수를 가지고 최소 타이머 주기 알아내기  …36  하창호 2004·03·16 2936
2  ARM :: S3C2410 버튼 입력받아 LED 불켜기 예제    하창호 2004·03·15 4584
1  ARM :: S3C2410 LED 불켜기 예제    하창호 2004·03·15 4478
1
   
Copyright 1999-2018 Zeroboard / skin by GGAMBO
....