Autor Thema: Globale _Variablen_ im C-Kernel?  (Gelesen 4614 mal)

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« am: 28. November 2004, 15:18 »
Hallo,
(nur mal im vorraus ich spreche nicht von Instanzen einer Klasse, sondern von normalen integer variablen.)
Folgendes Problem: Globale Variablen klappen ganz normal wenn ich sie global deklariere und dann in einer funktion initialisiere bsp:

int foo;

main()
{
    foo = 3;
};

Doch wenn ich ihnen gleich einen Wert zuweisen will, so funktioniert das nicht also:

foo = 3;

main()
{

}

klappt nicht...weiß jemand woran das liegen könnte? Muss man da zuerst irgendwas tun?

Kyoko12

  • Beiträge: 59
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 28. November 2004, 15:33 »
wie wärs mit "int foo = 3;" ?

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 28. November 2004, 16:10 »
Klar, hatte ich ja auch, war nur ein schlampigkeitsfehler im Code, beispiel...aber es funzt auch so nicht (das würde ja einen Compilerfehler geben, was es nicht, es funzt ganz einfach nicht...:\

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 28. November 2004, 17:19 »
Wenn ich einem Array in einer funktion werte zuweisen will, sagt der Linker "Video.obj(.text+0x8f):Video.c: undefined reference to `_memcpy'" Kann es sein, das man für Arrays Memcpy braucht? O_o

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 28. November 2004, 19:20 »
Hiho,

ich hatte mal ein ähnliches Problem, bei mir lags am Bootloader.
Der hatte den Code nämlich um ein Byte (oder mehrere) falsch in den Speicher kopiert, und dadurch lag eine globale Variable net mehr an 0x10034 sondern 0x10035. Bis ich das rausgefunden hab, puhh! Auf solche Fehler solltest du schauen, ansonsten können es noch das Linkerscript oder die gcc Commandline sein...

MfG GhostCoder
A man, a legend!

Kyoko12

  • Beiträge: 59
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 28. November 2004, 19:21 »
Weiß nicht, aber int foo = 3; sieht nicht aus wien Array, oder? Naja, aber probiers einfach ,al.

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 28. November 2004, 20:18 »
Das ist mir schon klar, aber es geht weder mit normalen Variablen noch mit arrays nur kommt bei arrays noch das mit _memcpy dazu und dafür wollte ich keinen neuen Thread aufmachen.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #7 am: 29. November 2004, 16:16 »
Sag mal die Parameter  die du dem Compiler gibst, vielleicht hat es was damit zutun, die biult_in functionen müssen z.b. raus, vielleicht hat memcpy was damit zu tun.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 29. November 2004, 16:39 »
Hm...ich hatte nur --ffreestanding, ich nehme dann lieber noch --no-builtin dazu ;)

EDIT: so, jetzt habe ich es mit --no-builtin getestet, klappt immer noch nicht

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #9 am: 30. November 2004, 14:33 »
Bei mir gehts auch immer nur alles wenn ich ne bestimmte Optimiereinstellung drin hab^^ hier mal meine Zeile:
..\djgpp\bin\gpp -nostartfiles -nostdlib -fno-builtin -fno-rtti -fno-exceptions KernelC++.cpp -c -o kernelc++.obj -Os
Aber da ich C++ habe wird bei dir nicht alles so gehen
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 30. November 2004, 15:10 »
Hm...-Os habe ich drinnen... @GhostCoder Hm...Code sollte normal geladen werden, ich werde bei gelegenheit das Linkerscript posten und das makefile :)

 

Einloggen