Mémoire étendue sous DOS - C - Programmation
Marsh Posté le 21-06-2004 à 19:00:35
dans l'autoexec.bat :
Code :
|
question : pour quoi faire, le DOS ?
Marsh Posté le 21-06-2004 à 23:31:54
Y a eu des DOS extenders à une époque pour "flatifier" la mémoire, je crois. http://www.tenberry.com/dos4g/ à voir, sais pas si ça convient....
Marsh Posté le 22-06-2004 à 10:22:08
Pourquoi sous DOS ?
---> c'est un système embarqué. Avec que DOS d'installé dessus.
Le problème de cette solution c'est que quand tu charge le programme en mémoire, il s'éxecute en même temps.
Merci Carbon_14, il faut sans doute que je prenne cette piste.
Mais ce n'ais pas possible de créer de nouvelle page mémoire avec EMM386.exe(mémoire paginée), je crois que c'est juste pour les drivers, etc... ??
Marsh Posté le 22-06-2004 à 20:40:37
bin si, mais avec EMM386 ou himem tu vas rapidement comprendre ta douleur....
Marsh Posté le 23-06-2004 à 10:44:54
Ok, je ne vais pas me lancer là dedans!!! (emm386...)
J'ai essayé de compiler mon prog en DOS4/G(dos extender 32bits), le problème c'est que j'utilisais une librairie en 16 bits.
En utilisant une librairie pour dos4/g, il manque certaines fonctions importantes.
Je vais essayer de créer un nouveau projet PHARLAP (DOS extender aussi )
Merci pour vos conseils...
Marsh Posté le 29-06-2004 à 15:33:47
En fait les problèmes de librairies étaient due à l'ancienne version de mon environnement de développement qui me générait des erreurs.
Maintenant mon programme tourne à peut près bien.
A peu près... car certaines fonctions réserve en mémoire des addresses de composants matériels (composants électroniques), et la le programme plante. (un beau crash).
Et ce que c'est le dos extender qui rentre en conflit avec l'emm386 ou bien existe t'il une solution pour que dos4g n'utilise pas une certaine plage d'addresses? (overwrite)
si quelqun peut m'aider!!!
merci d'avance
Marsh Posté le 29-06-2004 à 15:40:49
bah, ton hardware, il est dans l'espace mémoire du premier Mo ?
Marsh Posté le 29-06-2004 à 16:31:51
oui donc sous le premier Mo...
quand tu alloues avec DOS4G, c'est toujours au dessus du premier Mo, donc pas de risque de taper où il ne faut pas..
t'as pensé à linéariser tes segments ? ie le segment E000, ça donne 0xE0000.
Marsh Posté le 29-06-2004 à 16:38:34
Non je n'y avait pas pensé mais cela ne change rien.
Quand je lance l'exec. , j'ai:
DOS/4GW error(2001) : exception ODh (general protection fault) at....
merci pour tes conseils...
Marsh Posté le 29-06-2004 à 17:39:52
Comment faire pour reserver un espace mémoire sous dos4gw?
Marsh Posté le 29-06-2004 à 21:10:49
jojobibine a écrit : Comment faire pour reserver un espace mémoire sous dos4gw? |
regarde dans la spec DPMI
http://burks.brighton.ac.uk/burks/ [...] mispec.htm
Marsh Posté le 30-06-2004 à 16:27:37
donne un exemple de ton code.
en mode réel, tu changais un registre de segment en E000 pour atteindre ton périphérique.
en mode protégé tu n'as pas le droit de modifier ES ou DS avec un E000 sorti de nulle part. (ça ne corresponds pas à un descripteur).
donc pour atteindre l'adresse physique E0000 (le segment : offset E000:0000 en mode réel), tu utilises bêtement l'adresse E0000 sans changer un registre de segment.
en faisant bêtement un:
mov al, BYTE PTR[0E0000h]
ou un:
unsigned char *myhardware=0x0E0000;
myhardware[0x4]=0x0fef; /// ce que tu veux....
-----
après si ton périphérique a un espace mémoire en dehors du premier Mo, il faut utiliser ça:
http://www.tenberry.com/dpmi/16.html
mais ce n'est pas ton cas, c'est plustôt pour le hardware PCI moderne.
Marsh Posté le 30-06-2004 à 19:05:31
Merci beaucoup, bjone, mon problème est résolu!!!
Merci à toi et JTY
a+
jojo
Marsh Posté le 21-06-2004 à 18:56:45
Salut,
Comment faire pour installer un exécutable en mémoire haute sous DOS (freedos).
J'ai installé himem64.exe ainsi que EMM386.exe.
J'ai un problème , je fais un calloc dans mon programme et je n'ais pas assez d'espace mémoire pour l'allocation .
Quelqun aurait la réponse?
merci