Forum: Compiler & IDEs AVR Studio 7 -> Atmel 328P - Kein Code im .hex File
Moin,
Ich schlag mich jetz schon seit Tagen mit diesem Atmel Studio rum.
Mitlerweile habe ich es geschafft, dass der Compiler und er Linker
fehlerfrei durchläuft. Leider kriege ich immer ein .hex File, das wohl
keinen Inhalt hat.
Was könnte das sein?
Die Source Files hab ich angehängt.
Hier die Ausgabe beim Build:
Viele Grüße
Alexander
1 ------ Build started: Project: HomeLED_Anz, Configuration: Debug AVR ------
2 Build started.
3 Project "HomeLED_Anz.cppproj" (default targets):
4 Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5 Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\HomeLED_Anz.cppproj" (target "Build" depends on it):
6 Task "RunCompilerTask"
7 Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
8 C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 4 --output-sync
9 Building file: .././main.cpp
10 Invoking: AVR8/GNU C Compiler : 5.4.0
11 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DDEBUG -DF_CPU=16000000 -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p" -c -MD -MP -MF "main.d" -MT"main.d" -MT"main.o" -o "main.o" ".././main.cpp"
12 Finished building: .././main.cpp
13 Building file: .././AdafruitAlphaDisplay.cpp
14 Invoking: AVR8/GNU C Compiler : 5.4.0
15 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DDEBUG -DF_CPU=16000000 -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p" -c -MD -MP -MF "AdafruitAlphaDisplay.d" -MT"AdafruitAlphaDisplay.d" -MT"AdafruitAlphaDisplay.o" -o "AdafruitAlphaDisplay.o" ".././AdafruitAlphaDisplay.cpp"
16 Finished building: .././AdafruitAlphaDisplay.cpp
17 Building file: .././i2c_master.c
18 Invoking: AVR8/GNU C Compiler : 5.4.0
19 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe" -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "i2c_master.d" -MT"i2c_master.d" -MT"i2c_master.o" -o "i2c_master.o" ".././i2c_master.c"
20 Finished building: .././i2c_master.c
21 Building target: HomeLED_Anz.elf
22 Invoking: AVR8/GNU Linker : 5.4.0
23 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -o HomeLED_Anz.elf AdafruitAlphaDisplay.o i2c_master.o main.o -nostdlib -Wl,-Map="HomeLED_Anz.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p"
24 Finished building target: HomeLED_Anz.elf
25 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "HomeLED_Anz.elf" "HomeLED_Anz.hex"
26 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "HomeLED_Anz.elf" "HomeLED_Anz.eep" || exit 0
27 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "HomeLED_Anz.elf" > "HomeLED_Anz.lss"
28 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "HomeLED_Anz.elf" "HomeLED_Anz.srec"
29 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-size.exe" "HomeLED_Anz.elf"
30 text data bss dec hex filename
31 0 0 0 0 0 HomeLED_Anz.elf
32 Done executing task "RunCompilerTask".
33 Task "RunOutputFileVerifyTask"
34 Program Memory Usage : 0 bytes 0,0 % Full
35 Data Memory Usage : 0 bytes 0,0 % Full
36 Done executing task "RunOutputFileVerifyTask".
37 Done building target "CoreBuild" in project "HomeLED_Anz.cppproj".
38 Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
39 Target "Build" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Avr.common.targets" from project "D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\HomeLED_Anz.cppproj" (entry point):
40 Done building target "Build" in project "HomeLED_Anz.cppproj".
41 Done building project "HomeLED_Anz.cppproj".
42
43 Build succeeded.
44 ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
Die Ausgbabe scheint völlig in Ordnung zu sein.
Ist denn das .elf auch leer?
Oliver
Nein, leer ist es nicht. Aber wenn ich es mit dem Programmer auf den
Prozessor laden will, bekomme ich die Nachricht, dass keine Daten zum
Programmieren gefunden wurden.
Die Anzeige des Compilers sagt ja auch 0 Bytes....
06.05.2017 16:48 :
Bearbeitet durch User
von
Hott Sammerneid (Gast)
06.05.2017 17:05
Alexander S. schrieb:
> Aber wenn ich es mit dem Programmer auf den
> Prozessor laden will, bekomme ich die Nachricht, dass keine Daten zum
> Programmieren gefunden wurden.
Es kann aber auch sein, daß die Fehlermeldung (wie so oft bei disem
Drecksprogramm) den Nutzer in die Irre führt. Eventuell wird das
Brennprogramm an sich nicht gefunden und es liegt überhaupt nicht an den
"zu brennenden" Dateien.
Ich habe hier wieder die Version 4.19 drauf. Die funktioniert tadellos.
Da bin ich ja froh, dass ich nicht der Einzige bin, der von den
Fehlermeldungen von AS in den Wahnsinn getrieben wird....
Ich habe die Meldung mit 0 Bytes in den Zusammenhang mit der
Fehlermeldung so gesehen, dass es keinen Inhalt hat.
Wie kann ich das Problem angehen?
Viele Grüße
Alexander
Beitrag #5001143 wurde vom Autor gelöscht.
Mal ein neues Projekt anlegen, mit einem leerer main(), und probieren,
ob das geht.
Oliver
Oliver S. schrieb:
> Mal ein neues Projekt anlegen, mit einem leerer main(), und probieren,
> ob das geht.
>
> Oliver
Mit leerem Projekt geht es...
Da werden aber auch 134 Bytes angezeigt:
1 ------ Build started: Project: GccApplication3, Configuration: Debug AVR ------
2 Build started.
3 Project "GccApplication3.cppproj" (default targets):
4 Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5 Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "d:\benutzer\alexander\Documents\Atmel Studio\7.0\GccApplication3\GccApplication3\GccApplication3.cppproj" (target "Build" depends on it):
6 Task "RunCompilerTask"
7 Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
8 C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 4 --output-sync
9 make: Nothing to be done for 'all'.
10 Done executing task "RunCompilerTask".
11 Task "RunOutputFileVerifyTask"
12 Program Memory Usage : 134 bytes 0,4 % Full
13 Data Memory Usage : 0 bytes 0,0 % Full
14 Done executing task "RunOutputFileVerifyTask".
15 Done building target "CoreBuild" in project "GccApplication3.cppproj".
16 Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
17 Target "Build" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Avr.common.targets" from project "d:\benutzer\alexander\Documents\Atmel Studio\7.0\GccApplication3\GccApplication3\GccApplication3.cppproj" (entry point):
18 Done building target "Build" in project "GccApplication3.cppproj".
19 Done building project "GccApplication3.cppproj".
20
21 Build succeeded.
22 ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
Hier die Ausgabe des ELF Viewers T34 des ursprünglichen elfs
1 [ARM ELF Information]
2 The data encoding of all data in the object file: 32-bit objects
3 The ELF header version number: Data encodings ELFDATA2LSB
4 ELF header version number: 1
5
6
7 Object File type: Executable file
8
9 The required architecture: ...
10
11 The object file version: Current version
12
13 The virtual address(E_entry): 0
14
15 The program header table's file offset(E_phoff): 0x34 Bytes
16
17 The Section header table's file offset(E_shoff): 0x3ac Bytes
18
19 Processor-specific flags associated with the file(E_flags): 0x5
20
21 The ELF header's size(E_ehsize): 0x34 Bytes
22
23 The size of one entry in the file's program header table(E_phentsize): 32 Bytes
24
25 The number of entries in the program header table(E_phnum): 1
26
27 A section header's size(E_shentsize): 40 Bytes
28
29 The number of entries in the section header table(E_shnum): 6
30
31 The section header table index of the entry associated with
32
33 The section name string table(E_shstrndx): 3
und hier im Vergleich das leere Projekt
1 [ARM ELF Information]
2 The data encoding of all data in the object file: 32-bit objects
3 The ELF header version number: Data encodings ELFDATA2LSB
4 ELF header version number: 1
5
6
7 Object File type: Executable file
8
9 The required architecture: ...
10
11 The object file version: Current version
12
13 The virtual address(E_entry): 0
14
15 The program header table's file offset(E_phoff): 0x34 Bytes
16
17 The Section header table's file offset(E_shoff): 0x1b44 Bytes
18
19 Processor-specific flags associated with the file(E_flags): 0x5
20
21 The ELF header's size(E_ehsize): 0x34 Bytes
22
23 The size of one entry in the file's program header table(E_phentsize): 32 Bytes
24
25 The number of entries in the program header table(E_phnum): 1
26
27 A section header's size(E_shentsize): 40 Bytes
28
29 The number of entries in the section header table(E_shnum): 15
30
31 The section header table index of the entry associated with
32
33 The section name string table(E_shstrndx): 12
Gerade herausgefunden: Es scheint mit dem Flag "no start files"
-nostartfiles des Linkers zusammenzuhängen, das ich aktiviert habe.
Wenn ich das auch bei dem leeren Projekt aktiviere, kommt die gleiche
Fehlermeldung.
Wenn ich das Flag aber bei meinem Programm nicht aktiviere, kommt dieses
Fehlermischmasch:
1 ------ Build started: Project: HomeLED_Anz, Configuration: Debug AVR ------
2 Build started.
3 Project "HomeLED_Anz.cppproj" (default targets):
4 Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5 Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\HomeLED_Anz.cppproj" (target "Build" depends on it):
6 Using "RunCompilerTask" task from assembly "C:\Program Files (x86)\Atmel\Studio\7.0\Extensions\Application\AvrGCC.dll".
7 Task "RunCompilerTask"
8 Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
9 C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 4 --output-sync
10 Building file: .././AdafruitAlphaDisplay.cpp
11 Invoking: AVR8/GNU C Compiler : 5.4.0
12 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DDEBUG -DF_CPU=16000000 -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p" -c -MD -MP -MF "AdafruitAlphaDisplay.d" -MT"AdafruitAlphaDisplay.d" -MT"AdafruitAlphaDisplay.o" -o "AdafruitAlphaDisplay.o" ".././AdafruitAlphaDisplay.cpp"
13 Finished building: .././AdafruitAlphaDisplay.cpp
14 Building file: .././main.cpp
15 Invoking: AVR8/GNU C Compiler : 5.4.0
16 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DDEBUG -DF_CPU=16000000 -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p" -c -MD -MP -MF "main.d" -MT"main.d" -MT"main.o" -o "main.o" ".././main.cpp"
17 Finished building: .././main.cpp
18 Building file: .././i2c_master.c
19 Invoking: AVR8/GNU C Compiler : 5.4.0
20 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe" -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "i2c_master.d" -MT"i2c_master.d" -MT"i2c_master.o" -o "i2c_master.o" ".././i2c_master.c"
21 Finished building: .././i2c_master.c
22 Building target: HomeLED_Anz.elf
23 Invoking: AVR8/GNU Linker : 5.4.0
24 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -o HomeLED_Anz.elf AdafruitAlphaDisplay.o i2c_master.o main.o -Wl,-Map="HomeLED_Anz.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p"
25 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\Debug\Makefile(129,1): error: recipe for target 'HomeLED_Anz.elf' failed
26 AdafruitAlphaDisplay.o: In function `AdafruitAlphaDisplay::setBrightness(unsigned char)':
27 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(197,1): error: undefined reference to `i2c_start(unsigned char)'
28 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(197,1): error: undefined reference to `i2c_write(unsigned char)'
29 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(197,1): error: undefined reference to `i2c_stop()'
30 AdafruitAlphaDisplay.o: In function `AdafruitAlphaDisplay::blinkRate(unsigned char)':
31 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(197,1): error: undefined reference to `i2c_start(unsigned char)'
32 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(197,1): error: undefined reference to `i2c_write(unsigned char)'
33 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(197,1): error: undefined reference to `i2c_stop()'
34 AdafruitAlphaDisplay.o: In function `AdafruitAlphaDisplay::begin(unsigned char)':
35 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(197,1): error: undefined reference to `i2c_start(unsigned char)'
36 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(197,1): error: undefined reference to `i2c_write(unsigned char)'
37 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(197,1): error: undefined reference to `i2c_stop()'
38 main.o: In function `main':
39 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\main.cpp(22,1): error: undefined reference to `QuadratureDecoder::QuadratureDecoder()'
40 collect2.exe(0,0): error: ld returned 1 exit status
41 make: *** [HomeLED_Anz.elf] Error 1
42 The command exited with code 2.
43 Done executing task "RunCompilerTask" -- FAILED.
44 Done building target "CoreBuild" in project "HomeLED_Anz.cppproj" -- FAILED.
45 Done building project "HomeLED_Anz.cppproj" -- FAILED.
46
47 Build FAILED.
48 ========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
Ich habe keine Idee, was das sein soll. Hatte nur den Tipp mit
-nostartfile in einem Forum gefunden.
Was zum Teufel sind diese Standard Startfiles?
Langsam verzweifle ich an diesem Tool.
06.05.2017 18:38 :
Bearbeitet durch User
Tja, das "Tool" ist völlig in Ordnung.
Das Problem sitzt davor. Niemand hat je behauptet, daß aus den Netz
zusammenkopierter Code ohne weiter Kenntnisse zum laufen gebracht werden
kann.
Die Fehlermeldungen besagen jetzt, das der linker einige i2c-Funktionen
nicht findet (i2c_start, usw.)
Warum, musst du halt rausfinden.
Oliver
Oliver S. schrieb:
> Vielleicht hilft das hier weiter:
>
> https://isocpp.org/wiki/faq/mixing-c-and-cpp
>
> Oliver
Danke, das klingt gut!
ok ich nehme also an, das das leere .hex file von dem do not use start
libs kommt. Dessen Verwendung hat den Fehler "behoben".
Das Problem scheint also zu sein, dass meine Klasse
AdafruitAlphaDisplay.cpp nicht mit den C - Funktion1 uint8_t i2c_start(uint8_t address)
aus den File Galvanix_i2c_master.c nicht finden kann.
Wenn ich mir die Arduino wire.cpp ansehe steht da auch:
1 extern "C" {
2 #include <stdlib.h>
3 #include <string.h>
4 #include <inttypes.h>
5 #include "utility/twi.h"
6 }
Wenn ich bei mir in der Funktion AdafruitDisplay.cpp das selbe versuche:
1 extern "C" {
2 #include "Galvanix_i2c_master.h"
3 }
findet der Linker die Funktionen immer noch nicht.
Im oben vorgeschlagenem Link steht:
"Note that C++ type rules, not C rules, are used. So you can’t call
function declared extern "C" with the wrong number of arguments."
Dabei ist mir aufgefallen, dass die C-Funktionen mit einem
Rückgabeargument definiert sind.
Daher definiere ich
und definiere die Funktionen (z.B. write Display) so:
1 void AdafruitAlphaDisplay::writeDisplay(void) {
2 //Wire.beginTransmission(i2c_addr);
3 int ResultFlag;
4 ResultFlag = i2c_start(i2c_addr);
5
6 ResultFlag = i2c_write((uint8_t)0x00); // start at address $00
7
8 for (uint8_t i=0; i<8; i++) {
9 ResultFlag = i2c_write(displaybuffer[i] & 0xFF);
10 ResultFlag = i2c_write(displaybuffer[i] >> 8);
11 }
12 //Wire.endTransmission();
13 i2c_stop();
14 }
Das funktioniert aber auch nicht. hier die Ausgabe:
1 ------ Build started: Project: HomeLED_Anz, Configuration: Debug AVR ------
2 Build started.
3 Project "HomeLED_Anz.cppproj" (default targets):
4 Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5 Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\HomeLED_Anz.cppproj" (target "Build" depends on it):
6 Task "RunCompilerTask"
7 Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
8 C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 4 --output-sync
9 Building file: .././AdafruitAlphaDisplay.cpp
10 Invoking: AVR8/GNU C Compiler : 5.4.0
11 .././AdafruitAlphaDisplay.cpp: In member function 'void AdafruitAlphaDisplay::setBrightness(uint8_t)':
12 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(149,7): warning: variable 'ResultFlag' set but not used [-Wunused-but-set-variable]
13 int ResultFlag;
14 ^
15 .././AdafruitAlphaDisplay.cpp: In member function 'void AdafruitAlphaDisplay::blinkRate(uint8_t)':
16 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(158,9): warning: variable 'ResultFlag' set but not used [-Wunused-but-set-variable]
17 int ResultFlag;
18 ^
19 .././AdafruitAlphaDisplay.cpp: In member function 'void AdafruitAlphaDisplay::begin(uint8_t)':
20 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(171,7): warning: variable 'ResultFlag' set but not used [-Wunused-but-set-variable]
21 int ResultFlag;
22 ^
23 .././AdafruitAlphaDisplay.cpp: In member function 'void AdafruitAlphaDisplay::writeDisplay()':
24 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(189,7): warning: variable 'ResultFlag' set but not used [-Wunused-but-set-variable]
25 int ResultFlag;
26 ^
27 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -funsigned-char -funsigned-bitfields -DDEBUG -DF_CPU=16000000 -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p" -c -MD -MP -MF "AdafruitAlphaDisplay.d" -MT"AdafruitAlphaDisplay.d" -MT"AdafruitAlphaDisplay.o" -o "AdafruitAlphaDisplay.o" ".././AdafruitAlphaDisplay.cpp"
28 Finished building: .././AdafruitAlphaDisplay.cpp
29 AdafruitAlphaDisplay.o: In function `AdafruitAlphaDisplay::setBrightness(unsigned char)':
30 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(206,1): error: undefined reference to `i2c_start(unsigned char)'
31 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(206,1): error: undefined reference to `i2c_write(unsigned char)'
32 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(206,1): error: undefined reference to `i2c_stop()'
33 AdafruitAlphaDisplay.o: In function `AdafruitAlphaDisplay::blinkRate(unsigned char)':
34 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(206,1): error: undefined reference to `i2c_start(unsigned char)'
35 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(206,1): error: undefined reference to `i2c_write(unsigned char)'
36 Building target: HomeLED_Anz.elf
37 Invoking: AVR8/GNU Linker : 5.4.0
38 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-g++.exe" -o HomeLED_Anz.elf AdafruitAlphaDisplay.o Galvanix_i2c_master.o main.o QuadratureDecoder.o -Wl,-Map="HomeLED_Anz.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.132\gcc\dev\atmega328p"
39 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(206,1): error: undefined reference to `i2c_stop()'
40 AdafruitAlphaDisplay.o: In function `AdafruitAlphaDisplay::begin(unsigned char)':
41 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(206,1): error: undefined reference to `i2c_start(unsigned char)'
42 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(206,1): error: undefined reference to `i2c_write(unsigned char)'
43 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\AdafruitAlphaDisplay.cpp(206,1): error: undefined reference to `i2c_stop()'
44 collect2.exe(0,0): error: ld returned 1 exit status
45 make: *** [HomeLED_Anz.elf] Error 1
46 D:\Benutzer\Alexander\Documents\Atmel Studio\7.0\HomeLED_Anz\HomeLED_Anz\Debug\Makefile(136,1): error: recipe for target 'HomeLED_Anz.elf' failed
47 The command exited with code 2.
48 Done executing task "RunCompilerTask" -- FAILED.
49 Done building target "CoreBuild" in project "HomeLED_Anz.cppproj" -- FAILED.
50 Done building project "HomeLED_Anz.cppproj" -- FAILED.
51
52 Build FAILED.
53 ========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
So langsam gehen mir die Ideen aus!
Wer kann helfen?
Alexander
06.05.2017 20:26 :
Bearbeitet durch User
Eine naheliegende Idee bei der Mischung von c++ und c-Sourcen wäre es,
die c-Dateien einfach mal in .cpp umzubenenen, und damit die ganzen
Probleme wie "extern c" zu umgehen.
Oliver
So, nun hab ich den Code auf dem Controller. Es war tatsächlich das mit
dem extern C.
Wieder was gelernt.
Die Lösung:
1 #ifdef __cplusplus
2 extern "C" {
3 #include "Galvanix_i2c_master.h"
4 }
5 #endif
an ALLEN Stellen, wo die Galvanix_i2c_master.h gebraucht wird, also auch
in main.cpp
Vielen Dank für die Hilfe
Alexander
07.05.2017 13:59 :
Bearbeitet durch User
von
Frank M.
(ukw )
(Moderator )
08.05.2017 08:50
Alexander S. schrieb:
> Die Lösung:#ifdef __cplusplus
> extern "C" {
> #include "Galvanix_i2c_master.h"
> }
> #endif
>
> an ALLEN Stellen, wo die Galvanix_i2c_master.h gebraucht wird, also auch
> in main.cpp
Einfacher wäre es gewesen,1 #ifdef __cplusplus
2 extern "C" {
am Anfang von Galvanix_i2c_master.h anzugeben und dann am Ende noch das:
Dann hättest Du den Source nur an einer Stelle ändern müssen und nicht
an 10000. ;-)
Ohh Super!
Das mache ich noch!
Danke!
Bei den .C files muss ich nichts machen?
08.05.2017 08:53 :
Bearbeitet durch User
So ... ausprobiert ....
funzt so, wie Du es gesagt hast.
Danke
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.