个人是从软件工程出身,现较成功转入嵌入式开发行业,在这里说说个人认为纯软件开发转嵌入式开发的需要知道的一些东西。
这个系列解答原来没有做过嵌入式的纯软件人才入门嵌入式可能存在的一些疑问。有些疑问并无关技术,而是知识欠缺一个引子。
还是以STM32为例。欢迎多多补充,多多提问,知无不言,希望你能找到你想要的答案。
先看一下一个嵌入式系统的整体构架:
Hardware :你能摸得到的东西,包括MCU 和各种外设。
硬件抽象层(HAL):它是代码层,将为内核、设备驱动程序和其它执行程序与特定的硬件差别隔离。这个术语多用于windows平台。我更倾向于将他归纳于BSP。
BSP:(board support package)板级支持包,可以将核心硬件,标准外设,扩展外设的硬件资源分配管理以及相关驱动归与此类。但是和我们平常所说的BIOS差别是比较大的,具体差异不做分析,读者自行搜索。
Application :应用层,这一层对于纯软件开发者来说应该是相当清楚,不多述。
嵌入式的开发现在基本都是分层开发,和应用系统的构架基本一致。
用软件工程中常说的来描述一下嵌入式从驱动至应用的开发:
大多数编程问题实际上都可以分成两部分:“需要提供什么功能(硬件功能)”(机制)和“如何使用这些功能”(策略)。如果这两个问题由程序的不同部分来处理,或者甚至由不同的程序来处理,则这个软件包更易开发,也更容易根据需要来调整。这些硬件功能需要封装成一个个的模块(即驱动程序),这些功能区分的越为细致,上层用户的策略就能越发灵活。驱动程序应该处理如何使硬件可用的问题,而将怎样使用硬件的问题留给上层应用。
一个个驱动就是提供机制,如何使用这些机制去实现最终的功能,可以是直接用这些功能,或者通过操作系统,在机制的基础上再提供一层更为好用的机制去实现系统功能。这是按照个人策略的选取。
硬件底层开发,需要基本硬件操作,如果需要高级操作(业务),只需要有序组合这些硬件功能。
基于系统(如linux,wince等)的驱动开发,需要符合对应系统的驱动规范,其他基本和裸机驱动开发类似。所以裸机是入门的基础。
理论说完说驱动开发的实际操作的流程:假设你的硬件开发平台完全正常,驱动开发你只需要做3件事情
1. 查到相应datasheet,仔细查阅,看懂相关的每一细节,一遍看不懂2遍,10遍100遍,但请记住你一定要把他啃下来。
2.看官方例程,网上查阅一些例子,知道每一个语句的意思,每行代码是为了一个什么功能而写的。
3.写自己的驱动程序,能参考的尽量多参考,特别是官方的实例。
下一篇:基于IAR系统的启动流程解析