首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XP上使用MinGW处理内存访问异常

在XP上使用MinGW处理内存访问异常
EN

Stack Overflow用户
提问于 2011-05-04 15:13:14
回答 2查看 347关注 0票数 0

我正在尝试在XP上使用MinGW GCC工具链,其中包含一些来自嵌入式项目的供应商代码,该项目访问高内存(>0xFFFF0000),我认为这超出了XP中“平民”进程所允许的虚拟内存地址空间。

我想自己处理内存访问异常,以允许在异常之后的指令处继续执行,即忽略它。有什么方法可以用MinGW做到这一点吗?还是使用MS工具链?

大大简化的图片是这样的:

代码语言:javascript
复制
/////////////
// 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
}

更多细节:我正在使用freeRTOS的Atmel AVR32平台上开发一个嵌入式项目,使用的是AVR32-gcc工具链。期望独立于硬件(和慢速avr32模拟器)来开发/调试高级应用代码。各种gcc,makefile和宏技巧允许我在MinGW/Win32 freeRTOS端口环境下构建我的Avr32/freeRTOS项目,我可以在eclipse/gdb中进行调试。但是(供应商提供的) Avr32代码中的高内存硬件访问会使MinGW exe崩溃(由于内存访问异常)。

我正在考虑这些方法的一些组合:

1)管理软件中的访问异常。理想情况下,我会创建一种硬件模拟器,但这将是困难的,并涉及一些粗糙的汇编代码,我认为。许多异常很可能会被忽略。

2)创建Avr32头文件的修改副本,以便将HW寄存器#定义重新定位到用户进程地址空间(并创建一些结构和链接器部分,用于分配虚拟内存空间的这些区域)

3)有条件地编译导致高内存/硬件访问的函数调用,或警示更多的宏技巧,以便最大限度地减少“真正的”硬件目标代码中的代码混乱。(这个项目还有其他开发人员。)

任何建议或有用的链接将不胜感激。

这个页面是在正确的轨道上,但似乎过于复杂,并且是C++,我想避免。但是,如果没有其他建议,我可能还会尝试一下。http://www.programmingunlimited.net/siteexec/content.cgi?page=mingw-seh

EN

回答 2

Stack Overflow用户

发布于 2011-08-08 03:53:23

您需要弄清楚为什么供应商代码首先要将1写到地址0xFFFF0000,然后编写一个模拟此行为的自定义VendorFunc_B()函数。很可能0xFFFF0000是一个硬件寄存器,它在写入时会做一些特殊的事情(例如:更改串行端口上的波特率或打开激光器电源或...)。当您知道在目标硬件上写入此寄存器时会发生什么情况时,您可以重写供应商代码以在windows代码中做一些适当的操作(例如,将字符串"Starting laser“写入日志文件)。可以肯定地认为,在Windows XP上将1写入地址0xFFFF0000不是正确的做法,Windows XP内存保护系统会检测到这一点并终止您的程序。

票数 1
EN

Stack Overflow用户

发布于 2019-02-28 20:46:20

我最近遇到了一个类似的问题,这是我最终确定的解决方案:

Trap memory accesses inside a standard executable built with MinGW

首先,您需要找到一种方法将这些地址范围(可能是一些未定义/定义的组合)重新映射到一些可用内存。如果你不能做到这一点,也许你可以通过一个seg- write来挂接,然后自己处理写操作。

对于一些已经编写的代码,我还使用它来“模拟”单个可执行文件中的一些特定的HW行为。然而,在我的例子中,我找到了一种方法,可以提前重新定义所有的寄存器访问宏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5879809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档