www.mikrocontroller.net

Forum: Compiler & IDEs pointer struct parameter übergabe / fehler?


Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

[projekt lcd display] - habe ein struct:

typedef struct {
  uint16_t  color;
} tSquare;

und eine zugehörige funktion

void ShowSquare(tSquare *pSquare) {

  glcdSetFgColor(pSquare->color);
  glcdRectangle(10,20,15,25);
}


in MAIN wird folgendes aufgerufen:

tSquare square;
square.color = BLUE; //BLUE ist definiert constante
ShowSquare(&square);

==> das rechteck wird nicht blau

auch wenn ich das struct nicht mittels pointer übergebe sondern per 
value geht es nicht

KANN ES SEIN DASS DIE ÜBERGABE MITTELS STRUCT IM NEUEN WINAVR EINEN BUG 
HAT (es wird ein default makefile verwendet) ?

falls ich BLUE direkt in der funktion glcdSetFgColor aufrufe, wird es 
blau dargestellt

danke

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich tippe mal darauf, dass 16bit nicht reichen, um die Farbe zu 
übergeben? Welchen Datentyp erwartet denn glcdSetFgColor(...)?

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
16 bit - ist auch uint16_t
falls ich glcdSetFgColor(BLUE) direkt verwende funktioniert es ja auch 
...

Autor: Hugo Mildenberger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein alignment - Problem? Die  Felder eines structs werden vom Compiler 
normalerweise (wegen des schnelleren Zugriffs) auf Maschinenwortbreite 
ausgerichtet. Was ergibt sizeof(tSquare)? Mit 8 oder 16-Bit alignment 
sollte 2 herauskommen, mit 32-Bit alignment kommt 4 heraus.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
arbeiet mit win avr bzw avr-gcc - habe da leider zur zeit nicht die 
möglichkeit eine ausgabe zu machen - müsste erst uart routine dran 
hängen

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es scheint so als das vom struct gar nichts bei der funktion ankommt, 
egal welche werte ich übergebe, mein rechteck hat immer diesselbe 
farbe...

Autor: Hugo Mildenberger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In diesem Fall würde ich das struct testweise anders definieren:
typedef struct {
  uint16_t  color2;
  uint16_t  color;
} tSquare;

und dann so testen:

tSquare square;
square.color = BLUE;
square.color2 = BLUE;
ShowSquare(&square);

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht leider auch nicht... hm

Autor: Hugo Mildenberger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist aber eigenartig. Wie groß ist BLUE numerisch? Irgendwo in einem 
Header muß #define BLUE irgendwas stehen.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define BLUE=10

Autor: Hugo Mildenberger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist die Compiler-Optimierung ausgeschaltet? (-O0 für gcc)

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja

ich werde in den nächsten tagen nochmals die struct übergabe getretnnt 
testen mit ausgabe über uart

scheint so dass diese nicht so richtig funktioniert - ich bekomme nicht 
die werte des structs übergebene in der funktion.

Autor: Hugo Mildenberger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sieht sehr nach Compiler-Bug aus. Interessant wäre vielleicht, in der 
Routine Show-Square BLUE nochmal explizit zuzuweisen, also 
pSquare->color=BLUE; vor dem Aufruf der lcd-Funktion, und wenn's dann 
geht, vor dem Aufruf etwas einzubauen wie if (pSquare!=NULL); um den 
Compiler zu zwingen den Pointer zu laden.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das habe ich auch schon probiert

also wenn ich

pSquare->color=BLUE;

in die funktion showSquare einbaue dann gehts ... nur dort bringt es mir 
nichts ;)

Autor: Hugo Mildenberger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon klar. Es ging mir darum, das Problem einzugrenzen. Man könnte 
(außer einem Bug-Report) als Workaround auch versuchen, einen pointer 
auf einen pointer zu übergeben, also etwa tSquare **ppSquare.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nur nächstes problem,:

falls ich nun in der struct einen weiteren wert habe:

typedef struct {
 uint16_t  color;
  uint8_t  x;
} tSquare;

GEHT ES NICHT MEHR


folgender versuch schlägt auch fehl (koordinatenübergabe)

typedef struct {
 uint8_t  x;
  uint8_t  x;
} tSquare;

werde mal den alten winavr installieren

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dasselbe phänomen ;)

Autor: Hugo Mildenberger (hmld)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht was genau nicht mehr?

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wenn du anstatt

glcdSetFgColor(pSquare->color);

glcdSetFgColor(BLUE);
aufrufst?

wenn sich wieder nix tut, ist compiler eindeutig nicht schuld ;)

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das funktioniert wie gesagt ;)

Autor: Hugo Mildenberger (hmld)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was mir gerade auffällt: Steht im Header wirklich
"#define BLUE=10"? Oder nicht vielmehr "#define BLUE 10" ?

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WAS SEHR INTERESSANTES HERAUSGEFUNDEN:

