Re: physical RAM limit under WinCE 6.0
- From: Valter Minute <v_a_l_t_e_r.m_i_n_u_t_e@xxxxxxxxxxxxx>
- Date: Wed, 10 Jan 2007 01:18:26 -0800
alexquisi@xxxxxxxxxxxx wrote in
news:1168367090.651575.93770@xxxxxxxxxxxxxxxxxxxxxxxxxxx:
Hi Valter,
unfortunately I cannot tell you a good technical reason to use
more than the 512 MB of DRAM. It is basically a costumer's
requeriment because he will use our board to run simultaneally
several applications that will consume a lot of memory (video
streaming, Flash player, several serial ports, etc). So he wants
to be sure that he won't face performance problems.
I saw very few CE devices with more that 128MB of RAM and 32 or 64MB
are the amount of RAM provided for PocketPCs or Windows Mobile devices
that usually handle the kinds of thing you talked about (not so many
serial ports but a GPRS connection or a GSM phone...).
If your customer is used to the memory requirements of XP, explain him
that CE is a different OS!
And increasing RAM in CE don't increase performances as it does in XP.
In XP adding more RAM usually prevent swapping, but on CE there is no
swap memory and everything runs in physical RAM (or flash) unless the
application provides a swap mechanism of its own.
The mechanism I suggested is not transparent for application, so the
extra memory will be available only for applications that know how to
access the extra RAM and it may be difficult to integrate this into
applications that usually handle "flat" memory (ex: porting a Win32
application that allocate a huge amount of data in RAM counting on swap
to "hide" caching).
The use of NKCreateStaticMapping/NKDeleteStaticMapping seems
interesting for the video streaming application. I was checking
the API but I am not sure how I should access the memory area in
User's mode. I see that the API return a pointer to that area, I
suppost that it would be a global variable in the kernel. Should I
implement IOCTRLs to access it in User mode?
Another solution, if you need to access that RAM from a single app is
to use MmMapIoSpace to map and MmUnmapIoSpace to unmap the pages you
needs inside your own process. This will work only on CE 5.0 since on
CE 6 only kernel or user mode driver can map addresses in this way.
In CE 6 you may need to copy data from and to that memory.
I also read (it was an old post) that these APIs do not work well
with some architectures (ARM and SH, I think), in my case I am
using MIPS.
I don't know about that.
I'm also not sure when I should call NKDeleteStaticMapping. My
board only has cold boot.
In the "window" approach you should call it to unmap some memory and
then map another physical region to the same address space.
The filesystem option sounds interesting, may you give me an idea
how it could be implemented? I am not sure if there is such RAM
filesystem driver in the sample code of PB...
In PB there is a RAMDISK sample that uses a "flat" memory block IIRC.
You should implement a slighly different approach, mapping each block
you need to access each time you need to read/write it.
This may give some very fast "mass storage" space to your applications
but won't improve performances.
--
Valter Minute
(the reply address of this message is invalid)
(l'indirizzo di reply di questo messaggio non è valido)
.
- References:
- physical RAM limit under WinCE 6.0
- From: alexquisi
- physical RAM limit under WinCE 6.0
- Prev by Date: Re: physical RAM limit under WinCE 6.0
- Next by Date: Re: Use coredll.lib in kernel
- Previous by thread: physical RAM limit under WinCE 6.0
- Next by thread: From WindowsCE 5.0 to Windows Mobile 5.0
- Index(es):
Relevant Pages
|