打印
[AVR单片机]

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

[复制链接]
4981|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
john_lee|  楼主 | 2010-10-9 00:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个比较简单的 1-wire 总线 C++ 模板库。这个库由 4 个部分组成:
1、1-wire 协议链路层接口类:ow_t
定义了 1-wire 协议的操作集合:reset, enum, touch。但这里没有具体实现这些操作。
2、1-wire 器件枚举类:ow_enum_t
实现了 enum 操作。
3、1-wire 协议链路层实现类:owou_t,owobb_t
在指定的数据链路层上实现了 reset 和 touch 操作。
owou = 1-wire over uart
owobb = 1-wire over bit-banging
4、1-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

相关帖子

沙发
john_lee|  楼主 | 2010-10-19 15:16 | 只看该作者
没有一个人能发表一下意见吗?看来电工们玩C++确实太少了。

使用特权

评论回复
板凳
宇宙飞船| | 2010-10-19 15:25 | 只看该作者
C编译器就足够让人喝一壳了,单片机上连C库都很少用到,更别提用C++模板了。

使用特权

评论回复
地板
超级马夹| | 2011-1-6 21:23 | 只看该作者
横看直看,怎么觉得Hotpower是做了某MCU的代理了,或者是得了某代理的股份嘀,又或者是拿着工资上纲上线嘀?对其行无耻行为吐一口水,并远离之。

使用特权

评论回复
5
huangqi412| | 2011-1-7 12:27 | 只看该作者

使用特权

评论回复
6
hotpower| | 2011-3-16 14:49 | 只看该作者
首先俺声明至今没收过一分一文钱!
至于带工资上岗上线那是肯定的…
一个52岁的老农民,你作为一个领导又能对老农民期待什么呢?

使用特权

评论回复
7
hotpower| | 2011-5-6 16:02 | 只看该作者
哈哈,老师那天给他们look一下?

使用特权

评论回复
8
li923661521| | 2011-5-12 08:40 | 只看该作者
支持hotpower大叔!

使用特权

评论回复
9
岚369| | 2011-5-14 14:53 | 只看该作者
ding。。。

使用特权

评论回复
10
hotpower| | 2011-5-25 17:05 | 只看该作者
老师在cm0上的实现很精彩

使用特权

评论回复
11
dong_abc| | 2011-12-14 16:32 | 只看该作者
现在发现这是个好东西,顶。

使用特权

评论回复
12
zhyscout| | 2012-2-14 15:56 | 只看该作者
:lol

使用特权

评论回复
13
abin0415| | 2012-4-29 02:10 | 只看该作者
顶起来

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

1466

帖子

21

粉丝