Я пытаюсь использовать набор инструментов MinGW GCC в XP с кодом какого-либо поставщика из встроенного проекта, который обращается к высокому объему памяти (> 0xFFFF0000), который, как мне кажется, выходит за рамки виртуального адресного пространства, разрешенного в «гражданских» процессах в XP .
Я хочу обработать исключения доступа к памяти каким-либо образом, что позволит продолжить выполнение инструкции, следующей за исключением, т.е. игнорировать его. Есть ли способ сделать это с MinGW? Или с помощью MS Toolchain?
Значительно упрощенная картина выглядит так:
/////////////
// MyFile.c
MyFunc(){
VendorFunc_A();
}
/////////////////
// VendorFile.c
VendorFunc_A(){
VendorFunc_DoSomeDesirableSideEffect();
VendorFunc_B();
VendorFunc_DoSomeMoreGoodStuff();
}
VendorFunc_B(){
int *pHW_Reg = 0xFFFF0000;
*pHW_Reg = 1; // Mem Access EXCEPTION HERE
return(0); // I want to continue here
}
Подробнее:
Я занимаюсь разработкой встроенного проекта на платформе Atmel AVR32 с freeRTOS, используя набор инструментов AVR32-gcc. Желательно разрабатывать / отлаживать код приложения высокого уровня независимо от аппаратного обеспечения (и медленного симулятора avr32). Различные трюки gcc, makefile и макросов позволяют мне создавать мой проект Avr32 / freeRTOS в среде портов FreeRTOS MinGW / Win32, и я могу отлаживать в eclipse / gdb. Но HW-доступ с высоким мемом в коде Avr32 (поставляется поставщиком) приводит к сбою exe-файла MinGW (из-за исключения доступа к mem).
Я рассматриваю некоторую комбинацию этих подходов:
1) Управление исключениями доступа в ПО. В идеале я хотел бы создать своего рода симулятор HW, но это было бы сложно и, я думаю, потребовало бы некоторого грубого ассемблерного кода. Многие исключения могут быть просто проигнорированы.
2) Создание модифицированной копии заголовочных файлов Avr32 для перемещения регистра HW #defines в адресное пространство пользовательского процесса (и создания некоторых структур и секций компоновщика, которые передают эти области виртуальной памяти)
3) Условная компиляция вызовов функций, которые приводят к доступу highMem / HW, или к большему количеству макро-трюков, чтобы минимизировать смещение кода в «реальном» коде HW-цели. (В этом проекте есть другие разработчики.)
Будем благодарны за любые предложения или полезные ссылки.
Эта страница находится на правильном пути, но кажется слишком сложной и представляет собой C ++, которого я хотел бы избежать. Но я могу попробовать это, без других предложений.
http://www.programmingunlimited.net/siteexec/content.cgi?page=mingw-seh