Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - bitmaster

Seiten: 1 2 [3] 4 5 ... 57
41
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 12. February 2009, 12:31 »
So, da bin ich wieder.  :-D

Also ich möchte die Adresse eines Pointers in eine size_t Variable kopieren. Dazu mache ich folgendes:

char *pch;
size_t i;
...
i = pch;

Jetzt meckert gcc mit:

error: assignment makes integer from pointer without a cast

Without a cast? Was heißt das? So geht es nämlich auch nicht:

i = (char *)pch;
Muss ich da irgendwas spezielles machen, oder wie?

thx

bitmaster
42
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 07. February 2009, 15:01 »
hmm.. schade, na ja, nicht sooo schlimm
43
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 07. February 2009, 13:21 »
Bei ersterem heißt der Datentyp "struct bla" bei zweiterem "bla".
ah danke

Ist es irgendwie möglich die selbe Funktion mehrmals auszuführen, aber nur eine Zeile zu benutzen? Also dass man

funktion(var1);
funktion(var2);
funktion(var3);

ungefähr so schreiben kann
funktion(var1 kA var2 kA var3);
Also dass man nicht so "hässlich" mehrere Zeilen benötigt um hintereinander die selbe Funktion nur mit verschiedenen Parametern auszuführen. Geht das, oder geht das nicht?

thx

bitmaster
44
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 07. February 2009, 10:55 »
So, um wieder dem Thema ziemlich nah zu kommen, habe ich jetzt noch eine Frage bezüglich Strukturen. Sagt mal, was genau ist der Unterschied zwischen:

struct bla
{
...
};

und

typedef struct
{
...
} bla;

vielen dank schon mal

bitmaster
45
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 06. February 2009, 20:01 »
Ja.
Cool danke, jetzt kann ich mir 100%ig sicher sein, dass Bayern Meister wird.  :lol:

bitmaster
46
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 06. February 2009, 19:54 »
ah OK vielen dank, also um noch mal sicher zu gehen, folgendes ist das selbe?

const char *bla
const char* bla
?

bitmaster
47
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 06. February 2009, 19:44 »
sagt mal, welche Version sollte ich in der string.h stehen haben oder ist das egal?

extern size_t strlen(const char *);
size_t strlen(const char *);
size_t strlen(const char* str);
size_t strlen(const char *str);
thx

bitmaster
48
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 06. February 2009, 19:37 »
 :-o echt? Ja dann, vielen dank. Muss ich gleich mal ausprobieren.

bitmaster
49
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 06. February 2009, 19:25 »
So, jetzt kann ich im Kernel ja strlen nutzen, indem ich include <string.h> einfüge und ld die libc.a angebe. Das Gleiche bei Anwendungen natürlich auch. Aber dann hängt ja immer die ganze libc an dem Kernel/an den Anwendungen obwohl nur einzelne Funktionen gebraucht werden. Wenn ich z.B. im Kernel nur strlen brauche, dann hätte ich noch x andere Funktionen, die der Kernel gar nicht benötigt. Oder gibt es eine Möglichkeit nicht benötigte Funktionen nicht mit zu linken? Ich könnte in dem Fall natürlich einfach nur die strlen.o mit linken, nur dann würde es sicher eine Fehlermeldung geben, weil die anderen Prototypen, die in der string.h stehen nicht gefunden werden. Von daher stehe ich jetzt doof/unwissend da.  :?

bitmaster
50
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 05. February 2009, 16:33 »
Hmm jetzt meckert gcc wieder und ich weiß nicht was ich machen soll. Also ich habe eine Variable Namens blabla vom Typ u32, die einen Wert beinhaltet, der eine Adresse widerspiegelt, die auf einen Null terminierten String zeigt. Aber folgendes mag gcc dann nicht:

strlen(blabla);
und das geht auch net

strlen((u32)blabla);
gcc meckert dann mit:

Zitat
error: passing argument 1 of ‘strlen’ makes pointer from integer without a cast

hmm...

EDIT: arg, ich sollte vielleicht mein bayern fangesang etwas leiser schalten. Es scheint mich wohl doch ein wenig abzulenken. Also so geht es natürlich:

strlen((const char *)blabla);
bitmaster
51
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 05. February 2009, 15:38 »
...obwohl wir deiner Bedingung nachgekommen sind. :-D
Seid ihr? Uups äh *hust* na ja ...  :-P

bitmaster
52
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 05. February 2009, 15:30 »
Exakt dieses meinte ich mit uintptr_t... Zumindest wäre das der standard(konforme) Weg dies zu tun. Mit (u32) kriegst du im Longmode offensichtlich Probleme. Wie gesagt, Portabilität ist keine Eigenschaft einer (Hoch-)Sprache (edit: Aber erst Hochsprachen machen Portabilität möglich, falls jetzt wieder einer der Fließbandjungs kommt und nörgelt), sondern eher eine guten Codes.
Jo, ich habe in meinem Code eh noch jede Menge unportierbare Sachen drin, die ich noch ändern muss, wenn ich demnächst auch ne 64 bit Version haben möchte. Muss eh noch schauen wie genau das dann machbar ist. Evtl. braucht man dann den Präprozessor und solche Sachen? Und natürlich irgendwie ne Angabe ob ich jetzt 32 oder 64 bit compilieren / linken möchte. Ne Makefile bzw. Makefiles wären auch nicht schlecht.  :lol:

