嵌入式系统开发经验谈:Windows CE开发都做些什么

2024-01-01 13:48

本文主要是介绍嵌入式系统开发经验谈:Windows CE开发都做些什么,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我在博客的个人简介里说过我目前在从事基于Windows CE的BSP开发,这方面的文章到现在连一篇都没写过,似乎有些说不过去。老板肯定在犯嘀咕了,这小子不干正事儿,整天玩什么外啊挂啊的。接下来,我得整 两篇。以前我都想把文章写的跟论文似的,枯吧干燥,累人累己,以后我就胡乱侃了,一家之言,对不对的凑合着看吧。
Windows CE的文章前面写过几篇,看的人不多,可能是因为搞嵌入式系统相比桌面软件和WEB开发的人少的多,搞基于Windows CE的嵌入式系统的更少。当然更大的可能是我的文章写得不好,枯燥,太细节化。
进入现在这家公司之前我一直在做Windows平台的桌面软件开发,什么后台数据处理、中间件、界面,甚至外挂都做过,对嵌入式系统所知甚少,仅有的记忆 是在本科做毕业设计时玩过的一点儿东西:Windows CE 3.0,还有Motorola的什么PPSM和DragonBall。硬件方面,不要说USB协议分析仪、硬件仿真器、温湿度实验箱这些高级玩意儿,我连 逻辑分析仪、脉冲发生器都没听说过;软件方面,Windows CE长什么样子基本上没概念,嵌入式系统开发包含哪些方面也一无所知。记得面试的笔试题中有一道是让画出Windows CE的虚拟内存布局,我当然不会,就按照自己对XP的理解画了一个(不过回过头来看,我当时画的可是现在新鲜出炉的CE6的内存布局啊,哈哈)。更好笑的 是面谈的时候老板介绍工作内容时频频提到BSP一词,我完全不知道是什么意思,还虚心请教了一把。你看我这个嵌入式白痴稀里糊涂的就这么搞起了嵌入式开 发,而且还是嵌入式系统的底层开发。
嵌入式系统开发入门难不难,从桌面软件开发转入嵌入式系统开发容不容易?我想这可能是很多桌面软件开发程序员想问的问题,我当年也深受其扰。人在涉及自己 不熟悉的领域时总是感觉不自信,这个很正常。现在这一步跨过去了,回过头来再看,发现桌面软件开发也好,嵌入式系统开发也好,其实并无多大区别。有一种说 法讲得好:程序=数据+算法。在嵌入式系统里,数据还是那些数据,算法也还是那些算法,不同的只是细节。有些人说,搞嵌入式系统,要会数字电路、模拟电 路,要学会看原理图,等等。说实话,这些东西自从大学毕业还给老师后,我到现在也没学会,没感觉到有什么障碍。当然搞懂这些也不是什么问题,只是我觉得没 有必要-有专门的硬件工程师负责,何必操这心呢你说是不是。废话一大堆,我的意思是说,桌面软件开发和嵌入式系统软件开发并无太大区别,对于熟手来说互相 转行很容易。当然,要想做底层开发的话,C/C++熟练是必须的,少数情况下还要懂汇编。老板可以招一个嵌入式白痴,但肯定不会招C/C++白痴。所幸的 是之前我的C/C++以及汇编能力都还不错-R/E(逆向工程)搞多了汇编不熟练都不行啊wuhaha。
在我看来,基于Windows CE的嵌入式系统开发(其他的基于通用嵌入式操作系统如VxWorks、Embedded Linux等的软件开发我想也差不多)可以分成四类。
第一类是应用程序开发。这在Windows CE上几乎就和桌面Windows没差别,什么C runtime/MFC/.NET framework/COM/DCOM/SOCKET/SOAP/SQL/MSMQ全都有,不过好像没有JRE(Java Runtime Environment),呵呵。所以如果你入了桌面Windows开发的门也就等于入了Windows CE开发的门。
第二类是驱动程序开发。这也容易理解,比如说你们家做网卡的,得给它写驱动吧。编程语言自然是C/C++。Windows CE下的设备驱动程序和桌面Windows不一样,不过特简单,就是普通的运行在用户态的WIN32 DLL(CE6开始驱动程序也可以运行在核心态)。所以按我说,CE下的设备驱动程序开发不用入门,你会写桌面Windows的DLL程序的话CE的驱动 开发就已经入了门。
第三类是CSP(Chipset Support Package)开发。和通用CPU不同的是,嵌入式CPU的芯片上除了CPU核外,一般还会根据CPU的市场定位集成一些外围电路,比如LCD controller、USB host controller等,所以很多嵌入式CPU如Intel的PXA27x系列其实是SoC(System on Chip)。既然是CPU核加上一些外围设备(peripherals),CPU厂商就得为这些外围设备提供相应的代码支持,包括完整的驱动程序或操作原 语集(primitives)。这些代码集合起来就是CSP。
第四类是BSP开发,就是我目前在做的。BSP全称叫Board Support Package,Board可以理解成PC的主板。一般来说嵌入式系统的主板都是根据产品需要定制的,比如说可能有定制的键盘、某个厂商的LAN chip,802.11b/g chip等等,不一而足。BSP的目标是让嵌入式操作系统能够在你自己定制的板子上稳定运行,并支持所有你要的外围设备。具体开发又可以分为三块: boot loader、OAL(OEM Adaptation Layer)和设备驱动程序的集成。boot loader相当于PC的BIOS加XP的ntldr(NT loader),负责引导操作系统内核。OAL相当于Windows XP的HAL(硬件抽象层),主要任务是初始化硬件、中断处理和实现OEM特定的IOCTL(比如数字签名机制)。最后一块是设备驱动的集成,注意我这里 说的是集成不是开发。做BSP开发会接触到很多类硬件,光CPU的开发者手册就有上千页,我目前为止玩过的外围设备不完全统计就有:PCMCIA/CF、 USB(包括OHCI、UHCI、EHCI,前两个是USB 1.1后一个是USB 2.0)、PS/2、LCD controller、SD/SDIO、Flash memory、802.11b/g、I2C、AC97等等。这些硬件规范随便哪个都有几百上千页的,把这些SPEC统统研究一遍再自己写driver,那 黄花菜都凉了,没法做,即使做出来也很难保证有Product Quality。所以一般的做法是驱动程序由专门的外围设备厂商提供,BSP开发者结合具体的板子、参考相关SPEC做一些修改。当然如果你想用FPGA 鼓捣个printer controller,那只好自己写驱动了。 

这篇关于嵌入式系统开发经验谈:Windows CE开发都做些什么的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/559436

相关文章

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

在 Windows 上安装 DeepSeek 的完整指南(最新推荐)

《在Windows上安装DeepSeek的完整指南(最新推荐)》在Windows上安装DeepSeek的完整指南,包括下载和安装Ollama、下载DeepSeekRXNUMX模型、运行Deep... 目录在www.chinasem.cn Windows 上安装 DeepSeek 的完整指南步骤 1:下载并安装

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.