458|5

5747

帖子

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”快去添加关注吧!

回复

38

帖子

1

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)



回复

4814

帖子

3

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);
};


回复

31

帖子

0

TA的资源

一粒金砂(中级)

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)接口上。


回复

130

帖子

0

TA的资源

一粒金砂(中级)

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

image-20230905000934-1.png  

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;
}

 


回复

7

帖子

0

TA的资源

一粒金砂(中级)

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 技术支持

相关文章 更多>>
推荐帖子
在现有的PCB板图上怎样加载网络标号?

大家好,请问一下,在PROTEL99SE中,我要在现成的PCB图上加网络标号,各接点加载之后,我想把已连好的线都转换过来,也就是说, ...

飞思卡尔智能汽车比赛

本来是要参加明天的飞思卡尔智能汽车比赛的,前段时间被老师叫去帮他完成一些东西,就退出来了。下面是一些飞思卡尔的资料,或许 ...

高效实时操作系统设计书籍下载(最终版)

本帖最后由 jorya_txj 于 2016-5-5 08:58 编辑 书免费的下载地址是: http://www.raw-os.org/help.html 大家好,我是raw-o ...

【 ST NUCLEO-G071RB测评】PWR

本次实验使用的NUCLEO-G071RB开发板由https://www.stmcu.com.cn/index.p ... /261/layout/product提供,更多相关资讯请进 ...

关于LWIP(LAN8720)网络发送数据的问题

在做系统测试的时候发现,LWIP(LAN8720)发送十六进制数据时,当发送的数据中有0x00时,网络就判断一串数据结束啦。 例如,发 ...

我这有两个DSN、brd原理图、PCB,谁可帮忙转下AD本版的

我这有两个DSN、brd原理图、PCB,谁可帮忙转下AD本版的,谢谢(平时用的都是AD,不想再装cendence了)

修个奇奇怪怪的HC-SR04

以前还在学校的时候,买过一批10来个超声波传感器。因为有一段时间才记起来,用的时候发现踩坑了,这批超声波传感器就是个垃圾货 ...

电磁波的特性

반사 (Reflection) 전자기파는 금속을 만나ǝ ...

[HPM-DIY]hpm6750 openmv移植成功,使用cherryusb作为repl交互

使用官方板子hpm6750evkmini,移植成功openmv,全新的Board支持,移植过程中学到不少东西,新鲜玩意就是好。 使用ses工程进 ...

【花雕动手做】有趣好玩的音乐可视化系列小项目(23)--3合1闪点光纤

偶然心血来潮,想要做一个音乐可视化的系列专题。这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不 ...

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