Compilerzeiten bei GCC für den GBA



  • Hi!
    Auf dem GameBoyAdvanced gibt es ja leider keine Dateien, somit muss man
    alle seine Mediendateien in ein Array auslagern. Diese sind dann immer
    extern in einer Header datei für sich. Das sieht dann inetwa so aus:

    const u8[42623] = 
    {
       2,54,3,63,128,72,...
    };
    

    (u8 ist übrigens unsigned Byte)
    Und dann binde ich diese Headerdatei so ein :
    #include "Bild.h"
    Was einen aber zur Weißglut bringt ist, die laaaaaaaangen Compilerzeiten.
    Mein Rechner schmiert nach einer Zeit dann einfach ab, weil es zu lange
    dauert, 4 MB zu kompilieren. Ich vermute mal, dass er jedes Byte durchgeht,
    und überprüft, ob es nicht die Wertegrenze von s8 überschreitet. Das muss
    aber nicht sein, weil ich immer 100pro sichergehen kann, das die Werte
    nie den Wertebereich überschreiten. Anders kann ich mir diese langen Zeiten
    nicht erklären. Ich lese den Inhalt so einer 4 MB Headerdatei in höchstens
    einer halben Minute aus. Kann man das irgendwie abschalten, das er die Header-
    dateien auf Fehler untersucht?
    Hilfe! 🙂
    mfg olli



  • Wie man das abschalten kann, weis ich nicht, aber ich hab ne Idee, wie es nur einmal so lange dauert.
    Die Bild.h nennst du Bild.c und kompilierst sie einmal für den Linker (Gib der Konstante einen Namen, z.B. bild).
    Im Programmsource schreibst du dann "extern bild;" und linkst das Prog mit der bild.o.
    Sollte funzen .. glaub ich 😃



  • Danke ertstmal! Blos habe ich das ganze noch nicht kapiert, wie ich das
    umsetzen sollte.

    Path = ..\..\SDK\devkitadv\bin
    gcc -o Explosion.o Explosion.c

    So lautet jetzt die make.bat
    dann kommt aber immer:

    C:\GBA\Projects\Sound>gcc -o Programm Explosion.c
    /cygdrive/c/GBA/SDK/DEVKIT~1/BIN/../lib/gcc-lib/arm-agb-elf/3.0.2/../../../../ar
    m-agb-elf/lib/crt0.o: In function __FarProcedure': /cygdrive/c/GBA/SDK/DEVKIT~1/BIN/../lib/gcc-lib/arm-agb-elf/3.0.2/../../../../ar m-agb-elf/lib/crt0.o(.text+0x1f0): undefined reference tomain'
    collect2: ld returned 1 exit status

    Ich denke mal, er will unbedingt eine Mainfunktion.

    Und wenn das dann mal irgendwie klappen sollte, müsste ich dann
    beim Hauptprogramm das so machen?:

    Path = ..\..\SDK\devkitadv\bin
    gcc -o Main.o Main.cpp -lm
    objcopy -O binary Explosion.o Main.o Main.gba

    das mit der Konstante erreich ich doch so ?oder:

    const signed char Explosion[42512] =
    {
    	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,34,34 ...
    };
    

    also via const.

    thx!
    mfg olli



  • Ich denke mal, er will unbedingt eine Mainfunktion.

    Du musst die Explosion.c nur kompilieren: gcc -c Explosion.c
    Nur wenn es sich um was ausführbares handelt, braucht man ne main(); Die Aktion soll ja nur ein Objekt-File geben.

    Und wenn das dann mal irgendwie klappen sollte, müsste ich dann
    beim Hauptprogramm das so machen?:

    Das kann ich dir nicht sagen: ich kenn mich mit der Programmierung für Konsolen nicht aus. Sieht aber richtig aus.

    das mit der Konstante erreich ich doch so ?oder:

    Du hast doch gesagt u8 wäre unsigned char - warum auf einmal signed?


Anmelden zum Antworten