Search code examples
visual-studio-2013intellisenseavrwinavr

Using Visual Studio to code for AVR


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.


Solution

  • 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