20140722 (ARM ADC, Assembly 기초, Debug)
107일차
------------------
ARM ADC
------------------
------- ADC 타이밍도
1. ADC_CR Reg에 START bit가 set 되면
변환을 시작한다.
2. 변환이 끝나면 ADC_SR Reg에 해당 채널 EOC bit가 set 되고
ADC_SR Reg에 DRDY bit도 set 된다. (DRDY는 가장 먼저 변환이 끝난 후 계속 H)
3. 해당 ADC_CDRx Reg로 값을 읽으면 ADC_SR Reg에 해당 채널 EOC bit가 clear 된다.
4. 다시 ADC_CR Reg에 START bit가 set 되면 변환을 시작하고
변환이 끝나면 또 해당 채널의 bit가 set 된다.
5. ADC_LCDR Reg에는 최근에 변환이 완료된 값을 가지고 있고
이 값을 읽을 시 모든 채널의 EOC bit가 clear 된다.
--- 소스
- adc.c
- main.c
---------------
ASSEMBLY
---------------
------- example source code
------- compile, link, run
------- debug 모드
------- windbg 로 디버깅
1. 요놈 실행.
2. 실행 파일 열기
3. 실행 파일 열기
4. 이 화면이 뜸.
5. 알림창이 한 번 뜨고 두 번정도 더 누르면
6. 아래 창이 뜸.
7. View -> Registers 실행
8. View -> Memory 실행
9. 감시할 함수 이름을 써주는데 _start 함수를 감시할 예정.
10. 한 번 더 실행 시켜서 감시할 변수의 주소값을 적어주는데
number1이 가장 먼저 시작하는 변수라 이것을 적으면 뒤에 있는 메모리의 다른 변수도
함께 볼 수 있다.
11. 그럼 여러 창들이 뜨고 아래와 같이 배치하였다.
12. F11 키를 눌러 몇 번 실행하였다. 그림 안에 설명 참고.
13. 이렇게 Memory와 Register의 값이 어떻게 변하는지 관찰할 수 있다.
14. 여기서 중요한것은 12번 그림에서 0x00401072 주소에 명령어를 보면
a3 00 40 40 00 이라는 숫자가 있는데
mov number1, eax 를 의미한다.
위의 그림을 참고하면 명령어가 각 장비마다 실행 속도를 확인할 수 있고,
만약 같은 동작을 하는 명령어인데 속도와, 크기가 더 효과적인 명령어가 있을 수도 있다.
C에서는 바꿀 수 없지만 Assembly를 통해 더 효과적인 명령으로 수정하여
더욱 최적화가 가능하다.
또한, 이 처럼 실행 파일을 Asm 파일로 바꾸는 과정을 Disassembly 라고 하는데,
Disassembly 를 하고 코드를 바꿔 실행의 흐름을 바꾸는 기술을 Reverse Engineering 이라고 부른다.