falls das struct global definiert wird, funktionierts nicht
falls es lokal definiert wird (innerhalb main) funktioniert es 
einwandfrei...

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
besser gesagt: global ohne static funktioniert es nicht - global static 
funktionierts

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn struct so kleingewichtig ist, dann kann man
auf den Zeiger verzichten und per value übergeben.
Wenn es dann geht, dann macht Compiler was falsch.
Allerdings ist das so ein typischer Fall, wie du
es gebrauchst, dass mir ein Bug eher unwahrscheinlicher scheint.

Ok, das ist C.
#define BLUE=10

müsste so heissen
#define BLUE 10

10 ist dann vom Typ int. Aber das nur nebenbei.

Ich vermute, dass im .c file keine Declaration
für die Funktion vorliegt und Compiler was falsches annimt.
Das ist C wie gesagt :)

Kannst du den Compiler mit -Wall durchlaufen lassen?

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja #define BLUE 10 ist klar ;) vertippt wegene andere progsprache

-wall ist standart on

wie gesagt:
varibale lokal - alles funzt
varibale gloabl static - alles funzt
varibale global - nix funzt

danke

Autor: Hugo Mildenberger (hmld)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das klingt nach verschiedenen Datensegmenten -- evtl. muß man den 
Pointer konvertieren oder je nach Zielspeicherbereich speziell 
definieren beim Atmel? Beim 8051 ist das so.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SO JETZT DREH ICH BALD DURCH:

versuch 1:
//GLOBAL DEFINIERT
tSquare square;

versuch 2: !!! FUNKTIONIERT !!!
//GLOBAL DEFINIERT
tSquare mySquare;


d.h. name der variable geändert von 'square' auf 'mySquare' dann 
funktionierts auch glboal ohne static ???!?!?!?!?!?!?!?!?!?!?!!! (ist 
square reserviertes word ?)

Autor: Hugo Mildenberger (hmld)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht in C. Aber gibt es vielleicht eine Präprozessor-Definition für 
"square"?

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bin schon am googeln

Autor: Hugo Mildenberger (hmld)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht im internet, sondern in den Quelldateien natürlich!

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein nicht in meinem projekt (google desktop)

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in der math.h von winavr ist square definiert

Autor: Hugo Mildenberger (hmld)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm. Es ist spät -- ist das globale "mySquare" versus "square" 
reproduzierbar? Ein inkonsistenter Make könnte auch deartiges 
hervorbringen

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja es ist spät

aber in der math.h definiert :

  /**
     \ingroup avr_math

     The function square() returns <tt>x * x</tt>.

     \note
     This function does not belong to the C standard definition.
  */
extern double square(double __x) _ATTR_CONST_;

Autor: Hugo Mildenberger (hmld)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gert wrote:
> in der math.h von winavr ist square definiert

als #define oder als Prototyp?

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Iss im Grunde egal,der Compiler sollte eine doppelt definiertes Symbol 
schon als Fehler melden...

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
falls ich math.h direkt im file includiere macht er das auch ...

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok danke inzischen allen - gute nacht

Autor: Hugo Mildenberger (hmld)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde mir jetzt die Ausgabe der gcc --save-temps -Option ansehen.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist reproduzierbar:

falls variable 'square' heisst - gehts nicht
falls variable zb 'Square' oder zb 'square1' heisst - gehts

Autor: Hugo Mildenberger (hmld)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
1.) gcc -O0 -save-temps gibt auch die Assembler-Datei aus (*.s). 
Vielleicht der einfachste Weg um zu sehen, welches Symbol tatsächlich an 
die Zeichenroutine übergeben wird.

2.) gcc -g -O0  -Wl,-M gibt die Linkmap aus. Darin nachsehen, was 
wirklich für das Symbol square gelinkt wird (und außerdem, welche 
Symbole in der Nähe liegen. Vielleicht wird square ja versehentlich 
innerhalb einer ISR überschrieben? Oder durch ein sprintf)?


3.) Anbei ein Testprogramm, welches ohne UART auskommt, indem es die 
Farbe des LCD ansteuert (ist natürlich anzupassen). Lokale Variablen 
können gleichnamige Funktionsdeklarationen überdecken, und sollen das 
auch können.

Denkbar wäre noch, daß der verwendete Compiler  "square" als 
intrinsische Funktion erkennt, und demnach die Adresse dieser Funktion 
"square" übergibt, anstatt die Adresse der Variablen. Dann wäre es eben 
doch ein Compiler-Fehler.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigens würde ich erstmal nicht von einem Compiler-Bug aussehen. Man 
bräuchte erstmal mehr Informationen zum Quelltext, bzw. eine minimale 
Code-Version, bei der der Fehler auftritt. So ein Bug wäre mit 
Sicherheit schon aufgefallen.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit variablename 'square' wird im map-file ua. folgender block 
angeführt:

