在上一节课中我们了解了一些OneOS系统架构的知识,那么在本节课中我们将以两个任务来学习下如何在OneOS系统下驱动IIC设备,并且使用邮箱来处理数据。
知识锦囊
设备驱动模型

嵌入式软件通常需要操作各类外设(片内、片外),而外设的种类、操作方法纷繁复杂。
OneOS在各类外设的基础上抽象出了设备驱动模型,有效提高了代码可复用性、可移植性,模块分层解耦,降低了各层的开发难度。
设备驱动特点
下层向上层提供统一的访问接口
分层设计,屏蔽硬件差异
每一层只跟其相邻的层建立联系
设备驱动模型
设备驱动模型分为:系统调用接口、设备管理层、设备框架层、设备驱动层
设备管理层
设备管理层实现了对设备驱动程序的封装,向上对接系统调用接口。
设备框架层
设备驱动框架层是对同类硬件设备驱动的抽象,将不同厂家的同类硬件设备驱动中相同的部分抽取出来,将不同部分留出接口,由驱动程序实现。
设备驱动层
设备驱动层是一组驱使硬件设备工作的程序,实现访问硬件设备的功能,它负责创建和注册设备。
实践操作
任务一:IIC读取三轴加速度传感器
在OneOS中想要使用IIC设备,我们只需要调用对应的函数即可,我们接下来尝试一个示例。
该示例是使用OneOS的IIC设备读取功能来读取三轴加速度传感器的值。
我们打开OneOS的以下路径“OneOS_Wio_LTE\projects\Seeed_atsamd21g18a\application”找到“I2C_LIS3DHTR.c”代码。
该代码的主要逻辑是:
1.获取设备IIC地址
2.读取IIC数据
3.发送数据
我们先将三轴加速度传感器连接到开发板的IIC端口,然后参考第12课中的“任务一”来编译烧录OneOS系统的方法完成代码的上传,然后同样使用MobaXterm连接到串口,在命令行界面中输入“ lis3dhtr soft_i2c1 ”来运行代码。
代码成功运行后,你可以在命令行看到三轴加速度数据的输出;
如果想要更改程序的运行命令你可以在I2C_LIS3DHTR.c代码中的第343行自定义。
你也可以通过OneOS的API和函数来实现对其他IIC设备的驱动。详细的参数请参考以下页面:
https://os.iot.10086.cn/doc/api_refer/driver/i2c.html
任务二:使用邮箱发送/读取数据
简介
邮箱是一种特殊的任务间通信机制,邮箱每次可以传递固定字节大小的邮件,并且邮箱有,可以知道一定数量的邮件。邮箱没满的情况下,可以一直往邮箱里面发送邮件,邮箱满了可以选择超时等待;邮箱有邮件的超时下,可以从邮箱里面接收邮件,如果没有邮件,可以选择超时等待。在本机中,邮件的大小固定为 4 字节,所有可以直接发送 32 位数据。在 32 位系统上,一个邮件大小是 4 字节,所以用邮箱来发送探测,而收发邮件都可以按照相同的去寻找方法寻找想法的内容,就可以达到发送各种类型数据的功能。
使用示例
该代码位于OneOS的以下路径“OneOS_Wio_LTE\projects\Seeed_atsamd21g18a\application”中的“SR_email.c”代码。
该代码的主要逻辑是:
1.获取设备IIC地址
2.读取IIC数据
3.使用邮箱循环发送传感器数据
4.使用邮箱一直接收传感器数据
同样的我们先将三轴加速度传感器连接到开发板的IIC端口,然后参考第12课中的“任务一”来编译烧录OneOS系统的方法完成代码的上传,然后同样使用MobaXterm连接到串口,在命令行界面中输入“ LIS_mb_email soft_i2c1 ”来运行代码。
然后我们就可以在命令行中看到程序运行结果了。
你也可以通过OneOS的API和函数将邮箱功能使用在其他任务上。详细的参数请参考以下页面:
https://os.iot.10086.cn/doc/api_refer/kernel/mailbox.html
