原帖 | Jack | 2024-08-08 09:13 | 👍4 | 阅读约1
问:bsp层的目的之一是完全将硬件管理和业务逻辑分开吗?如果是的话,我有点没搞懂什么是硬件管理,什么是业务逻辑。比如,对于按键检测模块,它的短按、长按这些是硬件管理,还是业务逻辑?
答:
BSP层本来和业务层就是隔离的,BSP层往往包含HAL driver层和Handler层。HAL Driver层是非常直接的硬件操作的层,Handler层则是在有操作系统时才有的这一层。我们拿按键来举例子,按键按下(中断触发)被检测到,这部分都是按键的硬件管理(BSP中的HAL_Driver层)。按键按下后,将这件事(按下的时间、按下还是松开)告诉需要按键信息的APP,这部分就已经硬件无关了,它属于将硬件的情况向外发送的部分,这部分就是按键BSP中的(Handler层),这一层主要是解决适合操作系统的信号传输方式、栈隔离、调用链的确定性的问题。那么到这BSP的任务就基本做完了。
APP在接收到这些按键按下的时刻,按下的类型,就自己去做需要做的事情,比如,按下按键打开一个继电器,这就是纯粹的业务逻辑。
之所以这样分,其实还有在公司内工作分工的问题。
写APP的人和写BSP Driver的人很大可能根本不是一个人,那么对于BSP Driver,它需要提供的就是最原始的数据和最高效和稳定的硬件接口(最好是非阻塞的),写APP的人根据这些原始数据来判断是情况(按键为例,BSP层通过线程间通信让按键的数据顺序的,完整的发送给APP,那么写APP的人就会结合他对于业务的理解来理解什么是长按什么是短按,比如,写APP的人会遇到一个问题,有些时候,按键不仅仅有短按,长按,还有三连按,四连按,那这些都要写在BSP里吗?那BSP得多臃肿,而且这个BSP永远也无法完全穷尽所有可能。(双击/多击超时判定的具体实现见如果在按键中,我需要检测双击,也就是某段时间内再次按下,判定双击、多击等等)再比如,设备的使用者,对于长按和短按的理解也不一样,那怎么作区分,如果还是由BSP来那更是不可能了)。
相关笔记