2—学习笔记.驱动设计的思想

2020.12.2

学习到了更进一步的驱动设计的思想:

  1. 面对对象
  2. 分层
  3. 分离

面向对象部分:

字符设备驱动程序抽象出一个 file_operations 结构体

我们写的程序针对硬件部分抽象出 led_operations 结构体

其实也就是将所谓的事件给抽象出一个结构体,然后对这些结构体定义进我们需要的内容,来对这个事件进行控制,达到我们想要的效果,这部分在上一篇笔记里有。

分层的思想:

和上一篇笔记中所写的一样,初步分为两层:

控制层、硬件层

控制层表示做什么,怎么做;硬件层表示让谁做。我想要用单板A来点灯,现在换成单板B,我只需要修改硬件层即可。优秀的点灯工程师必备素质。

分离的思想:

就算是同一块单板,同一块芯片,说到底就是操作引脚或是操作各种寄存器,我们原本的分层是对不同单板做区分,便于修改,现在就是对于不同的引脚做区分,便于修改。

以面向对象的思想,在 board_A_led.c 中实现 led_resouce 结构体,它定义“资源”──要用哪一个引脚。仍实现 led_operations 结构体,它要写得更完善,支持所有 GPIO。

从代码来看:

*根据示例代码来看,也就是说在led_resource.h里定义一个led_resource结构体来存放引脚信息,并且通过对地址的宏定义来让地址的修改更加方便。

#define GROUP(x) (x>>16)
#define PIN(x)   (x&0xFFFF)
#define GROUP_PIN(g,p) ((g<<16) | (p))

然后在board_A_led.c里填充这个结构体,也就是指定我们要的所谓"资源"。

#include "led_resource.h"

static struct led_resource board_A_led = {
	.pin = GROUP_PIN(3,1),
};

struct led_resource *get_led_resouce(void)
{
	return &board_A_led;
}

最后在chio_dome_gpio.c里实现这个操作,将单板层面的修改和芯片引脚层面的修改都做到了进步

struct led_operations *get_board_led_opr(void)
{
	return &board_demo_led_opr;
}

有时间画个图梳理一下(逃

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值