当前位置: 主页 > 建站知识 > 软件开发

安卓游戏软件开发-话题引出咬金,你平时写单片机程序有抽象出硬件抽象层吗?

发布时间:2023-06-16 09:13   浏览次数:次   作者:佚名

安卓游戏开发大型游戏_开发安卓软件需要哪些东西_安卓游戏软件开发

1、聊一聊

今天跟大家推荐一首bug菌常听的歌曲>,歌曲的旋律一定是你熟悉的。歌名"Yellow"不要想Y了,Yellow表示颜色是黄色的意思,但也可表示胆怯、内敛,热情的。

在之前的文章中bug菌有提到过stm32的HAL层,而该层与安卓的硬件抽象层却迥然不同,相对而言stm32的HAL层更像是每个外设的驱动程序,所以这里bug菌把安卓HAL层的思想引到MCU中来跟大家聊聊!

安卓游戏开发大型游戏_开发安卓软件需要哪些东西_安卓游戏软件开发

2、话题引出

安卓游戏软件开发_开发安卓软件需要哪些东西_安卓游戏开发大型游戏

安卓游戏软件开发_开发安卓软件需要哪些东西_安卓游戏开发大型游戏

安卓游戏软件开发_安卓游戏开发大型游戏_开发安卓软件需要哪些东西

咬金,你平时写单片机程序有考虑抽象出硬件抽象层吗?

硬件抽象层 ? 你是说像stm32的HAL库那样子吗?

安卓游戏开发大型游戏_开发安卓软件需要哪些东西_安卓游戏软件开发

安卓游戏开发大型游戏_安卓游戏软件开发_开发安卓软件需要哪些东西

安卓游戏软件开发_开发安卓软件需要哪些东西_安卓游戏开发大型游戏

安卓游戏软件开发_安卓游戏开发大型游戏_开发安卓软件需要哪些东西

。。。,不是啦,stm32的HAL库我感觉还只能算个驱动程序吧,真正的HAL层得要像安卓那样。

安卓?

安卓游戏开发大型游戏_安卓游戏软件开发_开发安卓软件需要哪些东西

有点高大上呀,不敢碰!

安卓游戏开发大型游戏_开发安卓软件需要哪些东西_安卓游戏软件开发

安卓游戏开发大型游戏_安卓游戏软件开发_开发安卓软件需要哪些东西

安卓游戏软件开发_开发安卓软件需要哪些东西_安卓游戏开发大型游戏

开发安卓软件需要哪些东西_安卓游戏软件开发_安卓游戏开发大型游戏

没你想得那么可怕,知识都是互通的呀,最近接触这些东西感觉收获颇丰。而且现在MCU越来越强大,需要学习更多的设计思路了。

你真是个狠人呀!那你学的HAL层的思想大致跟我讲讲呗,让我也学习一下。

安卓游戏开发大型游戏_安卓游戏软件开发_开发安卓软件需要哪些东西

安卓游戏开发大型游戏_安卓游戏软件开发_开发安卓软件需要哪些东西

安卓游戏软件开发_开发安卓软件需要哪些东西_安卓游戏开发大型游戏

开发安卓软件需要哪些东西_安卓游戏软件开发_安卓游戏开发大型游戏

行,那我就露两手给你瞧瞧~

安卓游戏软件开发_开发安卓软件需要哪些东西_安卓游戏开发大型游戏

1

什么是HAL层 ?

1

Hal简介

HAL层又叫硬件抽象层,英文全名为(Hardware Abstraction Layer),从名字上就觉得高大上,就像字面意思这个层面会把所有的硬件都进行抽象,它就像一款万能的遥控器,可以操作所有的旧彩电、冰箱、洗衣机、空调、热水器......(怎么感觉像收废品的)。

开发安卓软件需要哪些东西_安卓游戏软件开发_安卓游戏开发大型游戏

(上图安卓框架源于网络)

上图是经典的安卓架构图,然而HAL层的提出最早并不是在Linux中出现,而是由Microsoft公司为确保WindowsNT的稳定性和兼容性而提出的,Microsoft发现直接操作硬件不仅会带来软件上的不兼容,而且对系统稳定性也是不利因素,所以就有了类似于虚拟机这样的HAL层。

