AVR Studio 7 -> Atmel 328P - Kein Code im .hex File

#5000981
Lesenswert?

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 ==========
Angehängte Dateien:
Gast #5001098
Lesenswert?

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.
#5001118
Lesenswert?

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 von einem Moderator gelöscht.
#5001164
Lesenswert?

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 ==========
#5001169
Lesenswert?

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
Angehängte Dateien:
#5001184
Lesenswert?

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.
#5001195
Lesenswert?

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
#5001266
Lesenswert?

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 - Funktion
1
 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
1
int ResultFlag;

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
#5001848
Lesenswert?

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
Moderator Persönliche Seite #5002730
Lesenswert?

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:
1
}
2
#endif

Dann hättest Du den Source nur an einer Stelle ändern müssen und nicht 
an 10000. ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren