Forum: Compiler & IDEs Varaiblen definition gehen beim aufruf der funktion verloren


von Franz K (Gast)


Lesenswert?

Kann mir einer sagen wie man variablen zuweist und sie dann nach x 
beliebiger zeit (solange der AVR läuft) wieder abfragt uun diese noch 
den wert haben wo sie zuletzt zugewiesen wurden.


wie könnte man sowas machen.

ich lese einmal einen wert aus (SPI FLash) und speicher ihn mir in eine 
Variable C1.

nun habe ich Funktionen die auf c1 zugreifen müssen um berechnungen 
auszuführen.

das klappt aber nicht C1 hat dann nur unsinniges zeug

ich schreibe in C1= 23499

beim aufruf bekomme ich C1=786

ohne das ich C1 wieder zugewiesen habe.

Was mache ich falsch

static unsigned long c1;

so habe ich es deklariert.

zuweisen C1=23499;
lesen unigned long wert=C1;

wert=786;

von Markus (Gast)


Lesenswert?

Hi,
wenn Du den Code hier mal komplett reinstellst, dann kann man auch sehen 
worans liegt ;)

Funktionieren sollte in jedem Falle:
1
// globale Variable
2
static unsigned long c1;
3
4
void readFlash()
5
{
6
  c1 = getFlash(xyz);
7
}
8
9
void showc1()
10
{
11
 printf("%l", c1)
12
}

Achte auf Groß-/Kleinschreibung und vermeide lokale Varibalen in den 
Unterroutinen mit gleichem Namen.

Fehler wäre z.B.:
1
void readFlash()
2
{
3
  static unsigned long c1;
4
  c1 = getFlash(xyz);
5
}
6
7
void showc1()
8
{
9
  static unsigned long c1;
10
  printf("%l", c1)
11
}

  

von Karl heinz B. (kbucheg)


Lesenswert?

Am wahrscheinlichsten:
Du hast irgendeinen anderen Fehler im Program, der
dir den Inhalt der Variablen zerstört.

Ohne Original-Programmtext praktisch nicht zu lösen.

von Franz K (Gast)


Lesenswert?

Habe mir jetzt eine Struct gebaut.

wo ich mehrer Werte drinn stehen hab.

das funktioniert.

Danke

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Du hast nur dein ursprüngliches Problem noch nicht gelöst: memory
corruption.  Irgendwas läuft bei dir wild und zerschießt den
Speicher.  Du wirst dir also diesmal einfach was anderes kaputt
machen.

von Peter D. (peda)


Lesenswert?

Franz K wrote:
> Habe mir jetzt eine Struct gebaut.
>
> wo ich mehrer Werte drinn stehen hab.
>
> das funktioniert.


Nö, es funktioniert immer noch nicht, bloß ist der Fehler für Dich zur 
Zeit nicht mehr sichtbar.

Du wirst mit einem solchen Programmierstil nicht lange Erfolg haben.

Du mußt die Ursache finden und nicht die Wirkung bekämpfen !


Peter

von Karl H. (kbuchegg)


Lesenswert?

> Nö, es funktioniert immer noch nicht, bloß ist der Fehler für Dich zur
> Zeit nicht mehr sichtbar.

Ach, der kommt schon noch :-)
War noch immer so. Pseudolösungen halten nicht lange.

Blöd ist nur (für ihn), dass er jetzt die Chance hatte, dem
Problem auf den Grund zu gehen. Dadurch dass er es jetzt versteckt
hat, wird es nur schlimmer.


von Freakazoid (Gast)


Lesenswert?

Meine Gasheizung hat ein Leck. Mein Nachbar hat mich drauf hingewiesen.
Da ich das Leck nicht dichten konnte, hab ich jetzt alle Fenster und 
Türen mit Silikon abgedichtet. Hoffe mein Nachbar ist jetzt zufrieden 
und wird nicht mehr durch Geruch belästigt.

Grüße, Freakazoid

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.