Atmel Studio 에서 WinAVR 을 컴파일러로 사용하기

Atmel 사의 AVR 과 Smart ARM 시리즈에 대한 무료 통합 개발 환경 툴 (IDE, Integrated Development Environment)인 Atmel Studio 이 버전업을 거듭해 7 이 출시되었습니다.

Atmel Studio 가 나오기 전까지는 기존 AVR Studio 을 결과물 다운로드와 디버깅용만으로 사용하고 코딩 작업에는 따로 Visual Studio, DevC++, Eclipse 등 자신에게 편한 개발도구를 선택하여 사용하셨던 분이 많았을 것입니다. 물론 AVR Stduio 하나로 컴파일도 하고 프로그램도 코딩하셨던 분도 계셨겠지만 코드 에디터 기능이 무료 개발 도구로 인기 많은 Eclipse 에도 뒤떨어졌던것이 사실이기 때문이지요.

그러나 코딩작업 환경에선 여타 견줄만한 툴이 없을 정도의 편의성을 제공하는 MS 사의 Visual Studio Shell 을 채용한데에 더불어 Visual Assist 까지 무료로 내장시킨 Atmel Studio 가 나옴으로써 Atmel 사의 MPU 에 국한되긴 하지만 AVR 과 ARM 시리즈 펌웨어 개발에서도 코딩, 컴파일, 디버깅 작업 환경을 한가지 솔루션으로 제공하는, PC 어플리케이션 개발에 필적할정도로 쾌적한 C/C++ 개발환경이 마련되었습니다.

 

그런데 컴파일러 버전간 결과물의 차이로 인해 기존 WinAVR 컴파일러로 셋팅된 환경에서 만들어진 소스들을 Atmel Studio 의 프로젝트로의 (내장된 컴파일러를 이용하게끔) 컨버전을 쉽사리 결정할 수 없는 경우도 있습니다.

소스 구성이 많고 복잡한 큰 프로젝트의 경우 바뀐 컴파일러 버전에 맞게 코드를 수정하고 컴파일-링킹 옵션들을 조절해가며 컴파일하여야 하는데 이렇게 수정하고 생성된 결과물을 기존 의도한 대로 동작하는 지 테스트 하는 작업 또한 만만치 않기 때문입니다.

그래서  기존 소스를 가져와 Atmel Studio 프로젝트를 생성할 경우 기존대로 WinAVR 이나 이전 버전의 GCC 컴파일러를 이용할 수 있도록 프로젝트를 설정하는 방법에 대해 알아보려 합니다.

 

지금부터 적는 내용은 먼저 기존 소스가 사용하던 컴파일러를 WinAVR 로 상정하고 이를 Atmel Studio 프로젝트에서 선택할 수 있는 컴파일러로 등록한 다음, 기존 소스를 이용할 수 있게 프로젝트 생성을 하여 앞서 등록한 WinAVR 을 사용하여 컴파일 되게 설정하는 법에 대해 설명하겠습니다.

 

먼저 WinAVR 을 Atmel Studio 에 컴파일러 등록을 하는 방법에 대해 설명하겠습니다. 컴파일 명령 시 사용될 컴파일러를 Atmel Stuio 에 내장된 것이 아닌 WinAVR 로 선택할 수 있게끔 하기위해서입니다.

Atmel Studio 의 상단 메뉴에서 아래 그림과 같이 [Tools] 메뉴의 [Options] 를 선택하면 Atmel Stuio 의 환경 설정을 할 수 있는 ”Options” 라는 대화상자가 뜹니다.

AtmelStuio_Tools_Options

”Options” 대화상자의 왼쪽 메뉴 리스트에서 [Toolchain] 의 하위 메뉴 [Package Configuration] 을 선택하면 오른쪽으로 ”Available Information” 이라는 제목으로 페이지가 바뀌어 보여지는데 여기서 아래 그림처럼 ”Toolchains :” 항목의 콤보박스 메뉴를 클릭하여 펼치면 ”Atmel AVR 8 Bit (C language)” 라는 항목이 보입니다. 이 항목을 선택해주세요.

그러면 ”Flavours :” 항목에 방금 선택한 AVR 에서 사용할 수 있게 등록된 C 언어 컴파일러들이 나열되지만 현재는 ”Native” 라는 항목만 보일 것입니다. 이것이 Atmel Studio 를 설치할 때 포함되어 설치되는 AVR 의 컴파일러입니다. 이 ”Native” 컴파일러가 AVR 의 기본 C 컴파일러로 등록돼 있으므로 AVR 을 사용하는 C 프로젝트를 생성하면 이것이 기본 지정되어 사용될 것입니다. 기본 컴파일러를 바꾸지 않는다면 말이지요.

AtmelStuio_Options_Toolchain

 

여기에 WinAVR 컴파일러를 추가하기 위해서 오른쪽에 [Add] 버튼을 눌러 생성되는 ”Add Toolchain Package” 대화상자를 띄웁니다. 이 대화상자 ”Package Name” 항목에 ”WinAVR” 이라 써주고 ”Package Base Path” 에는 그 오른쪽 폴더 선택 버튼을 눌러 여러분 자신 PC 에서 WinAVR 이 설치된 폴더의 하위 ”bin” 이라는 폴더를 지정한 후 이 폴더가 아래 그림처럼 폴더 경로 기입란에 잘 표시되었는지 확인합니다.

AtmelStuio_AddToolchain

그림에서는 제 PC 에 설치된 WinAVR 폴더의 하위 bin 폴더가 지정돼 있네요.

”Add Toolchain Package” 박스에서 두 항목에 대한 작성이 완료되었으면 [Add] 버튼을 눌러줍니다. 그러면 아래 그림과 같이 WinAVR 이라는 새롭게 등록된 컴파일러가 리스트에 표시될 것입니다.

AtmelStuio_AddedWinAVR

위 그림처럼 새로 등록된 컴파일러가 선택된 상태에서 오른쪽 [Set As Default] 버튼을 누르게 되면 8bit AVR C 언어용 기본 컴파일러로 지정됩니다. 이렇게 하면 Atmel Studio 로 AVR C 언어 프로젝트를 생성하였을 때 프로젝트 옵션으로 기본 컴파일러로 WinAVR 이 설정되겠지요. 후에 AVR 프로젝트를 생성할 때 항상 WinAVR 로 적용되어 프로젝트가 생성되게 하겠다 하면 이것을 기본 컴파일러로 적용해 놓는것도 좋습니다.

프로젝트를 생성한 이후로도 해당 프로젝트의 상위 메뉴 ”Project” 에서 ”<Project Name> Properties” 메뉴를 클릭하거나 단축키 ”Alt + F7” 을 눌렀을 때 보여지는 ”프로젝트 설정 페이지” 에서  현재 프로젝트에서 사용할 컴파일러를 아래 그림처럼 ”Advanced” 메뉴의 ”Toolchain flavour” 항목에서 바꿔줄 수 있습니다. 이것은 다음에 다시 설명하겠습니다.

AtmelStudio_ProjectProperties

 

이전 설명했던 ”Options” 대화상자의 [OK] 버튼을 눌러 대화상자를 닫습니다. 이로서 WinAVR 컴파일러가 Atmel Studio 에서 선택적으로 사용할 수 있는 컴파일러로 등록하는 작업을 마칩니다.

 

이제 Atmel Studio 에서 프로젝트를 생성하고 새로 등록된 WinAVR 을 이용해 컴파일 하는 방법을 알아보겠습니다.

프로젝트 Atmel Studio 상위 메뉴에서 [File] -> [New] -> [Project] 메뉴를 차례대로 선택해 새로운 프로젝트를 생성합니다. 그러면 아래 그림과 같이 ”New Project” 라는 대화상자가 나오고 이후 각 선택항목의 조작을 통해 새롭게 생성하는 프로젝트를 설정해줍니다.

AtmelStudio_WinAVR_NewProject

프로젝트명과 관리되는 파일들의 경로를 정해준 후 [OK] 버튼을 누릅니다.

그러면 아래 그림과 같이 Atmel Studio 가 지원하는 프로세서의 종류와 모델들이 표시되는데 이 글의 예제로 8비트 AVR 의 한 종류인 ATmega128 을 선택해줬습니다.

AtmelStudio_WinAVR_DeviceSelection

대화상자의 [OK] 버튼을 누르면 아래 그림처럼 ”main” 함수의 골격만 코드로 들어있는 main.c 파일이 등록된 상태의 새로운 프로젝트가 생성되었을 것입니다. 기존 소스를 Atmel Studio 의 프로젝트로 적용시키는 것이라면 이 main.c 파일은 지우고 기존 소스 파일로 교체해야 하겠죠. 새로운 개발 프로젝트를 위해 프로젝트를 생성한 것이라면 그냥 코딩작업을 해나가면 될 것입니다.

AtmelStudio_CreatedProject

 

기존의 AVR Studio 로 만들어진 프로젝트 파일이 있다면 위 방법처럼 프로젝트 생성메뉴를 통해 새 프로젝트를 생성하지 않고 ”File” 메뉴의 ”Import” 메뉴를 선택하여 기존 AVR Studio 프로젝트 파일을 가져와 Atmel Studio 의 프로젝트로 생성하는 방법도 있으니 참고하세요.

 

