Use Visual Studio IDE to Program AVR/Arduino

Introduction: Use Visual Studio IDE to Program AVR/Arduino

About: Gian is a computational biologist and is the Managing Director at Open Design Strategies, LLC. He holds a BA in Molecular/Cellular Biology and an MS in Computer Science. He has a collection of 8-bit microcont…

I'm not a huge fan of Microsoft, but man, they do make one slick programming IDE.  In searching around for a solution to use the IDE to program AVR's I came across some scattered instructions.  As I love the intellisense feature of Visual Studio (VS) that automatically makes suggestions for class methods and structure functions and members, I tend to use the IDE when working in largish-sized AVR projects.

This brief instructable will show you how to setup Visual Studio 2008/2010 to use WinAVR and compile your AVR programs into Intel Hex format suitable for uploading to your AVR/Arduino with AVRDUDE and your favorite programmer.

P.S.  Don't forget that if there is an "i" in the upper corner of the picture, you can click it and select a a larger image!

Step 1: Create Your Makefile Project

Open Visual Studio 2010 and create a new Makefile project.
Select File->New->Project
Then select Visual C Projects and scroll until you see Makefile Project.
Select Makefile project, select a name for your project and whether you want VS to create a directory and import into Subversion or another version control management system.
Click Ok

Configure via Wizard
You will get a wizard dialog to create the Makefile project.
Select next to go to the first real page of the wizard.
In the next dialog (see below), you will fill in several boxes.
  1. For "Build Command Line" type make
  2. For "Clean commands: type make clean
  3. For "Rebuild command line:" type make all
  4. Change the name of the executable file output to the name of your hex file with the hex extension.
  5. In the "Include search path" type the name of the WinAVR include directory.  For me, it's C:\WinAVR\avr\include
Click NEXT.
Select the checkbox that makes the configuration the same for debug and deployment solutions, if not already checked. 

Step 2: Configure Your Makefile Project

Visual Studio has now created your default Makefile project.  You must configure it a little more before you can start programming.

Select the project and right click to select Properties.

Under General, select Common Language Runtime and select the option for Common Language Runtime Support (/clr).  This option gives you that nifty Intellisense support.

Click on NMake and ensure that your values are there for the make build commands, as well as your output hex file and ensure your include search path has been prepended or appended to the Include Search Path text box.  If not, add it/them now.

Step 3: Create and Add Your Makefile

Create your Makefile the normal way you would under your normal AVR development environment.  If you use Arduino or AVR Studio's included Makefile utility, you can use mine I've included below.  Make sure you change the pertinent options, namely the MCU, FCPU, and TARGET variables, if needed.

Copy or move the Makefile into the second level of your VS directory.  For instance, if your directory structure looks like:


be sure to put it in the second directory or wherever your project files are located.  If in doubt, you can create a main.cpp and see where it adds it, then add the Makefile there.

Once you've copied your Makefile into your working directory, add it to the resources tab of your project.
Right click "Resource Files" and select " Add -> Existing Item and browse to your Makefile and select it.  It should now be added as a resource file.  Select the properties tab while your Makefile is selected and change the Type from Document to Makefile.

Step 4: Code, Baby Code...

For this 'ible, I've created a main.cpp with the standard header and forever loop.  I added in a couple of port bit manipulations then compiled using either F6 or Build -> Build Solution.  The options Build -> Rebuild Solution and Build-> Clean Solution also work because you've added in those commands earlier.

Build your hex file with the above commands then program your AVR or Arduino with AVRDUDE from WinAVR like you normally would.

Voila!  A complete working AVR programming environment using Visual Studio with all it's embedded goodiness and intelligence.  Now, what are you waiting for?  Make that next AVR killer app!

