ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20140722 (ARM ADC, Assembly 기초, Debug)
    부산IT학원/스마트컨트롤러 2014. 7. 22. 10:24

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








Designed by Tistory.