Antwort schreiben...
 
Themen-Optionen Thema durchsuchen
Alt 22.06.2009, 22:36   #1
Hans Jürgen
Registrierter Benutzer
Fehler beim Compilieren (OA3)

Hallo zusammen,

sitze mal wieder vor ein paar abendlichen Problemen, kann nicht mehr Compilieren mit Fehlermeldung
Zitat:
005: Nicht genug Hauptspeicher.
Es ist ein relativ großes Programm, Segmente habe ich schon reichlich definiert und derzeit hängt es von einer Zeile mehr oder weniger Code ab, ob diese Fehlermeldung kommt oder nicht. Unter XP kann ich schon lange nicht mehr compilieren, ich nutze ein W2K in einer virtuellen Maschine, da funktioniert es zumindest manchmal.

Die Warnmeldungen und fast alle anderen Parameter des Compilers habe ich schon seit langer Zeit nicht mehr einschalten können, da dann der Hauptspeicher noch wesentlich früher (derzeit kommt er bei Segment 61 von 62) nicht mehr ausreicht.

Wenn ich aus der DosShell compiliere, bekomme ich meistens einen NTVDM-Fehler, da endet es schon bei Segment 19:

Zitat:
16-Bit-MS-DOS-Teilsystem: MS-DOS-Eingabeaufforderung Die NTVDM-CPU hat einen ungültigen Befehl entdeckt. ...
Dieser Fehler erscheint beim Compileraufruf aus OA3 nur dann, wenn ich die Warnungen einschalte..

Ich habe daher den Verdacht, dass es sich vielleicht gar nicht um einen zu geringen Hauptspeicher handelt, sondern ein anderer Fehler diese Meldung (mit)verursacht.

Ein erster Schritt wären die Einstellungen für den Aufruf unter W2K bzw. XP. Wer kennt da die optimalen Werte für die pif-Datei und die config.nt? Ich komme unter W2k, wenn ich nur den Command aufrufe, auf 622 KB Speicher. Mem in der DosShell von OA3 zeigt dann 601 KB. Unter XP schaffe ich nicht mehr als 593 KB. Soweit ich mich erinnere, hatte ich unter DOS meistens nur knapp 600 KB, also weniger und hatte keine Probleme. Kann man mit EMS/XMS/HDM Einstellungen die Situation verbessern?

Manchmal sehe ich vor dem NTVDM-Fehler ein paar Warnungen wegen nicht ausreichend definierter Variablen und eine "^TAB 3" Warnung:
Zitat:
1. Warnung 182: Ungültige Syntax im ^TAB 3 Befehl
Wer kennt die Bedeutung dieser Warnung? Und könnte diese oder die undefinierten Variablen eine Fehlerursache sein?

