社区
单片机/工控
帖子详情
如何看待HAL层
硬件拾遗
2020-08-26 09:17:37
例如,有个设备是IIC通讯,需要IO模拟IIC,可以定义hal_iic_init(),hal_iic_start(),然后设备驱动调用这些接口,如果这样,驱动层在HAL层之上,应用层不会调用HAL层,只会调用驱动层。
可如果设备是片上外设,比如ADC,如果定义hal_adc_init(),这时应用层直接调用HAL层,还是把ADC初始化放在驱动层,可如果放在驱动层,它就是一个初始化函数,感觉没什么意义。
...全文
12254
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
打赏
举报
回复
软件框架设计中,又遇到个问题:设备层和应用层如何数据交互?
高煥堂_免費視頻課程_Part_07_aa_
HAL
&Linux驅動框架
于此,将框架和设计模式应用于Linux驱动开发,说明了如何以面向对象、设计...其最直接的益处就是:让我们能基于一致的设计理念来结合Android
HAL
与Linux两
层
的驱动开发,规划出整体和谐Android-based软硬整合产品架构。
高煥堂_免費視頻課程_Part_07_bb_
HAL
&Linux驅動框架
于此,将框架(Framework)和设计模式(Design Pattern)应用于Linux驱动开发...其最直接的益处就是:让我们能基于一致的设计理念来结合Android
HAL
与Linux两
层
的驱动开发,规划出整体和谐Android-based软硬整合产品架构。
扩展Android框架功能和底
层
模块的技术要点_高焕堂.pdf
在Android系统架构中,CoreService扮演着连接
HAL
(硬件抽象
层
)驱动与上
层
框架API的重要角色。这个环节确保了硬件资源的高效利用,同时也为开发者提供了稳定的API界面。通过深入理解CoreService的工作机制,开发者...
Windows internals 5th
- **硬件抽象
层
(
HAL
)**:
HAL
使得操作系统能够在不同的硬件平台上运行。 - **设备驱动程序**:这部分详细介绍了设备驱动程序的设计原理及其在操作系统中的作用。 - **系统进程**:系统进程中包含了一些重要的后台...
非常实用的软件测试综合资料库
为了避免产生不正确的需求理解,开发形式化描述语言,如
HAL
/S等,这使得建立基于自然语言的描述成为可能,人们以形式化语言来描述需求;为了支持大型数据库应用,开发了可视化工具,如Visual Studio、Power Builder...
单片机/工控
27,518
社区成员
28,799
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章