云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > TinyOS系统与nesC程序设计课内实验指导书

TinyOS系统与nesC程序设计课内实验指导书

  • 62 次阅读
  • 3 次下载
  • 2025/6/15 23:13:06

3、日志数据 可靠的记录事件或是小的数据项是一个普通应用程序的要求。当系统崩溃时,那些数据不应被丢失。我们可以线性的记录这些数据(当卷满时停止记录)或是循环的记录它们(当卷满时,把最不常用的数据项覆盖掉)。 TinyOS中LogStorage抽象支持这些需求。演示程序PacketParrot,向大家展示了如何使用LogWrite和LogRead抽象。它先将接收到的数据包写入日志,当下一个电力循环(power cycle)开始时,发送记录到日志的数据包,同时擦除日志。 (1)首先定义我们想要存储的日志结构:

typedef nx_struct logentry_t { nx_uint8_t len; message_t msg; } logentry_t; (2)与Config存储不同,Log存储不要求在应用程序中明确地挂载卷。一个简单的读命令就足够了。

event void AMControl.startDone(error_t err) { if (err == SUCCESS) { if (call LogRead.read(&m_entry, sizeof(logentry_t)) != SUCCESS) { // Handle error } } else { call AMControl.start(); } } (3)读出的数据长度如果与期望的相同,我们就把数据发送出去;如果不同,我们假设此日志是空的或是没有同步,将其擦除。

event void LogRead.readDone(void* buf, storage_len_t len, error_t err) { if ( (len == sizeof(logentry_t)) && (buf == &m_entry) ) { call Send.send(&m_entry.msg, m_entry.len); call Leds.led1On(); } else { if (call LogWrite.erase() != SUCCESS) { // Handle error. } call Leds.led0On(); } } (4)在接收事件中,我们把接收到的数据包及其长度记录到本地结构体中,然后调用LogWrite.append。 event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len){ call Leds.led2On(); if (!m_busy) { m_busy = TRUE; m_entry.len = len; m_entry.msg = *msg; if (call LogWrite.append(&m_entry, sizeof(logentry_t)) != SUCCESS) { m_busy = FALSE; } } return msg; } (5)在LogWrite.appendDone事件中,返回了源缓存地址,写数据的长度,以及数据是否有丢失,错误代码。若没有错误发生,则把要写的数据包原子的、连续的、一致的写入闪存。

event void LogWrite.appendDone(void* buf, storage_len_t len, bool recordsLost, error_t err) { m_busy = FALSE; call Leds.led2Off(); } 3、存储大的对象 块(block)存储常常用来存储大的数据对象,这些数据对象不能很好的在RAM中存放。Block是一个低层的系统接口,在使用它的时候需要非常小心。因为它是一个写一次模型,重新写需要耗费很长的时间。 具体可以到tinyos-2.x/apps/tests/storage/Blockj目录下,查看使用Block抽象的演示程序。 五 实验报告要求

①实验名称 ②实验内容说明 ③程序源代码

④实验步骤,实验中出现的问题,观察到的结果 ⑤实验总结

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

3、日志数据 可靠的记录事件或是小的数据项是一个普通应用程序的要求。当系统崩溃时,那些数据不应被丢失。我们可以线性的记录这些数据(当卷满时停止记录)或是循环的记录它们(当卷满时,把最不常用的数据项覆盖掉)。 TinyOS中LogStorage抽象支持这些需求。演示程序PacketParrot,向大家展示了如何使用LogWrite和LogRead抽象。它先将接收到的数据包写入日志,当下一个电力循环(power cycle)开始时,发送记录到日志的数据包,同时擦除日志。 (1)首先定义我们想要存储的日志结构: typedef nx_struct logentry_t { nx_uint8_t len; message_t msg; } logentry_t; (2)与Config存储不同,Log存储不要求在应用程序中明确地挂载卷。一个简单的读命令

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com