Variablen in C - Progger, leiht mir euer Brain

Moderatoren: Asifish, king-pat

Benutzeravatar
Clow Leed
MIA Team Member
MIA Team Member
Beiträge: 2282
Registriert: 16 Dez 2004, 17:54
Spielt gerade: Freedom Wars
Diablo 3
Lieblingsspiel: Zelda: ALttP
Wohnort: Forschungs- und Technologiestadt Karlsruhe

Variablen in C - Progger, leiht mir euer Brain

Beitrag von Clow Leed »

Also: Ich bastle grad an einem Program in dem eine globale Variable
benötigt wird.

Zuerst eine Erklärung:
ham_DrawText(x,y,z); läßt einen Text anzeigen.
x = Offset an X Achse
y = Offset an Y Achse
z = "Hallo, Welt!" (ein String)

Die Variable heißt : SelectState und soll eine 8-bit Varia sein.

Der Inhalt fließt in eine If-Schleife wie in diese:

Code: Alles auswählen

       if (SelectState == 0);
    {
    ham_DrawText(23,2,"(-");
    ham_DrawText(23,3,"  ");
    ham_DrawText(23,4,"  ");
    }
Es liegen 2 dieser Schleifen untereinander wie hier:

Code: Alles auswählen

        if (SelectState == 0);
    {
    ham_DrawText(23,2,"(-");
    ham_DrawText(23,3,"  ");
    ham_DrawText(23,4,"  ");
    }
    if (SelectState == 1);
    {
    ham_DrawText(23,2,"  ");
    ham_DrawText(23,3,"(-");
    ham_DrawText(23,4,"  ");
    }
Es wird alles compliliert ohne Probs, doch wenn das Programm führt beide Schleifen aus.
Das heißt das (- springt auf und ab, was es nicht soll.

Ich hab jetzt schon fast alles ausprobiert, es geht nicht wie ich es will.
SEGA? LOL!
Benutzeravatar
smashIt
MIA V.I.P.
MIA V.I.P.
Beiträge: 253
Registriert: 08 Mär 2003, 19:21
Spielt gerade: PS0
Mass Effect 1
Wohnort: oberösterreich
Kontaktdaten:

Beitrag von smashIt »

ich würd mal sagen ; hinter den if-anweisungen gehört weg ;)
Ordnung ist etwas für Kleingeister, das Genie überblickt das Chaos!

Bild
Benutzeravatar
Clow Leed
MIA Team Member
MIA Team Member
Beiträge: 2282
Registriert: 16 Dez 2004, 17:54
Spielt gerade: Freedom Wars
Diablo 3
Lieblingsspiel: Zelda: ALttP
Wohnort: Forschungs- und Technologiestadt Karlsruhe

Beitrag von Clow Leed »

Argh, stimmt ja das macht man glaub ich in Javascript so...

Und wie bastle ich Variablen in denen Strings stehen?

Weil statt "lol" bekomm ich immer "6C656C".

Und statt 100 (in dezimal) bekomm ich immer 64 (in hex).
Ich hab jetzt nämlich rausgefunden, wie man den Inhalt einer Varia
anzeigt.

(2,2,%2x,SelectState);
SEGA? LOL!
Benutzeravatar
smashIt
MIA V.I.P.
MIA V.I.P.
Beiträge: 253
Registriert: 08 Mär 2003, 19:21
Spielt gerade: PS0
Mass Effect 1
Wohnort: oberösterreich
Kontaktdaten:

Beitrag von smashIt »

variablen in denen strings stehn kannst dir ganz brutal über n char-array basteln. is aber nicht die feine englische art.

schreibst eigentlich in reinem c oder c++?
wenn c++ gibts dafür schon unzählige libraries mit vorgefertigten string-klassen und dazugehörigen i/o-funktionen. nachdem ich aber das bischen was ich geproggt hab in beos gemacht hab und da schon ne sehr gute auswahl von be mitgelifert wurde kann ich dir da leider nicht weiterhelfen.

aber ich bin sicher das schon das notwendigste bei deinem compiler dazugepackt is ;)