bitmaster
53
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 05. February 2009, 14:48 »
Du darfst mit dem sehr wohl rechnen, aber es wird nicht das sein was du dir vorstellst. zB:
T *t = 0;
++t;
Unter der Annahme, dass T ein Typ der Größe s ist, ist nach diesem Codestück t = 0 + 1 * s = s, d.h. es wird anstatt ein Byte weiterzugehen einmal s Bytes weitergegangen.

Wenn du wirklich bytes weitergehen möchtest, dann macht man das so:
T *t = 0;
t = (T*)((uintptr_t)t + x)
wobei x die Anzahl der Bytes ist die du weiter möchtest.
Äh ok, das mit dem inkrementieren/decrementieren habe ich schon gemerkt und in meinem Buch nachgelesen. Ich meinte mit "rechnen" jetzt aber was anderes. Aber ich habe es schon herausgefunden, mit (u32)boot_inf gehts. Aber trotzdem danke.

bitmaster
54
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 05. February 2009, 14:40 »
bluecode: Ah cool, danke.

So noch was, ich habe einen Zeiger namens *boot_inf. Mittels boot_inf bekomme ich ja jetzt den Wert der Adresse. Aber wieso darf ich mit dem nicht rechnen bzw. kann ich das doch irgendwie erzwingen?

thx

bitmaster
55
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 05. February 2009, 12:53 »
So, welche Größe hat __SIZE_TYPE__ eigentlich?

Und was ist der Unterschied zwischen const char *bla und char *bla?

Äh was gibts noch, hmm... später.  :lol:

bitmaster

EDIT: Ah, const ist sozusagen ein Schreibschutz, stimmts? Ich kann dann *bla nicht beschreiben. Zumindest wenn ich mein Buch richtig verstanden habe.

EDIT2: Bin gerade dabei die ersten Sachen für die libc zu machen (also strlen und so). Jetzt muss ich den kram ja mit gcc compilieren und habe dann eine *.o. Und weiter? Ich habe gesehen, dass das in Linux in ein *.a Archiv gepackt wird. Wie mache ich das? Und wie bringe ich gcc dazu, dass er dieses Archiv kennt, damit umgehen kann und es "immer" heranzieht. Also das Archiv müsste ich ja mit ar bauen können. Nur bei mir tut sich da nichts.

EDIT3: OK ich habs jetzt gebacken gekriegt mit dem Archiv. Aber wie sage ich dem gcc jetzt das er mit dem Archiv arbeiten soll?

thx

bitmaster
56
Lowlevel-Coding / Re: Exception wird nicht abgefangen
« am: 05. February 2009, 11:21 »
Und wieder was neues gelernt.
Ich dachte, die Interrupts 0 bis 31 werden nur vom Prozessor generiert ...
:roll:
Das war dein großer Fehler: Nicht denken, sondern nachdenken. *hust*  :lol:
57
Lowlevel-Coding / Re: Exception wird nicht abgefangen
« am: 05. February 2009, 11:08 »
*EDIT*
Wenn ich jetzt nicht ganz falsch liege, sollte wenn du "int 0" ausführen möchtest, der IDT-Eintrag 48 mit einer Funktion verknüpft werden, denn 0 - 31 (einschließlich 31) werden vom Prozessor generiert und dann 32 - 47 (auch wieder einschließlich 47) werden von den IRQs belegt.
hä? Eher nicht. int 0 ruft den Interrupt Null auf und int 0xff den Interrupt 255. Und in der IDT steht jeder Eintrag für den selbigen Interrupt. Also schaut ein int 0 nach was im Eintrag Null steht und ein int 0xff was im Eintrag 255 steht. Außerdem lässt sich der PIC umprogrammieren. Das heißt, dass die IRQs "überall" liegen können (da gibts glaube ich Einschränkungen, weiß jetzt nicht mehr genau welche, evtl. align 8 oder so). Wenn ich mich nicht irre, dann ruft ein int 0 genau das auf, was eine Division durch Null auch machen würde, nämlich eine Exception Null.

bitmaster
58
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 03. February 2009, 21:53 »
Zitat
Dann darf der Bootloader dich auch laden wenn er nicht mem_* füllen kann.
Mich darf er laden? oO besser nicht  :lol: die mem_* werden wohl eher "gefüllt" sein als die mmap_*. Bei meinem alten Notebook sind die mmap_* Felder z.B. nicht "gefüllt" aber die mem_* schon.

bitmaster
59
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 03. February 2009, 20:32 »
ehm... hä? Da steht, dass wenn du Bit 1 der Multiboot Header setzt, dass dann mindestens die mem_* Elemente der Multiboot Information Structure gültig sind (Anmerkung: ansonsten darf der Bootloader dein OS nicht laden) und falls der Bootloader fähig ist eine Memory-Map dir mit auf den Weg zu geben und noch dazu einen Memory-Map vorhanden ist (Anmerkung: über das BIOS), dann darf der Bootloader auch die mmap_* Elemente füllen.
Ja das kann ich auch lesen. Und wenn Bit1 nicht gesetzt ist? Was ist dann anders?

bitmaster
60
Lowlevel-Coding / Re: Struktur auf beliebigen Speicher anwenden
« am: 03. February 2009, 19:04 »
Zitat
Junge, nenn mich nicht Junge!
Junge, was meinen die mit Bit1? Wenn keine mmap vorhanden ist, dass dann die mem-felder vorhanden sein müssen?hä?

 :-o :? :-( :cry: :? :-o :x :? :-o
Seiten: 1 2 [3] 4 5 ... 57

Einloggen