社区
单片机/工控
帖子详情
如何看待HAL层
硬件拾遗
2020-08-26 09:17:37
例如,有个设备是IIC通讯,需要IO模拟IIC,可以定义hal_iic_init(),hal_iic_start(),然后设备驱动调用这些接口,如果这样,驱动层在HAL层之上,应用层不会调用HAL层,只会调用驱动层。
可如果设备是片上外设,比如ADC,如果定义hal_adc_init(),这时应用层直接调用HAL层,还是把ADC初始化放在驱动层,可如果放在驱动层,它就是一个初始化函数,感觉没什么意义。
...全文
12282
5
打赏
收藏
如何看待HAL层
例如,有个设备是IIC通讯,需要IO模拟IIC,可以定义hal_iic_init(),hal_iic_start(),然后设备驱动调用这些接口,如果这样,驱动层在HAL层之上,应用层不会调用HAL层,只会调用驱动层。 可如果设备是片上外设,比如ADC,如果定义hal_adc_init(),这时应用层直接调用HAL层,还是把ADC初始化放在驱动层,可如果放在驱动层,它就是一个初始化函数,感觉没什么意义。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
硬件拾遗
2020-08-30
打赏
举报
回复
首先感谢楼上的评论,希望大家多多提点意见,个人总有想不到的地方,众人拾柴火焰高。 楼上说分层基于操作系统,这符合传统的操作系统原理,因为最基本的原则,操作系统管理硬件,提供接口。不过我这里不打算以操作系统为核心,而是打算以设备为核心,原因有二,一是因为嵌入式主要还是要和各种硬件打交道,二是设备相对独立,天生可裁剪。而操作系统的功能,只保留任务调度和管理,而且是以服务的方式提供,还有信号量、消息队列、定时器等,以及各类软件功能,比如FIFO、CRC、PID等都以独立的服务方式提供。 关于重写这一点,说说我的真实经验吧,因为就像楼上说的,基本上不同的项目,程序我都是重新写过,说实话,是不大,写起来也不难。可这样每个程序都各具特色,就算相同的功能,实现也不一样,当然复制粘贴的除外,如果真的重写,今年和去年的想法还是会有点区别的。这也是我想设计一个程序框架的主要原因,因为如果都用一个框架,就算想法变了,可以算作框架的升级,这是一个持续的过程,不像在每个程序里的变动,杂乱无法延续。
fuchouzhe
2020-08-30
打赏
举报
回复
嵌入式系统的软件分层是有针对性的,基于裸机的编程和调度器(freertos,ucos等)还有专用的VxWorks、linux、wince的分层不会完全一致 一般来说,像控制软件大部分无界面,没有太多移植性要求,不要过度封装,例如将电压采集拆分成adc操作和输出电压计算两部分。 也许你会说,可以有片上ADC和SPI/IIC的ADC,但此时可以直接重写电压采集对应的文件。因为通常嵌入式系统软件规模不大,否则干脆像VxWorks或linux等系统直接写个驱动程序,还能实现动态加载。
硬件拾遗
2020-08-28
打赏
举报
回复
虽然数据来源于设备,但需要什么样的数据,如何处理数据却取决于应用层,不同的应用可能需要不同的数据,所以将所有的数据定义放在应用层。
数据交互以函数返回值方式或者形参的方式进行,形参可以是值传递或地址传递,具体选择哪一种,实践中再考虑。
主要原则:只在应用层定义数据。
硬件拾遗
2020-08-27
打赏
举报
回复
就在此记录一下对软件分层的思考吧。
采用面向对象的思想,不管是片上外设还是其他设备,每一个都看作是独立的设备,比如片上ADC1,ADC2这是两个设备,每个设备都有自己的驱动程序,因为这里以设备为中心,故将驱动层改为设备层,有的设备需要片上外设支持,比如IO操作,所以设备层里有个HAL层,对于片上外设,就没有HAL层。
强调一下,这里HAL层属于设备层,是设备驱动程序的一部分,移植的时候,修改HAL层即可。
硬件拾遗
2020-08-27
打赏
举报
回复
软件框架设计中,又遇到个问题:设备层和应用层如何数据交互?
HAL
层
简介
本文深入解析Android中的
HAL
层
,介绍了
HAL
层
的作用、发展历程及其在Android系统中的地位。通过具体示例,展示了
HAL
层
如何实现硬件抽象,以及如何通过
HAL
层
进行驱动开发。
拍照时闪光灯调用
HAL
层
到driver
层
流程
本文详细介绍了Android手机拍照时闪光灯从
HAL
层
到Driver
层
的调用流程,涉及
Hal
3AIf、
Hal
3AFlowCtrl、Thread3AImp等组件的实例化与初始化,以及StrobeDrvFlashlight的setOnOff方法,最终在KERNEL
层
通过led191系列函数控制闪光灯的开关。
【Android】
HAL
层
浅析
本文详细介绍了Android
HAL
(硬件抽象
层
)的设计理念、通用结构及其应用实例,特别是LED和Audio
HAL
模块的具体实现,帮助读者理解
HAL
如何连接内核与用户空间。
Android
HAL
层
浅析
本文深入解析Android系统的硬件抽象
层
(
HAL
)。
HAL
层
位于系统库
层
和Linux内核
层
之间,旨在将操作系统与硬件解耦。文章介绍了
HAL
层
的基本概念、旧的Module架构和新的Stub架构,重点分析了Stub架构如何解决代码重入和设备多次打开的问题,以及321架构的组成。
SBL中的
HAL
和DAL
层
本文介绍了SBL中的
HAL
和DAL
层
。
HAL
层
定义底
层
硬件操作,DAL
层
位于驱动和应用
层
之间。详细阐述了DAL框架
层
,包括设备关联、方法调用等;以TLMM为例介绍了
HAL
和DAL
层
设计方法;还说明了在UEFI中使用DAL的方式,如驱动注册、服务提供等。
单片机/工控
27,522
社区成员
28,798
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章