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 이라고 부른다.








설정

트랙백

댓글