c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(square.o)
                              simple.o (square)
c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(mulsf3.o)
                              c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(square.o)  (__mulsf3)
c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(mulsf3x.o)
                              c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(mulsf3.o)  (__mulsf3x)
c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(fp_merge.o)
                              c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(mulsf3.o)  (__fp_merge)
c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(fp_nan.o)
                              c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(mulsf3x.o)  (__fp_nanx)
c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(fp_split.o)
                              c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(mulsf3.o)  (__fp_split3)
c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(fp_zero.o)
                              c:/program 
files/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\ 
libc.a(fp_merge.o)  (__fp_zero)

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und im lss file ist das symbol 'square' definiert - und diese wird 
verwendet - natürlich steht hier nur schrott drinnen ;)

000011f8 <square>:
    11f8:  9b 01 ac 01 0c 94 00 09                             ........

Autor: Hugo Mildenberger (hmld)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann mich Simon Küppers nur anschließen. Es ist Zeit für ein 
Minimalprogramm, welches den Fehler reproduziert. Anhand der hier 
gegebenen Daten kann man das nicht wirklich. Es ist klar, daß die 
Funktion square verwendet wird, aber es ist durchaus nicht 
nachvollziehbar, in welchem Zusammenhang.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

folgende 2 test-programme zeigen den unterschied (erstellt unter 
avrstudio):

//=== 1 ========================
int test;
int main() {
  test += 1;
  return 0;
}

//=== 2 ========================
int square;
int main() {
  square += 1;
  return 0;
}

nach durchsicht des .lss und .map file wird der unterschied ersichtlich 
;)

im anhang mein eigentliches projekt:

atmega128/siemens s65 display
tetris portiert von c# nach c

gruss

Autor: gert (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier nochmal der anhang

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch nicht schlecht:
int sqrt;

int main()
{
  sqrt += 1;
  return 0;
}

Warnung:
builtin function sqrt declared as non-function

Seit wann sind die Funktionen der Standardbibliothek reservierte
Wörter?
(Das EXE hat dann übrigens, 788 Bytes. Mit einem Variablennamen
'test' lediglich 178 Bytes)

Ich denke mal das ganze hängt damit zusammen, dass der Optimizer
über einige Funktionen Bescheid weiss und dieses Wissen zur
Optimierung benutzen kann.

Jörg: Sind das beim gcc nicht die intrinsischen (intrinsic)
Funktionen?

Wie ich den gcc kenen, gibt es da sicher einen Compilerswitch
mit dem man das abschalten kann. Nur finde den mal unter den
hunderten möglichen Switches.

Pragmatische Lösung: Nenne das Teil nicht 'square' sondern
'block' oder 'tile'.

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz interessant sind auch die Analysen des Formatstrings und der 
Parameter, die neuere gcc (zumindest arm-elf) bei Xprintf schon zu 
Compilezeit durchführen. Praktisch.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

variable wurde logischerweise umbenannt ;)

lustig dass bei 'square' nicht mal ne warnung rauschgeschrieben wird

danke

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gert wrote:
>
> lustig dass bei 'square' nicht mal ne warnung rauschgeschrieben wird
>

liegt vermutlich daran, dass square(), im Gegensatz zu sqrt(),
keine 'offizielle' Standardfunktion ist.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
denk ich auch - wie in math.h dokumentiert

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:

> Seit wann sind die Funktionen der Standardbibliothek reservierte
> Wörter?

  7.1.3 Reserved identifiers
...
  -- All identifiers with external linkage in any of the following
     subclauses (including the future library directions) are always
     reserved for use as identifiers with external linkage.157)

> Ich denke mal das ganze hängt damit zusammen, dass der Optimizer
> über einige Funktionen Bescheid weiss und dieses Wissen zur
> Optimierung benutzen kann.

Genau so ist es.

> Wie ich den gcc kenen, gibt es da sicher einen Compilerswitch
> mit dem man das abschalten kann. Nur finde den mal unter den
> hunderten möglichen Switches.

-ffreestanding :-)

Wir sollten unsere eigenen Erweiterungen unter Umständen so kapseln,
dass sie mit Schaltern wie -ansi nicht zur Verfügung stehen.

> Pragmatische Lösung: Nenne das Teil nicht 'square' sondern
> 'block' oder 'tile'.

Ja, das würde ich auch sagen.  "static" müsste auch helfen, wenn man
es auf file scope reduzieren kann.  (Das ist ohnehin eine sinnvolle
Idee für alles, was man tut: den Scope immer auf das notwendige
Minimum einengen.)

