第一范文网 - 专业文章范例文档资料分享平台

TinyOS 2.x 入门教程 - 图文

来源:用户分享 时间:2025/5/25 11:20:56 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

TinyOS Programming

下面我们来看一下模块BaseStationP的代码:

module BaseStationP @safe() { uses {

interface Boot;

interface SplitControl as SerialControl; interface SplitControl as RadioControl;

interface AMSend as UartSend[am_id_t id]; interface Receive as UartReceive[am_id_t id]; interface Packet as UartPacket;

interface AMPacket as UartAMPacket;

interface AMSend as RadioSend[am_id_t id]; interface Receive as RadioReceive[am_id_t id]; interface Receive as RadioSnoop[am_id_t id]; interface Packet as RadioPacket;

interface AMPacket as RadioAMPacket; interface Leds; } }

implementation {

enum {

UART_QUEUE_LEN = 12, RADIO_QUEUE_LEN = 12, };

message_t uartQueueBufs[UART_QUEUE_LEN];

message_t * ONE_NOK uartQueue[UART_QUEUE_LEN]; uint8_t uartIn, uartOut; bool uartBusy, uartFull;

message_t radioQueueBufs[RADIO_QUEUE_LEN];

message_t * ONE_NOK radioQueue[RADIO_QUEUE_LEN]; uint8_t radioIn, radioOut; bool radioBusy, radioFull;

task void uartSendTask(); task void radioSendTask();

void dropBlink() {

call Leds.led2Toggle(); }

void failBlink() {

call Leds.led2Toggle(); }

event void Boot.booted() { uint8_t i;

for (i = 0; i < UART_QUEUE_LEN; i++) uartQueue[i] = &uartQueueBufs[i]; uartIn = uartOut = 0; uartBusy = FALSE; uartFull = TRUE;

for (i = 0; i < RADIO_QUEUE_LEN; i++) radioQueue[i] = &radioQueueBufs[i]; radioIn = radioOut = 0; radioBusy = FALSE; radioFull = TRUE;

Page 46 of 94

TinyOS Programming

call RadioControl.start(); call SerialControl.start(); }

event void RadioControl.startDone(error_t error) { if (error == SUCCESS) { radioFull = FALSE; } }

event void SerialControl.startDone(error_t error) { if (error == SUCCESS) { uartFull = FALSE; } }

event void SerialControl.stopDone(error_t error) {} event void RadioControl.stopDone(error_t error) {} uint8_t count = 0;

message_t* ONE receive(message_t* ONE msg, void* payload, uint8_t len);

event message_t *RadioSnoop.receive[am_id_t id](message_t *msg, void *payload, uint8_t len) { return receive(msg, payload, len); }

event message_t *RadioReceive.receive[am_id_t id](message_t *msg, void *payload, uint8_t len) { return receive(msg, payload, len); }

message_t* receive(message_t *msg, void *payload, uint8_t len) { message_t *ret = msg; atomic {

if (!uartFull) { ret = uartQueue[uartIn]; uartQueue[uartIn] = msg; uartIn = (uartIn + 1) % UART_QUEUE_LEN; if (uartIn == uartOut) uartFull = TRUE; if (!uartBusy) { post uartSendTask(); uartBusy = TRUE; } } else dropBlink(); }

return ret; }

uint8_t tmpLen;

task void uartSendTask() { uint8_t len; am_id_t id;

am_addr_t addr, src; message_t* msg; atomic

if (uartIn == uartOut && !uartFull)

Page 47 of 94

搜索更多关于: TinyOS 2.x 入门教程 - 图文 的文档
TinyOS 2.x 入门教程 - 图文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1fkq86cfyf6msok1o3zn_13.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top