2011-06-26 19 views
11

AVR स्टूडियो 5 में एक परियोजना बनाते समय, यह निम्नलिखित सामग्री के साथ एक ग फ़ाइल बनाता है:AVR स्टूडियो 5: संकलन सी ++ कोड

#include <avr/io.h> 

int main(void) 
{ 
    while(1) 
    { 
     //TODO:: Please write your application code 
    } 
} 

इस सी कार्यक्रम का निर्माण अभी ठीक काम करता है:

------ Rebuild All started: Project: AVRGCC2, Configuration: Debug AVR ------ 
Build started. 
Project "AVRGCC2.avrgccproj" (ReBuild target(s)): 
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!=''). 
Target "CoreRebuild" in file "C:\Programme\Atmel\AVR Studio 5.0\Vs\AvrGCC.targets" from project "C:\Dokumente und Einstellungen\tom\Eigene Dateien\AVRStudio\test\AVRGCC2\AVRGCC2\AVRGCC2.avrgccproj" (target "ReBuild" depends on it): 
    Task "RunAvrGCC" 
     C:\Programme\Atmel\AVR Studio 5.0\AVR ToolChain\bin\make.exe clean all 
     rm -rf AVRGCC2.o AVRGCC2.d libAVRGCC2.a AVRGCC2.hex AVRGCC2.eep AVRGCC2.lss AVRGCC2.map 
AVRGCC2.c 
     Invoking: AVR/GNU C Compiler 
     "C:/Programme/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-gcc.exe" -funsigned-char -funsigned-bitfields -O0 -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99 -mmcu=atmega328p -MD -MP -MF"AVRGCC2.d" -MT"AVRGCC2.d" -o"AVRGCC2.o" ".././AVRGCC2.c" 
     Finished building: .././AVRGCC2.c 
     Building target: AVRGCC2.elf 
     Invoking: AVR/GNU C/C++ Linker 
     "C:/Programme/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-gcc.exe" -mmcu=atmega328p -Wl,-Map=AVRGCC2.map -o AVRGCC2.elf AVRGCC2.o 
     Finished building target: AVRGCC2.elf 
     "C:/Programme/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "AVRGCC2.elf" "AVRGCC2.hex" 
     "C:/Programme/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objdump.exe" -h -S "AVRGCC2.elf" > "AVRGCC2.lss" 
     "C:/Programme/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "AVRGCC2.elf" "AVRGCC2.eep" || exit 0 
     AVR Memory Usage 
     ---------------- 
     Device: atmega328p 
     Program:  142 bytes (0.4% Full) 
     (.text + .data + .bootloader) 
     Data:   0 bytes (0.0% Full) 
     (.data + .bss + .noinit) 
    Done executing task "RunAvrGCC". 
Done building target "CoreRebuild" in project "AVRGCC2.avrgccproj". 
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != ''). 
Target "ReBuild" in file "C:\Programme\Atmel\AVR Studio 5.0\Vs\Avr.common.targets" from project "C:\Dokumente und Einstellungen\tom\Eigene Dateien\AVRStudio\test\AVRGCC2\AVRGCC2\AVRGCC2.avrgccproj" (entry point): 
Done building target "ReBuild" in project "AVRGCC2.avrgccproj". 
Done building project "AVRGCC2.avrgccproj". 

Build succeeded. 
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ========== 

लेकिन जब मैं फ़ाइल एक्सटेंशन को .cpp में बदलता हूं, तो बिल्डिंग चेतावनी डिवाइस प्रकार को परिभाषित नहीं करता है (जो किसी भी एवीआर विशिष्ट रजिस्टर का उपयोग करने का प्रयास करते समय त्रुटि में बदल जाएगा):

------ Rebuild All started: Project: AVRGCC2, Configuration: Debug AVR ------ 
Build started. 
Project "AVRGCC2.avrgccproj" (ReBuild target(s)): 
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!=''). 
Target "CoreRebuild" in file "C:\Programme\Atmel\AVR Studio 5.0\Vs\AvrGCC.targets" from project "C:\Dokumente und Einstellungen\tom\Eigene Dateien\AVRStudio\test\AVRGCC2\AVRGCC2\AVRGCC2.avrgccproj" (target "ReBuild" depends on it): 
    Task "RunAvrGCC" 
     C:\Programme\Atmel\AVR Studio 5.0\AVR ToolChain\bin\make.exe clean all 
     In file included from .././AVRGCC2.cpp:1:0: 
