自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

转载 YUV格式详解

YUV是指亮度参量和色度参量分开表示的像素格式,而这样分开的好处就是不但可以避免相互干扰,还可以降低色度的采样率而不会对图像质量影响太大。YUV是一个比较笼统地说法,针对它的具体排列方式,可以分为很多种具体的格式。转载一篇对yuv格式解释的比较清楚地文章,也可以直接参考微软的那篇文章。对于YUV格式,比较原始的讲解是MPEG-2 VIDEO部分的解释,当然后来微软有一个比较经典的解释,中文的大

2012-01-11 16:18:35 628

原创 C语言中字符数组和字符串指针分析

这几天学习linux上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么用到过C,虽然网上这类的文章也有很多,还是决定自己在这做个小总结,也算加深下自己的印象,写了下面的测试程序:#include int main(int argc, char *argv[]){  char day[15] = "ab

2011-11-18 23:05:25 562

原创 指向指针的指针的应用

一. 回顾指针概念: 今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧! 当我们程序如下申明变量: short int i; char a; short int * pi; 程序会在内存某地址空间上为各变量开辟空间,如下图所示。 内存地址→6     7      8     9     10     11    12    13     1

2011-11-17 16:50:44 599

原创 C++指针与引用的区别

指针是C系语言的特色。指针是C++提供的一种颇具特色的数据类型,允许直接获取和操纵数据地址,实现动态存储分配。     指针问题,包括常量指针、数组指针、函数指针、this指针、指针传值、指向指针的指针等,这些问题也是各大公司常备考点,下面让我们一起学习其中的重点与难点1、指针与引用的区别?答案:(1)非空区别。在任何情况下都不能使用指向空值的引用。因此如果你使用一

2011-11-17 16:35:17 543

原创 typedef 的理解 typedef struct 结构体

C/C++中typedef struct和struct的用法       struct  _x1 { ...}x1; 和 typedef  struct  _x2{ ...} x2; 有什么不同?            其实, 前者是定义了类_x1和_x1的对象实例x1,  后者是定义了类_x2和_x2的类别名x2 ,       所以它们在使用过程中是有取别的.请看实例1.

2011-11-17 16:15:07 655

原创 android开机logo修改2

当android系统从Linux内核启动后,将会执行anddroid平台的初始化过程,屏幕上将会出现”A N D R I O D”文字字样画面Android 系统启动后,读取 /initlogo.rle(一张565 rle压缩的位图),如果读取成功,测在/dev/graphics/fb0显示Logo图片;如果读取失败,则将/dev/tty0设为TEXT模式, 并打开/dev/tty0,输出文本

2011-11-12 21:14:08 2168 1

原创 android开机logo的修改1

Android 开机会出现3个画面:第一个就是 linux 系统启动,出现Linux小企鹅画面(reboot);Linux Kernel引导启动后,加载该图片,涉及到的代码在如下的目录中:/kernel/trunk/drivers/video/fbmem.c/kernel/trunk/drivers/video/fbmem.h/kernel/trunk/drivers/vide

2011-11-12 20:21:36 1619

原创 int在32位机器中所占的内存大小引发的问题

今天看到一个资料,看到里面讲到int在32位机器中占的是四个字节的内存,我脑海里面感觉这个好像不对,然后在网上查了下资料,发现int类型的数据在32位机器中的确占的内存是4个字节,现在对一些数据结构在内存中所占的字节数总结下。         1: char   a:   s

2011-08-06 14:56:29 2966 2

转载 基于WINCE6.0的nandflash驱动(基于K9F1G08U0B)

<br />*******************************LoongEmbedded********************************<br />作者:LoongEmbedded<br />时间:2010.11.26<br />类别:WINCE驱动开发<br />********************************LoongEmbedded********************************<br /> <br /> <br />1.       nan

2010-12-09 12:46:00 1187

转载 ubuntu下编译驱动程序的准备

<br />ubuntu不带linux内核源码,需要自己下载安装。<br />1,查看自己的内核版本<br />uname -r<br />2,查看源内的内核源码类表<br />apt-cache search linux-source <br />3,下载安装内核源代码<br />sudo apt-get install linux-source-2.6.27      //我选的是这一个,自己看着办吧<br />4,等待........<br />下载完成后,在/usr/src下会有一个文件名为linu

2010-11-25 11:17:00 867