Be the First to Share


    • Stone Concrete Cement Contest

      Stone Concrete Cement Contest
    • Digital Fabrication Student Design Challenge

      Digital Fabrication Student Design Challenge
    • Make It Modular: Student Design Challenge

      Make It Modular: Student Design Challenge



    6 years ago

    Nice tutorial, great.

    When I follow the steps as described on the tutorial I got the following error:

    1>------ Build started: Project: Sidewinder, Configuration: Debug Win32 ------
    1> 'make' is not recognized as an internal or external command,
    1> operable program or batch file.
    1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.MakeFile.Targets(38,5): error MSB3073: The command "make" exited with code 9009.
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

    I assume the command "make" as defined on " Step 1: Create your Makefile Project, For Build Command Line type make" cannot be fined.

    So what can I do about it?

    The first part of the makefile:

    1 # Hey Emacs, this is a -*- makefile


    3 # AVR-GCC Makefile template,
    derived from the WinAVR template (which

    4 # is public domain), believed to be
    neutral to any flavor of "make"

    5 # (GNU make, BSD make, SysV make)



    8 MCU = atmega1280

    9 FORMAT = ihex

    10 TARGET =

    11 SRC = $(TARGET).c

    12 ASRC =

    13 OPT = s


    15 # Name of this Makefile (used for
    "make depend").

    16 MAKEFILE =


    18 # Debugging format.

    19 # Native formats for AVR-GCC's -g are
    stabs [default], or dwarf-2.

    20 # AVR (extended) COFF requires stabs,
    plus an avr-objcopy run.

    21 DEBUG = stabs


    23 # Compiler flag to set the C Standard

    24 # c89 - "ANSI" C

    25 # gnu89 - c89 plus GCC extensions

    26 # c99 - ISO C99 standard (not yet fully

    27 # gnu99 - c99 plus GCC extensions

    28 CSTANDARD = -std=gnu99


    30 # Place -D or -U options here

    31 CDEFS = -DF_CPU=16000000


    33 # Place -I options here

    34 CINCS = -I



    37 CDEBUG = -g$(DEBUG)

    38 CWARN = -Wall -Wstrict-prototypes

    39 CTUNING = -funsigned-char
    -funsigned-bitfields -fpack-struct -fshort-enums -ffunction-sections
    -fdata-sections -finline-limit=3 -fno-inline-small-functions
    -fno-tree-scev-cprop -fno-split-wide-types -fno-jump-tables

    40 LDTUNING =

    41 #CEXTRA = -Wa,-adhlns=$(<:.c=.lst)



    8 years ago on Introduction

    Nice tutorial! thanks a lot.

    By the way, where's the MakeFile that you referred to in Step 3?


    Reply 8 years ago on Introduction

    Thanks! Sorry for the late reply. As for the Makefile I mention, I assumed you'd be creating the makefile based on your project requirements. If you need an example, I could always post one or email you one.


    Reply 8 years ago on Introduction

    again, nice tutorial :)

    can you please upload your make-file?


    Reply 8 years ago on Introduction

    Hi, Thanks for the nice words :) I've uploaded one of my makefiles, but I don't see it yet on the server. If for some reason it hasn't loaded yet I've also put it up here:

    Good luck!


    8 years ago on Introduction

    Thanks for the guide but I ran into problems with Intellisense. I have added WinAVR include directory to the search path for IntelliSense but Intellisense is still giving a lot of errors about the codes. But the codes compile without problems. It's annoying and confusing. Do you have a solution for this?


    Reply 8 years ago on Introduction

    That's happened to me before, too. However, I use a custom-compiled AVRGCC on windows and not WinAVR. These instructions might still be applicable to your setup if you map them to the appropriate directories under WinAVR. My AVRGCC is in C:\avrgcc and I include the following directories:


    Not sure that'll help or not but may be worth a try.
    Good luck!


    11 years ago on Step 4

    And what about gcc error handling by visual studio?


    Reply 8 years ago on Introduction

    As far as I've used it, it just passes stdout/stderr to the console in VS.


    11 years ago on Introduction

    So, do you have to have the real version of Visual Studio 2010 or will the express version work?


    Reply 11 years ago on Introduction

    I have and used the professional version of VS2010, but the express version will work just fine.

    Good luck!