www.mikrocontroller.net

Forum: Compiler & IDEs Return mit uint32_t will nicht funktionieren


Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich hab nochmal eine Frage, also ich habe hier eine Funktion gemacht
die
ein uint32_t zurückgeben soll.
uint32_t getentry(unsigned short entry, unsigned char *buf){
.
.
.
.
filesize = *((uint32_t *)&minibuf[0]); //<---filesize hier noch
korrekt

return(filesize);
}

//Wenn ich das ganze nun als Funktion aufrufe :
uint32_t z;
z = getentry(a,&filename[0]); 

//dann bekomme ich zwar etwas zurück, allerdings total andere Zahlen..

So ich hoffe das mit dem Highlighting klappt... :)
Ram hab ich sicherlich noch genug übrig(mega32) und ich brauche im
Moment davon nur 512 byte als buffer und einige andere uint32_t.

Nik

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

Bewertung
0 lesenswert
nicht lesenswert
Mit dem gezeigten Code kann man noch keine Aussage
treffen. Poste mal etwas mehr.

Ideal waere:
  Ein vollstaendiges, compilierbares Program, das
  besagten Fehler zeigt und so kurz als moeglich ist.

Es ist naemlich moeglich das Dein Problem in Wirklichkeit
ganz woanders zu suchen ist und Du hier nur die Auswirkungen
des Fehlers siehst.

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

Bewertung
0 lesenswert
nicht lesenswert
Es ist auch möglich, dass es gar keinen Fehler gibt sondern nur
wegoptimierte Werte, da sie nicht benutzt werden...

Autor: Nik Bamert (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Karl

Kein Problem, hab ich mal angehängt :)
Ich hab nur den Ausschnitt gepostet, da der Rest eigentlich nichts zur
Sache beiträgt, mein Problem verhält sich etwa so:(pseudocode)
uint32_t showvar()
{
uint32_t variable = 5000;

uart_print(variable); //hier richtig ausgegeben

return(variable);
}

main()
{
uint32_t z;
z = showvar()

uart_print(z); // hier falsch ausgegeben
}

@Jörg

Der Wert wird benutz und ist auch in einem Moment 128, dann vergleiche
ich den Rückgabewert ausserhalb der Funktion mit 128 nach jedem
funktionsaufruf, aber da bekomme ich dann immer false :(

Autor: Irgwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Nik,

tritt das Problem bei der Funktion getentry aus der Datei fat.c auf?

Darin gibst du zwar den Wert der Variable filesize über den UART aus,
der Rückgabewert kommt aber aus der Variable clusterbegin.

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Argh hoppla,da hab ich vergessen alles von filesize auf clustersize zu
ändern. Nun hab ich alles auf clustersize geändert, natürlich daselbe
Ergebniss wie vorher, als alles 'filesize' war :(

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Immer liegts an solch etwas kleinem, hab folgendes in der fat.h
vergessen: extern uint32_t getentry(unsigned short entry, unsigned char
*buf);

Nun klappts einwandfrei. Was ich damit am Ende erreichen will sind
einige standard C funktionen wie fopen, fread ...Ich hab auch schon
eine
Idee wie man nahezu unbegrenzt(4bytes ram/datei notwendig) viele
Dateien gleichzeitig geöffnet haben kann :)
fopen gibt den Cluster bei dem die Datei anfängt zurück und schon gehts
rund...

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.