转载 wince5.0多按键中断驱动问题

<br />http://topic.csdn.net/u/20100806/10/14b17e7e-06c1-42ec-a7a2-124673ce2081.html

2010-11-23 11:38:00 541

转载 WinCE线程和内存管理之内存管理

三、内存管理<br />同其它Windows操作系统一样,Windows CE.NET也支持32位虚拟内存机制、按需分配内存和内存映射文件等。但是与其它Windows操作系统又有明显的不同。毕竟Windows CE是一种嵌入式实时性的操作系统,在内存管理方面必须要比其它Windows操作系统更节约物理内存和虚拟地址空间。在内存管理API方面,为了便于移植程序,Windows CE和其它Windows操作系统函数声明基本一致,这使一个在其它Windows下开发的程序员可以直接使用早就熟悉的API函数, 但是C

2010-11-22 21:35:00 710

转载 在Windows CE 下申请大容量物理内存

<br />申请大容量的物理内存看起来不是难事。这里的大容量是指几十MB甚至更多的物理内存。对于C++程序员来说可能平时习惯了使用"new"操作符来实现。我也是这样。使用"new"非常简单,申请之后只需判断返回的指针是否是空即可。在其它的Windows操作系统上的确不需要在申请大容量物理内存上过多考虑。但是在Windows CE上就不同了。如果只用"new"就能搞定,那就太省事了。<br />不知道Windows CE下软件开发者是否遇到过这种情况,如果使用"new"申请超过30MB的物理内存,那么返回的一

2010-11-22 21:33:00 1264

转载 Windows CE下驱动程序开发基础

<br />Windows CE下的串口驱动程序能够处理所有I/O行为类似串口的设备,包括基于16450、16550 UART(通用异步收发芯片)的设备和一些采用DMA的设备,常见的有9针串口、红外I/O口、Modem等。在%_WINCEROOT%/Public/Common/OAK/Drivers/Serial目录下,COM_MDD2子目录包含新的串口驱动MDD层函数代码。COM16550子目录包含串口驱动PDD层代码。SER16550子目录包含的一系列函数专用于控制与16550兼容的UART,这样PDD

2010-11-22 21:32:00 641

转载 WinCE系统下BootLoader的开发

摘要:介绍WinCE.NET系统的旧方法;说明板级支持包(BSP)的基本构成;从开发实际出发,详细阐述如何开发BSP中的重要部件--BootLoader。关键词:WinCE.NET BSP BootLoader DOC<br />引言<br />Windows CE.NET是微软公司向嵌入式领域推出的一款操作系统。它最大程度继承了桌面版Windows操作系统的丰富功能,同时又副入了许多新特性,以适应嵌入式领域的实际情况和要求。无论是商业应用需求,还是人们的多媒体消费需求,都能被采用CE操作系统的设备很轻

2010-11-22 21:26:00 788

转载 Windows CE 6.0的内核启动顺序

<br />Windows CE 6.0以前的WinCE版本,系统进程和应用程序的启动顺序通过设置注册表项HKEY_LOCAL_MACHINE/Init下的子键来完成,并且内核启动过程把filesys.exe作为第二个进程(第一个进程为NK.exe),而对于Windows CE 6.0,大部分系统进程变成了动态链接库(DLL)的形式装载在内核进程中,系统采用一种同时支持动态链接库(DLL)和可执行文件(.exe)的机制。1、进程启动顺序的配置      虽然我们可以通过设置注册表项HKEY_LOCAL_MA

2010-11-22 21:24:00 1682

转载 Windows CE 6.0的内核启动顺序

<br />Windows CE 6.0以前的WinCE版本,系统进程和应用程序的启动顺序通过设置注册表项HKEY_LOCAL_MACHINE/Init下的子键来完成,并且内核启动过程把filesys.exe作为第二个进程(第一个进程为NK.exe),而对于Windows CE 6.0,大部分系统进程变成了动态链接库(DLL)的形式装载在内核进程中,系统采用一种同时支持动态链接库(DLL)和可执行文件(.exe)的机制。1、进程启动顺序的配置      虽然我们可以通过设置注册表项HKEY_LOCAL_MA

2010-11-22 21:24:00 936

转载 Windows CE 6.0 启动过程分析 3