----------EDIT----------
du sagst es sei ne 8-bit variable verwendest aber nur 0 udn 1, da würd sich bool besser eignen.
weil du dann einfach if(var)blablabla else balblaba machen kannst
wennst alle werte von 0 bis x brauchst würd sich n switch anbieten statt unzähligen ifs hintereinander
Ordnung ist etwas für Kleingeister, das Genie überblickt das Chaos!

Bild
Benutzeravatar
Panther
MIA Team Member
MIA Team Member
Beiträge: 1064
Registriert: 06 Mai 2003, 22:55
Spielt gerade: FF 14 / PSO2
Lieblingsspiel: Turrican 2
PSO 2 ID: Tia Lapis

Beitrag von Panther »

Clow du brauchst "%s" um einen String auszugeben. "%x" gibt eine Hexadezimalzahl aus... Ließ dir mal die Docu zu printf durch.

Die korrekte Lösung für die Ifs sieht so aus (unter Annahme das 0 oder irgendwas anderes):

if (!SelectState) {
// Hier kommt der =0 Block
} else {
// und hier der Rest
}
PSP2: Panther (Dranix74)
Benutzeravatar
Clow Leed
MIA Team Member
MIA Team Member
Beiträge: 2282
Registriert: 16 Dez 2004, 17:54
Spielt gerade: Freedom Wars
Diablo 3
Lieblingsspiel: Zelda: ALttP
Wohnort: Forschungs- und Technologiestadt Karlsruhe

Beitrag von Clow Leed »

Mittlerweile sieht es bei mir so aus:

Code: Alles auswählen

    if(F_CTRLINPUT_R_PRESSED)
    {
    ham_DrawText(1,2,"04000120 : xxxx");
    ham_DrawText(1,3,"04000122 : xxxx (SCD1)");
    ham_DrawText(1,4,"04000124 : xxxx (SCD2)");
    ham_DrawText(1,5,"04000126 : xxxx (SCD3)"),
    ham_DrawText(1,6,"04000128 : xxxx");
    ham_DrawText(1,7,"0400012A : xx");
    ham_DrawText(1,8,"04000134 : xxxx");
    //ham_DrawText(1,9,"020000b2 : xx");
    ham_DrawText(1,18,"Refresh       ");

    }
    if(F_CTRLINPUT_L_PRESSED)
    {
    *(volatile unsigned short *)(0x0400012A) = *(volatile unsigned short *)(0x04000120);
    ham_DrawText(1,18,"Looping       ");
    }
    
    if(F_CTRLINPUT_UP_PRESSED)
    {
    *(volatile unsigned short *)(0x04000128) = 0x608b;
    *(volatile unsigned short *)(0x04000134) = 0x0000;
    ham_DrawText(1,18,"Fake BIOS Wait");
    }
    //After Multiboot Reset
    if(F_CTRLINPUT_DOWN_PRESSED)
    {
    *(volatile unsigned short *)(0x04000122) = 0xFF;
    *(volatile unsigned short *)(0x04000128) = 0x508c;
    *(volatile unsigned short *)(0x0400012A) = 0xFF;
    *(volatile unsigned short *)(0x04000134) = 0x000A;
    ham_DrawText(1,18,"Reset GBA     ");
    }
    //Cycle SIOMLT_SEND
    if(F_CTRLINPUT_RIGHT_PRESSED)
    {
        g_SIOSend++;
    *(volatile unsigned short *)(0x0400012A)= g_SIOSend;
    ham_DrawText(1,18,"SIO_SEND: %4x",*(volatile unsigned short *)(0x0400012A));
    }
Wo find ich die Docu zu printf bei HAM scheint eine beizulegen,
aber geht nicht.

@SmashIt:
Es ist reines C (C++ = *örk*) für die GBA-Hardware...

Wie bau ich nen switch? So oder anders?

Code: Alles auswählen

