Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Директен достъп до памет
http://mcu-bg.com/mcu_site/viewtopic.php?f=14&t=6666
Страница 1 от 1

Автор:  leotron [ Съб Мар 21, 2009 11:56 am ]
Заглавие:  Директен достъп до памет

Работя със средата Borland C++ Builder 6. Искам да направя следното:

*int *p;
p=800; // адрес 800
*p=12; // запиши 12 на адрес 800

Мисля че това е и равносилно на нещо от сорта

asm{
mov eax,10
mov esi,eax
mov [esi],11
}
И в двата случая ми дава "Access violation..."
С две думи искам след като знам определен адрес в паметта, да мога да чета и да записвам от/в този адрес.
Пробвах това с едно досовско С, и там нямаше проблем. Само че там адресацията на паметта е 16-битова, а на мен ми трябва 32-битова.
Това което си мисля е да не би да има значение реален/защитен режим и ако да, как да реша проблемът с прекия достъп до паметта в Borland C++ Builder 6.
Благодаря

Автор:  syscop [ Съб Мар 21, 2009 12:35 pm ]
Заглавие: 

Грешката говори сама за себе си: Access violation... - нарушил правата за достъп до тая памет - в общия случай тя не е твоя !!!. Това, че в DOS можеш да омажеш цялата памет, не ти дава същите възможности и за всяка друга OS. Ако искаш да пипаш директно в паметта трябва да имаш определени права за тая памет.

Автор:  RM [ Съб Мар 21, 2009 1:22 pm ]
Заглавие: 

Единствения начин който знам е:
#include <dos.h>
void pokeb (unsigned int segment, unsigned int offset, char value);
Доколкото съм запозна адресите до 1000 се използват за вектори на прекъсвания на ОS-a

Автор:  logi [ Съб Мар 21, 2009 5:09 pm ]
Заглавие: 

В защитен режим няма как да стане, там адресите в програмата и паметта не се съвпадат. Но има начин да се направи 32 битов достъп в реален режим (разбирай чист ДОС) - потърси за voodoo memory model

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/