Using Visual Studio to code for AVR

kiciek picture kiciek · Feb 15, 2014 · Viewed 8.1k times · Source

I am using Visual Studio 2013 to write code for AVR. I have been following this tutorial.

Whilst writing the code, I noticed that Visual Studio kept on underlining things like DDRB or PORTB and I keep on getting errors like Error: identifier "PORTB" is undefined, however, the program compiles correctly.

Interestingly enough, upon pressing alt-F12 Visual finds numerous files where they are defined.

Answer

Kissiel picture Kissiel · Feb 16, 2014

Your Makefile runs compiler with an option -mmcu=YOURCHIP. This implicitly defines macro corresponding to your chip. For instance for atmega32u4 the macro is AVR_ATmega32U4. Intellisense is run 'outside' of your compiler so it's not aware of this macro and when parsing standard avr header - like avr/io.hit skips the proper inclusion of header file for your particular MCU. It's something like:

#elif defined (__AVR_ATmega32U4__)
#  include <avr/iom32u4.h>

So, if you want to have intellisense support for stuff defined in those headers you might need to define that macro, at the top of your source, like this:

#define __AVR_ATmega32U4__ 
#include <avr/io.h> 
int main() { 
    char a = PORTB;
}

You may find what macro corresponds to which MCU in the middle of this page