|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 06.05.2013, 20:06 Titel: QBasic unten DOS 6.22 zu wenig Speicher? |
|
|
Ich habe auf mehreren PCs mit BS DOS versucht ENVIRON zu verwenden.
- Egal ob ich von PC oder Diskette boote, bekomme ich, bei dem Aufruf:
ENVIRON "foo=bar"
SHELL "echo %foo%"
die Meldung: Zu wenig Speicher.
- Auch der Versuch:
SHELL "set foo=bar"
SYSTEM
funktioniert nicht.
- Da gegen Aus einer *.bat mit dem Text:
set foo=bar
wird der Eintrag ohne Meckern erstellt.
Memmaker mit QBasic:
insg 32,768K 1,0000K 31,768K
unter 1MB 763K 314K 448K
Memmaker ohne QBasic:
insg 32,768K 723K 32,045K
unter 1MB 763K 37K 725K
Muss ich QBasic mit "irgendeinem" Parameter aufrufen? |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 06.05.2013, 20:25 Titel: |
|
|
Am besten CONFIG.SYS und AUTOEXEC.BAT durchgehen, unnötiges herausnehmen. Ausserdem klassische Optimierung mit dem DOS=HIGH,UMB und EMM386.EXE nach sog. Upper Memory-Blöcke suchen lassen, so dass möglichst viel konventioneller Speicher frei wird.
Beim Programm selber kann die Übersetzung als .EXE mit dem QuickBasic 4.5-Compiler den Verbrauch von konventionellem Speicher massiv reduzieren, weil nicht mehr die ganze IDE und Interpreter im RAM bereitgehalten werden müssen.
Übrigens beim COMMAND.COM wird häufig vor Sohnprozessstart Speicher freigegeben, deshalb erscheint jeweils nach Beendigung einer DOS-Anwendung häufig "Diskette mit COMMAND.COM einlegen, weiter mit Taste", wenn der Start ab Diskette erfolgt ist.
Ansonsten bekannt für grossen konventioneller Speicherverbrauch: LAN-Managerumgebung wie bei mir die Netzstartdiskette -> deshalb sind auch GHOST.EXE und PQDI.EXE (die bekannten DOS-Festplattenbackup-Tools) entsprechend programmiert, möglichst wenig konventionellen Speicher zu benötigen und alles via EMS/XMS abzuwickeln. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 07.05.2013, 21:12 Titel: QBasic unten DOS 6.22 zu wenig Speicher? |
|
|
@dreael. Vielen Dank für die wichtigen Infos.
- Ich habe in beiden Dateien alles gelöscht, was nicht wichtig war,
und dann mit memmaker optimmieren lassen.
- Ohne Erfolg.
- Auch die *.exe meldet sich mit einem ähnlichen Fehler.
Vorsorglich der jetzige Inhalt von Autoexec.bat:
@ECHO OFF
@PATH C:\;C:\DOS;C:\DOS-UTLS;C:\BAT;
@PATH C:\DOS-UTLS\NU8;C:\DOS-UTLS\NC;%PATH%
@PROMPT $P$G
@C:\DOS\DOSKEY
@CLS
- Config.sys:
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS AUTO D=64
BUFFERS=40,0
FILES=96
DOS=UMB
LASTDRIVE=Z
FCBS=4,0
DOS=HIGH
DEVICEHIGH/S C:\DOS\POWER.EXE
SHELL = C:\COMMAND.COM /F /E:1024 /P
DEVICEHIGH /L:1,12240 =C:\DOS\SETVER.EXE
und "Deiner" set.bas:
CLS ' L”sche Bildschirm
heu$ = RIGHT$(DATE$, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2)
MKDIR "D:\" + heu$
ENVIRON ("HEU=" + heu$)
SHELL "echo %heu%"
- Bitte; siehst Du noch eine Möglichkeit, was ich machen kann?
- Da ich set mit *.bat ausführen kann, ist die Fehlersuche nicht dringend,
aber es wäre schön zu wissen warum es NICHT funktioniert. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 08.05.2013, 17:55 Titel: |
|
|
Zur Hardware bitte noch Angaben machen. Wichtig ist einfach: Die ganze Geschichte mit den UMBs funktioniert erst ab dem 386er-Prozessor; dies nur als Hinweis, falls Deine DOS-Anwendung etwa noch auf einem 286er-"Museumsstück" läuft...
bm-magic hat Folgendes geschrieben: | - Config.sys:
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS AUTO D=64
BUFFERS=40,0
FILES=96
DOS=UMB
LASTDRIVE=Z
FCBS=4,0
DOS=HIGH
DEVICEHIGH/S C:\DOS\POWER.EXE
SHELL = C:\COMMAND.COM /F /E:1024 /P
DEVICEHIGH /L:1,12240 =C:\DOS\SETVER.EXE |
Hier einige Optimierungen:
- EMM386.EXE noch mit HIGHSCAN aufrufen statt "AUTO D=64"
- BUFFERS aufs Minimum (so 5-10)
- FILES auch aufs Minimum, denn ohne NET USE o.ä. gibt es keinen Grund für bis Z:\ gehen zu müssen - beim konventionellen Speicher gilt "Geiz ist geil!". z.B. LASTDRIVE=D, wenn es ausser dem C:\ der Festplatte und D:\ fürs CD-ROM nichts mehr weiteres gibt
- auf SETVER.EXE und POWER.EXE kannst Du komplett verzichten.
Zur Kontrolle immer mit
nach dem Start den freien Speicher abfragen => So kannst Du optimieren. Ebenfalls im Hinterkopf behalten: <F8>-Taste, wenn die Optimierung einmal einen kompletten Hänger beim Hochfahren produziert. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 107
|
Verfasst am: 08.05.2013, 18:42 Titel: |
|
|
Ersetz' einfach das
durch
Voraussetzung ist, das das Verzeichnis C:\temp existiert. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 08.05.2013, 20:19 Titel: |
|
|
HorstD hat Folgendes geschrieben: | Ersetz' einfach das
durch
Voraussetzung ist, das das Verzeichnis C:\temp existiert. |
Ist dagegen keine gute Idee! Einfacher Grund: Endbenutzer besitzt normalerweise nur eine .EXE-Datei und kann den Quellcode nicht anpassen. Daher stellen hartcodierte Pfade einen ganz schlechten Programmierstil dar, denn schliesslich ist nicht immer ein C:\ vorhanden (z.B. Startdiskette), wo ein Ordner "TEMP" angelegt werden kann.
Eine Umgebungsvariable dagegen kann dagegen vom Endbenutzer bzw. PC-Administrator, welcher mit der fertigen Anwendung arbeitet, angepasst werden.
Wenn schon ein Verbesserungsvorschlag: Zu Beginn ein
Code: | IF ENVIRON$("TEMP") = "" THEN
PRINT "Kein temporäres Verzeichnis vorhanden."
PRINT "Bitte SET TEMP=<Pfad> in die AUTOEXEC.BAT einfügen"
END
END IF
' Prüfung, ob beschreibbar
fh% = FREEFILE
fe% = 0
ON ERROR GOTO Fehler
OPEN ENVIRON$("TEMP") + "\~X.TMP" FOR OUTPUT AS fh%
PRINT#fh%, "Test"
CLOSE fh%
KILL ENVIRON$("TEMP") + "\~X.TMP"
ON ERROR GOTO 0
IF fe% <> 0 THEN
PRINT "%TEMP% verweist auf ungültigen Pfad."
PRINT "Bitte sicherstellen, dass der Pfad existiert und beschreibbar ist."
END
END IF
' ab hier das eigentliche Programm
Fehler:
fe% = ERR
RESUME NEXT |
=> Jetzt weiss der Endbenutzer bzw. PC-Administrator, dass auf seinem System noch etwas Wichtiges fehlt bzw. falsch eingestellt ist. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 08.05.2013, 22:23 Titel: QBasic unten DOS 6.22 zu wenig Speicher? |
|
|
- DANKE für die Infos.
- Ich habe nicht ständig Internet zu Verfügung und habe sie erst
jetzt gelesen.
- Ich werde alles testen und berichten. |
|
Nach oben |
|
|
bm-magic
Anmeldungsdatum: 28.02.2013 Beiträge: 37
|
Verfasst am: 09.05.2013, 00:43 Titel: QBasic unten DOS 6.22 zu wenig Speicher? |
|
|
- Ich habe nun alles getestet.
- Die Config.sys sieht nun nach memmaker so aus:
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM X=CD00-CFFF
BUFFERS=5,0
FILES=40
DOS=UMB
LASTDRIVE=E
FCBS=4,0
DOS=HIGH
SHELL = C:\COMMAND.COM /F /E:1024 /P
- und die Werte sind 699K 28K 676K
- mit HIGHSCAN 640K 28K 612K
- Ich habe nicht mehr zu deaktivieren,
habe noch aus autoexec.bat DOSKEY gelöscht.
- Im Vergleich mit alten mem habe ich noch
weniger Raum zu Verfügung. ?
- Da ich den PC nicht wechseln kann, werde ich auf ENVIRON
verzichten.
- Vielen Dank für die Hilfe. |
|
Nach oben |
|
|
M_FX
Anmeldungsdatum: 09.09.2013 Beiträge: 2 Wohnort: Monaco di Bavaria
|
Verfasst am: 09.09.2013, 20:46 Titel: Ähnliches Problem... |
|
|
Hallo Leute!
ich habe selbiges Problem.
Mein Befehl lautet:
Code: |
Shell " netsh inerface ip set address name=LAN_Verbindung Source=static sddr=172.23.30.2 mask 255.255.255.0 gatewa=172.23.30.3 gwmetric=0" |
Diese Sequenz aus QuickBASIC gestartet, verursacht immer einen Arbeitsspeicher-Fehler.
Ich habe versucht, das ganze in eine *.BAT zu packen und dann diese aufzurufen - ohne Erfolg
Wenn ich die BAT dann manuell starte läuft sie einwandfrei.
Ach ja noch zu meiner Technik:
Fujitsu Lifebook E-Series
Intel Core DUO 2,8 GHz 1,92 GB RAM
XP 2002 SP3
QuickBASIC v. 4.5
So am Rande - Ziel des Programmes:
Das Laptop wird an einer Hand voll Netzwerke betrieben. Das Programm soll selbständig herausfinden, wo es gerade dran hängt und die IP, als auch das Gateway anpassen.
Schematisch dachte ich daran, daß nach einander alle möglichen IP-Einstellungen ausprobiert werden, beim Ausfüren eines Ping via SHELL-Befehl in eine Datei mitgeschnitten wird, das QBasic-Programm eine bestimmte Zeile der Mitschnittsdatei auswertet und je nach Ergebnis die aktuell eingestellte IP behält oder die nächste IP probiert.
Dummer Weise kommt das Programm noch garnicht so weit, da beim Shell dieser Dumme Arbeitsspeicherfehler kommt.
Vielleicht fällt da noch jemanden was dazu ein... |
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 10.09.2013, 07:51 Titel: |
|
|
@M_FX
Du kannst mit QB eine Scriptdatei anlegen und dann netsh mit dem Parameter -f Skripdatei aufrufen. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 10.09.2013, 09:26 Titel: Re: Ähnliches Problem... |
|
|
M_FX hat Folgendes geschrieben: | Schematisch dachte ich daran, daß nach einander alle möglichen IP-Einstellungen ausprobiert werden, beim Ausfüren eines Ping via SHELL-Befehl in eine Datei mitgeschnitten wird, das QBasic-Programm eine bestimmte Zeile der Mitschnittsdatei auswertet und je nach Ergebnis die aktuell eingestellte IP behält oder die nächste IP probiert. |
Wozu übrigens derart komplizierte Dinge machen? Aus gutem Grund wurde für IPv4 DHCP erfunden! Durch-"ping"-en wie von Dir vorgeschlagen birgt immer die Gefahr, dass das Gerät X im Moment ausgeschaltet ist und Du so schnell einmal eine IPv4-Adresse doppelt vergibst. Dagegen ein sauber aufgesetzter DHCP-Server kann auch bei ausgeschaltete Geräten eine Lease-Zeit aktiviert lassen. Noch besser: Du kannst sogar statische Reservationen zu MAC-Adressen vornehmen, dann bekommt jedes Geräte eine fixe Kennung.
Bei IPv6 sieht das Ganze dann wiederum anders aus: Dort kann jedes Gerät gleich von Beginn weg mit Stateless Auto-Konfiguration eine eindeutige IP-Adresse anhand der MAC-Adresse ableiten. Reales Beispiel von mir:
kundwebs.meilebiz.ch hat Folgendes geschrieben: | dreael@kundwebs:~$ ifconfig
eth0 Link encap:Ethernet Hardware Adresse 90:e2:ba:3f:09:07
inet Adresse:109.164.212.211 Bcast:109.164.212.215 Maske:255.255.255.248
inet6-Adresse: 2001:470:b575:1a10:92e2:baff:fe3f:907/64 Gültigkeitsbereich:Global
inet6-Adresse: fe80::92e2:baff:fe3f:907/64 Gültigkeitsbereich:Verbindung |
_________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
M_FX
Anmeldungsdatum: 09.09.2013 Beiträge: 2 Wohnort: Monaco di Bavaria
|
Verfasst am: 10.09.2013, 14:17 Titel: |
|
|
@dreal
DHCP braucht es in dem Fall nicht, da die einzelnen Geräte Funktionsbezogene end-IP's haben.
der Koppelrechner ist immer ....1, die Telefonie immer ....2, der Service-router immer die ....3, mein Service-Laptop immer die ....20 - egal in welchem Knoten ich gerade bin - nur die vorletzte IP-Gruppe ändert sich mit dem Knoten.
Doppelt geht deswegen gar nicht.
ich pinge immer den Servicerouter an und sollte der mal im A.. sein, muß ich eh einen neuen Router Konfigurieren - und das ohne jedes LAN....
Aber hat mich ein Linuxianer darauf aufmerksam gemacht, daß der Eingabestring für die IP-Einstellungen Speichersparender ausgeführt werden kann und Schwupps - und jetzt klappt's auch mit dem Nachbarn :
Code: | Shell " netsh inerface ip set address LAN_Verbindung static 172.23.30.2 255.255.255.0 172.23.30.3 0 " |
Die ganzen Routinen muß ich noch effizienter gestalten, aber das Programm stellt sich jetzt auf die richtige IP ein....
Ich möchte mittelfristig auch das ganze noch soweit verbessern, daß meine Kollegen, die andre Knoten betreuen müssen, nur durch Änderung einer Initialisierungsdatei die Software auf ihren Laptops benutzen können, aber das ist eine andere Geschichte.... |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|