欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    依托面向接口编程开发思想,聚焦LED通用设计.doc

    • 资源ID:3382313       资源大小:21.50KB        全文页数:5页
    • 资源格式: DOC        下载积分:2
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要2
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    依托面向接口编程开发思想,聚焦LED通用设计.doc

    依托面向接口编程开发思想,聚焦LED通用设计周立功教授新书面向AMetal框架与接口的编程(上),对AMetal框架进行了详细介绍,通过阅读这本书,你可以学到高度复用的软件设计原则和面向接口编程的开发思想,聚焦自己的“核心域”,改变自己的编程思维,实现企业和个人的共同进步。第八章导读8.1 LED 通用接口>>> 8.1.1 定义接口1 接口命名am_led_setam_led_onam_led_offam_led_toggle2 接口参数3 返回值>>> 8.1.2 实现接口1 实现接口初探2 抽象的LED 设备类3 具体的LED 设备类前面定义的抽象LED 设备类中包含了两个抽象方法:pfn_led_set 和pfn_led_toggle。为了使用户可以通过LED 通用接口操作LED,就必须根据实际硬件连接,实现两个抽象方法,然后将具体设备添加到系统设备链表中。下面分别以GPIO 控制LED 的驱动实现和HC595 控制LED 的驱动实现为例,阐述LED设备驱动开发的一般方法,如果后续有其它类型的LED 控制电路,可以按照此方法添加自定义的LED 驱动。(1) GPIO 控制LED 的驱动实现具体LED 设备的核心功能是实现抽象设备类中定义的方法,首先应该基于抽象设备类派生一个具体的设备类,其类图详见图8.3。图8.3 具体设备类(GPIO)可直接定义具体的LED 设备类。比如:am_led_gpio_dev_t 即为具体的LED 设备类。具有该类型后,即可使用该类型定义一个具体的LED 设备实例:在使用GPIO 控制LED 时,需要知道对应的引脚信息和LED 点亮的电平信息,为了便于修改配置,这些信息往往由用户传递给驱动。此外,还需要提供LED 设备的ID 信息,包含起始ID 和结束ID,以确定的为设备中的每个LED 分配一个唯一ID。基于此,可以将需要由用户提供的设备相关信息存放到一个新的结构体类型中,将其作为需要由用户提供的设备信息。即:对于AM824_Core 的两个板载LED 来说,若编号为01,则可以使用该类型定义其对应的设备实例信息如下为了便于通过设备直接找到对应的设备信息,在设备类中往往直接维持一个指向设备信息的指针。即:显然,在使用GPIO 控制LED 前,引脚需要初始化为输出模式,此外,在完成初始化后,还需要将具体的LED 设备添加到系统中,便于使用通用接口操作LED。这些工作通常在驱动的初始化函数中完成,初始化函数的原型为:其中,p_dev 指向am_led_gpio_dev_t 类型的设备,p_info 为指向am_led_gpio_info_t 类型实例信息的指针,其调用形式如下:初始化函数的的实现详见程序清单8.12。程序清单8.12 初始化函数实现(GPIO 控制LED)程序中,首先通过LED 的起始编号和结束编号,得到了LED 的数目,由于GPIO 的引脚数目与LED 数目相等,因此,也就得到了GPIO 引脚的数目。然后将所有引脚配置为了输出模式,并根据是否为低电平点亮,初始时使所有LED 处于熄灭状态。最后,通过am_led_dev_add()函数,将具体的LED 设备添加到了系统之中。在添加LED 设备时,LED 的 ID 信息直接使用了设备信息中的ID 信息,抽象方法的实现使用了_g_led_gpio_drv_funcs 中实现的方法(其定义详见程序清单8.4),p_cookie 直接设置为了指向设备自身的指针,正因为如此,在抽象方法的实现中,p_cookie 参数即为指向设备自身的指针,可以通过p_cookie 得到具体设备相关的信息,如GPIO 信息等,进而实现LED 的相关操作,完善程序清单8.4 中实现的抽象方法,详见程序清单8.13。程序清单8.13 抽象方法的实现(GPIO 控制LED)在抽象方法的实现中,首先通过类型强制转换将p_cookie 转换为指向具体设备的指针。然后通过它找到相应的引脚信息,ive_low 不同时,则GPIO 输出1,恰好是异或关系。表8.3 GPIO 输出增值表为了便于查阅,如程序清单8.14 所示展示了LED 设备接口文件am_led_gpio.h 的内容。程序清单8.14 am_led_gpio.h 文件内容(2) HC595 控制LED 的驱动实现同样,首先基于抽象设备类派生一个具体的设备类,其类图详见图8.4,可直接定义具体的LED 设备类:am_led_hc595_dev_t 为具体的LED 设备类,当具有该类型后,即可使用该类型定义一个具体的LED 设备实例:图8.4 具体设备类(HC595)在使用HC595 控制LED 时,需要知道LED 和HC595相关的信息,如LED 点亮的电平信息和HC595 的数目。虽然MiniPort-595 只有一个HC595,但作为一个通用的驱动,应考虑到这些基础的扩展,以便驱动可以尽可能的支持更多的硬件电路。特别地,HC595 的每次输出都是完整的输出,如对于单个HC595,其每次输出都只能输出完整的8 位数据,不能单独输出1 位数据,而LED 的控制又是对单个LED 进行的,因此,为了在控制一个LED 时,不影响到其它LED,必须使其他位的输出保持不变,这就需要实时保存当前的输出,为了保存当前所有HC595 的输出信息,需要用户提供一个缓冲区,缓冲区的大小与HC595 的个数相等。此外,还需要提供包含起始ID 和结束ID 的ID 信息。基于此,可以将需要由用户提供的设备相关信息存放到一个新的结构体类型中,将其作为需要由用户提供的设备信息:对于使用MiniPort-595 和MiniPort-LED 联合使用的情况,共计8 个LED,若分配的编号为29,则可以使用该类型定义其对应的设备实例信息如下:同理,在设备类中需要维持一个指向设备信息的指针。此外,由于使用HC595 驱动LED时,需要使用HC595 的句柄handle 来传输数据,因此,用户还需要提供一个595 的句柄。handle 需要保存到设备中:注意,由于句柄往往需要通过动态的调用实例初始化函数获得,比如,HC595 的句柄可通过如下语句获得:而设备信息往往在系统启动后不会改变,可以定义为常量,因此,handle 往往由用户单独提供,不存放在设备信息中。显然,在使用GPIO 控制LED 前,需要完成设备中各成员的赋值,并熄灭所有LED,此外,在初始化完成后,还需要将具体的LED 设备添加到系统中。这些工作通常在驱动的初始化函数中完成,初始化函数的原型为:其中, p_dev 为指向am_led_hc595_dev_t 类型实例的指针, p_info 为指向am_led_hc595_info_t 类型实例信息的指针,其调用形式如下:初始化函数的的实现详见程序清单8.15。程序清单8.15 初始化函数实现(HC595 控制LED)首先将缓存中的值设置为使所有LED 熄灭的值,然后使用am_hc595_send()将缓存中的值输出,使所有LED 处于熄灭状态。最后,通过am_led_dev_add()函数,将具体的LED 设备添加到了系统之中。在添加LED 设备时,LED 的 ID 信息直接使用了设备信息中的ID 信息,抽象方法的实现使用了_g_led_hc595_drv_funcs 中实现的方法(其定义详见程序清单8.5),p_cookie 直接设置为了指向设备自身的指针,正因为如此,在抽象方法的实现中,p_cookie 参数即为指向设备自身的指针,可以通过p_cookie 得到具体设备相关的信息,如HC595 句柄,HC595 缓存等,进而实现LED 的相关操作,完善程序清单8.5 中实现的抽象方法详见程序清单8.16。程序清单8.16 抽象方法的实现(HC595 控制LED)在抽象方法的实现中,首先通过类型强制转换将p_cookie 转换为指向具体设备的指针。然后通过它找到相关的信息,进而实现LED 的相关操作。为了便于查阅,如程序清单8.17所示展示了LED 设备接口文件am_led_hc595.h 的内容。程序清单8.17 am_led_hc595.h 文件内容

    注意事项

    本文(依托面向接口编程开发思想,聚焦LED通用设计.doc)为本站会员(白大夫)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开