Wobei mir gerade nicht klar ist: wenn <math.h> nicht included ist,
sollte eigentlich nichts passieren.  Wenn es included ist, sollte der
Compiler sich darüber beschweren, dass die beiden Deklarationen/
Definitionen nicht zusammen passen.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja wurde eh umgetauft auf static mySquare

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:

> Wobei mir gerade nicht klar ist: wenn <math.h> nicht included ist,
> sollte eigentlich nichts passieren.

Das war auch meine Hypothese. Die ist aber kläglich gescheitert.
Ich konnte es gar nicht glauben :-)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:

>> Wobei mir gerade nicht klar ist: wenn <math.h> nicht included ist,
>> sollte eigentlich nichts passieren.
>
> Das war auch meine Hypothese. Die ist aber kläglich gescheitert.
> Ich konnte es gar nicht glauben :-)

Ich kann es allerdings nicht reproduzieren.  Wenn ich obigen simplen
Test (extra mit -O0, damit er die Variable nicht wegoptimiere)
compiliere, bekomme ich:
% avr-nm foo.elf
000000ba t .do_clear_bss_loop
000000bc t .do_clear_bss_start
...
00800100 A _edata
00800102 A _end
000000f4 T _etext
000000f2 T _exit
000000f2 W exit
000000ce T main
00800100 B square

also eindeutig eine Variable square im .bss.  Ja, ich habe gegen -lm
gelinkt (aber davon wird natürlich nichts benötigt).

Ah ja... ich seh da was.  Da wollte einer besonders gut sein und
war eher dilletantisch.  Verschiedene trigonometrische Funktionen
in libm.a referenzieren square() direkt.  Damit ist das Teil dann
natürlich drin und auch an jeglicher Typprüfung des Compilers vorbei.
Der Linker merkt das dann nicht mehr.

Bitte schreibt einen avr-libc-Bugreport.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> Karl heinz Buchegger wrote:
>
>>> Wobei mir gerade nicht klar ist: wenn <math.h> nicht included ist,
>>> sollte eigentlich nichts passieren.
>>
>> Das war auch meine Hypothese. Die ist aber kläglich gescheitert.
>> Ich konnte es gar nicht glauben :-)
>
> Ich kann es allerdings nicht reproduzieren.  Wenn ich obigen simplen
> Test (extra mit -O0, damit er die Variable nicht wegoptimiere)

Ich hatte -Os benutzt und nicht gegen -lm gelinkt.

Nachtrag: Hab jetzt nochmal mit -O0 compiliert. Gleicher Effekt.
Ich hab hier den WinAVR-20070525

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und du hast obiges ,,Minimalprogramm'' compiliert?

Kannst du mir die Compilerkommandozeile nennen und ggf. auch das
ELF-File hier als Attachment posten?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> Und du hast obiges ,,Minimalprogramm'' compiliert?

Ja.
Genau so wie es da steht.
Ohne irgendwelche Includes.

> Kannst du mir die Compilerkommandozeile nennen und ggf. auch das
> ELF-File hier als Attachment posten?

Jetzt hast du mich erwischt :-)
Ich benutze die Standardeinstellung vom AVR-Studio.
Ich deh mal zu, dass ich an das Makefile rankomme, welches
AVR-Studio benutzt.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also:
Der Compileraufruf
avr-gcc.exe  -mmcu=atmega16 -Wall -gdwarf-2 -O0 -MD -MP -MT ForumTest.o 
-MF dep/ForumTest.o.d -c ../ForumTest.c


Im Anhang das makefile und das ELF-File

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moment mal, das ist aber das mit sqrt().

Seltsamerweise generiert das aber -- mit deinem Makefile -- bei mir
nicht dein Ergebnis:
% avr-objdump -d ForumTest.elf 

ForumTest.elf:     file format elf32-avr

Disassembly of section .text:

00000000 <__vectors>:
   0:   0c 94 2a 00     jmp     0x54    ; 0x54 <__ctors_end>
   4:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
   8:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
   c:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  10:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  14:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  18:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  1c:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  20:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  24:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  28:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  2c:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  30:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  34:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  38:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  3c:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  40:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  44:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  48:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  4c:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>
  50:   0c 94 47 00     jmp     0x8e    ; 0x8e <__bad_interrupt>

00000054 <__ctors_end>:
  54:   11 24           eor     r1, r1
  56:   1f be           out     0x3f, r1        ; 63
  58:   cf e5           ldi     r28, 0x5F       ; 95
  5a:   d4 e0           ldi     r29, 0x04       ; 4
  5c:   de bf           out     0x3e, r29       ; 62
  5e:   cd bf           out     0x3d, r28       ; 61