switch (g_Mem){
case 0x200:
ham_DrawText(1,2,"lol1\n");
break;
case 0x2000:
ham_DrawText(1,2,"lol2");
break;
case 0x8000:
ham_DrawText(1,2,"lol3");
default:
ham_DrawText(1,2,"No lol - fail");
}
SEGA? LOL!
Benutzeravatar
smashIt
MIA V.I.P.
MIA V.I.P.
Beiträge: 253
Registriert: 08 Mär 2003, 19:21
Spielt gerade: PS0
Mass Effect 1
Wohnort: oberösterreich
Kontaktdaten:

Beitrag von smashIt »

jupp so sieht n switch aus (wenn mich mein gedächtnis nicht grad verarscht)
soweits sinn macht kannst break übrigens weglassen um mehrere blöcke auszuführen.

finds übrigens toll das für ne "console" was schreibst :o
und wegen c++=*örk*: schon mal java probiert? *örkörk*
Ordnung ist etwas für Kleingeister, das Genie überblickt das Chaos!

Bild
Benutzeravatar
Panther
MIA Team Member
MIA Team Member
Beiträge: 1064
Registriert: 06 Mai 2003, 22:55
Spielt gerade: FF 14 / PSO2
Lieblingsspiel: Turrican 2
PSO 2 ID: Tia Lapis

Beitrag von Panther »

Oha lernst du eigentlich programmieren ohne dir ein gutes Buch über die Programmiersprache deiner Wahl besorgt zu haben?

Hier man ein online gefundenes: http://publications.gbdirect.co.uk/c_book/

Ansonsten ist dein switch fast richtig. Nur VOR dem default fehlt das break. Somit würde im letzten Fall auch der default-Zweig durchlaufen.

Aber wenn du fürn GB coden willst lern ARM-Assembler und vergiß C ganz schnell...
PSP2: Panther (Dranix74)
Benutzeravatar
Clow Leed
MIA Team Member
MIA Team Member
Beiträge: 2282
Registriert: 16 Dez 2004, 17:54
Spielt gerade: Freedom Wars
Diablo 3
Lieblingsspiel: Zelda: ALttP
Wohnort: Forschungs- und Technologiestadt Karlsruhe

Beitrag von Clow Leed »

Ich bring mir grad selbst C bei - learning by doing. ;)
Alles weitere hol ich mir aus den Samples die beiliegen.
Nur einige Sachen stehen da auch nicht drin.
Zum Beispiel wie man das Program anhält.
Ich hab schon stop, wait, hold, pause versucht, aber geht nich.
Wie halte ich kurz an?
break bricht ja eine Schleife ab.
Kann man mit while() auch ne warteschlange machen? Wie?

@Panther:
VisualHAM macht glaub ich C/C++ -> ASM (Oder ARM)
SEGA? LOL!
Benutzeravatar
Panther
MIA Team Member
MIA Team Member
Beiträge: 1064
Registriert: 06 Mai 2003, 22:55
Spielt gerade: FF 14 / PSO2
Lieblingsspiel: Turrican 2
PSO 2 ID: Tia Lapis

Beitrag von Panther »

Clow Leed hat geschrieben:Ich bring mir grad selbst C bei - learning by doing. ;)
Alles weitere hol ich mir aus den Samples die beiliegen.
Nur einige Sachen stehen da auch nicht drin.
Genau deshalb benutzt man dazu ein einführendes Buch ;)

Zum Beispiel wie man das Program anhält.
Ich hab schon stop, wait, hold, pause versucht, aber geht nich.
Wie halte ich kurz an?
break bricht ja eine Schleife ab.
Das kann C überhauptnicht. Dafür brauchst du irgendeine API-Funktion des Betriebssystem. Kenn ich auf dem GB nicht. Sollte aber irgendwo angegeben sein. Unter Unix heißt die Funktion sleep(x)

Kann man mit while() auch ne warteschlange machen? Wie?
Kann man ist aber übelster Stil und funktioniert nicht wirklich gut.

@Panther:
VisualHAM macht glaub ich C/C++ -> ASM (Oder ARM)
Ja ist ja die Aufgabe eines Compilers ;) Nur ist direkt von Hand geschriebenes Assembler meistens deutlich kompackter und schneller, da man von Hand ganz andere Optimierungen nutzen kann als der Compiler (er weiß ja nicht was man will).
PSP2: Panther (Dranix74)
Antworten