Archive

Archive for December, 2008

扩大WinCE可用物理内存

December 28th, 2008 will No comments

WinCE系统内核的源代码中默认使用28M的内存。如果在Build Option中选中Run-Time Image Can be Larger than 32 MB (IMGRAM64=1)项,那么定制WinCE的时候Platform Builder会使用64M的内存来编译。对于大于64M内存系统的定制需要做些修改。

对于x86架构的GEODE处理器(注意此处是对于Geode处理,如果是CEPC则不需要改源代码,CEPC的内存修改方法),要支持大于64M的内存必须修改源码。

首先在WinCE安装目录找到%_WINCEROOT%\Public\Common\Oak\Csp\x86\Inc\Pc.h文件,修改Pc.h中的CEPC_EXTRA_RAM_SIZE宏,CEPC_EXTRA_RAM_SIZE为总内存数减去Config.bib中详细列出的内存数。128M内存是在原来的0×02400000基础上加上0×04000000。

然后找到%_WINCEROOT%\Public\Common\Oak\Csp\x86\Oal\OEMInit.asm文件,打开oeminit.asm文件,修改“_OEMAddressTable:”的值。 _OEMAddressTable是一个非常关键的内存映射描述表,主要描述物理内存和虚拟内存之间的映射,表的每一条目有3个DWORD,依次是(VA,PA,cbSize),其中VA是虚拟内存的开始地址,一般为80000000h,PA是物理内存的开始地址,一般为0,cbSize就是CE内核支持物理内存的大小,这个DWORD是我们最最关心的,其单位是BYTE。需要注意的是,cbSize,一定要是4M Byte的倍数,因为Windows CE.NET内核中检测内存大小,是以4M Byte为单位来检测的。cbSize系统默认为04000000h,其大小为64M,我们可以将其修改为8000000h,就可以支持128M内存了。

最后重新编译生成Buildi486oal.lib。选择Platform的Build OS菜单下的Open Release Directory打开CMD命令行(直接在windows下运行cmd命令行不行,一定要从Platform的build OS菜单进入),进入 %_WINCEROOT%\Public\Common\OAK\CSP\i486\Oal目录下。然后执行:build –c和sysgen i486oal命令。然后在PB工作空间,选择FileView选项卡,找到%_WINCEROOT%\Public\Common\OAK\CSP\x86\Oal,右键后选上Run Makeimage Tool After Build,最后Build and sysgen编译生成映像NK.bin。

对于x86架构的非GEODE处理器,可以直接通过设置环境变量IMGRAM128=1,使系统可以支持128M的内存。注意config.bib文件中的代码RAM 80C00000 07000000 RAM,其中07000000代表分配的内存空间的大小,这部分空间是真实内存空间大小减去内核所占空间的结果。所以如果分配给RAM内存的空间过大,定制的系统加载之后会黑屏。

对于x86EMULATOR修改代码似乎也不能使其内存超过64M,测试了一次,失败了。

Categories: 学习笔记 Tags: , ,

ADOCE打包到WinCE NK.bin镜像中

December 22nd, 2008 will No comments

WinCE下SQLCE开发初探中说明的方式只能作为调试程序之用,其实每次调试都需要配置一次也够麻烦的,下面就讲一下如何将ADOCE的dll文件打包到内核NK中,并将数据库文件存在硬盘(CF卡)上,实现数据永久保存地方法。

一、需要将ADOCE的dll库文件打包到WinCE的windows目录下

1、 在菜单的Platform下选择Setting,再选择Custom Build Actions选项卡,在Build step:下选择Pre-Make Image选择New,然后在弹出对话框中输入

Add Files to NK.bin

copy <Path>\<File name> %_FLATRELEASEDIR%\<File name>

<File name>换成需要添加的文件
%_FLATRELEASEDIR%环境变量表示当前工程的release目录

确认后保存

2、在菜单的View下选择Parameter View,双击打开Project.bib文件进行编辑,在Files session下添加

FILES
; Name Path Memory Type
; ————– ——————————– —— —- ——————————–
<File name> $(_FLATRELEASEDIR)\<File name> NK  S

$(_FLATRELEASEDIR)对应的目录和%_FLATRELEASEDIR%相同
例如:将D盘根目录下的adoce31.dll打包,
copy D:\ adoce31.dll %_FLATRELEASEDIR%\ adoce31.dll
adoce31.dll $(_FLATRELEASEDIR)\adoce31.dll        NK     S

保持对应关系一致就可以了。

然后Build and Sysgen(此时不必做,等后面修改完了一并Build and Sysgen)
这样包含的文件默认在NK.bin的windows目录下

如果追加了新的文件需要重新Build and Sysgen
我已经改过的project.bib和project.reg文件可以到这里下载

二、替换掉dllregister.exe

每次运行dllregister.exe都会弹出一个“注册成功”的确认对话框,相当不爽。不知道如何让它静默运行,直接修改注册表完成它的功能算了。将dllregister注册之前和之后的注册表用UltraEdit比较,找出不同的写入project.reg中。

三、将数据库文件放入硬盘

NK的内核是个ROM,每次操作完之后的数据都是写入内存中,重启之后就没有了。所以必须将数据库文件放入CF上(NK.bin文件之外)。

在wince 的os定制中打开Catalog 中的Device Drivers\Storage Devices, 然后选择ATAPI PCI/IDE Storage Block Driver,右键选择Add to OS Design。

在Core OS\Windows CE devices\File Systems and Data Store\Storage Manager, 然后选择 FAT File System.右键选择Add toOS Design。然后重新Build and Sysgen。

CF卡的容量不要超过2G,fat16最大只能支持2G空间

Build and Sysgen等待完成后,将mydata.sdf(数据库文件)拷贝到CF上。在中文WinCE系统下,程序中访问数据库文件的路径为 /硬盘/mydata.sdf。

Categories: 学习笔记 Tags: , , ,

WinCE下SQLCE开发初探

December 7th, 2008 will No comments

WinCE下数据库开发可以选择两个自带的数据库,一个是EDB,另一个为SQLCE。EDB不支持SQL语句,操作几乎是靠调用API,感觉极不方便,所以没有选用。SQLCE支持简单的SQL语句,比较灵活。

SQLCE的链接MS推荐使用OLEDB,但是以前没有用过,所以没有采用这中方法,而使用了ADO方式。网上关于WinCE ADOCE的资料也比较多。主要是使用VOADO,而实际使用的时候发现并非那么好用。后来有找到了一个voado的示例程序,仿照示例搞定了。论坛需要注册才能下载,我将程序上传到了纳米盘,点击直接SqlCeExaple.rar下载。作者将voado做了修改,程序是在arm平台下的,实际x86下也可以使用。在硬件仿真条件下通过remote file viewer将文件上传到对应的目录就可以使用数据库了。如何将adoce集成到内核中,请看ADOCE打包到WinCE NK.bin镜像中

SQLCE本身不支持top关键字,所以分页显示比较麻烦,我的解决办法是将数据全部读出来(数据记录不多),然后通过程序控制该显示哪几条记录。上述的voado当记录为空的时候,ISEOF()函数并不能返回真,这样当没有记录的时候可能会进入死循环,为避免这种情况,读取记录之前可以先获取记录的条数,如果有记录则继续读取,没有则直接返回。

Categories: 学习笔记 Tags: , ,