TinyOS 點對點通訊

2021-10-09 21:42:00 字數 4000 閱讀 8683

1.1.2 amsenderc元件介面:packet

1.2 元件:amreceiverc

1.3 activemessagec

二、原始碼分析

虛擬化的活動訊息傳送抽象。 amsenderc的每個例項都有其自己的深度為1的佇列。 因此,它不必與佇列空間的其他amsenderc例項競爭。 基礎實現使用某種形式的公平共享佇列來排程這些佇列中的資料報。

cancel命令

getpayload命令

//inte***ce packet;

typedef nx_struct radio_count_msg radio_count_msg_t;

message_t packet;

radio_count_msg_t* rcm =

(radio_count_msg_t*

)call packet.

getpayload

(&packet,

sizeof

(radio_count_msg_t));

if(rcm ==

null

)rcm->counter = counter;

//修改payload的值

send命令

//inte***ce amsend;

typedef nx_struct radio_count_msg radio_count_msg_t;

message_t packet;

//定義packet

radio_count_msg_t* rcm =

(radio_count_msg_t*

)call packet.

getpayload

(&packet,

sizeof

(radio_count_msg_t));

//獲取指向packet中有效負載的指標

rcm->counter = counter;

//設定有效負載的值

if(call amsend.

send

(am_broadcast_addr,

&packet,

sizeof

(radio_count_msg_t)

)== success)

//傳送資料報packet

senddone事件

//inte***ce amsend;

message_t packet;

//省略了對packet的一些操作

event void amsend.

senddone

(message_t* bufptr, error_t error)

}maxpayloadlength命令簡介:基本訊息資料型別訪問器。 協議可以將附加的分組介面用於其協議特定的資料/元資料。

clear 命令 清理packet

getpayload命令 獲取有效負載

//inte***ce packet;

typedef nx_struct radio_count_msg radio_count_msg_t;

message_t packet;

radio_count_msg_t* rcm =

(radio_count_msg_t*

)call packet.

getpayload

(&packet,

sizeof

(radio_count_msg_t));

if(rcm ==

null

)rcm->counter = counter;

//修改payload的值

receive 事件
event message_t* receive.

receive

(message_t* bufptr,

void

* payload, uint8_t len)

}

這是stdcontol介面的分相副本。 它應用於在提供它的元件的開啟和關閉電源狀態之間切換。 對於每個start()或stop()命令,如果該命令返回success,則必須發出相應的startdone()或stopdone()事件的訊號。

命令 start()

啟動此元件及其所有子元件。

命令 stop()

停用此元件及其所有子元件。

事件 startdone

事件 stopdone

略這裡面定義了頻段cflags += -dcc2420_def_channel=14,設定自己的頻段避免與其他的裝置造成衝突干擾

cflags +

=-dcc2420_def_channel=

14include $(makerules)

#ifndef radio_count_to_leds_h

#define radio_count_to_leds_h

typedef nx_struct radio_count_msg radio_count_msg_t;

enum

;#endif

#include

"radiocounttoleds.h"

}implementation

傳送流程:

開機上電後,去開啟我們的無線通訊控制器

call amcontrol.start();

開啟無線通訊控制器成功後會開啟1s為週期的定時器,失敗則重新開啟無線通訊控制器。

定時器到達定時時間,廣播傳送乙個定義的不斷自增的計數器count的資料。

接收流程:

開機上電後,去開啟我們的無線通訊控制器

call amcontrol.start();

編寫接收事件函式

首先過濾有效負載長度不正確的資料

然後給有效負載的資料起個別名rcm,並轉化成我們定義的結構體型別。

最後根據rcm->counter 的方式讀出counter值,並根據counter執行相應操作。

#include

"timer.h"

#include

"radiocounttoleds.h"

module radiocounttoledsc @safe()

}implementation

event void amcontrol.

startdone

(error_t err)

else

} event void amcontrol.

stopdone

(error_t err)

event void millitimer.

fired()

else

rcm->counter = counter;

//am_broadcast_addr = 0xffff,表示廣播

// 0x0001,表示傳送給1號節點

if(call amsend.

send

(am_broadcast_addr,

&packet,

sizeof

(radio_count_msg_t)

)== success)}}

//傳送成功解鎖

event void amsend.

senddone

(message_t* bufptr, error_t error)

} event message_t* receive.

receive

(message_t* bufptr,

void

* payload, uint8_t len)

else

else

if(rcm->counter &

0x2)

else

if(rcm->counter &

0x4)

else

return bufptr;}}

}

點對點通訊

意義 乙個使用者給另外乙個使用者傳送訊息,給每個使用者存到dict中,username作為key,self作為value 這裡使用的是假username,vue中傳送的也是死資料,只是為了演示效果 實現 from channels.generic.websocket import websocket...

組通訊與點對點通訊

通訊子 communicator 是指一組可以相互傳送訊息的程序集合。集合通訊 collective communication 也叫組通訊,是指設計通訊子中所有程序的通訊函式。點對點通訊 point to point communication 函式對 兩個函式 之間的通訊。集合通訊和點對點通訊的...

用Visual Basic實現點對點通訊

使用tcp協議時,如果需要建立乙個客戶應用程式,就必須識別伺服器的名稱或ip位址。應用程式的通訊埠隨時都將仔細監測對方發出的訊息,這是系統進行可靠連線的保證。一旦連線發生,任何一方都可以通過senddata傳送和接收資料,並借助getdata把自己的資料分離出來。傳送資料時,需要先設定客戶機的loc...