특정한 기능을 수행하는 시스템을 uC를 이용하여 구현하려고 할 때 그 기능을 수행하도록 위해서는 물리적인 전기전자 회로를 설계해야 될 것이고 (필요에 따라 기계적인 요소도 들어갈 것이다.) 그 회로를 작동시키는 소프트웨어도 작성해야 한다. 이러한 하나의 제품을 만들어내는 과정을 ‘개발’이라고 한다. 이렇게 uC를 이용하여 제품을 개발할 때 프로그램 언어로서 일반적으로 C/C++언어와 어셈블리어가 많이 사용된다.
이제 C/C++ 언어와 어셈블리어 중에서 어느 것을 사용할지의 선택의 문제가 발생한다. 각각 나름대로의 장점이 있으며 C/C++언어와 어셈블리어 하나만 아는 것보다는 둘 다 익혀두는 것이 더 유익하겠지만 여건상 한 가지만 집중적으로 해야 한다면 C/C++ 언어를 선택하는 것이 일반적이다. 어셈블리어만을 가지고 복잡한 알고리듬을 구현하기에는 한계가 있기 때문에 그렇다. C/C++언어가 코드를 작성하기 편리하고 하드웨어의 제약에서 어느 정도 벗어나서 알고리듬에만 집중할 수 있는 반면 어셈블리어는 프로그램의 명령어가 단순하고 코드가 짧으며 실행속도가 빠르다는 장점을 가진다. 따라서 프로그램 수행시간이 중요한 응용분야에서는 어셈블리어로 코드를 최적화할 필요가 있다. 또한 어셈블리 프로그램 자체가 단순하기 때문에 배우기 쉬우며 하드웨어에 대한 충분한 이해를 바탕으로 해야만 코드를 작성할 수 있기 때문에 하드웨어를 이해하는 폭을 넓혀준다. 어셈블리어에 익숙하다면 이는 C/C++ 언어로 프로그래밍을 할 때 그 이해의 폭을 깊게 해주므로 C/C++언어와 어셈블리어는 서로 배타적이 아니다. 따라서 uC로 시스템을 개발할 때에는 둘 다 익숙히 다룰 줄 안다면 여러모로 유리할 것이다. 실제로 제품 개발 프로젝트를 수행할 때 전 과정을 모두 어셈블리어로 작성하는 경우도 있겠지만 좀 더 일반적인 경우는 C프로그램으로 전체적인 윤곽을 잡고 실행 속도나 코드의 최적화가 중요한 서브루틴을 어셈블리어로 작성하여 끼워 넣는 경우도 있다.
AVR uC를 생산하여 공급하는 Atmel사에서는 Atmel Studio (버전이 6.0 밑에서는 AVR Studio 라는 이름이었다.)라는 IDE(integrated development environment, 통합개발환경) 를 무료로 제공한다. Atmel 스튜디오는 텍스트 에디터, 시뮬레이터, 디버거 등을 포함하며 어셈블리어 프로그램까지 개발할 수 있는 Atmel사의 다양한 마이크로컨트롤러 전용 개발 프로그램이다. 사실 AVR 개발 프로그램은 CodevisionAVR과 같은 몇몇 상용 프로그램이 있으나 Atmel Studio는 개발사에서 제공하고 무료로 사용할 수 있고 다른 상용 프로그램과 견주어 개발 과정에 불편함이 없으므로 교육 현장이나 실제 제품 개발에 많이 사용된다. 이것은 사용자가 작성한 어셈블리어와 C/C++ 언어를 손쉽게 작성하고 디버깅(debugging)이나 시뮬레이션을 수행한 후 실제 시스템에 간편하게 다운로드할 수 있는 환경을 제공한다.
[그림 1] avr studio 4.12
AVR 스튜디오 v4.12에서부터는 gcc계열의 WINAVR 컴파일러를 지원하기 시작하였고 v5.x로 판올림을 하면서부터는 Visual Studio 2010의 에디팅 환경을 차용하여 IDE의 외형 뿐만이 아니라 32비트 uC인 AVR32도 개발 가능하게 되는 등 상당히 많은 변화가 일어났다. 2015년 6월 현재는 다시 판올림을 하면서 이름도 바뀌어 Atmel Studio 6.x 정식 버전이 배포 중이며 이제는 이 프로그램을 이용하여 AVR계열 뿐만 아니라 ARM계열의 프로세서들까지도 개발할 수 있다. 프로그램의 외관은 [그림 2]와 같으며 [그림 1]과 비교하여 외형상으로도 많은 변화가 있음을 확인할 수 있다.
[그림 2] atmel studio 6.x
본 블로그에서는 Atmel Studio 6.0버전을 가지고 실습을 진행한다. 하지만 AVR Studio 5.0을 사용해도 여기에서 제공하는 예제들을 실행하는데 아무런 지장이 없다.
'하드웨어 > ATmega8(A)' 카테고리의 다른 글
ATmega8(A) avr-gcc/g++ 자료형 (0) | 2015.06.15 |
---|---|
ATmega8(A) 개발 환경 : USBasp 와 USBaspLoader 소개 (0) | 2015.06.10 |
ATmega8(A)의 클럭 소스 설정 (2) | 2015.06.04 |
ATmega8(A)의 전원 인가와 리셋 회로 (0) | 2015.06.04 |
ATmega8(A)의 락 비트와 퓨즈 바이트 (1) | 2015.06.04 |