globale variablen schützen

Gast #1944380
Lesenswert?

Hallo Experten,
ich habe ein recht umfangreichen code für ein uC welches unter anderem 
ein globles array beinhaltet. Dieses globale array verändert plötzlich 
nach einer mir unverständlichen stelle den Inhalt. Habt Ihr erfahrung 
mit so etwas.

Hier ein beispiel

uint8t array[10];

func1()
{
  array[0] = 1;
  array[1] = 2;
  array[2] = 3;
  array[3] = 4;
  array[4] = 5;
  array[5] = 6;
  array[6] = 7;
  array[7] = 8;
  array[8] = 9;
  array[9] = 10;
}
func2()
{
 uint8t temp[20];

.....
sprintf(temp,"textmuster"); /*hier an dieser stelle sind auf einmal die 
Werte meines arrays verändert*/



}
Gast #1944428
Lesenswert?

warum meckert den der Compiler  nicht über so etwas ich meine die 
variablen haben ja eine feste größe?
ich benutze für die IAR entwicklungsumgebung Controller stm32
kann man den zwingen das in flash zu packen wie PROGMEM bei avr?
Gast #1944460
Lesenswert?

Und meine Ergänzung dazu bezog sich darauf, dass Konstanten auch im SRAM 
landen können. Das macht(e) u.A. der GCC von Haus aus so.
Obwohl es Konstanten sind, werden sie ins SRAM geladen, vermutlich der 
Harvard-Architektur wegen.
Gast #1944486
Lesenswert?

noob schrieb:
> und war es nicht so das globale variablen im flash abgelegt werden?

Ihr Initialisierungswert wird im Flash abgelegt, wenn der nicht 0 ist. 
Die Variable muß natürlich im RAM liegen, weil sie sonst nicht mehr 
beschrieben werden könnte.

noob schrieb:
> warum meckert den der Compiler  nicht über so etwas ich meine die
> variablen haben ja eine feste größe?

Der Stack hat keine feste Größe. Der wächst abhängig von 
Funktionsaufrufhierarchien, Interrupts und anderen Faktoren so weit, wie 
eben nötig. Seine Größe ist erst zur Laufzeit bekannt.

> ich benutze für die IAR entwicklungsumgebung Controller stm32

Ach, es geht gar nicht um gcc? Warum hast du es dann im gcc-Form 
gepostet?

> kann man den zwingen das in flash zu packen wie PROGMEM bei avr?

Du kannst nur Konstanten in den Flash legen, keine Variablen.

Sven P. schrieb:
> Und meine Ergänzung dazu bezog sich darauf, dass Konstanten auch im SRAM
> landen können. Das macht(e) u.A. der GCC von Haus aus so.

Nur auf Plattformen, wo das nicht anders geht.

> Obwohl es Konstanten sind, werden sie ins SRAM geladen, vermutlich der
> Harvard-Architektur wegen.

Beim AVR, ja. Das ist aber bei weitem nicht die einzige Architektur, für 
die es einen gcc gibt.
Gast #1944488
Lesenswert?

Sven P. schrieb:
> Und meine Ergänzung dazu bezog sich darauf, dass Konstanten auch im SRAM
> landen können. Das macht(e) u.A. der GCC von Haus aus so.

Das hab' ich schon verstanden. Nur, außer daß Du mir das jetzt gesagt 
hast, und ich es mir gemerkt habe, in was für einer Beziehung steht es 
zum Kontext des TO ?

Wenn ich mich jetzt nicht recht täusche, ist dies hier:
> uint8t array[10];
> func1()
> {
>   array[0] = 1;
>   array[1] = 2;
>   array[2] = 3;
>   array[3] = 4;
>   array[4] = 5;
>   array[5] = 6;
>   array[6] = 7;
>   array[7] = 8;
>   array[8] = 9;
>   array[9] = 10;
> }
kein Konstantenarray. Und genau um das ging es bei dieser Fragestellung, 
bzw. falschen Vermutung des TO.

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