[geloest] mein erstes programm -> error

Willkommen!

Wenn du im Nexave-Forum mitmachen möchtest, schreib an community@nexave.de. Wir haben die Registrierungsfunktion in unserem Diskussionsforum nämlich deaktiviert, weil sich praktisch nur noch Spammer und Werbebots registriert haben. Per E-Mail sind wir dir gern behilflich, einen Account anzulegen.
  • hallo an alle,


    nun versuche ich mich in palm programmierung
    und scheitere schon beim ersten programm.


    diese programm habe ich einwenig abgeaendert
    und ist dem buch "palm-programmierung mit dem gcc" entnommen (s. 54 und 55).
    lediglich habe ich meine namen fuer die funktionen gewaehlt.


    also haben meine dateien folgende eintraege:


    kartei.c
    [PHP]
    #include <PalmOS.h>
    #include "kartei.h"


    //-----------------
    // Hilfsfunktionen
    //-----------------


    // Start Funktion des Kartei Programm
    void StartApplication(void) {
    FrmGotoForm(KarteiStartFormular);
    } // Ende der Funktion StartApplication


    // Stop Funktion des Kartei Programm
    void StopApplication(void) {
    FrmCloseAllForms();
    } // Ende der Funktion StopApplication


    // Funktion zum Abfragen der Formularevents von KarteiStartFormular
    Boolean KarteiStartFrmHandleEvent(EventPtr event) {


    FormPtr formular;
    Boolean handled = false;


    switch (event->eType) {
    case frmOpenEvent:
    // Referenz des Formulars ermitteln
    formular = FrmGetActiveForm();
    // Zeichen des Formulars
    FrmDrawForm(formular);
    // Text in das gezeichnete Formular schreiben
    WinDrawChars("Kartei!",7 ,80,80);


    handled = true;
    break;
    } // Ende der switch-Anweisung
    return handled;
    } // Ende der Funktion KarteiStartFrmHandleEvent


    // Funktion zum Abfragen der Applicationevents
    Boolean ApplicationHandleEvent(EventPtr event) {


    FormPtr formular;
    int formularId;
    Boolean handled = false;


    if (event->eType == frmLoadEvent) {

    // Bestimmen der Formular ID
    formularId = event->data.frmLoad.formID;
    formular = FrmInitForm(formularId);


    // Formular aktiv setzten
    FrmSetActiveForm(formular);


    switch(formularId) {

    case KarteiStartFormular:
    FrmSetEventHandler(formular, KarteiStartFrmHandleEvent);
    break;
    } // Ende der switch-Anweisung
    handled = true;
    } // Ende der if-Abfrage, der Zeiger von eType gleich frmLoadEvent
    return handled;
    } // Ende der Funktion ApplicationHandleEvent


    //---------------
    // Hauptprogramm
    //---------------


    UInt32 PilotMain(UInt16 cmd, void *cmdPBP, UInt16 launchFlags) {


    EventType event;


    if (cmd == sysAppLaunchCmdNormalLaunch) {


    // Starten der StartApplication Funktion
    StartApplication();
    do {
    EvtGetEvent(&event, evtWaitForever);

    if (!SysHandleEvent(&event)) {
    if (!ApplicationHandleEvent(&event)) {
    FrmDispatchEvent(&event);
    } // Ende der if-Abfrage ob ApplicationHandleEvent ungleich event
    } // Ende der if-Abfrage ob SysHandleEvent ungleich event
    } while (event.eType != appStopEvent); // Ende der do-while Schleife


    // Starten der StopApplication Funktion
    StopApplication();
    } // Ende der if-Abfrage
    return 0;
    } // Ende der PilotMain Funktion
    [/PHP]


    kartei.h
    [PHP]
    #define KarteiStartFormular 1000
    [/PHP]


    kartei.res
    [PHP]
    #include "kartei.h"


    FORM ID KarteiStartFormular AT (0 0 160 160)
    BEGIN
    TITLE "Kartei"
    END
    [/PHP]


    das kompilieren funktioniert ohne probleme.
    auch das resourcefile kompilieren geht ohne fehler,
    sowie das prc bauen.


    Code
    /usr/bin/m68k-palmos-gcc -g -O3 -o kartei kartei.c
    m68k-palmos-obj-res kartei
    build-prc kartei.prc "Kartei" KTEI *.kartei.grc


    nun installiere ich mein programm in pose (version 3.5/linux) mit dem rom PalmOS412_FullRel_EZ_enUS.rom.


    auch ok.


    nun starte ich mein programm kartei.prc
    und bekomme folgende meldung:


    Code
    Kartei (unknown version) called SysFatalAlert with the
    message: "MemoryMgr.c, Line:4365, NULL handle".


    nun druecke ich auf continue und bekomme diese fehlermeldung:


    Code
    Kartei (unknown version) called SysFatalAlert with the
    message: "MemoryMgr.c, Line:4450, Nil Ptr".


    ein weiteres continue ermittelt folgende fehlermeldung:


    Code
    Kartei (unknown version) just read from memory location
    0xFFFFFFFC, which is in the storage heap. In order to
    protect the integrity of the user's data, such direct access
    is not allowed. Instead, applications should use special
    Palm OS functions for this purpose.


    der button debug laesst sich nicht betaetigen
    und der pose muss resetet werden.


    nun habe ich es auch schon mit dem debugger versucht:


    Code
    m68k-palmos-gdb kartei


    und bekomme nach dem ich das programm kartei.prc auf meinem pose gestartet habe folgende meldungen:


    Code
    Program received signal SIGSTOP, Stopped (signal).
    0x000468e8 in ?? ()


    dann gebe ich continue ein und bekomme diese meldung:

    Code
    Kartei (unknown version) called SysFatalAlert with the
    message: "MemoryMgr.c, Line:4365, NULL handle".


    also wie oben.


    nun kann ich aber den button debug druecken
    und bekomme eine neue fehlermeldung:


    Code
    Program received signal SIGTRAP, Trace/breakpoint trap.
    
    
    0x10c155d6 in ErrDisplayFileLineMsg ()


    das sagt mir aber alles wenig.


    das programm habe ich mehrfach abgeglichen
    und es immer als fehlerfrei empfunden,
    pose aber nicht. ;)


    hat jemand eine idee?

  • Ich bin selber Entwickler und verstehe nicht allzu viel aus den fatal Alert Fehlermeldungen-diese sind IMHO nur für Profis verständlich. Allerdings hast du hier irgendwo einen MemHandle falsch definiert, bzw er hat keinen Wert(das Debug-ROM und der POSE sind hier sehr streng, teste mal auf einem echten handheld).


    Und noch was: Poste doch ins Developer Forum von PalmSource(werktags ist mehr los!!).

  • hi Tam Hanna,


    danke fuer dein posting.


    - ich habe es versucht, aber auch mein realer palm gibt die meldung aus.
    - das mit dem handle kann ich nicht erkennen.
    - dein tip mit dem forum werde ich annehmen.


    weist du ob es das auch auf deutsch gibt?
    ich kann es nicht finden.

  • Hallo tz... wieauchimmer,


    hab dein Programm mal kurz mit Codewarrior getestet und es funktionierte klaglos. Ich sehe auch keinen Fehler darin, so dass ich einfach annehme, dass es am GCC liegt. Vielleicht hast du eine Compiler-Option vergessen? Kann es nicht sagen, da wir nur mit CW arbeiten.


    Zu der Fehlermeldung: bei Palm kann man Teile der Quellen des PalmOS 4.0 runterladen. Das ist manchmal hilfreich, wenn man solche Meldungen oder hartnäckige Fehler hat. Im speziellen Fall hilft es nix: der Fehler tritt in der Funktion PrvHandleCheck auf, weil eben ein NULL-Handle übergeben wurde.


    Gruß,


    TeDe

  • hallo tede,


    als erstes: vielen dank fuer deine muehen und dein detailerte antwort.


    ich werde einmal schauen ob ich etwas mit den gcc optionen machen kann.


    was die quellen angeht:
    hast du einen link wo ich die quellen der freien palm os 4.0 teile bekommen kann?


    ps: tzzaetaynzz, soll z1 gesprochen werden (zwei silben). ;)

  • hi tede,


    also: dein tip mit dem compiler auf meinem system war schon recht gut.
    da du meinen code erfolgreich bei dir getestet hast,
    konnte es nur an meiner entwicklungsumgebung liegen.


    das programm pilrc fehlte und haette als erstes gestartet werden muessen,
    wenn ich mein prc baue.


    Code
    pilrc kartei.rcp


    pilrc baut ein *.bin das alle infos der resourcedatei enthaelt.


    somit war mein formular mit der id 1000 nicht zu finden -> handle NULL.


    das debug rom von plamos hat mir sogar mehr infos geliefert als das
    "standart" palmos rom.
    aber das sagt auch schon der name und vielleicht weisst du es selbst.


    mein buch ist echt grotte. in nebensaetzen wird auf diesen kompilerschritt hingewiesen.
    haette ich geld, so wuerde ich mir ein anderes buch kaufen.


    danke fuer deine hilfe.

  • Zitat

    Originally posted by TeDe
    Hi,


    hab jetzt den Quellcode auch nicht mehr gefunden. Den müssen sie irgendwie runtergenommen haben..


    Meines Wissens nach gab s nur das OS35. Allerdings gibt es das nun nicht mehr, weil da ja der leidige Grafitti-Sourcecode dabei war(laut Ben combee). Wenn man en Developer Suport anmailt, solte man Teile des Codes aber kriegen!