社区
单片机/工控
帖子详情
如何看待HAL层
硬件拾遗
2020-08-26 09:17:37
例如,有个设备是IIC通讯,需要IO模拟IIC,可以定义hal_iic_init(),hal_iic_start(),然后设备驱动调用这些接口,如果这样,驱动层在HAL层之上,应用层不会调用HAL层,只会调用驱动层。
可如果设备是片上外设,比如ADC,如果定义hal_adc_init(),这时应用层直接调用HAL层,还是把ADC初始化放在驱动层,可如果放在驱动层,它就是一个初始化函数,感觉没什么意义。
...全文
12296
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
层
简介
简介:
HAL
层
又称硬件抽象
层
,
HAL
层
在Android体系中有着深远的意义,因为Android究竟是完 全开源还是完全不开源的秘密就在这一
层
·Google将硬件厂商的驱动程序放在这一
层
,正是因为 这一
层
的代码没有开源,所以Android被Linux家族删除.本章将详细介绍
HAL
层
的基本知识, 为本书后面的驱动开发和移植打下坚实的基础 1、认识
HAL
层
HAL
层
(硬件抽象
层
)是位于操作系统内核与硬件电路之间的接口
层
,其目的在于将硬件抽象 化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬.
【Android】
HAL
层
浅析
一、
HAL
层
的前世今生 二、
HAL
层
的通用结构剖析 三、一个例子 四、击破Audio
HAL
Module 五、小的总结 一、
HAL
层
的前世今生
HAL
(Hardware Abstraction Layer),硬件抽象
层
。由于部分硬件厂商不想把自己的核心代码公开,如果把代码放在内核空间里就需要遵循GUN License,会损害厂家的利益。所以,Google为了响应厂家在A...
拍照时闪光灯调用
HAL
层
到driver
层
流程
文章目录@[toc]
HAL
层
HAL
层
闪光灯调用具体函数执行流程
Hal
3AIf::getInstance的实现
Hal
3AFlowCtrl::getInstance的实现
Hal
3AFlowCtrl::init的实现IThread3A::createInstance的实现Thread3AImp::createInstance的实现Thread3AImp::Thread3AImp的实现Thread3AIm...
Android
HAL
层
浅析
1)、
HAL
层
是上
层
应用对底
层
硬件操作屏蔽的一个软件
层
次,就是上
层
应用不必关心底
层
硬件具体是如何工作的,只需要调用底
层
提供的统一接口即可。
HAL
层
对接具体的硬件bsp接口,比如视频接口、收音机接口、网络接口、spi接口等。
HAL
层
就是为了把操作系统和硬件解耦。Linux驱动一般由访问硬件代码和业务逻辑代码两部分组成。Linux内核提供了标准的读写硬件的方法,只需要调用Linux提供的标准函数即可。而Linux驱动的业务逻辑对厂商或个人来说是保密的。例如,缓冲区的设置等。2)、。来描述。①、.........
SBL中的
HAL
和DAL
层
短语解释:
HAL
:Hardware Abstraction Layer DAL:Device Abstraction Layer DDI:Device Driver Interface
HAL
层
定义底
层
硬件操作,而DAL
层
位于驱动和应用
层
之间,DAL API定义在DDI文件中,应用
层
调用DDI接口使用驱动提供的服务; 1. DAL框架
层
DAL
层
为每个设备分配一个De
单片机/工控
27,522
社区成员
28,798
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章