00000060 <__do_copy_data>:
  60:   10 e0           ldi     r17, 0x00       ; 0
  62:   a0 e6           ldi     r26, 0x60       ; 96
  64:   b0 e0           ldi     r27, 0x00       ; 0
  66:   e8 eb           ldi     r30, 0xB8       ; 184
  68:   f0 e0           ldi     r31, 0x00       ; 0
  6a:   02 c0           rjmp    .+4             ; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
  6c:   05 90           lpm     r0, Z+
  6e:   0d 92           st      X+, r0

00000070 <.do_copy_data_start>:
  70:   a0 36           cpi     r26, 0x60       ; 96
  72:   b1 07           cpc     r27, r17
  74:   d9 f7           brne    .-10            ; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
  76:   10 e0           ldi     r17, 0x00       ; 0
  78:   a0 e6           ldi     r26, 0x60       ; 96
  7a:   b0 e0           ldi     r27, 0x00       ; 0
  7c:   01 c0           rjmp    .+2             ; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
  7e:   1d 92           st      X+, r1

00000080 <.do_clear_bss_start>:
  80:   a2 36           cpi     r26, 0x62       ; 98
  82:   b1 07           cpc     r27, r17
  84:   e1 f7           brne    .-8             ; 0x7e <.do_clear_bss_loop>
  86:   0e 94 49 00     call    0x92    ; 0x92 <main>
  8a:   0c 94 5b 00     jmp     0xb6    ; 0xb6 <_exit>

0000008e <__bad_interrupt>:
  8e:   0c 94 00 00     jmp     0       ; 0x0 <__heap_end>

00000092 <main>:
  92:   cf 93           push    r28
  94:   df 93           push    r29
  96:   cd b7           in      r28, 0x3d       ; 61
  98:   de b7           in      r29, 0x3e       ; 62
  9a:   80 91 60 00     lds     r24, 0x0060
  9e:   90 91 61 00     lds     r25, 0x0061
  a2:   01 96           adiw    r24, 0x01       ; 1
  a4:   90 93 61 00     sts     0x0061, r25
  a8:   80 93 60 00     sts     0x0060, r24
  ac:   80 e0           ldi     r24, 0x00       ; 0
  ae:   90 e0           ldi     r25, 0x00       ; 0
  b0:   df 91           pop     r29
  b2:   cf 91           pop     r28
  b4:   08 95           ret

000000b6 <_exit>:
  b6:   ff cf           rjmp    .-2             ; 0xb6 <_exit>

Es wird ganz normal eine Variable sqrt angelegt, die auf Adresse
0x[800]060 landet.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit 'square' wiederholen - dann klappts ;)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, für mich klappt es nicht, egal wie ich es drehe.  Einziger
Unterschied hier: ich habe kein WinAVR, sondern benutze ,,nur''
das von Karl Heinz mitgegebene Makefile.  In jedem Falle wird bei
mir sqrt oder square eine Variable auf Adresse 0x60.  Es ist mir
auch nach wie vor komplett unlogisch, warum das anders sein soll --
schließlich wird -lm ja gar nicht angegeben, und sowohl square als
auch sqrt kommen ausschließlich in der libm.a vor, nicht in der
libc.a.  Selbst wenn sie in der libc.a wären, würden deren Module
von diesem einfachen Programm nicht referenziert, also holt sie
der Linker auch nicht rein.

Wie gesagt, ich sehe den Bug (die trigonometrischen Funktionen haben
nicht das Recht, eine Implementierung einer Hilfsfunktion namens
square mit ins Boot zu ziehen, da dieser Name im application name
space liegt), habe aber keinen Schimmer, warum der bei euch zuschlägt.

