mikrocontroller.net

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


Autor: Franz K (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Markus (Gast)
Datum:

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

Funktionieren sollte in jedem Falle:

// globale Variable
static unsigned long c1;

void readFlash()
{
  c1 = getFlash(xyz);
}

void showc1()
{
 printf("%l", c1)
}

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

Fehler wäre z.B.:
void readFlash()
{
  static unsigned long c1;
  c1 = getFlash(xyz);
}

void showc1()
{
  static unsigned long c1;
  printf("%l", c1)
}

  

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Franz K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mir jetzt eine Struct gebaut.

wo ich mehrer Werte drinn stehen hab.

das funktioniert.

Danke

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

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht 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.


Autor: Freakazoid (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.