1177|5

6475

帖子

8

TA的资源

管理员

楼主
 

阅读打卡第三站:9-14章——《RT-Thread设备驱动开发指南》 [复制链接]

阅读小伙伴们@南若   @chrisrh @wakojosin @xiaolinen @damiaa   打卡第三站题目来啦:

预计阅读完《RT-Thread设备驱动开发指南》第9-14章可解答

  1. 在控制看门狗设备中可以实现哪些操作?
  2. 看门狗设备框架源码是如何添加到工程中的?对应哪个宏定义
  3. SDIO设备框架注册出来的sd设备,设备名是什么?
  4. 对接Touch框架时,如要返回触摸点的信息,需要对接到哪个接口上。

 


附上>>第二站打卡题目,官方给的答案供参考,你们答的如何?

1、I2C总线设备从机地址被定义在哪个设备结构中?

struct rt_i2c_msg

2、系统中存在SPI Bus之后,要执行什么操作才能增加一个SPI从设备?

挂载操作

3、不考虑系统内存,HWTIMER硬件定时器的个数可以是无限个吗?

和硬件MCU定时器一一绑定的,其可用的定时器数量受限于硬件MCU本身定时器的数量,一般在3~15个左右

4、pwm设备中,control方法中的arg代表什么?

arg是PWM设备的配置参数,对 PWM 设备操作时,需要传入的设置参数包括pwm设备的通道号、波形周期和脉冲宽度。高电平 占空比=pulse / period。参数类型定义如下所示,具体意义请看注释内容。

1 struct rt_pwm_configuration
2 {
3     rt_uint32_t channel; /* PWM 通道: 0-n */
4     rt_uint32_t period;  /* PWM 周期时间 (单位纳秒 ns) */
5     rt_uint32_t pulse;   /* PWM 脉冲宽度时间 (单位纳秒 ns) */
6 };

5、RTC驱动依赖libc库吗?

依赖

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

最新回复

1、RT_DEVICE_CTRL_WDT_GET_TIMEOUT(获取溢出时间);       RT_DEVICE_CTRL_WDT_SET_TIMEOUT(设置溢出时间);        RT_DEVICE_CTRL_WDT_GET_TIMELEFT(获取剩余时间);      RT_DEVICE_CTRL_WDT_KEEPALIVE(喂狗);      RT_DEVICE_CTRL_WDT_START(启动看门狗);      RT_DEVICE_CTRL_WDT_STOP(停止看门狗); 2、RT_USING_WDT 3、sdx 4、rt_size_t rt_touch_read(rt_device_t dev, rt_off_t pos, void *buf, rt_size_t len)   详情 回复 发表于 2023-9-13 09:30
点赞 关注
个人签名微信搜索公众号“EEWORLDBBS”快去添加关注吧!

回复
举报

81

帖子

3

TA的资源

一粒金砂(中级)

沙发
 

在控制看门狗设备中可以实现哪些操作?


获取/设置超时时间、获取剩余时间、喂狗、起停看门狗


看门狗设备框架源码是如何添加到工程中的?对应哪个宏定义


由RT_USING_WDT宏控制


SDIO设备框架注册出来的sd设备,设备名是什么?


设备名为sd,分区对应为sdx,x=0、1、2…


对接Touch框架时,如要返回触摸点的信息,需要对接到哪个接口上。


需要提供 rt_size_t (*touch_readpoint)(struct rt_touch_device *touch, void *buf, rt_size_t touch_num)


 
 

回复

6105

帖子

4

TA的资源

版主

板凳
 
本帖最后由 damiaa 于 2023-9-2 21:14 编辑

 1,在控制看门狗设备中可以实现哪些操作?

static rt_err_t wdt_control(rt_watchdog_t *wdt, int cmd, void *arg)
{
    switch (cmd)
    {
        /* feed the watchdog */
    case RT_DEVICE_CTRL_WDT_KEEPALIVE:
        if(HAL_IWDG_Refresh(&stm32_wdt.hiwdg) != HAL_OK)
        {
            LOG_E("watch dog keepalive fail.");
        }
        break;
        /* set watchdog timeout */
    case RT_DEVICE_CTRL_WDT_SET_TIMEOUT:
#if defined(LSI_VALUE)
        if(LSI_VALUE)
        {
            stm32_wdt.hiwdg.Init.Reload = (*((rt_uint32_t*)arg)) * LSI_VALUE / 256 ;
        }
        else
        {
            LOG_E("Please define the value of LSI_VALUE!");
        }
        if(stm32_wdt.hiwdg.Init.Reload > 0xFFF)
        {
            LOG_E("wdg set timeout parameter too large, please less than %ds",0xFFF * 256 / LSI_VALUE);
            return -RT_EINVAL;
        }
#else
  #error "Please define the value of LSI_VALUE!"
#endif
        if(stm32_wdt.is_start)
        {
            if (HAL_IWDG_Init(&stm32_wdt.hiwdg) != HAL_OK)
            {
                LOG_E("wdg set timeout failed.");
                return -RT_ERROR;
            }
        }
        break;
    case RT_DEVICE_CTRL_WDT_GET_TIMEOUT:
#if defined(LSI_VALUE)
        if(LSI_VALUE)
        {
            (*((rt_uint32_t*)arg)) = stm32_wdt.hiwdg.Init.Reload * 256 / LSI_VALUE;
        }
        else
        {
            LOG_E("Please define the value of LSI_VALUE!");
        }
#else
  #error "Please define the value of LSI_VALUE!"
#endif
        break;
    case RT_DEVICE_CTRL_WDT_START:
        if (HAL_IWDG_Init(&stm32_wdt.hiwdg) != HAL_OK)
        {
            LOG_E("wdt start failed.");
            return -RT_ERROR;
        }
        stm32_wdt.is_start = 1;
        break;
    default:
        LOG_W("This command is not supported.");
        return -RT_ERROR;
    }
    return RT_EOK;
}