Autor: gert (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hi

hier nochmals mit AvrStudio (standart-einstellungen, makefile im anhang)

% avr-objdump -d SquareTest.elf

SquareTest.elf:     file format elf32-avr

Disassembly of section .text:

00000000 <__vectors>:
   0:  0c 94 46 00   jmp  0x8c  ; 0x8c <__ctors_end>
   4:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
   8:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
   c:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  10:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  14:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  18:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  1c:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  20:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  24:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  28:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  2c:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  30:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  34:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  38:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  3c:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  40:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  44:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  48:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  4c:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  50:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  54:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  58:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  5c:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  60:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  64:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  68:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  6c:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  70:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  74:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  78:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  7c:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  80:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  84:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>
  88:  0c 94 63 00   jmp  0xc6  ; 0xc6 <__bad_interrupt>

0000008c <__ctors_end>:
  8c:  11 24         eor  r1, r1
  8e:  1f be         out  0x3f, r1  ; 63
  90:  cf ef         ldi  r28, 0xFF  ; 255
  92:  d0 e1         ldi  r29, 0x10  ; 16
  94:  de bf         out  0x3e, r29  ; 62
  96:  cd bf         out  0x3d, r28  ; 61

00000098 <__do_copy_data>:
  98:  11 e0         ldi  r17, 0x01  ; 1
  9a:  a0 e0         ldi  r26, 0x00  ; 0
  9c:  b1 e0         ldi  r27, 0x01  ; 1
  9e:  e2 e2         ldi  r30, 0x22  ; 34
  a0:  f2 e0         ldi  r31, 0x02  ; 2
  a2:  00 e0         ldi  r16, 0x00  ; 0
  a4:  0b bf         out  0x3b, r16  ; 59
  a6:  02 c0         rjmp  .+4        ; 0xac <__do_copy_data+0x14>
  a8:  07 90         elpm  r0, Z+
  aa:  0d 92         st  X+, r0
  ac:  a0 30         cpi  r26, 0x00  ; 0
  ae:  b1 07         cpc  r27, r17
  b0:  d9 f7         brne  .-10       ; 0xa8 <__do_copy_data+0x10>

000000b2 <__do_clear_bss>:
  b2:  11 e0         ldi  r17, 0x01  ; 1
  b4:  a0 e0         ldi  r26, 0x00  ; 0
  b6:  b1 e0         ldi  r27, 0x01  ; 1
  b8:  01 c0         rjmp  .+2        ; 0xbc <.do_clear_bss_start>

000000ba <.do_clear_bss_loop>:
  ba:  1d 92         st  X+, r1

000000bc <.do_clear_bss_start>:
  bc:  a0 30         cpi  r26, 0x00  ; 0
  be:  b1 07         cpc  r27, r17
  c0:  e1 f7         brne  .-8        ; 0xba <.do_clear_bss_loop>
  c2:  0c 94 65 00   jmp  0xca  ; 0xca <main>

000000c6 <__bad_interrupt>:
  c6:  0c 94 00 00   jmp  0  ; 0x0 <__vectors>

000000ca <main>:
  ca:  cf 93         push  r28
  cc:  df 93         push  r29
  ce:  cd b7         in  r28, 0x3d  ; 61
  d0:  de b7         in  r29, 0x3e  ; 62
  d2:  80 91 ee 00   lds  r24, 0x00EE
  d6:  90 91 ef 00   lds  r25, 0x00EF
  da:  01 96         adiw  r24, 0x01  ; 1
  dc:  90 93 ef 00   sts  0x00EF, r25
  e0:  80 93 ee 00   sts  0x00EE, r24
  e4:  80 e0         ldi  r24, 0x00  ; 0
  e6:  90 e0         ldi  r25, 0x00  ; 0
  e8:  df 91         pop  r29
  ea:  cf 91         pop  r28
  ec:  08 95         ret

000000ee <square>:
  ee:  9b 01 ac 01 0c 94 7b 00                             ......{.

000000f6 <__mulsf3>:
  f6:  67 d0         rcall  .+206      ; 0x1c6 <__fp_split3>
  f8:  01 d0         rcall  .+2        ; 0xfc <__mulsf3x>
  fa:  4a c0         rjmp  .+148      ; 0x190 <__fp_merge>

000000fc <__mulsf3x>:
  fc:  99 23         and  r25, r25
  fe:  39 f0         breq  .+14       ; 0x10e <__mulsf3x+0x12>
 100:  55 23         and  r21, r21
 102:  29 f0         breq  .+10       ; 0x10e <__mulsf3x+0x12>
 104:  9f 57         subi  r25, 0x7F  ; 127
 106:  5f 57         subi  r21, 0x7F  ; 127
 108:  95 0f         add  r25, r21
 10a:  13 f4         brvc  .+4        ; 0x110 <__mulsf3x+0x14>
 10c:  9a f1         brmi  .+102      ; 0x174 <__mulsf3x+0x78>
 10e:  87 c0         rjmp  .+270      ; 0x21e <__fp_zerox>
 110:  91 58         subi  r25, 0x81  ; 129
 112:  9f 3f         cpi  r25, 0xFF  ; 255
 114:  e1 f3         breq  .-8        ; 0x10e <__mulsf3x+0x12>
 116:  62 9f         mul  r22, r18
 118:  a1 2d         mov  r26, r1
 11a:  0f 92         push  r0
 11c:  bb 27         eor  r27, r27
 11e:  63 9f         mul  r22, r19
 120:  a0 0d         add  r26, r0
 122:  b1 1d         adc  r27, r1
 124:  ee 27         eor  r30, r30
 126:  72 9f         mul  r23, r18
 128:  a0 0d         add  r26, r0
 12a:  b1 1d         adc  r27, r1
 12c:  ee 1f         adc  r30, r30
 12e:  af 93         push  r26
 130:  aa 27         eor  r26, r26
 132:  64 9f         mul  r22, r20
 134:  b0 0d         add  r27, r0
 136:  e1 1d         adc  r30, r1
 138:  73 9f         mul  r23, r19
 13a:  b0 0d         add  r27, r0
 13c:  e1 1d         adc  r30, r1
 13e:  aa 1f         adc  r26, r26
 140:  66 27         eor  r22, r22
 142:  82 9f         mul  r24, r18
 144:  b0 0d         add  r27, r0
 146:  e1 1d         adc  r30, r1
 148:  a6 1f         adc  r26, r22
 14a:  55 27         eor  r21, r21
 14c:  74 9f         mul  r23, r20
 14e:  e0 0d         add  r30, r0
 150:  a1 1d         adc  r26, r1
 152:  55 1f         adc  r21, r21
 154:  83 9f         mul  r24, r19
 156:  e0 0d         add  r30, r0
 158:  a1 1d         adc  r26, r1
 15a:  56 1f         adc  r21, r22
 15c:  84 9f         mul  r24, r20
 15e:  a0 0d         add  r26, r0
 160:  51 1d         adc  r21, r1
 162:  85 2f         mov  r24, r21
 164:  7a 2f         mov  r23, r26
 166:  6e 2f         mov  r22, r30
 168:  1f 90         pop  r1
 16a:  0f 90         pop  r0
 16c:  88 23         and  r24, r24
 16e:  1a f4         brpl  .+6        ; 0x176 <__mulsf3x+0x7a>
 170:  93 95         inc  r25
 172:  39 f4         brne  .+14       ; 0x182 <__mulsf3x+0x86>
 174:  25 c0         rjmp  .+74       ; 0x1c0 <__fp_nan>
 176:  00 0c         add  r0, r0
 178:  11 1c         adc  r1, r1
 17a:  bb 1f         adc  r27, r27
 17c:  66 1f         adc  r22, r22
 17e:  77 1f         adc  r23, r23
 180:  88 1f         adc  r24, r24
 182:  01 28         or  r0, r1
 184:  08 95         ret
 186:  9a 95         dec  r25
 188:  bb 0f         add  r27, r27
 18a:  66 1f         adc  r22, r22
 18c:  77 1f         adc  r23, r23
 18e:  88 1f         adc  r24, r24

00000190 <__fp_merge>:
 190:  11 24         eor  r1, r1
 192:  99 23         and  r25, r25
 194:  a1 f0         breq  .+40       ; 0x1be <__fp_merge+0x2e>
 196:  88 23         and  r24, r24
 198:  b2 f7         brpl  .-20       ; 0x186 <__mulsf3x+0x8a>
 19a:  9f 3f         cpi  r25, 0xFF  ; 255
 19c:  59 f0         breq  .+22       ; 0x1b4 <__fp_merge+0x24>
 19e:  bb 0f         add  r27, r27
 1a0:  48 f4         brcc  .+18       ; 0x1b4 <__fp_merge+0x24>
 1a2:  21 f4         brne  .+8        ; 0x1ac <__fp_merge+0x1c>
 1a4:  00 20         and  r0, r0
 1a6:  11 f4         brne  .+4        ; 0x1ac <__fp_merge+0x1c>
 1a8:  60 ff         sbrs  r22, 0
 1aa:  04 c0         rjmp  .+8        ; 0x1b4 <__fp_merge+0x24>
 1ac:  6f 5f         subi  r22, 0xFF  ; 255
 1ae:  7f 4f         sbci  r23, 0xFF  ; 255
 1b0:  8f 4f         sbci  r24, 0xFF  ; 255
 1b2:  9f 4f         sbci  r25, 0xFF  ; 255
 1b4:  88 1f         adc  r24, r24
 1b6:  97 95         ror  r25
 1b8:  87 95         ror  r24
 1ba:  97 f9         bld  r25, 7
 1bc:  08 95         ret
 1be:  2c c0         rjmp  .+88       ; 0x218 <__fp_zero>

000001c0 <__fp_nan>:
 1c0:  9f ef         ldi  r25, 0xFF  ; 255
 1c2:  80 ec         ldi  r24, 0xC0  ; 192
 1c4:  08 95         ret

000001c6 <__fp_split3>:
 1c6:  05 2e         mov  r0, r21
 1c8:  09 26         eor  r0, r25
 1ca:  07 fa         bst  r0, 7

000001cc <__fp_split2>:
 1cc:  44 0f         add  r20, r20
 1ce:  55 1f         adc  r21, r21
 1d0:  5f 3f         cpi  r21, 0xFF  ; 255
 1d2:  79 f0         breq  .+30       ; 0x1f2 <__fp_split1+0x14>
 1d4:  aa 27         eor  r26, r26
 1d6:  a5 17         cp  r26, r21
 1d8:  08 f0         brcs  .+2        ; 0x1dc <__fp_split2+0x10>
 1da:  51 e0         ldi  r21, 0x01  ; 1
 1dc:  47 95         ror  r20

000001de <__fp_split1>:
 1de:  88 0f         add  r24, r24
 1e0:  99 1f         adc  r25, r25
 1e2:  9f 3f         cpi  r25, 0xFF  ; 255
 1e4:  31 f0         breq  .+12       ; 0x1f2 <__fp_split1+0x14>
 1e6:  bb 27         eor  r27, r27
 1e8:  b9 17         cp  r27, r25
 1ea:  08 f0         brcs  .+2        ; 0x1ee <__fp_split1+0x10>
 1ec:  91 e0         ldi  r25, 0x01  ; 1
 1ee:  87 95         ror  r24
 1f0:  08 95         ret
 1f2:  9f 91         pop  r25
 1f4:  9f 91         pop  r25
 1f6:  11 24         eor  r1, r1
 1f8:  e3 cf         rjmp  .-58       ; 0x1c0 <__fp_nan>

000001fa <__fp_split_a>:
 1fa:  97 fb         bst  r25, 7
 1fc:  88 0f         add  r24, r24
 1fe:  99 1f         adc  r25, r25
 200:  9f 3f         cpi  r25, 0xFF  ; 255
 202:  31 f0         breq  .+12       ; 0x210 <__fp_split_a+0x16>
 204:  bb 27         eor  r27, r27
 206:  b9 17         cp  r27, r25
 208:  08 f0         brcs  .+2        ; 0x20c <__fp_split_a+0x12>
 20a:  91 e0         ldi  r25, 0x01  ; 1
 20c:  87 95         ror  r24
 20e:  08 95         ret
 210:  9f 91         pop  r25
 212:  9f 91         pop  r25
 214:  11 24         eor  r1, r1
 216:  d4 cf         rjmp  .-88       ; 0x1c0 <__fp_nan>

00000218 <__fp_zero>:
 218:  66 27         eor  r22, r22
 21a:  77 27         eor  r23, r23
 21c:  88 27         eor  r24, r24

0000021e <__fp_zerox>:
 21e:  99 27         eor  r25, r25
 220:  08 95         ret

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du mal die exakten Kommandozeilen posten, die bei AVR Studio
da benutzt werden?

Ich bekomme:
% gmake -f ../Makefile
avr-gcc  -mmcu=atmega128 -Wall -gdwarf-2 -O0 -fsigned-char  -MD -MP -MT main.o -MF dep/main.o.d  -c  ../main.c
avr-gcc -mmcu=atmega128 -Wl,-Map=SquareTest.map main.o     -o SquareTest.elf
avr-objcopy -O ihex -R .eeprom  SquareTest.elf SquareTest.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex SquareTest.elf SquareTest.eep
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
gmake: *** [SquareTest.eep] Error 1

Diesmal ist ein ATmega128 eingestellt, da liegt die Variable square
auf 0x100 bei mir.

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
laut avrstudio output:
rm -rf main.o  SquareTest.elf dep/* SquareTest.hex SquareTest.eep SquareTest.lss SquareTest.map
Build succeeded with 0 Warnings...
avr-gcc.exe  -mmcu=atmega128 -Wall -gdwarf-2 -O0 -MD -MP -MT main.o -MF dep/main.o.d  -c  ../main.c
avr-gcc.exe -mmcu=atmega128  main.o     -o SquareTest.elf
avr-objcopy -O ihex -R .eeprom  SquareTest.elf SquareTest.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex SquareTest.elf SquareTest.eep
c:\WinAVR\bin\avr-objcopy.exe: there are no sections to be copied!
c:\WinAVR\bin\avr-objcopy.exe: --change-section-lma .eeprom=0x00000000 never used
make: *** [SquareTest.eep] Error 1
Build succeeded with 0 Warnings...

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bzw mit .lss und .map file:
rm -rf main.o  SquareTest.elf dep/* SquareTest.hex SquareTest.eep
Build succeeded with 0 Warnings...
avr-gcc.exe  -mmcu=atmega128 -Wall -gdwarf-2  -O0 -fsigned-char -MD -MP -MT main.o -MF dep/main.o.d  -c  ../main.c
avr-gcc.exe -mmcu=atmega128 -Wl,-Map=SquareTest.map main.o     -o SquareTest.elf
avr-objcopy -O ihex -R .eeprom  SquareTest.elf SquareTest.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex SquareTest.elf SquareTest.eep
c:\WinAVR\bin\avr-objcopy.exe: there are no sections to be copied!
c:\WinAVR\bin\avr-objcopy.exe: --change-section-lma .eeprom=0x00000000 never used
make: *** [SquareTest.eep] Error 1
Build succeeded with 0 Warnings...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.