Atmel Studio 7.0에서 제공하는 시뮬레이터를 사용하여 간단한 소스 코드를 디버깅해보았습니다. 실행된 코드에 의해서 레지스터들이 어떻게 변하는지 확인할 수 있습니다.
http://www.atmel.com/tools/ATMELSTUDIO.aspx 에서 Atmel Studio 7.0을 다운로드 받습니다. 인터넷이 사용가능하면 web installer로 하는게 좋습니다.
설치 완료 후, Atmel Studio를 실행시킵니다.
새로운 프로젝트를 생성하기 위해 메뉴에서 File - New - Project를 선택합니다. New Project 창에서 C/C++ - GCC C Executable Project를 선택해주고 적당한 프로젝트 이름과 프로젝트 저장위치를 지정해줍니다.
Atmega128을 선택해줍니다.
main.c에 다음 코드를 입력하고 저장합니다. 시뮬레이터에서 실행할거라서 코드 수정이 필요한데 크리스탈 주파수(F_CPU)는 1000000로 하고 1ms만 딜레이되도록 했습니다. (_delay_ms(1) ) 크리스탈 주파수의 설정값은 확인이 필요할 듯합니다.
/* * main.c * * Created: 2017-03-26 오후 5:43:53 * Author : webnautes */ #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { DDRB |= (1<<DDB4); while (1) { PORTB |= (1<<PB4); _delay_ms(1); PORTB &= ~(1<<PB4); _delay_ms(1); } } |
메뉴에서 Project - Properties를 선택합니다. 프로젝트 속성 페이지에서 Toolchain을 선택하고, 중앙에 있는 목록에서 AVR/GNU C Compiler - Optimization을 선택합니다. Optimization Level을 None으로 변경합니다. Ctrl + S 키를 눌러 설정을 저장합니다. 시뮬레이터를 안 사용할때에는 최적화 옵션을 Optimize ( -O1 )로 돌려놔야 합니다.
프로젝트 속성 페이지에서 Tool을 선택하고 Selected debugger/programmer 콤보창을 Simulator로 변경합니다. Ctrl + S 키를 눌러서 설정을 저장합니다. Stimuli 파일을 작성해서 시뮬레이터에서 사용하는 부분은 지금은 다루지 않고 나중에 추가 될거 같습니다.. 관련 자료는 포스팅 끝에 있는 링크를 보세요..
메뉴에서 Build - Build Solution을 선택하여 예제코드를 컴파일 합니다. 문제 없으면 결과창에 다음과 같은 메시지들이 보입니다.
------ Build started: Project: simulator test, Configuration: Debug AVR ------
Build started.
Project "simulator test.cproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "c:\users\apple\Documents\Atmel Studio\7.0\simulator test\simulator test\simulator test.cproj" (target "Build" depends on it):
Using "RunCompilerTask" task from assembly "C:\Program Files (x86)\Atmel\Studio\7.0\Extensions\Application\AvrGCC.dll".
Task "RunCompilerTask"
Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 4 --output-sync
make: Nothing to be done for 'all'.
Done executing task "RunCompilerTask".
Using "RunOutputFileVerifyTask" task from assembly "C:\Program Files (x86)\Atmel\Studio\7.0\Extensions\Application\AvrGCC.dll".
Task "RunOutputFileVerifyTask"
Program Memory Usage : 1206 bytes 0.9 % Full
Data Memory Usage : 0 bytes 0.0 % Full
Done executing task "RunOutputFileVerifyTask".
Done building target "CoreBuild" in project "simulator test.cproj".
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
Target "Build" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Avr.common.targets" from project "c:\users\apple\Documents\Atmel Studio\7.0\simulator test\simulator test\simulator test.cproj" (entry point):
Done building target "Build" in project "simulator test.cproj".
Done building project "simulator test.cproj".
Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
디버깅 중 잠시 멈출 곳으로 다음 2줄을 선택했습니다. 해당 줄 왼쪽에 있는 회색부분을 클릭하면 빨간점이 생깁니다.
메뉴에서 Debug - Windows - I/O를 선택하여 I/O 창이 뜨면 드래그해서 오른쪽의 기존창에 도킹합니다.
메뉴에서 Debug - Windows - Processor Status를 선택하여 Processor Status 창이 뜨면 같은 방식으로 오른쪽창에 도킹시킵니다.
Processor Status에서 Frequency를 설정할 수 있는데 이 부분도 확인이 필요합니다.
I/O 탭에서 소스코드에서 사용중인 PORTB를 선택합니다. 아래 화면처럼 안보이면 빨간 사각형으로 표시한 두개의 버튼을 눌러서 I/O 리스트와 특정 포트와 관련있는 레지스터의 상태가 보이도록 합니다.
메뉴에서 Debug - Continue를 선택하거나 F5키를 누릅니다. 브레이크 포인트를 걸어둔 곳에서 실행이 잠시 멈추게 됩니다.
이때 포트 B와 관련있는 레지스터의 상태가 I/O 탭에 보입니다.
메뉴에서 Debug - Step Over를 선택하거나 F10키를 누르면 코드상의 다음 줄로 넘어가야 하는데 delay.h로도 들어가네요...왼쪽 아래 보이는 실행 상태가 Running일 때는 좀 기다렸다가 Stopped나 Ready일때 F10을 눌러주다보면 main.c로 돌아옵니다.
main.c로 돌아온 후..
I/O 탭을 확인해보면 앞에서 실행된 "PORTB |= (1<<PB4);"에 의해서 PORTB의 4번 비트가 1이 되었습니다.
앞에서 했던 방법으로 F10을 누르다보면 다시 main.c로 돌아옵니다.
앞에서 실행된 명령에 의해서 PORTB의 4번 비트가 1이 되었습니다.
시뮬레이터를 위한 stimuli 파일 작성하는 방법은 아래 링크를 참고하세요..
http://www.atmel.com/webdoc/simulator/simulator.wb_Simulator2_Stimuli.html
stimuli 파일 작성 예제도 있습니다.
http://www.atmel.com/webdoc/simulator/simulator.wb_Simulator2_Stimuli.Example_stimuli_file.html
참고
https://mil.ufl.edu/3744/docs/Create_Simulate_Emulate_Atmel.pdf
http://www.engr.sjsu.edu/wdu/ME106Spring2010/LectureNotes/SimulatorTutorial.pdf
'AVR > Atmega128 강좌' 카테고리의 다른 글
AVRISP mkII 및 Microchip Studio 사용법 (2) | 2024.08.17 |
---|---|
적외선 통신( IR ) - 리모컨 NFC format을 시리얼로 출력하는 코드 (0) | 2023.10.13 |
Atmega128 기초 - SPI(Serial Peripheral Interface) (0) | 2023.10.13 |
Atmega128 기초 - 시리얼 통신( USART ) (0) | 2023.10.13 |
Atmega128 기초 – ADC(Analog to Digital) 변환 (0) | 2023.10.13 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!