喂狗、设置超时时间、获取剩余时间、起东看门狗

RT_DEVICE_CTRL_WDT_KEEPALIVE:
RT_DEVICE_CTRL_WDT_SET_TIMEOUT:
RT_DEVICE_CTRL_WDT_GET_TIMEOUT:
RT_DEVICE_CTRL_WDT_START:

 

看门狗设备框架源码是如何添加到工程中的?对应哪个宏定义

RT_USING_WDT

 

SDIO设备框架注册出来的sd设备,设备名是什么?

sdx 如sd0 sd1 sd2等

对接Touch框架时,如要返回触摸点的信息,需要对接到哪个接口上。

rt_size_t (*touch_readpoint)(struct rt_touch_device *touch, void *buf, rt_size_t touch_num);

 

struct rt_touch_ops
{
    rt_size_t (*touch_readpoint)(struct rt_touch_device *touch, void *buf, rt_size_t touch_num);
    rt_err_t (*touch_control)(struct rt_touch_device *touch, int cmd, void *arg);
};

 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(高级)

4
 

1,控制看门狗设备的操作有:(1)获取溢出时间:RT_DEVICE_CTRL_WDT_GET_TIMEOUT;(2)设置溢出时间:RT_DEVICE_CTRL_WDT_SET_TIMEOUT;(3)获取剩余时间:RT_DEVICE_CTRL_WDT_GET_TIMELEFT;(4)喂狗:RT_DEVICE_CTRL_WDT_KEEPALIVE;(5)启动看门狗:RT_DEVICE_CTRL_WDT_START;(6)停止看门狗:RT_DEVICE_CTRL_WDT_STOP。

2,宏定义为:RT_USING_WDT。

3,设备名:sdx,如:sd0,sd1...等。

4,需对接在rt_size_t (*touch_readpoint)(struct rt_touch_device *touch, void *buf, rt_size_t touch_num)接口上。

 
 
 

回复

181

帖子

1

TA的资源

一粒金砂(高级)

5
 

1、控制看门狗设备中,命令控制字可取如下宏定义值:

 

#define RT_DEVICE_CTRL_WDT_GET_TIMEOUT    (1) /* 获取溢出时间 */
#define RT_DEVICE_CTRL_WDT_SET_TIMEOUT    (2) /* 设置溢出时间 */
#define RT_DEVICE_CTRL_WDT_GET_TIMELEFT   (3) /* 获取剩余时间 */
#define RT_DEVICE_CTRL_WDT_KEEPALIVE      (4) /* 喂狗 */
#define RT_DEVICE_CTRL_WDT_START          (5) /* 启动看门狗 */
#define RT_DEVICE_CTRL_WDT_STOP           (6) /* 停止看门狗 */

 

2、看门狗设备框架源码添加到工程中在RT-Thread Settings的设备驱动程序中,选择WDT进行开启;对应宏定义在rtconfig.h为:#define RT_USING_WDT

 

3、SDIO设备框架注册出来的sd设备,设备名是什么?

sdx,例如:#define SD_DEVICE_NAME "sd0"

 

4、对接Touch框架时,如要返回触摸点的信息,需要对接到哪个接口上

应用层调用如下接口读取触摸点信息:

 

rt_size_t rt_device_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size);
//读取一个触摸点
rt_device_read(touch_dev, 0, read_data, 1) == 1
//读取五个触摸点
rt_device_read(touch_dev, 0, read_data, 5) == 5

驱动层函数如下,在设备register时进行接口函数对接:device->read = rt_touch_read;

 

static rt_size_t rt_touch_read(rt_device_t dev, rt_off_t pos, void *buf, rt_size_t len)
{
    rt_touch_t touch;
    rt_size_t result = 0;
    RT_ASSERT(dev != RT_NULL);
    touch = (rt_touch_t)dev;

    if (buf == NULL || len == 0)
    {
        return 0;
    }

    result = touch->ops->touch_readpoint(touch, buf, len);

    return result;
}

 

 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

6
 

1、RT_DEVICE_CTRL_WDT_GET_TIMEOUT(获取溢出时间);
      RT_DEVICE_CTRL_WDT_SET_TIMEOUT(设置溢出时间); 
      RT_DEVICE_CTRL_WDT_GET_TIMELEFT(获取剩余时间);
     RT_DEVICE_CTRL_WDT_KEEPALIVE(喂狗);
     RT_DEVICE_CTRL_WDT_START(启动看门狗);
     RT_DEVICE_CTRL_WDT_STOP(停止看门狗);
2、RT_USING_WDT
3、sdx
4、rt_size_t rt_touch_read(rt_device_t dev, rt_off_t pos, void *buf, rt_size_t len)

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表