【FFH】小熊派驱动调用流程(以调用LED灯驱动为例) 原创 精华
一、流程总览
驱动调用的流程和纯代码开发的流程十分相似,本文着重点在于驱动调用的逻辑。
创建目录及相应源码文件–>编写驱动调用代码–>编写编译构建文件BUILD.gn–>编译烧录运行
二、源码目录结构
在./applications/BearPi/BearPi-HM_Micro/samples/目录下创建
my_led_app 源码目录
*my_led_app.c 驱动调用源码
*BUILD.gn 源码编译脚本
如图所示
三、编写驱动调用代码
在my_led_app.c中编写如下代码
这一部分是本文的重点部分
OpenHarmony的设备开发中的驱动调用与单片机的驱动开发不太相同,以往单片机的驱动调用往往是采用库函数调用的方式,但OpenHarmony的驱动调用采用的是驱动程序暴露出一个server,程序通过Dispatch发送指令的方式。有点类似与ROS的消息通信机制中的话题发布和订阅。在OpenHarmony中驱动调用的这部分程序属于用户程序,是用户态的内容,而驱动是内核态的内容。所以用户程序无法直接访问驱动,上面代码通过Dispatch向驱动程序发送指令从而实现LED灯的亮灭。
3.1 发送指令到驱动程序
我们看下my_led_app.c中SendEvent函数中通过Dispatch发送到驱动的代码
这段代码实现将指令发送到驱动程序
驱动程序指令接受的的代码在上一篇文章中的led.c驱动代码中的LedDriverDispatch函数
3.2 从驱动程序接受数据
刚刚实现了用户态向内核态发送指令,同理,内核态也可以向用户态发送数据。
让我们看看驱动代码中向用户发送LED状态信息的代码(在led.c中LedDriverDispatch函数的一部分)
下面是用户程序接收的部分
四、编写编译构建文件BUILD.gn
在BUILD.gn中添加以下代码
五、编译烧录
参考之前文章Linux下配置小熊派-鸿蒙·叔设备开发(南向)的开发环境
六、运行
串口连接小熊派终端
最近讲解小熊派的帖子也是越来越多了