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=atmega328p
avr-gcc.exe
के लिए, लेकिन सी ++ के लिए विकल्प कहते हैं - कोड यह जब avr-g++.exe
नहीं क्रियान्वित करता है। WinAVR का उपयोग करते समय मेरे पास समान समस्या है। इसे कैसे हल करें?
मुझे एक वर्कअराउंड मिला है: सभी .cpp फ़ाइलों का नाम .c में बदलें और निम्नलिखित कंपाइलर विकल्पों को परिभाषित करें: '-x C++ -std = gnu ++ 98'। – Mot
क्या आप अपनी टिप्पणी को उत्तर के रूप में पोस्ट कर सकते हैं और इसे स्वीकार कर सकते हैं? इस तरह सवाल अनुत्तरित के रूप में दिखाना बंद कर देगा। –