Forum: Compiler & IDEs Return mit uint32_t will nicht funktionieren


von Nik Bamert (Gast)


Lesenswert?

Hi,
ich hab nochmal eine Frage, also ich habe hier eine Funktion gemacht
die
ein uint32_t zurückgeben soll.
1
uint32_t getentry(unsigned short entry, unsigned char *buf){
2
.
3
.
4
.
5
.
6
filesize = *((uint32_t *)&minibuf[0]); //<---filesize hier noch
7
korrekt
8
9
return(filesize);
10
}
11
12
//Wenn ich das ganze nun als Funktion aufrufe :
13
uint32_t z;
14
z = getentry(a,&filename[0]); 
15
16
//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

von Karl H. (kbuchegg)


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.

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


Lesenswert?

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

von Nik Bamert (Gast)


Angehängte Dateien:

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)
1
uint32_t showvar()
2
{
3
uint32_t variable = 5000;
4
5
uart_print(variable); //hier richtig ausgegeben
6
7
return(variable);
8
}
9
10
main()
11
{
12
uint32_t z;
13
z = showvar()
14
15
uart_print(z); // hier falsch ausgegeben
16
}
@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 :(

von Irgwer (Gast)


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.

von Nik Bamert (Gast)


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

von Nik Bamert (Gast)


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

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.