기존의 RAM 과 연속적이지 않은 확장 RAM 영역을 OAL SYSTEM 메모리로 등록하는 방법에는 여러가지 방법이 있다.
1. 아래는 pNKEnumExtensionDRAM (OEMEnumExtensionDRAM) 을 이용하는 방법이다.
BSP/Src/Inc/oemaddrtab_cfg.inc
-----------------------------------------------------------------------------
g_oalAddressTable
; nCS6
DCD 0x80000000, 0x50000000, 128 ; 128 MB DRAM BANK 6
; ----- 중략 ---------------
DCD 0x93000000, 0x00000000, 16 ; 32 MB SROM(SRAM/ROM) BANK 0
; nCS1~nCS5, nCS0
DCD 0x94000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 1 = CS8900
DCD 0x9A000000, 0x30000000, 1 ; 1 MB SROM(SRAM/ROM) BANK 4 = SRAM (256Kx16bit)
DCD 0x00000000, 0x00000000, 0 ; end of table
END
-----------------------------------------------------------------------------
BSP/Src/Kernel/Oal/Init.c
-----------------------------------------------------------------------------
#include <bsp.h>
// ---- 중략 --------
extern DWORD (*pNKEnumExtensionDRAM)(PMEMORY_SECTION , DWORD );
UINT32 g_oalIoCtlClockSpeed;
// ---- 중략 --------
static void InitializeSRAM(void)
{
// SROM setup for nCS4 of SRAM
// Put some configurations of SROM controller for SRAM bank
}
#define EXT_RAM_BASE_VIRTUAL (0x9A000000) // nCS4 - SRAM
#define SIZE_OF_EXT_RAM (0x00010000) // 64KByte
DWORD OEMEnumExtensionDRAM(MEMORY_SECTION *mem, DWORD max_sections)
{
// RETAILMSG(1, (TEXT("^^^^^^^^^^^^OEMEnumExtensionDRAM called ^^^^^^^^^^^\r\n")));
mem[0].dwFlags = 0;
mem[0].dwStart = EXT_RAM_BASE_VIRTUAL;
mem[0].dwLen = SIZE_OF_EXT_RAM;
return (1); // One additional memory section.
}
void OEMInit()
{
// --- 중략 ---------
OALMSG(TRUE, (L"[OAL] ++OEMInit()\r\n"));
// --- 중략 ---------
InitializeSRAM();
pNKEnumExtensionDRAM = OEMEnumExtensionDRAM;
// Lie about the Processor Type (we do this so that the visual C tools work)
CEProcessorType=PROCESSOR_STRONGARM;
// --- 중략 ---------
}
-----------------------------------------------------------------------------
위와 같이 OEMInit() 함수 내에서 pNKEnumExtensionDRAM 을 정의하고, OEMEnumExtensionDRAM 함수를 연결하여 주면, OEMInit가 끝난후 OEMEnumExtensionDRAM함수가 수행이 되면서, 확장 메모리 영역이 시스템 메모리로 추가가 된다.
2. 다른 한가지의 방법은 OEMGetExtensionDRAM 함수를 이용하는 방법이다.
WINCE500/PLATFORM/COMMON/SRC/COMMON/OTHER/memory.c 에는 OEMGetExtensionDRAM 함수가 정의되어있다.
이것을 아래와 같이 수정하면
해당 영역이 시스템 메모리영역에 추가가 된다.
전제 : 1) oemaddrtab_cfg.inc 에 해당 영역에 대한 mmu table 설정이 되어있을 것.
2) config.bib 에는 해당영역에 대한 항목이 없도록 할 것.
//------------------------------------------------------------------------------
BOOL OEMGetExtensionDRAM(UINT32 *pMemoryStart, UINT32 *pMemoryLength)
{
//RETAILMSG(1,(_T("+OEMGetExtensionDRAM()\r\n")));
*pMemoryStart = 0x82000000;
*pMemoryLength = 0x04000000;
//RETAILMSG(1,(_T("-OEMGetExtensionDRAM()\r\n")));
return (TRUE);
}
//------------------------------------------------------------------------------
[출처] [WinCE] 다른 뱅크의 RAM 영역을 OAL 에 등록하는 방법|작성자 조이재즈
'Hello CE,Mobile' 카테고리의 다른 글
CE 그림파일 확장자 연결 프로그램 등록 (0) | 2013.11.28 |
---|---|
WIN32 API (0) | 2013.11.07 |
CeLog 사용 (0) | 2013.08.09 |
Required files may be missing. To resolve the issue, reinstall Platform Builder (0) | 2013.06.19 |
Platform Builder 사용하지 않고 Build Command 창 바로 열기 (0) | 2013.06.05 |