c:\programme\atmel\avr studio 5.0\avr toolchain\bin\../lib/gcc/avr/4.5.1/../../../../avr/include/avr/io.h(446,6): #warning "device type not defined" 
     rm -rf AVRGCC2.o AVRGCC2.d libAVRGCC2.a AVRGCC2.hex AVRGCC2.eep AVRGCC2.lss AVRGCC2.map 
AVRGCC2.cpp 
     Invoking: AVR/GNU CPP Compiler 
     "C:/Programme/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-g++.exe" -MD -MP -MF"AVRGCC2.d" -MT"AVRGCC2.d" -o"AVRGCC2.o" ".././AVRGCC2.cpp" 
     Finished building: .././AVRGCC2.cpp 
     Building target: AVRGCC2.elf 
     Invoking: AVR/GNU C/C++ Linker 
     "C:/Programme/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-gcc.exe" -mmcu=atmega328p -Wl,-Map=AVRGCC2.map -o AVRGCC2.elf AVRGCC2.o 
     Finished building target: AVRGCC2.elf 
     "C:/Programme/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "AVRGCC2.elf" "AVRGCC2.hex" 
     "C:/Programme/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objdump.exe" -h -S "AVRGCC2.elf" > "AVRGCC2.lss" 
     "C:/Programme/Atmel/AVR Studio 5.0/AVR ToolChain/bin/avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "AVRGCC2.elf" "AVRGCC2.eep" || exit 0 
     AVR Memory Usage 
     ---------------- 
     Device: atmega328p 
     Program:  142 bytes (0.4% Full) 
     (.text + .data + .bootloader) 
     Data:   0 bytes (0.0% Full) 
     (.data + .bss + .noinit) 
    Done executing task "RunAvrGCC". 
Done building target "CoreRebuild" in project "AVRGCC2.avrgccproj". 
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != ''). 
Target "ReBuild" in file "C:\Programme\Atmel\AVR Studio 5.0\Vs\Avr.common.targets" from project "C:\Dokumente und Einstellungen\tom\Eigene Dateien\AVRStudio\test\AVRGCC2\AVRGCC2\AVRGCC2.avrgccproj" (entry point): 
Done building target "ReBuild" in project "AVRGCC2.avrgccproj". 
Done building project "AVRGCC2.avrgccproj". 

Build succeeded. 
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ========== 

दोनों आउटपुट की तुलना से पता चलता है कि सी-कोड के लिए यह -mmcu=atmega328pavr-gcc.exe के लिए, लेकिन सी ++ के लिए विकल्प कहते हैं - कोड यह जब avr-g++.exe नहीं क्रियान्वित करता है। WinAVR का उपयोग करते समय मेरे पास समान समस्या है। इसे कैसे हल करें?

+1

मुझे एक वर्कअराउंड मिला है: सभी .cpp फ़ाइलों का नाम .c में बदलें और निम्नलिखित कंपाइलर विकल्पों को परिभाषित करें: '-x C++ -std = gnu ++ 98'। – Mot

+0

क्या आप अपनी टिप्पणी को उत्तर के रूप में पोस्ट कर सकते हैं और इसे स्वीकार कर सकते हैं? इस तरह सवाल अनुत्तरित के रूप में दिखाना बंद कर देगा। –

उत्तर

7

मुझे एक वर्कअराउंड मिला है: .cpp फ़ाइलों का नाम .c पर बदलें और निम्नलिखित कंपाइलर विकल्पों को परिभाषित करें: -x c++ -std=gnu++98

0

क्या आपने प्रोजेक्ट डायलॉग बॉक्स खोलने और यह जांचने की कोशिश की है कि devicetype सेट है?

+0

निश्चित रूप से, अन्यथा यह सी संस्करण के साथ काम नहीं किया होता। – Mot

5

मुझे पता है यह एक देर से इसके अतिरिक्त है, लेकिन इस पर मामला किसी और stumbles में:

आप देखा है कि एक सी ++ विस्तार AVR स्टूडियो 5 के लिए उपलब्ध उपकरण के अंतर्गत -> एक्सटेंशन प्रबंधक? यह आपको सीसी+ परियोजनाओं को .cpp एक्सटेंशन और सब कुछ के साथ बनाने देता है। Source