查看: 2329|回复: 0

基于C++模板技术的1-wire总线编程

[复制链接]
  • TA的每日心情
    开心
    2014-2-20 10:23
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-10-31 16:51:21 | 显示全部楼层 |阅读模式
    分享到:
    这是一个比较简单的 1-wire 总线 C++ 模板库。这个库由 4 个部分组成:
    11-wire 协议链路层接口类:ow_t
    定义了 1-wire 协议的操作集合:reset, enum, touch。但这里没有具体实现这些操作。
    21-wire 器件枚举类:ow_enum_t
    实现了 enum 操作。
    31-wire 协议链路层实现类:owou_towobb_t
    在指定的数据链路层上实现了 reset touch 操作。
    owou = 1-wire over uart
    owobb = 1-wire over bit-banging
    41-wire 协议物理层类
    提供“链路层实现类”所需要的物理操作。
    得益于 C++ 的模板编程,这个 1-wire 库是非常灵活而高效的:它可以选择枚举、数据链路、以及实现数据链路的物理方法。
    例如示例中的定义:
    ds18b20_t<ow_enum_t<owou_t<owou_m48_t>>> ds18b20[8];
    表示了以 atmega48 uart 数据链路实现的 1-wire 总线,总线具有枚举功能,其上挂有多个 ds18b20 器件。
    ds18b20_t<owou_t<owou_m48_t>> ds18b20;
    表示了以 atmega48 uart 数据链路实现的 1-wire 总线,总线没有枚举功能,其上只有一个 ds18b20 器件。
    ds18b20_t<owobb_t<owobb_m48_pd0_t>> ds18b20;
    表示了用 atmega48 PORTD0 引脚,以 bit-banging 方法实现的 1-wire 总线,总线没有枚举功能,其上只有一个 ds18b20 器件。
    定义好后,就可以很方便的操作 1-wire 器件了。
    附件为 avrstudio 示例工程(需要 avr-gcc 4.3 以上)。

    owexample.zip (83.01 KB, 下载次数: 9)
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 20:18 , Processed in 0.112252 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.