이렇게 생성한 Atmel Studio 프로젝트에서 내장 컴파일러 (최신의 GCC) 가 아닌 WinAVR 을 사용하도록 하려면 위에 설명했었던대로 상위 메뉴 ”Project” 에서 ”<Project Name> Properties” 메뉴를 클릭하거나 단축키 ”Alt + F7” 을 눌렀을 때 보여지는 ”프로젝트 설정 페이지” 에서  현재 프로젝트에서 사용할 컴파일러를 ”Advanced” 메뉴의 ”Toolchain flavour” 항목에서 ”Native” 가 아닌 ”WinAVR” 로 지정합니다.

AtmelStudio_ProjectPropertiesPage

이후 오른쪽 ”Solution Explorer” 탭의 파일 리스트에 새롭게 생성하거나 갖고있는 소스 파일을 추가하여 작업을 진행하면 됩니다.

그런데 새롭게 개발을 시작하는 프로젝트가 아닌 WinAVR 등 기존 컴파일러를 이용해 유지 관리되었던 소스를 이렇게 Atmel Studio 프로젝트로 만들어 적용할 때 WinAVR 컴파일 환경을 설정하는 방법이 두가지가 있습니다. 이것은 사실 WinAVR 의 컴파일 옵션 설정와 관계된 것인데요 지금껏 설명한 대로 프로젝트를 생성하면 프로젝트에서 지정된 컴파일러의 컴파일-링킹 옵션이 아래 그림처럼 프로젝트 옵션을 나타내는 페이지의 ”Toolchain” 메뉴에서 지정된 대로 적용됩니다. 프로젝트를 새로 생성한 직후이니 Atmel Studio 가 정한 기본 컴파일 옵션이 적용돼 있겠지요.

AtmelStudio_CompilerOptions

 

하지만 기존 WinAVR 을 이용해 유지 관리되었던 작업은 ”Makefile” 의 내용을 적용시켜 컴파일함으로써 hex 나 elf 같은 최종 결과파일 최종 얻었을 것입니다. ”make” 명령을 이용해서 말이지요.

그러므로 기존 WinAVR 을 이용한 작업내용을 Atmel Studio 개발환경에 맞춰주면서 기존대로의 컴파일-링킹 옵션을 적용시켜 컴파일된 결과 파일을 얻으려면

  1. Makefile 의 내용을 Atmel Studio 프로젝트 옵션 페이지 내 컴파일-링킹옵션 각 세부사항들에 맞게 기입해주거나 혹은
  2. 프로젝트 옵션 페이지 내 컴파일-링킹옵션 정의를 사용하지 않고 아래 그림처럼 프로젝트 옵션 페이지 ”Build” 메뉴를 선택했을 때 보여지는 페이지에서 ”Use External Makefile” 을 선택해줌으로써 기존 소스가 사용하던 Makefile 을 불러오게끔 컴파일 환경을 설정합니다. (Makefile 은 프로젝트 파일이 있는 폴더에 위치해 있어야 합니다.)

AtmelStudio_ExternalMakefile

 

위 두가지 방법 중 첫번째는 Atmel Studio 에서 프로그래밍 작업 중 컴파일-링킹 옵션의 변경이 필요할 때 프로젝트 옵션 설정 페이지를 열어 해당 옵션에 대한 변경이 바로 가능하므로 수정하는 절차가 편리하고 용이하지만 기존 WinAVR 로 유지 관리되던 작업을 Atmel Studio 프로젝트로 적용시킬 경우 컴파일-링킹 옵션 내용을 프로젝트 옵션 설정 페이지에 그대로 적용하는 작업이 수월치 않다면 두번째 방법을 이용해야 합니다.

두번째 방법은 Makefile 을 분석하여 각 세부옵션을 항목을 찾아 기입해주는 작업을 확실히 해야 하는데다가 Atmel Studio 의 전버전인 AVR Studio 에서 WinAVR 을 이용하여 컴파일 명령을 동작시킬 때 썼던 방법이므로 기존 작업환경을 Atmel Studio 프로젝트로 만들때는 이 방법을 선택하는것이 좋을 것 같네요. 물론 Makefile 을 안쓰고 프로젝트 설정 옵션에 완벽히 옵션 사항들을 옮길 수 있다면 첫번째 방법을 선택해도 좋습니다. 각자 자신이 추구하는 개발 편의에 따른 선택이니까요.

 

이렇게 Atmel Studio 개발 환경에서 WinAVR 을 Atmel Studio 의 8비트 AVR 의 컴파일러로 등록하고 프로젝트 생성 시 WinAVR 을 이용해 컴파일 하게끔 설정하는 방법에 대해 알아봤습니다.

 

 

 

이 글을 공유하기:

Be the first to comment

Leave a Reply