| Микроконтролери и електроника 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/ |
|