Forums Neueste Beiträge
 

avr-gcc und Harvard

20/03/2015 - 22:57 von Johannes Bauer | Report spam
Hi,

irgendwie gings hier ja letztin schonmal drum, wie bekackt der avr-gcc
die Harvard-Architektur holt. Probiert mal folgendes bei euch aus:

-8<-8<-8<-8<-8<-8<-8<-
#include <stdio.h>
#include <avr/pgmspace.h>

volatile int running;

void foobar() {
char lcdText[33];
const char *pgmstr = running ? PSTR("Run!") : PSTR("STOP");
snprintf(lcdText, 32, "%4S", pgmstr);
}
-8<-8<-8<-8<-8<-8<-8<-

Und kompiliert mit -fmerge-all-constants:

$ avr-gcc -mmcu=atmega128 -fmerge-all-constants -c -o crap crap.c

Mein avr-gcc 4.8.1 jedenfalls übergibt sich ordentlich:

minexample.c:10:1: internal compiler error: in get_section, at varasm.c:312
}
^
0x90611f get_section(char const*, unsigned int, tree_node*)
../../gcc/varasm.c:312
0x91da3f avr_asm_select_section
../../gcc/config/avr/avr.c:8368
0x90e83a assemble_variable(tree_node*, int, int, int)
../../gcc/varasm.c:2013
0x910205 varpool_assemble_decl(varpool_node*)
../../gcc/varpool.c:313
0x578478 output_in_order
../../gcc/cgraphunit.c:1837
0x578478 compile()
../../gcc/cgraphunit.c:2037
0x578689 finalize_compilation_unit()
../../gcc/cgraphunit.c:2119
0x4b5383 c_write_global_declarations()
../../gcc/c/c-decl.c:10118
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.

Viele Grüße,
Johannes




Wo hattest Du das Beben nochmal GENAU vorhergesagt?


Zumindest nicht öffentlich!


Ah, der neueste und bis heute genialste Streich unsere großen
Kosmologen: Die Geheim-Vorhersage.
- Karl Kaos über Rüdiger Thomas in dsa <hidbv3$om2$1@speranza.aioe.org>
 

Lesen sie die antworten

#1 Markus Faust
21/03/2015 - 15:06 | Warnen spam
Am 20.03.2015 um 22:57 schrieb Johannes Bauer:
Hi,

irgendwie gings hier ja letztin schonmal drum, wie bekackt der avr-gcc
die Harvard-Architektur holt. Probiert mal folgendes bei euch aus:

-8<-8<-8<-8<-8<-8<-8<-
#include <stdio.h>
#include <avr/pgmspace.h>

volatile int running;

void foobar() {
char lcdText[33];
const char *pgmstr = running ? PSTR("Run!") : PSTR("STOP");
snprintf(lcdText, 32, "%4S", pgmstr);
}
-8<-8<-8<-8<-8<-8<-8<-

Und kompiliert mit -fmerge-all-constants:

$ avr-gcc -mmcu=atmega128 -fmerge-all-constants -c -o crap crap.c

Mein avr-gcc 4.8.1 jedenfalls übergibt sich ordentlich:

minexample.c:10:1: internal compiler error: in get_section, at varasm.c:312
}
^
[...]



Ist nachvollziehbar und sollte natürlich nicht so sein.

Ich mache das immer so in der Art:

-8<-8<-8<-8<-8<-8<-8<-
#include <stdio.h>

volatile int running;

const __flash char txt_run[] = "Run!";
const __flash char txt_stop[] = "STOP";

void foobar() {
char lcdText[33];
snprintf(lcdText, 32, "%4S", running ? txt_run : txt_stop);
}
-8<-8<-8<-8<-8<-8<-8<-

Grüße
Markus

Ähnliche fragen