2

win VS 安卓

Windows下的HAL层是位于物理硬件设备之上的,也就是说该HAL层直接操作底层寄存器,从而形成一套统一的HAL层接口给上层操作系统使用的,那么所编写的硬件驱动都需要满足HAL层的规范才能够被使用。

而对于安卓系统所实现的HAL却与win有所差异,大家可以看看前面安卓系统层次图,其HAL层位于操作系统内核和驱动程序之上,且位于用户空间。

那么为什么会形成如此的差异呢?

2

安卓HAL层实现思路

这里不会详细的讲解每一步是如何实现的,仅仅把系统的结构理顺一下,并且把关键的调用关系理一理,让系统HAL层设计的思想为我们所用,所以这里我们只分析三层与C程序关联更多的部分安卓游戏软件开发,HAL层以上均认为是应用层,如下图所示 :

安卓游戏软件开发_开发安卓软件需要哪些东西_安卓游戏开发大型游戏

1

应用层-->HAL层

2

HAL层-->底层寄存器

HAL层三大结构体 :

安卓游戏软件开发_安卓游戏开发大型游戏_开发安卓软件需要哪些东西

安卓游戏开发大型游戏_安卓游戏软件开发_开发安卓软件需要哪些东西

安卓游戏开发大型游戏_开发安卓软件需要哪些东西_安卓游戏软件开发

开发安卓软件需要哪些东西_安卓游戏开发大型游戏_安卓游戏软件开发

安卓游戏软件开发_开发安卓软件需要哪些东西_安卓游戏开发大型游戏

安卓游戏开发大型游戏_安卓游戏软件开发_开发安卓软件需要哪些东西

然而,从上面看来HAL层仅仅只是对硬件进行了抽象,并且其操作的还是系统调用,然而要操作具体的寄存器还需要通过系统调用进入到Linux内核以Open/Write/Read/Ioctl等等接口来进行操作,这一块又是操作平时的cdev和file_Operation结构套路了。

所以在HAL可以实现大部分的逻辑和命令处理,而对应的驱动程序相对比较单一,简单的配置和发送数据等即可,所以安卓的HAL层的最终目的中不仅仅满足了厂家驱动不想开源的想法,而且还达到了抽象底层硬件的目的。

3

HAL层在单片机上的应用

虽然在单片机中没有所谓的用户态和内核态,大部分情况也不需要动态加载,但是相关的抽象思想是完全可以模仿的,比如用C实现面向对象的继承方式;把系统抽象为模块和设备,比如一类音频模块包括USB音频设备,蓝牙音频设备等等;平台相关驱动和逻辑分离等等。

安卓游戏开发大型游戏_开发安卓软件需要哪些东西_安卓游戏软件开发

如上的module层可以认为是HAL层,我们可以在MCU中引入HAL的三大结构体,从而实现设备接口上的统一和抽象,当我们驱动层发生了变化,只需要重新编写出满足HAL层接口即可。

安卓游戏开发大型游戏_安卓游戏软件开发_开发安卓软件需要哪些东西

安卓游戏软件开发_安卓游戏开发大型游戏_开发安卓软件需要哪些东西

666,好像有点东西,我得再看一篇!

哈哈安卓游戏软件开发,慢慢啃吧!

安卓游戏开发大型游戏_开发安卓软件需要哪些东西_安卓游戏软件开发

安卓游戏软件开发_开发安卓软件需要哪些东西_安卓游戏开发大型游戏

3、结束语

文本到这里就结束了,单片机仅仅只是一个工具,思维的高度才会能决定代码的质量!

好了,这里是公众号:“最后一个bug”,一个为大家打造的技术知识提升基地,如果你喜欢交流可以添加下方bug菌微信,我拉你加入公众号技术交流群。

开发安卓软件需要哪些东西_安卓游戏软件开发_安卓游戏开发大型游戏

推荐好文点击蓝色字体即可跳转

安卓游戏开发大型游戏_开发安卓软件需要哪些东西_安卓游戏软件开发

安卓游戏软件开发_开发安卓软件需要哪些东西_安卓游戏开发大型游戏