WinCE
文章平均质量分 83
michaelcao1980
这个作者很懒,什么都没留下…
展开
-
WINCE下内核模式和用户模式的区别
1、 WINCE内核nk.exe的任务是管理操作系统核心功能。按照OEMAddressTable的映射要求,所有物理地址都映射到0x80000000以上,所以对于内核程序nk.exe和内核模式下的线程来说,只要访问0x80000000以上的有效虚拟地址经MMU就能够访问物理地址,无需再映射是内核模式的一个特点。内核模式的第二个特点是没有地址访问限制,内核模式线程可以访问任何有效虚拟地址,所谓有效虚转载 2012-11-29 16:53:36 · 1056 阅读 · 0 评论 -
romimage
1. romimage是什么?romimage是wince编译过程中最后一步。在此之前,ce的编译系统已经调用自己的arm编译器,对每个模块完成了编译工作,并生成了.exe,.dll等文件;同时针对当前的环境设置,生成了.bib,.reg等文件。另外还有一些别的文件。最后编译系统将所有这些需要“打包”的文件,拷贝到_WINCEROOT\release目录下。而romimage的作用,就是根据c原创 2012-12-13 21:00:44 · 1741 阅读 · 0 评论 -
Windows CE下访问物理内存的方法
嵌入式设备与桌面PC的一个显著不同是它的应用程序中通常需要直接访问某一段物理内存,这在驱动程序中对物理内存的访问尤为重要,尤其是像ARM体系结构下,I/O端口也被映射成某一个物理内存地址。因此,与桌面版本Windows相比,Windows CE提供了相对简单的物理内存访问方式。无论是驱动程序还是应用程序都可以通过API访问某一段物理内存。Windows CE的有些函数中需要用到物理内存结构体P转载 2012-12-13 21:01:49 · 828 阅读 · 0 评论 -
WinCE中sources文件中targetlibs与sourcelibs区别
在WinCE里面,编译和链接的必备文件sources,做过WinCEBSP开发的一定都很熟悉,其中有2个关键字,targetlibs和sourcelibs,一直让我对其中的区别很感兴趣,故查阅了一些资料,与大家分享。 其实只要搜索以下就会得到一些基本的答案,比如:TARGETLIBS,如果一个库以DLL的形式提供给调用者,就需要用TARGETLIBS,它只链接一个函数地址,系原创 2012-12-19 15:04:25 · 807 阅读 · 1 评论 -
WinCE下内存申请API比较
HeapAlloc,GlobalAlloc,LocalAlloc,VirtualAlloc,Malloc,New的比较1. 首先我们来看HeapAlloc:MSDN上的解释 为:HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的 空间利用起来,从而导致分配失败),该分配方法是从一指定地址开始分配,而不像Gloabal原创 2013-01-25 10:07:24 · 1488 阅读 · 0 评论 -
WinCE6.0HIVE注册表
Hive主要功能是实现注册表的掉电保存,它是如何实现的呢?首先把注册表分为两部分:boot.hv第一部分、system.hv和user.hv算第二部分。我们想永久保存注册表就需要把它存到flash等存储器中,那这些保存的文件如何获得?还是需要的注册表的帮忙的啊!这就是boot.hv的作用,在其中就包含了要获得system.hv和user.hv所需的存储器驱动(如flash驱动)和文件系统驱动(如F原创 2013-01-11 10:14:18 · 2251 阅读 · 1 评论 -
WinCE下使用extern限制
在WinCE下,c文件里不能用extern引用cpp文件所生成的库里的变量,比如:1.cpp,2.cpp生成1.lib,其中1.cpp里有变量 DWORD test;则源文件1.c里不能使用extern DWORD test,链接阶段会出错。原创 2013-02-17 15:25:22 · 695 阅读 · 0 评论 -
WINCE6.0 远程工具,不能使用ActiveSync连接的问题
现象:“VS2005->Target->Remote Tools”打开的远程工具,当选用ActiveSync作为连接方式时,会出现如下错误:“The Microsoft ActiveSync reported the following error: Unable to load device side components”解决方法:出现上面的错误对话框是因为找不到目录":/Prog原创 2013-02-20 15:47:21 · 1466 阅读 · 1 评论 -
在BSP的.bat文件下设置全局变量的方法
(1) 示例。BSP的.bat文件 set BSP_SMDK2443=1 set BSP_SMDK2450=2 set BSP_TYPE=%BSP_SMDK2450% if /i "%BSP_IMAGE_TYPE%"=="1" set IMGMULTIBIN=1 else set IMGMULTIBIN= if /i not "%原创 2013-03-20 14:00:33 · 2257 阅读 · 0 评论 -
WinCE6.0编译设置
Buffer Tracked Events In RAM 选取这个, 将会在image中多出一个OSCapture.exe, 可以记录系统日志到文件Enable Eboot Space In Memory选这个,在os启动阶段, Eboot可以传输数据给osEnable Event Tracking During Boot选择这个, 系统日志跟踪启动早于内核和文件系统初始化前.翻译 2013-03-21 15:34:05 · 837 阅读 · 0 评论 -
Wince5内核启动流程
索引1. 从KernelStart开始2. arm9虚拟地址到物理地址的转换3. ;;写到再说1. 从KernelStart()开始事实上,kernel并不是从KernelStart()开始运行。eboot加载内核后,跳转的地址是startup.s文件的StartUp()函数(此处忽略msipl)。这个文件一般位于bsp目录中。这个函数会做一些预处理工作,之后跳到另一个star原创 2012-12-13 20:59:23 · 1128 阅读 · 0 评论 -
S3C2410下WinCE6.0的启动过程详解
OAL(OEM Adaptation Layer)即OEM适配层,它的主要作用是在移植WinCE到新的硬件平台时减少操作系统的修改,通俗的说就是为WinCE操作系统抹平MCU的差异,使其能很方便的在不同MCU上运行。所以,OAL包括了和系统硬件通讯的最底层代码。内核则通过OAL跟硬件进行交互。逻辑上,OAL是介于CE内核和设备硬件之间的一个代码层,是一个抽象的概念。物理上,OAL和其他一些库一起链原创 2012-12-13 20:49:30 · 961 阅读 · 0 评论 -
WinCE6.0驱动移植
[设备管理器]设备管理代码在private\winceos\coreos\device\目录.看看设备管理器的入口点devmain.c. 在WinCE5.0时代, 设备管理器是作为一个进程来实现的:devece.exe. 所以里面就是一个入口函数WinMain()调用StartDeviceManager()函数.再看WinCE6.0, devmain.c多出来了DevMainEntry()转载 2012-11-29 17:08:32 · 1410 阅读 · 0 评论 -
WinCE BSP的BIB文件介绍
在WinCE中使用的一个重要的文件就是BIB文件,全称Binary Image Builder File。在WinCE的编译过程中会用到BIB文件,应该是在最后的Makeimg阶段。所有的BIB文件会被合并成CE.bib文件,然后Romimage.exe会根据BIB文件中的描述来决定哪些文件最终被包含到WinCE image中。当然,BIB文件还决定了WinCE设备内存的分配,其中定义了WinCE转载 2012-11-29 16:21:45 · 556 阅读 · 0 评论 -
OEMAddressTable介绍
一般在ARM架构的CPU上,物理地址都是统一编址的,寻址空间为4GB(32Bit CPU)。也就是说,针对一个ARM的处理器,它可以访问的物理空间是4GB。在WinCE中,ARM中的4GB物理地址空间将被映射为512MB的虚拟内存空间。 OEMAddressTable就是一个4GB物理地址空间到WinCE Kernel中的512MB虚拟地址空间的映射表。在BSP中,会定义OEMAddressT转载 2012-11-29 16:44:46 · 619 阅读 · 0 评论 -
WinCE键盘驱动
举个例子,标准的美国英语键盘的数字键SHIFT+2输出符号@,你想改成欧元符号该怎么做?或者你想做一个法语键盘,又该怎么做?又或者你想基于同样的键盘硬件设计,软件上同时支持英语、法语、俄语layout,又该怎么弄?在WinCE上,从键盘驱动的角度看,键盘驱动对按键动作的响应过程大约可描述为:按键产生中断 键盘驱动读取按键的scan code 键盘驱动把scan code映射成vir转载 2012-11-29 17:29:08 · 711 阅读 · 0 评论 -
Windows CE内存管理
Windows CE 有着很多不同内存的分配方法。 上图显示了所有的内存分配方式,在我刚开始学习的时候,也不是很明白为什么有着这么多种的分配方式。其实就一句话:越往下面的内存分配方式效率越高,但是应用的复杂度也就越高。 虚拟内存分配可以用以下方法来实现:分配函数: LPVOID VirtualAlloc(LPVOID, DWORD, DWORD,DWO原创 2012-11-29 16:48:44 · 498 阅读 · 0 评论 -
WinCE自启动Shell的问题
WinCE开机即运行定制的Shell是很多系统的基本要求,有时还需要屏蔽WinCE自带的Shell。WinCE中程序的自启动,一般有两个实现方法,修改注册表和添加自启动快捷方式。修改注册表比较方便,如下: [HKEY_LOCAL_MACHINE\init] "Launch70"="MyApp.exe" "Depend70"=hex:14,0转载 2012-11-30 10:58:19 · 477 阅读 · 0 评论 -
浅谈WinCE快速启动的几种方法
优化BOOT,提高BOOT运行时的工作频率。在一些平台上BOOT启动时,MCU并没有全速运行。这是可以尝试的一种方法,并能提高读取内核映像的速度。但如果BOOT已经全速运行,那可以看看是否可以再精简一些,总之是想尽一切办法,让它以最快的速度启动并加载内核到内存,然后将控制权交给内核。另外,在一些系统中会增加启动进度显示。如果要实现快速启动,并且系统能在5s内起来,进度条可以省了,因为本身它也会占用转载 2012-11-30 11:13:09 · 621 阅读 · 0 评论 -
WINCE BSP中source文件中的宏定义
在WinCE BSP中会看到很多sources文件,一般会和源代码放在同一个目录,当然不是绝对的。这些sources文件里面就是定义了一些宏,主要用于告诉Build.exe在编译源代码的时候应该如何编译和链接,告诉Nmake.exe如何编译源代码以及最后生成什么类型的文件。下面具体介绍一下:TARGETNAME:最后编译完后生成的目标文件的名字,不包括扩展名。TARGETTYPE:生成原创 2012-12-11 16:07:07 · 518 阅读 · 0 评论 -
WINCE TOC解析
1. TOC是什么TOC:Table Of Contents, OEM on disk structure.2. 为什么要进行全局变量重定位Bootloader的主控制函数BootloaderMain()调用的第一个函数是KernelRelocate (pTOC),WINCE操作系统OAL模块的启动过程中调用的ARMInit()函数页调用了KernelRelocate (pTOC)转载 2012-12-11 15:56:12 · 695 阅读 · 0 评论 -
线程/进程同步的方式和机制
线程同步机制:临界区(Critical Section)、互斥量(Mutex)、事件(Event)、信号量(Semaphore)四种方式1、临界区:又称阻塞,通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程原创 2014-02-13 16:31:54 · 2650 阅读 · 1 评论