摘要: 确切地说,歌词显示并不是一件很困难的事情,并且实现的方式也多种多样,所以本文只讨论其中一种可能的实现。 本文所要探究的歌词显示类似于MTV的形式,同屏显示双行歌词。当任意一行歌词的显示超过限定的时间,则自动切换。 总体上来说,关键点有两个: 1.获取当前曲目的时间; 2.歌词的存储和获取。 首先我们来看第一点。如果要显示歌词,首要必须知道当前播放的位置。如果播放器是采用DShow写的,那么获取当前时间则是一件非常简单的事情: IMediaSeeking::GetCurrentPosition(pllPos) 返回的是一个LONG LONG类型,单位为100ns,足够用来表示文件的播... 阅读全文
posted @ 2012-06-26 18:30 nsoft 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 和桌面清一色的采用explorer不同,嵌入式设备更多的采用是自定义的简单UI,即使是含有explorer的wince也是如此。因为对于嵌入式设 备而言,功能强大并不是主打,简单易用才是根本。以目前国内的手持车载设备为例,大部分的公司卖的都是硬件,利润很大一部分取决于硬件成本的多寡。并且, 每个系列的产品都会有不同的外围器件,而这也决定了无法所有的产品都用同一个UI程序。 虽然UI程序无法使用同一个,但从总体上而言,基本上是相同的;最有可能不同的地方无非是界面多了某些按钮,调用某些功能而已。另一方面,UI程序往往也需要配合产品的外观,风格尽可能和外观相符合。 于是由此,基于可重用性考虑,嵌.. 阅读全文
posted @ 2012-06-26 18:28 nsoft 阅读(989) 评论(0) 推荐(0) 编辑
摘要: 用过串口进行开发的朋友应该都知道,串口驱动是一个典型的独占设备。简单点来说,就是在成功地调用CreateFile打开串口之后,没有通过CloseHandle进行关闭,是无论如何都不能再次调用CreateFile来再次打开相同的串口。有的朋友可能会觉得莫名奇妙,为什么微软要在这上面做限制呢?但其实从另一个角度来讲,微软这么做是非常有道理的。以接收数据为例子,在驱动里面会有一定的缓存,用来保留一定量的数据。当通过ReadFile来获取数据时,驱动就会将缓存给清空,然后再继续接收数据。如果串口不是独占设备,可以多次打开,那么在读取数据上面就会有问题:应该什么时候才清空缓存?比方说,其中一个线程通过R 阅读全文
posted @ 2012-06-26 18:25 nsoft 阅读(451) 评论(0) 推荐(0) 编辑
摘要: 相对于硬件来说,软开关的软件代码更为简单,只需要检测DETECT_KEY即可。该功能的实现主要是通过GPIO,而wince并没有对GPIO 做上层定义,并且每款CPU的GPIO的操作方式又各自不同,所以本文无法给出一个完整可用的代码,只能用伪代码作为示例讲解。虽然是伪代码,但对于了解 其流程还是有一定的意义。void Power_On(){ ... //设置GPIO_SHDN为high SetGPIO_HIGH(GPIO_SHDN); ...}DWORD PWR_IntrThread(PVOID pParam){ .... //使能中断 EnableInterrupt(); //初始化... 阅读全文
posted @ 2012-06-26 18:07 nsoft 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 添加应用程序到WinCE的开始菜单中应该是一个比较常用的功能,在产品定制的时候,添加本产品的应用到StartMenu中,让用户可以方便启动程序,下面就来介绍一下:先说一下原理,其实在WinCE启动以后,点击Start,然后点击Programs,里面所能看到的应用其实也都是以文件的形式存放的,它们存放在/Windows/Programs目录下面,都是一些快捷方式文件,这些快捷方式文件连接了真正的应用程序,就这么简单。理解了这个原理,也就清楚该怎么做了,步骤如下:1. 更改project.bib文件,添加应用程序,这里以Hello, world为例如下:hello.exe d:/WINCE600/ 阅读全文
posted @ 2012-06-26 18:04 nsoft 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 介绍一下WinCE系统声音的定制。说白了,就是设置注册表。WinCE系统启动的开机音乐,点击触摸屏以及键盘输入的按键音,还有系统运行过程中的各种声音其实都是在注册表里面预先设置好的。这里做个简单介绍:整个WinCE系统声音注册表设置如下:[HKEY_CURRENT_USER/ControlPanel/Volume]"Key"=dword:10002"Screen"=dword:10002"Mute"=dword:7"Volume"=dword:99999999[HKEY_LOCAL_MACHINE/Snd/Sche 阅读全文
posted @ 2012-06-26 16:54 nsoft 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 在WinCE下面,创建工程,然后编译是需要花很长时间的。当我们第一编译完工程以后,如果需要改我们的驱动或者BSP,我们是不需要重新编译整个工程的:1. 如果更改了driver,以WinCE6.0为例,我们可以在菜单里面选择“build”->“Open ReleaseDirectory in Build Window”,然后在弹出的命令行窗口中,通过dos命令切换到你要编译的driver的目录下面,然后运行“build”就可以了。也可以运行 “build -c”会强制把所有的文件都编译一遍。被编译后的driver的dll会被自动拷贝到release目录下面,然后再切换的工程的release 阅读全文
posted @ 2012-06-26 16:53 nsoft 阅读(136) 评论(0) 推荐(0) 编辑
摘要: S3C64xx系列的应用处理器芯片是三星主推的,三星目前推出了S3C6400和S3C6410,都是基于ARM11架构的,而且硬件管脚兼容,应该说大致的功能基本相同,比较明显的区别就是S3C6410带有2D/3D硬件加速。大致看了一下,S3C6410是一个强大的应用处理器,我不是在这里做广告,呵呵,因为我正在使用它,有了它,可以做很多东西。下面,我对S3C6410做个简单介绍,该芯片大小为13x13mm,424管脚,芯片架构如图:ARM Core:采用ARM1176JZF-S的核,包含16KB的指令数据Cache和16KB的指令数据TCM,ARM Core电压为1.1V的时候,可以运行到553M 阅读全文
posted @ 2012-06-26 16:50 nsoft 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 我所说的ARM裸板调试是指ARM的PCB板制作完后,贴片回来的板子,不但没有任何程序,上电都是第一次。之所以写一篇blog,是因为最近调试了一块ARM板,基于S3C6410的,但是我们把原来的M-DDR DRAM和Nandflash全部都换掉了,硬件做了不小的改动。以前也做过类似的裸板调试,从ARM7到ARM9,再到现在的ARM11。今天就来写一篇ARM裸板调试的文章。如我前面所说,刚拿到ARM裸板的时候,首先就是要上电。不过上电之前,最好测一下电源和地是否短路。然后就可以上电了,我一般采用稳压电源,这样可以看到电流的大小,如果电流太大,说明硬件可能有问题,用手摸摸板子上的芯片,看看是否烫手, 阅读全文
posted @ 2012-06-26 16:49 nsoft 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 目前的ARM处理器都支持多种启动模式,S3C6410和以前的Samsung的ARM处理器一样,通过外部管脚OM[4:0]的拉高拉低来决定是从哪个存储设备上启动。我认为S3C6410的User Manual并没有说的很清楚,所以我在最开始使用的时候,也对其启动模式有一些误解,下面就我个人的理解,介绍一下S3C6410的启动。先读一下S3C6410 User Manual的第3章 System Controller,在123页列了一张表,如图:这章表列出了S3C6410所支持的几种启动模式。首先介绍一下和启动模式相关的硬件管脚:OM[4:0]:选择启动设备及时钟源。OM[0]为0选择XXTlpll 阅读全文
posted @ 2012-06-26 16:48 nsoft 阅读(201) 评论(0) 推荐(0) 编辑