Danke für Eure Hilfe,
Hans Jürgen (hjlint#)
Hans Jürgen ist offline   Mit Zitat antworten
Alt 22.06.2009, 22:52   #2
waldbauer.com
Entwickler
Nur mal so eine Frage, segmentierst du deine Programme so ?

zb.

Code:
SEGMENT haupt1, unter1, unter2, unter3
SEGMENT haupt2, unter4, unter5, unter6
waldbauer.com ist offline   Mit Zitat antworten
Alt 22.06.2009, 23:16   #3
Hans Jürgen
Registrierter Benutzer
Ich habe ein Hauptprogramm (nicht mehrere) und habe ursprünglich mal

Segment U1,U1a,U1b,...
Segment U2,U2a,U2b,...

segmentiert.

Nachdem ich aber damit nicht mehr klargekommen bin, sieht es jetzt fast überall so aus:

Segment U1
Segment U1a
Segment U1b
...
Segment U2
...

Die Reihenfolge ist willkürlich, da ich nicht weiß, wie es sinnvoll wäre. Wenn ich noch ein mal eine Liste gedruckt oder gespeichert bekäme, könnte ich die Struktur und die Segmentgrößen vielleicht mal prüfen. Da ich aber alles ausschalten muss, damit es überhaupt klappt, könnte ich nur 18.000 Programmzeilen von Hand durchgehen, um die Struktur und Reihenfolge zu erkennen.

Gruß
Hans Jürgen
Hans Jürgen ist offline   Mit Zitat antworten
Alt 23.06.2009, 07:51   #4
waldbauer.com
Entwickler
Hmm also die Segmente sollen nebeneinander stehen sonst bringt das Segmentieren ja nichts. Es sollen lt. Handbuch immer Hauptprogramm, Unterprogramm1, Unterprogramm2, in einer Reihe stehen. Auf diese Weise habe ich meine 100 Segmente mit 15.500 Zeilen Code problemlos compiliert.
Miniaturansicht angehängter Grafiken
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	capture_23062009_085316.jpg‎
Hits:	14
Größe:	85.3 KB
ID:	273  
waldbauer.com ist offline   Mit Zitat antworten
Alt 23.06.2009, 09:07   #5
Hans Jürgen
Registrierter Benutzer
Was macht man denn, wenn man Unterprogramme hat, die in anderen Programmen ebenfalls aufgerufen werden?
Segment u1,u1a,u1b,...hilfe1
Segment u2,u2a,u2b,...hilfe1
Oder steckt man hilfe1 in ein eigenes Segment und läßt es bei u1 und u2 weg?

Im Laufe der Zeit habe ich bei mir die Segmente fast alle für sich definiert, da ich dann wieder ein paar Zeilen mehr zufügen konnte. Ursprünglich sah es mal so aus wie bei Dir, jetzt beinhalten fast alle Segmente nur ein Programm. Aber so richtig verstanden habe ich die Thematik nicht und wenn ich jetzt wieder ein paar Zeilen hinzufüge, dann kracht es vermutlich wieder.

Ich habe mein Programm übrigens gestern wieder compilieren können, indem ich ein paar Testzeilen mit Unterprogrammaufrufen weggelassen habe, was natürlich keine dauerhafte Lösung darstellen kann.

Was überhaupt nicht funktioniert ist Warnungen einschalten. Da kommt jetzt immer der NTVDM-Fehler. ALternativ, neu seit gestern: eine Endlosschleife beim Compilieren, die sich in einem hüpfenden Cursor zeigt, Programm läßt sich nur hart abbrechen und danach fängt der Drucker an, ununterbrochen vier Segmente aus der Mitte zu drucken.

Ich habe übrigens, falls es jemanden interessiert, ein selbstgeschriebenes Programm aus 1992 wiedergefunden, das die Struktur eine OA-Programmes in Form einer Baumstruktur der Unterprogrammaufrufe in eine Datei schreibt;

Hauptprogramm
Unterprogramm1
Unterprogramm2
U3a
U4a ...
Unterprogramm4
...

Input ist das Hauptprogramm und mein Programm hangelt sich dann rekursiv durch alle Unterprogramme, die es in einer Baumstruktur in eine Datei schreibt. Wenn Interesse besteht, kann ich das Programm hochladen.

Nach wie vor würde mich aber interessieren, wieviel Speicher Ihr in der DosShell zur Verfügung habt und wie die Einstellungen sind.

Gruß
Hans Jürgen
Miniaturansicht angehängter Grafiken
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	OA-1.JPG‎
Hits:	11
Größe:	25.3 KB
ID:	274  
Angehängte Dateien
Dateityp: txt OA-Strukt.TXT‎ (13.4 KB, 8x aufgerufen)
Hans Jürgen ist offline   Mit Zitat antworten
Alt 23.06.2009, 12:03   #6
waldbauer.com
Entwickler
Also vor dem Start habe ich:

Code:
A:23984  S:24029  C:305280  E:0(0)  T:305280
nach dem Start des Programms:

Code:
A:13515  S:13560  C:222784  E:0(0)  T:222784
Wenn ich OA4 starte und eine neue Maschine aufmache habe ich:

Code:
 655360 bytes total conventional memory
 655360 bytes available to MS-DOS
 494960 largest executable program size

1048576 bytes total contiguous extended memory
      0 bytes available contiguous extended memory
 941056 bytes available XMS memory
        MS-DOS resident in High Memory Area
Ich tippe aber, daß diese immer gleich viel an's "DOS" reporten solange der Speicher groß genug ist.

Programme die ich außerhalb eines Segments aufrufe gebe ich in ein eigenes Segment oder lasse ich sogar komplett weg. Ich glaube das größte Problem sind local views und Fenster die am meisten Speicher brauchen.

PS: EDIT - Beim Compilileren habe ich nur /W und /P an.
waldbauer.com ist offline   Mit Zitat antworten
Alt 23.06.2009, 12:11   #7
RKabis
Registrierter Benutzer
Zitat:
Zitat von Hans Jürgen Beitrag anzeigen
Aber so richtig verstanden habe ich die Thematik nicht und wenn ich jetzt wieder ein paar Zeilen hinzufüge, dann kracht es vermutlich wieder.
Hallo Hans Jürgen,

so ging es mir Anfangs auch und letztlich nahm ich daraus einfach nur den logischen Aufbau zur Kenntnis.

Wirklich helfen kann ich auch nicht, da ich eigentlich meine gesamte Programmierung der Hilfe von Günter und Heinz verdanke.

Nur soviel:
Hatte auch das Problem, dass ich mit dem Aufbau der Segmente nicht wusste, welche ich in welcher Reihenfolge plazieren soll.

Den Anfang habe ich dann so gestaltet, dass ich erstmal alle folgenden mit

Segment1,
!USegment1a,...
!Segment2,USegment2a,...

als Kommentar dargestellt habe.

Beim Compilieren wird ja dann jedes fehlende Segment reklamiert.
In dieser Reihenfolge habe ich dann die Segmente und Untersegmete aufgebaut.

Ob dies dann des Rätsels Lösung war kann ich nicht fundiert bestätigen, aber ich hatte zumindest meinen Erfolg.

Gruß Rainer
RKabis ist offline   Mit Zitat antworten
Alt 23.06.2009, 17:02   #8
Hans Jürgen
Registrierter Benutzer
Ich habe unter XP:

Code:
  655360 Bytes gesamter konventioneller Speicher
  655360 Bytes für MS-DOS verfügbar
  598912 maximale Größe für ausführbares Programm

 1048576 Bytes gesamter fortlaufender Erweiterungsspeicher
       0 Bytes fortlaufender Erweiterungsspeicher verfügbar
  941056 Bytes XMS-Speicher verfügbar
         MS-DOS ist resident im oberen Speicherbereich (HMA).
und unter W2K:

Code:
 655360 Bytes gesamter konventioneller Speicher
 655360 Bytes für MS-DOS verfügbar
 606224 maximale Größe für ausführbares Programm

1048576 Bytes gesamter fortlaufender Erweiterungsspeicher
      0 Bytes fortlaufender Erweiterungsspeicher verfügbar
 941056 Bytes XMS-Speicher verfügbar
        MS-DOS ist resident im oberen Speicherbereich (HMA).
Wie man sieht, habe ich doch wesentlich mehr Speicher als Du - vermutlich muss ich an anderer Stelle nach meinem Problem suchen.

/W bedeutet, dass Du die Warnungen auch ausgeschaltet hast? Hast Du es mal mit "Warnungen an" versucht?

Und dann verstehe ich Deine Werte nicht, was bedeuten die ( A:13515 S:13560 C:222784 E:0(0) T:222784)?

@Rainer: Segmente sind doch nicht unbedingt erforderlich. Wenn ich bei mir eine Segment-Definition herausnehme, passiert gar nichts. Wie meinst Du das mit dem Reklamieren durch den Compiler?

Gruß
Hans Jürgen
Hans Jürgen ist offline   Mit Zitat antworten
Alt 23.06.2009, 17:11   #9
waldbauer.com
Entwickler
Zitat:
Und dann verstehe ich Deine Werte nicht, was bedeuten die ( A:13515 S:13560 C:222784 E:0(0) T:222784)?
Du kannst jederzeit unter OA die Speicherbelegung abfragen. Die dafür standardmässig belegte Funktion ist SHIFT+F7 (sofern du unter Hilfsprogramme - Systemeinstellungen - Funktionstasten keine Umbelegung vorgenommen hast).

Ich müsste nachsehen was die einzelnen Werte bedeuten, ich denke der Heinz weiß das sicher ganz genau. Ansonsten könnte ich auch die Programmierer aus den USA fragen..
waldbauer.com ist offline   Mit Zitat antworten
Alt 23.06.2009, 17:29   #10
Hans Jürgen
Registrierter Benutzer
In der XP-Umgebung habe ich Shift-F7 umgelegt, in der W2K jedoch nicht. Trotzdem kommt nichts bei Shift-F7. Kann es sein, dass die Funktion nur unter OA4 funktioniert? Was steht bei Dir denn bei der Funktionstaste F7? In der Hilfe ist es bei mir ein Zeichenelement.
Hans Jürgen ist offline   Mit Zitat antworten


Antwort schreiben...

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
OA3 und MS- Access Joachim08 SPI OA4 Open Access II/III/IV (2,3,4) Anwender Forum 4 26.07.2011 13:31
OA3 startet nicht unter Windows XP Prof. SP2 Ernst Kleinknec SPI OA4 Open Access II/III/IV (2,3,4) Anwender Forum 30 13.11.2010 22:57
PDF-Druck aus OA3 Hans Jürgen SPI OA4 Open Access II/III/IV (2,3,4) Anwender Forum 5 20.12.2008 12:12
OA3 im DOS-Fenster Hans Jürgen SPI OA4 Open Access II/III/IV (2,3,4) Anwender Forum 8 10.12.2008 07:59