Forum: Compiler & IDEs AVR Studio 7 -> Atmel 328P - Kein Code im .hex File


von Alexander S. (docalex)


Angehängte Dateien:

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 ==========

von Oliver S. (oliverso)


Lesenswert?

Die Ausgbabe scheint völlig in Ordnung zu sein.

Ist denn das .elf auch leer?

Oliver

von Alexander S. (docalex)


Angehängte Dateien:

Lesenswert?

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....

von Alexander S. (docalex)


Angehängte Dateien:

Lesenswert?

Hier die Fehlermeldung

: Bearbeitet durch User
von Alexander S. (docalex)


Angehängte Dateien:

Lesenswert?

Hier die Fehlermeldung

von Hott Sammerneid (Gast)


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.

von Alexander S. (docalex)


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 vom Autor gelöscht.
von Oliver S. (oliverso)


Lesenswert?

Mal ein neues Projekt anlegen, mit einem leerer main(), und probieren, 
ob das geht.

Oliver

von Alexander S. (docalex)


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 ==========

von Alexander S. (docalex)


Angehängte Dateien:

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

von Alexander S. (docalex)


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.

: Bearbeitet durch User
von Oliver S. (oliverso)


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

von Oliver S. (oliverso)


Lesenswert?

Vielleicht hilft das hier weiter:

https://isocpp.org/wiki/faq/mixing-c-and-cpp

Oliver

von Alexander S. (docalex)


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

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

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

von Alexander S. (docalex)


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

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


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. ;-)

von Alexander S. (docalex)


Lesenswert?

Ohh Super!

Das mache ich noch!

Danke!
Bei den .C files muss ich nichts machen?

: Bearbeitet durch User
von Alexander S. (docalex)


Lesenswert?

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.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.