Seite 1 von 1

Keine Wertzuweisung

Verfasst: Do Sep 24, 2009 4:22 pm
von cloidnerux
Ich habe einen pointer auf einen bestimmten Speicherbereich, dieser ist nicht belegt.
Jezt versuche ich dem Zeil des Pointers einen Wert zuweisen, doch dies Funktioniert nicht.
Beim Auslesen des Zeil erhalte ich 0, obwohl etwas anderes hereingeschrieben wurde.

Code: Alles auswählen

	for(i = 0; i < 1024; i++)
	{
		tempPageTable[i] = (i * 4096) | 3;
		ASSERT(tempPageTable[i] != 0);              //Gibt Fehlermeldung bei NICHT erfüllen der Bedigung aus.
	}
Der Code ist aus Aeris, desshalb bin ich mir nicht so sicher, was schief gelaufen sein kann.
Ich nutze keine Optimierung.
Danke für Hilfe.

Re: Keine Wertzuweisung

Verfasst: Do Sep 24, 2009 5:19 pm
von AnGaiNoR
Wenn ASSERT also eine Fehlermeldung ausgibt, wenn die Bedingung nicht erfüllt ist, dann scheint die Bedingung nicht erfüllt zu sein, eigentlich logisch :P
Die Werte in deinem wurden also zugewiesen, sind aber augenscheinlich nicht alle 0.
Für i = 2:
2048 | 3 = 2053 != 0

Re: Keine Wertzuweisung

Verfasst: Do Sep 24, 2009 5:24 pm
von cloidnerux
Die Werte in deinem wurden also zugewiesen, sind aber augenscheinlich nicht alle 0.
Das weiß ich ja, aber ich suche nach der Lösung zu meinem Problem.
Ich habe ja auch extra den Wert ausgeben lassen, den tempPageTable und da war es auch immer 0.
Also ist irgendwo der Wurm drinne.

Re: Keine Wertzuweisung

Verfasst: Do Sep 24, 2009 8:32 pm
von cloidnerux
Ok, fehler gefunden, ich hatte einen Multiplikationsfehler beim Allokieren des Speichers, wodurch falsche Addressen gemappt wurden.

Re: Keine Wertzuweisung

Verfasst: Fr Sep 25, 2009 11:17 am
von Xin
cloidnerux hat geschrieben:Ok, fehler gefunden, ich hatte einen Multiplikationsfehler beim Allokieren des Speichers, wodurch falsche Addressen gemappt wurden.
Öhm... ich sehe hier grade keinen Fehler... nur der Vollständigkeit halber... was ging warum schief?

Re: Keine Wertzuweisung

Verfasst: Fr Sep 25, 2009 12:58 pm
von Dirty Oerti
Soweit ich es mitbekommen habe:

Der Fehler lag nicht im obrigen Code, sondern wurde durch eine falsche Speicheralokierung (an anderer Stelle im Aeris-Betriebssystem) ausgelöst. Der Speicher wurde dadurch an eine andere (phys) Stelle gemappt, als vorgesehen. Dadurch konnten die gespeicherten Wert auch nicht von der vorgesehenen (phys) Adresse eingelesen werden.
Da ein Emulator wie Qemu den Speicher mit 0 initialisiert waren alle Werte == 0.

(Ich schreibe das, damit jemand, der nicht weiß, das cloidnerux an einem eigenen Kernel programmiert und der kein Vorwissen über so tiefgehende Computerangelegenheiten hat auch versteht, was denn nun los ist. Kurz: Der Vollständigkeit halber)