avr-gcc und Harvard

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
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



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.


Johannes


--  
Quoted text here. Click to load it


We've slightly trimmed the long signature. Click to see the full one.
Re: avr-gcc und Harvard
Am 20.03.2015 um 22:57 schrieb Johannes Bauer:
Quoted text here. Click to load it

Quoted text here. Click to load it



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


Markus


Re: avr-gcc und Harvard
Am 21.03.2015 um 15:06 schrieb Markus Faust:
Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it



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

volatile int running;

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

Vermutlich ist es also sinnvoll, die Variante mit __flash zu benutzen,
sofern Du nicht auf alte gcc-Varianten angewiesen bist. Oder halt was
mit Macros basteln...


Markus


Re: avr-gcc und Harvard
Markus Faust wrote:
Quoted text here. Click to load it


|  
| const char PROGMEM txt_run[] = "Run!";

Die Variante:
|  
| const char *pgmstr = PSTR("Run!");


dem RAM). Wenn ich Strings sowohl im Flash als auch im RAM liegen habe,
soll der Datentyp bezeichnen wo sie sich jeweils befinden.


BTW:
Ein avr-gcc 4.2 hat hier das Beispiel von Johannes ohne Fehlermeldung
angenommen.

Re: avr-gcc und Harvard

Quoted text here. Click to load it

4.7.2 hingegen zerreissts.

cm.

--  
** christian mock in vienna, austria -- http://www.tahina.priv.at/
Inferring the workings of the US legal system from what's posted in
We've slightly trimmed the long signature. Click to see the full one.
Re: avr-gcc und Harvard
christian mock wrote:
Quoted text here. Click to load it


--  





Re: avr-gcc und Harvard
christian mock wrote:
Quoted text here. Click to load it

4.5.3 geht dagegen auch noch.

Re: avr-gcc und Harvard
Am 21.03.2015 um 18:15 schrieb Michael Baeuerle:
Quoted text here. Click to load it

Quoted text here. Click to load it


will ich nix anderes mehr. Einerseits lassen sich einige Dinge deutlich
einfacher schreiben,
http://www.avrfreaks.net/comment/1120086#comment-1120086


Quoted text here. Click to load it

Quoted text here. Click to load it

const char PROGMEM *pgmstr = PSTR("Run!");




Markus


Re: avr-gcc und Harvard
Markus Faust wrote:
Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it




Ist auch offiziell dokumentiert (hatte ich noch gar nicht gesehen):
<http://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html
  
Quoted text here. Click to load it

Quoted text here. Click to load it


Ist wohl Geschmackssache.



Das ist in der Tat ein Fortschritt. Nur die neuen GCC Versionen, die das

compiler error" werfen).

Re: avr-gcc und Harvard
On 2015-03-20, Johannes Bauer wrote:
Quoted text here. Click to load it


    snprintf_P(...)



HTH,
Alex
--  

(Antoine de Saint-Exupery)

Site Timeline