DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > Timer | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2004-04-25, 00:42 h THDany Posts: 38 User |
Mahlzeit! Ich habe da ein kleines Problem. Im Zuge einer extremen Langeweile hab ich ein Programm geschrieben, welches die tm Struktur ausreizt. Das hab ich dann in den Newsgroups bekannt geben und tatsächlich interessiert sich jemand dafür. Naja damit will ich euch aber nicht langeweilen. Auf jeden Fall gabs genug Interesse um eine Weiterentwicklung zu rechtfertigen. Bislang gab es da keine Probleme, doch als ich einen Wecker eingebaut habe, welche zu einer bestimmten Zeit eine frei wählbare Aktion ausführt, fingen meine Programe an. Die auszuführende Aktion kann mittels einen String-Feldes eingetragen werden. Soweit kein Problem. Doch will ich die Angaben auslesen und speichern muss ich Speicher für eine char Variable reservieren. Das mache ich seit jeher mit malloc();. Doch versuche ich das bei meine Uhr gibt es sofort einen illegalen Speicherzugriff. Selbst bei malloc(1);. Ich konnte das Problem jetzt soweit isolieren, dass es nur dann auftritt solange ich den Timer benutze. Ich hab allerdings nicht den hauch einer Idee wo ich da den Fehler gemacht habe. Hier kommt der entsprechende Quelltext zu meinem Timer: #include <time.h> struct Zeitmesser { struct timerequest *tr; struct MsgPort *port; } zeitmesser = { NULL, NULL }; void __saveds timer_ende() { if(zeitmesser.port) { if(zeitmesser.tr) { if(CheckIO((struct IORequest *)zeitmesser.tr)) return; AbortIO((struct IORequest *)zeitmesser.tr); WaitIO((struct IORequest *)zeitmesser.tr); CloseDevice((struct IORequest *)zeitmesser.tr); DeleteExtIO((struct IORequest *)zeitmesser.tr); } DeleteMsgPort(zeitmesser.port); } zeitmesser.port = NULL; zeitmesser.tr = NULL; } BOOL __saveds timer_start() { if((zeitmesser.port = CreateMsgPort())) if((zeitmesser.tr = (struct timerequest *)CreateExtIO(zeitmesser.port, sizeof(struct timerequest)))) if(!OpenDevice(TIMERNAME, UNIT_VBLANK, (struct IORequest *)zeitmesser.tr, 0)) return TRUE; return FALSE; } void __saveds timer_stellen() { zeitmesser.tr->tr_node.io_Command = TR_ADDREQUEST; zeitmesser.tr->tr_time.tv_secs = 1; zeitmesser.tr->tr_time.tv_micro = 0; SendIO((struct IORequest *)zeitmesser.tr); } Ich weiss, ich verwede keine Kommentare. Sorry aber meine guten Vorsätze in der Richtung bleiben irgendwie immer auf der Strecke. Ich hoffe irgendjemand kann da den Fehler finden, da es ansonsten keinen Sinn macht meine Uhr weiter zu entwickeln. Im Übrigen, sollte jemand einen anderen Weg kennen, sekündlich ein Signal zu bekommen, immer her damit. Danke erstmal. [ - Answer - Quote - Direct link - ] |
2004-04-25, 01:41 h thomas Posts: 7718 User |
Nun, du solltest eine main() Funktion dazutun, die den Fehler auslöst. So kann man nichts erkennen. Das einzige, was mir nicht ganz klar ist, ist die Zeile mit dem if (CheckIO()) return; Meines Erachtens bedeutet das, daß du das timer.device nicht schließt, wenn noch ein Timer läuft. Macht in meinen Augen keinen Sinn. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-04-25, 12:43 h Kronos Posts: 1168 User |
Zitat: Leider kann ich jetzt nur raten aber könnte es sein das du es irgendwie schaffts den Zugriff auf die Standardfunktionen in der Linkerlib zu versperren ? Eventuell mit dem __saveds-Zeugs ? (jaja ist lange her das isch mit SAS u.ä. beschäftigt habe ). Definiere doch einfach mal einen globalen Buffer (char buf[5000];) und weise deinen Strings daraus Speicher zu. Dann wüssten wir wenigstens ob es wirklich an malloc liegt oder nicht. MfG Kronos -- Only the good die young all the evil seem to live forever [ - Answer - Quote - Direct link - ] |
2004-04-25, 13:39 h THDany Posts: 38 User |
Hups..schäm. Ja klar war es das __saveds. Hab den Timer aus nem anderen Programm das mit Near-Code compiliert wurde. Ich arveite aber mit Far-Code. __saveds gelöscht und schon gehts. Aber leider bekomm ich vim Timer nicht mehr den ganzen Speicher freigegeben, auch wenn ich CheckIO entfert habe. Woran kann das liegen? [ - Answer - Quote - Direct link - ] |
2004-04-25, 15:20 h thomas Posts: 7718 User |
Zitat: Jedesmal oder nur wenn du das Programm das erste mal laufen läßt ? Versuch's mal mit Avail flush. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-04-26, 09:58 h gni Posts: 1106 User |
Zitat:Wenn Du mit DATA=FAR[ONLY] kompilierst, dann bewirkt __saveds nichts. Das es ohne __saveds geht, klingt supsekt. Warum Du im übrigen time.h einbindest, ist mit schleierhaft. Dafür lässt Du alle OS Includes weg. [ - Answer - Quote - Direct link - ] |
2004-04-26, 11:30 h THDany Posts: 38 User |
Wie ich lasse alle OS-Includes weg? Das versteh ich jetzt nicht? Was sollte ich denn da noch includen? [ - Answer - Quote - Direct link - ] |
2004-04-26, 12:45 h thomas Posts: 7718 User |
Zitat: proto/exec.h devices/timer.h Nur dann kann der Compiler überprüfen, ob du immer die richtigen Pointer übergibst. Du solltest beim Compiler unbedingt einschalten, daß er keine Funktionen ohne Prototypen zuläßt. Dann merkst du schnell, wenn du ein Include vergessen hast. time.h brauchst du für den o.g. Abschnitt überhaupt nicht. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-04-26, 14:48 h THDany Posts: 38 User |
hab ich gemerkt das ich das nicht brauche. Ist so ein Überbleibsel von einem anderen Programm genau wie __saveds. Allerdings erkennt mein Compiler wenn eine Funktion keinen Prototyp hat. Ansonsten würde das Programm ja eh nicht laufen. [ - Answer - Quote - Direct link - ] |
2004-04-26, 17:31 h thomas Posts: 7718 User |
Zitat: Natürlich läuft es auch ohne, wieso sollte es nicht ? Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-04-26, 20:05 h THDany Posts: 38 User |
Wenn das Programm keine Funktionen findet kann es diese auch wohl schlecht ausführen. Oder gehst du jetzt nur von den Prototypen ohne Funktion aus? Die will mein Compiler (Storm C V3) auch haben sonst gibt es Fehlermeldungen. [ - Answer - Quote - Direct link - ] |
2004-04-27, 08:37 h gni Posts: 1106 User |
Zitat:Der Linker schaut nur auf die Namen. Zitat:Dann kann Dein Compiler den hier geposteten Code nicht akzeptiert haben. Ausserdem solltest Du auch casten. Z.B. der IO-Request des Timers hat die passende Struktur für die Exec-Funktionen (tr_node). [ - Answer - Quote - Direct link - ] |
2004-04-27, 12:40 h THDany Posts: 38 User |
Naja was spielts jetzt für ne Rolle? Er hat den Code akzeptiert, hat das Ganze compiliert und jetzt läuft es tadellos, seit ich die __saveds weggemacht habe. Also mal Dank an die die mir Antworten gegeben haben. [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Timer | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |