首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

【OneOS学习笔记】设备驱动模型中的I2C

简介 OneOS 在各类外设的基础上抽象出了设备驱动模型,本文将围绕驱动模型来分析I2C驱动的实现过程。 I2C驱动以STM32为例,主要分析驱动模型中各层之间的调用关系。 OneOS设备驱动模型见OneOS 官网(https://os.iot.10086.cn)文档驱动部分。 I2C驱动总概 I2C驱动框架如下图所示: 从图中可以看出用户可以直接访问设备统一接口和I2C设备框架层的API。 驱动为I2C设备提供的API见下表: API 层 os_device_find 管理层 os_i2c_transfer 框架层 os_i2c_client_write 框架层 os_i2c_client_read 框架层 os_i2c_client_write_byte 框架层 os_i2c_client_read_byte 框架层 os_i2c_master_send 框架层 os_i2c_master_recv 框架层 对于不同芯片,管理层提供设备操作接口,框架层提供I2C这类设备通用的接口,驱动层提供具体芯片的I2C设备驱动程序。 STM32系列芯片I2C驱动实现过程: 设备注册: OneOS启动之后会进入到_driver_stm32_i2c_driver_init(),当执行初始化函数时,会调用到driver_match_devices()完成驱动和设备的匹配,匹配成功就会执行设备驱动层的stm32_i2c_probe()函数,在probe()函数中调用os_i2c_bus_device_register()函数,实现st的i2c设备注册到i2c总线设备中。在框架层的os_i2c_bus_device_register()函数,通过调用os_device_register()函数实现i2c总线设备挂载到内核设备链表上。 设备访问: 应用层通过find函数查找到设备,设备ops函数在框架层和驱动层实现,同一功能函数层层调用,调用关系如下: os_device_read_nonblock→i2c_bus_device_read(os_i2c_master_recv)→os_i2c_transfer→stm32_i2c_transfer(调用ST系列HAL库函数) os_device_write_block→i2c_bus_device_write(os_i2c_master_send)→os_i2c_transfer→ stm32_i2c_transfer(调用ST系列HAL库函数) os_device_control→i2c_bus_device_control→os_i2c_transfer()→stm32_i2c_transfer(调 用ST系列HAL库函数) 设备管理层 设备管理层实现了对设备驱动程序的封装,是所有设备通用的函数接口,I2C设备在管理层实现设备查找和注册。 查找设备:os_device_find() 函数原型:os_device_t *os_device_find(const char *name) 位置:drivers\device.c 参数:name(设备名称) 返回值类型:os_device_t(返回设备指针) 注:通过os_device_find()访问设备时,只在设备管理层实现。 os_device_find()根据传入设备的名称 "i2c1",通过定义os_list_for_each_entry遍历设备链表os_device_list查找设备;若查找到设备,返回相应的设备指针,否则返回空指针OS_NULL。 os_device_list的值来源于设备注册函数os_device_register()。 注册设备:os_device_register() 位置:drivers\device.c 参数:dev(设备指针),name(设备名称) 返回值类型:os_err_t 首先用os_device_find查找设备名是否已被注册过,如果已注册过,则返回无效参数的错误类型。 初始化基类对象,纳入对象容器实现设备的初始化,并通过os_list_add将设备结点添加到系统的设备链表里。 4、设备框架层 设备框架层对同类硬件设备驱动的抽象,将不同厂家的同类硬件设备驱动中相同的部分抽取出来,将不同部分留出接口,由驱动程序实现。 函数接口(API): 函数 功能 os_i2c_bus_device_find 根据I2C总线名称查找I2C总线设备 i2c_bus_device_control 控制I2C总线设备的特性 i2c_bus_device_write 将发送数据写入I2C总线设备 i2c_bus_device_read 读I2C总线设备接收的数据 os_i2c_master_recv I2C总线设备数据接收 os_i2c_master_send I2C总线设备数据发送 os_i2c_client_write I2C 主设备数据发送 os_i2c_client_read I2C 主设备数据接收 os_i2c_client_write_byte 使用cmd向I2C 主设备写入单字节数据 os_i2c_client_read_byte 根据cmd读取I2C主设备单字节数据 os_i2c_transfer 使用I2C设备传输消息 os_i2c_bus_device_register 注册I2C设备总线 主要作用: 这一层主要起到承上启下的作用,为上层应用提供统一的API,为下层驱动,提供注册函数。 实现设备ops函数:i2c_ops conststaticstructos_device_opsi2c_ops={ .read=i2c_bus_device_read, .write=i2c_bus_device_write, .control=i2c_bus_device_control }; 调用os_device_register函数将I2C设备注册到设备管理层。 5、设备驱动层 1、 实现设备ops功能函数stm32_i2c_transfer,对接底层硬件,调用STM32的HAL库。 2、 probe函数实现设备初始化,调用os_i2c_bus_device_register向框架层注册设备。 3、 调用probe函数的方法。 调用OS_DRIVER_INFO,将st_i2c的probe和name赋值给os_driver_info_t。 OS_DRIVER_INFOstm32_i2c_driver={ .name="I2C_HandleTypeDef", .probe=stm32_i2c_probe, }; #defineOS_DRIVER_INFOstaticOS_USEDOS_SECTION("driver_table")constos_driver_info_t os_driver_info_t结构体定义如下: typedefstructos_driver_info { char*name; int(*probe)(conststructos_driver_info*drv,conststructos_device_info*dev); }os_driver_info_t; 在设备进行初始化时会将stm32_i2c_driver作为OS_DRIVER_DEFINE的参数,调用驱动和设备匹配函数,让driver逐一与device_table中的device对应的driver进行比较,直到找到相同的driver即匹配完成,之后将device和driver传递给probe完成设备注册。

优秀的个人博客,低调大师

uexam v3.8.0 发布,在线教育学习考试系统

学之思简介: 学之思开源考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持 web 端和微信小程序,能覆盖到 pc 机和手机等设备。 支持多种部署方式:集成部署、前后端分离部署、docker 部署。 本次更新内容: 1. 升级前端node版本至16,兼容v12-v16版本 2. 升级element ui框架版本 3. 修复微信小程序兼容问题 4. 修复部分系统登录失败问题 5. 接口、教程文档更新 学生端功能: 模块 介绍 登录 用户名、密码 注册 年级、用户名、密码 任务中心 管理员发布的年级任务,每个学生只能做一次 考试 题干支持文本、图片、数学公式、表格等,学生答题支持:文本 固定试卷 可重复练习、自行批改的试卷 时段试卷 在时间限制内,可重复练习、自行批改的试卷 考试记录 查看答卷记录和试卷信息 错题本 答错题目会自动进入错题本,显示题目基本信息 个人信息 显示学生个人资料 更新信息 修改个人资料、头像 个人动态 显示用户最近的个人动态 消息中心 用于接收管理员发送的消息 管理端功能: 模块 介绍 登录 用户名、密码 主页 试卷总数、题目总数、用户活跃度、题目月数量 学生列表 显示系统所有的学生,新增、修改、删除、禁用 管理员列表 显示系统所有的管理员,新增、修改、删除、禁用 学科列表 学科查询、修改、删除 学科创编 创建学科 试卷列表 试卷查询、修改、删除 试卷创编 创建的试卷为时段试卷、固定试卷、任务试卷 题目列表 题目查询、修改、删除 题目创建 题目支持单选题、多选题、判断题、填空题、简答题,题干支持文本、图片、表格、数学公式 任务列表 任务查询、修改、删除 消息列表 显示已发送的消息,消息已读人数等信息 消息发送 发送消息给多个用户 用户日志 显示所有用户日志 个人资料 显示管理员用户名、真实姓名 时间线 显示管理员创建时间 修改资料 修改姓名、手机号 小程序功能: 模块 介绍 登录 用户登录登出功能,登录会自动绑定微信账号,登出会解绑 注册 年级、用户名、密码 任务中心 管理员发布的年级任务,每个学生只能做一次 考试 题干支持文本、图片、数学公式、表格等,学生答题支持:文本 固定试卷 可重复练习、自行批改的试卷 时段试卷 在时间限制内,可重复练习、自行批改的试卷 考试记录 查看答卷记录和试卷信息 错题本 答错题目会自动进入错题本,显示题目基本信息 个人信息 显示学生个人资料 更新信息 修改个人资料、头像 个人动态 显示用户最近的个人动态 消息中心 用于接收管理员发送的消息

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册