가상 메모리 주소 공간을 초과하는 높은 메모리 (> 0xFFFF0000)에 액세스하는 임베디드 프로젝트의 일부 공급 업체 코드로 XP에서 MinGW GCC 툴체인을 사용하려고합니다. XP에서 '민간인'프로세스에서 허용됩니다.XP에서 MinGW로 메모리 액세스 예외 처리
나는 메모리 접근 예외를 어떤 식 으로든 직접 처리하여 예외 다음의 명령어, 즉 무시할 수 있도록한다. MinGW로 할 수있는 방법이 있습니까? 아니면 MS 툴체인이 있습니까?
광대하게 단순화 된 그림
따라서이다 ://///////////
// 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이 AVR32-GCC 툴체인을 사용과 아트멜 AVR32 플랫폼에 포함 된 프로젝트를 개발하고있다. 하드웨어 (및 느린 avr32 시뮬레이터)와 독립적으로 상위 레벨 애플리케이션 코드를 개발/디버깅하는 것이 바람직합니다. 다양한 gcc, makefile 및 매크로 트릭을 통해 MinGW/Win32 freeRTOS 포트 환경에서 Avr32/freeRTOS 프로젝트를 빌드하고 Eclipse/gdb에서 디버깅 할 수 있습니다. 그러나 (공급 업체가 제공 한) Avr32 코드에서 높은 mem HW 액세스는 Mem 액세스 예외로 인해 MinGW exe를 충돌시킵니다.
1) SW의 액세스 예외 관리 :
나는 이러한 방법의 조합을 고민하고있다. 이상적으로는 일종의 HW 시뮬레이터를 만들 겠지만 어렵고 복잡한 조립 코드가 필요합니다. 예외의 대부분은 무시 될 가능성이 있습니다. HW에 사용자 프로세스 주소 공간으로 # 정의 레지스터 (가상 메모리 공간의 해당 영역 commmit 일부 구조체와 링커 부분)
을 만들 이주하도록 AVR32 헤더 파일의 수정 카피를 작성
2
) 3) "실제"HW 대상 코드의 코드 크래프를 최소화하기 위해 highMem/HW 액세스 또는 alernatively 더 많은 매크로 트릭을 초래하는 함수 호출의 조건부 컴파일. (이 프로젝트에 다른 개발자가 있습니다.)어떤 제안이나 도움이되는 링크가 제공됩니다.
이 페이지는 올바른 경로에 있지만 지나치게 복잡하게 보이고 C++로 피하고 싶습니다. 하지만 다른 제안이 없다면 아직 시도해 볼 수 있습니다. http://www.programmingunlimited.net/siteexec/content.cgi?page=mingw-seh