4、ARMInit函数:    在ARMInit之前,系统仍无法使用全局变量,因为系统的全局还在ROM区域,对于操作系统而言,出于安全考虑,只有XIP程序才有读取ROM区域数据的权利,对于大部分Windows CE 操作系统,只有将数据拷贝到RAM区域后才能进行读写,ARMInit函数中通过调用KernelRelocate函数对pTOC全局变量重新定位,定位之后,对内核启动所需要的KDataStruct结构体进行初始化,其中OEMInitGlobals便是交换oal.exe和kernel.dll之间的全局指

2010-11-22 17:59:00 991

原创 Windows CE 6.0 启动过程分析(2)

3、KernelStart函数主要作用:◆完成OEMAddressTable表中的物理地址到虚拟地址和虚拟地址到物理地址之间的映射;◆对存储器页表和内核参数区存储空间(RAM或DRAM)进行清零处理。◆读出CPU的ID号,内核需要根据该ID决定ARM的MMU处理,因为ARMV6和ARMV6之前的ARM处理器的MMU处理过程有所区别;◆设置并开启MMU和Cache,因为在Startup函数关闭MMU和Cache;◆设置ARM处理器工作模式的SP指针,ARM处理器共用7种不同的工作模式(USER、FIQ、IRQ

2010-11-22 17:58:00 753

原创 Windows CE 6.0 启动过程分析1

<br />在Windows CE 6.0中,内核(Kenerl)和OEM代码被分成oal.exe、kernel.dll和kitl.dll三个部分,其中启动代码(startup)和 OAL层的实现部分不再与内核链接生成NK.exe,取而代之的是启动代码(startup)和硬件相关且独立于内核的OAL层的实现部分编译成 oal.exe,而与内核相关且独立于硬件的OAL层代码包含在kernel.dll中;内核无关传输层(KITL)的支持代码从OAL层分离出来编译成 kitl.dll。    从表面上看,好像只是

2010-11-22 17:56:00 842

原创 Windows CE 6.0 启动过程分析1

<br />在Windows CE 6.0中,内核(Kenerl)和OEM代码被分成oal.exe、kernel.dll和kitl.dll三个部分,其中启动代码(startup)和 OAL层的实现部分不再与内核链接生成NK.exe,取而代之的是启动代码(startup)和硬件相关且独立于内核的OAL层的实现部分编译成 oal.exe,而与内核相关且独立于硬件的OAL层代码包含在kernel.dll中;内核无关传输层(KITL)的支持代码从OAL层分离出来编译成 kitl.dll。    从表面上看,好像只是

2010-11-22 17:53:00 587

转载 Windows CE OAL层的结构与开发

<br />http://www.yymcu.com/a/TechDocu/WinCE/2010/0911/1178.html

2010-11-22 17:46:00 542

原创 WinCE5.0的USB Camera流接口驱动开发

<br />http://www.yymcu.com/a/TechDocu/WinCE/2010/0919/1446.html

2010-11-22 17:45:00 633

原创 WinCE启动界面的定制

<br />本文将以模拟器为例,简单介绍如何定制WinCE的启动界面,实现动画效果。在实际硬件平台上一般在BOOTLOADER中定制开机界面。如果BOOT从Flash加载NK到内存的时间较长,通常也会加一个进度条显示。如果从NK加载完成到进入CE桌面的时间也很长,那加一个开机动画也是不错的。<br />首先在backlight驱动中添加相关代码,实现动画效果,代码如下。 1 void slash()<br /> 2 {http://files.cnblogs.com/we-hjb/BOOT_LOGO.rar

2010-11-22 17:41:00 1201 1

原创 WinCE动态修改启动LOGO

<br />前两天介绍了WinCE启动界面的定制,在实际应用中经常还需要让用户方便修改启动LOGO。通常情况下,启动LOGO是编译到BOOT代码中的。为了实现动态修改启动LOGO,需要将LOGO保存至Flash中,BOOT启动时从特定的位置将其读取出来,并填入FrameBuffer。另外,必须让用户能够通过应用程序在WinCE系统中修改Flash中保存的LOGO。为了方便BOOT中显示,一般会在PC上利用Img2LCD将图片文件转换为能够直接填充进FrameBuffer的格式。如果要让该功能更灵活,则必须在

2010-11-22 17:40:00 909

原创 WinCE 6.0中断驱动程序分析

<br />Windows Embedded CE 6.0的中断处理过程主要分为两部分:☆中断服务例程(ISR):处于内核中的低级处理程序,中断发生时首先被调用。☆中断服务线程(IST):处于驱动或者应用中的中断处理线程,由系统调度,完成大部分的中断处理工作。<br /> <br />ISR的实现在OAL(OEM适配层)中,它只处理最低级的中断响应,通常是获取IRQ和SYSINTR并设置MCU内部的中断控制寄存器。中断处理的主要部分在驱动或者应用的中断处理线程中。中断处理线程与其他普通线程一样,使用同一个线

2010-11-22 17:36:00 568

原创 WinCE 实现屏幕旋转的方法

<br />在WinCE中做Screen Rotation,首先确认显示设备的驱动是否支持Screen Rotation功能。在显示设备支持的前提下,可以通过以下两种方法做Screen Rotation:1.       通过修改注册表做Rotation默认情况下,屏幕都是正常显示的,也就是说翻转角度为0度。可以通过修改注册表来做屏幕翻转,通过修改”Angle”的值来完成,具体设置如下:[HKEY_LOCAL_MACHINE/System/GDI/Rotation]    "Angle"=dword:5A 

2010-11-22 17:29:00 957

原创 WinCE6下的kernelIoControl使用方法

<br />WinCE6下的kernelIoControl可不是谁都可以调的。<br />这个可能很多人曾经知道,但是老是忘记,比如我,哈哈。<br />kerneliocontrol以前在CE5下面耍惯了,用这个接口,AP简直可以无法无天啊,动不动就reset你,哼!who怕who(AP不要 kernelicontrol还是可以无法无天,fullkernel啊,哈哈)<br />最近加了一个CE6下的kerneliocontrol,这种事情不晓得做过多少啦,所以信手拈来。<br />1.加IOCTL的co

2010-11-22 17:20:00 5342 1

原创 WinCE KernelIoControl函数5.0和6.0的区别

<br />在WinCE的BSP中的OAL部分,会有一个ioctl.c或者oemioctl.c文件,里面主要定义了一个叫OEMIoControl(..)的函数。可以说OEMIoControl是一个很有用的WinCE内核输入/输出函数。<br />在WinCE5.0中,应用程序和驱动程序可以通过调用KernelIoControl(..)函数来访问WinCE内核,导致调用OEMIoControl函数,这样应用程序和驱动程序就可以访问到OAL中的资源了。但在WinCE6.0中,提供了更好的安全性,应用程序能够访问

2010-11-22 17:19:00 2134

原创 WinCE6下的kernelIoControl使用方法

<br />WinCE6下的kernelIoControl可不是谁都可以调的。<br />这个可能很多人曾经知道,但是老是忘记,比如我,哈哈。<br />kerneliocontrol以前在CE5下面耍惯了,用这个接口,AP简直可以无法无天啊,动不动就reset你,哼!who怕who(AP不要 kernelicontrol还是可以无法无天,fullkernel啊,哈哈)<br />最近加了一个CE6下的kerneliocontrol,这种事情不晓得做过多少啦,所以信手拈来。<br />1.加IOCTL的co

2010-11-22 17:18:00 1494

原创 Wince6.0 添加IOCTL

<br />在WinCE5.0中,应用程序和驱动程序可以通过调用KernelIoControl(..)函数来访问WinCE内核,导致调用OEMIoControl函数,这样应用程序和驱动程序就可以访问到OAL中的资源了。但在WinCE6.0中,提供了更好的安全性,应用程序能够访问OEMIoControl中的case受到了限制,只有下面的这些case是可以让应用程序访问的:IOCTL_HAL_GET_CACHE_INFO<br />IOCTL_HAL_GET_DEVICE_INFO<br />IOCTL_HAL

2010-11-22 17:17:00 982

原创 WinCE的电池驱动实现

<br />wince电池驱动的实现<br />wince6的PUBLIC目录下,已经建立了电池驱动的架构,分为MDD层与PDD层,MDD层我们基本不用改动,我们需要修改的部分是PDD层,加入与自己系统硬件相关的部分就可以<br />为了不发动PUBLIC下的代码,我们需要将PDD层的相关代码复制到自己的BSP目录下:如/PLATFORM/XXXX/SRC/DRIVERS。(注册表文件与def文件也要拷过去),所以,我们只有一个C文件battif.c,需要增加的内容如下:<br />1、BOOL WINAP

2010-11-22 17:16:00 1389

原创 WinCE 微秒和毫秒级延时函数

<br />//WINCE 微秒级延时函数void delay_us(int n){LARGE_INTEGER litmp; <br />LONGLONG QPart1,QPart2; <br />double dfMinus, dfFreq, dfTim; <br />if(QueryPerformanceFrequency(&litmp)==FALSE) <br />   { <br />       MessageBox(NULL,TEXT("Error:QueryPerformanceFrequen

2010-11-22 17:15:00 1847

原创 Wince 串口驱动详解

<br />1、(oalintr.h)注册串口中断<br />//SP-A1<br />/*<br />打开oalintr.h文件,我们添加一个新的串口,并定义中断号。<br />添加: <br />//SP-A8没什么说的就是注册中断<br />#define SYSINTR_SERIAL1  (SYSINTR_FIRMWARE+19)<br />这里,我们可以看到SYSINTR_SERIAL1定义到16+19=35=0x23,与注册表中一致。<br />然后修改下这个地方:<br />MapIrq2Sy

2010-11-22 17:13:00 1283

原创 WinCE 触摸屏驱动开发详解

<br />1.触摸屏驱动程序的模型<br />1.1 分层触摸屏驱动层序结构<br />本触摸屏驱动采用分层驱动程序结构,其驱动模型如下图所示,这种结构将驱动程序代码区分为上层模型设备驱动层(MDD),下层是依赖平台的驱动层(PDD)。其中MDD层通常无需修改就可以直接使用,改部分提供面向GWES的DDI的接口,而MDD通过指定的DDSI函数接口调用PDD,这就是我们通常驱动要实现的部分。PDD部分和MDD部分除了DDSI函数集接口外,还要实现一些指定的变量的定义或变量初始化动作(比如,gIntrTouc

2010-11-22 17:10:00 1785 1

原创 wince驱动开发学习笔记

<br />首先是wince驱动的分类问题。按照书上讲的说CE下驱动分成单体驱动和分层驱动,而看到另一种说法是本机驱动和流式驱动。经过microsun大哥的指点,把这两种分类法分开了。在这里引用一下:<br />“单体与分层只是从代码的形式上做的分类.分层驱动代码上分为PDD与MDD,一般的微软已经实现了MDD,可能也实现了PDD,我们只需要对PDD做些修改就能使用,比如音频的驱动,显示的驱动。单层驱动是把PDD与MDD写在一起,没有做严格的区分,通常这种驱动比较简单,比如:ATADISK。<br />嵌入

2010-11-22 15:49:00 513

原创 堆和栈的区别 5

<br />HANDLE hHeap=GetProcessHeap();  <br />char *buff=HeapAlloc(hHeap,0,8);  <br /><br />其中hHeap是堆对象的句柄,buff是指向申请的内存空间的地址。那这个hHeap究竟是什么呢?它的值有什么意义吗?看看下面这段代码吧:  <br /><br />#pragma comment(linker,"/entry:main") //定义程序的入口  <br />#include <windows.h>  <br /><

2010-11-22 15:36:00 696

原创 堆和栈的区别 4

<br />;如果是“__cdecl”的话,这里是“ret”,堆栈将由调用者恢复  <br /><br />;-------------------函数结束-------------------------  <br /><br /><br />;--------------主程序调用func函数的代码--------------  <br /><br />:00401080 6A03 push 00000003 //压入参数param3  <br />:00401082 6A02 push 0000000

2010-11-22 15:34:00 695

原创 堆和栈的区别 3

<br />├———————┤低端内存区域  <br />│ …… │  <br />├———————┤  <br />│ 动态数据区 │  <br />├———————┤  <br />│ …… │  <br />├———————┤  <br />│ 代码区 │  <br />├———————┤  <br />│ 静态数据区 │  <br />├———————┤  <br />│ …… │  <br />├———————┤高端内存区域  <br /><br /><br />堆栈是一个先进后出的数据结构,栈

2010-11-22 15:33:00 495

原创 堆和栈的区别 2

<br />当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。  <br />堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。  <br /><br />2.6存取效率的比较  <br /><br />char s1[] = "aaaaaaaaaaaaaaa";  <br />char *s2 = "bbbbbbbbbbbbbbbbb";  <br />aaaaaaaaaaa是在运行时刻赋值的;  <br

2010-11-22 15:32:00 520

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除