超碰激情 I 成人福利网站 I 淫国产 I 曰批视频免费30分钟成人 I 刘亦菲裸体视频一区二区三区 I 午夜久 I 尤物综合 I 亚洲一区av在线观看 I 欧美亚洲国产精品久久高清 I 欧美老熟妇乱子伦视频 I 无码中出人妻中文字幕av I 久久美女福利视频 I 精品无人区乱码1区2区3区在线 I 性饥渴的农村熟妇 I 色综合综合色 I 少妇人妻88久久中文字幕 I 久久夜色精品国产噜噜av I 老熟妇仑乱视频一区二区 I 男女做爰猛烈叫床视频动态图 I 日本大片一区二区 I 人成午夜免费视频在线观看 I 激情婷婷av I 男女下面一进一出免费视频网站 I 久久影视一区 I 午夜污网站 I 先锋人妻无码av电影 I 久久久久久久岛国免费网站 I 又粗又大又黄又硬又爽免费看 I 人妻无码免费一区二区三区 I www.色成人100 I 欧美高清网站 I 精品国产第一页 I 国产suv一区二区三区88区 I 橹图极品美女无圣光 I 午夜宅男欧美

產品分類

當前位置: 首頁 > 工業電子產品 > 其他電子產品 > IoT物聯網 > IoT傳感器

類型分類:
科普知識
數據分類:
IoT傳感器

LoRa點對點系統7 剖析核心代碼

發布日期:2022-05-25 點擊率:41

線數據包外,還需要驅動射頻和響應多種中斷信號。為此,我們列出該進程的邏輯,并且剖析它的代碼。

2 核心代碼邏輯

有2個特別注意的地方:

1. 如果RF_Rx_Error,需要重新啟動RF接收功能,以避免引發宕機錯誤;

2. RF緩沖區中有多個數據包時,給自身發poll消息,讓其他進程有機會運行。

3 剖析核心代碼

PROCESS_THREAD(NetworkProcess, ev, data)

{

uint8_t    byDataSize;

uint16_t    wCalcCRC16;

uint16_t    wSrcCRC16;

 

PROCESS_BEGIN();

 

SX1278Receive(0);

while(TRUE)

{

PROCESS_YIELD();

 

if (NETWORK_EVENT_TX_RF_PACKAGE == ev)                                                      1

{

wCalcCRC16= util_CRC16( s_stTxRFPackage.a_byBuf,

s_stTxRFPackage.byRFTxSize );

*(uint16_t *)&s_stTxRFPackage.a_byBuf[s_stTxRFPackage.byRFTxSize] =

wCalcCRC16;

 

SX1278SetSleep();                                                                                                       2

SX1278Send( s_stTxRFPackage.a_byBuf,

s_stTxRFPackage.byRFTxSize +sizeof(uint16_t));                               3

 

PROCESS_YIELD_UNTIL( RF_Tx_Done == s_tRFResult ||

RF_Tx_Timeout ==s_tRFResult );                                  4

 

SX1278Receive(0);                                                                                                       5

}

else                                                                                                                                6

{

if (RF_Rx_Error == s_tRFResult)

{

SX1278SetSleep();                                                                                                     7

SX1278Receive(0);

}

 

if (!IsRadioBufEmpty())

{

s_stParseRFBuf.bySize = GetRadioBuf(s_stParseRFBuf.a_byBuf,RF_FIFO_SIZE); 8

 

if (sizeof(uint16_t) < s_stParseRFBuf.bySize)

{

byDataSize = s_stParseRFBuf.bySize – sizeof(uint16_t);

wSrcCRC16 = *(uint16_t *)&s_stParseRFBuf.a_byBuf[byDataSize];

wCalcCRC16 = util_CRC16(s_stParseRFBuf.a_byBuf, byDataSize);

if (wSrcCRC16 == wCalcCRC16)                                                                             9

{

comm2trm_RxRFPackage(s_stParseRFBuf.a_byBuf, byDataSize);                     10

}

else

{

SX1278SetSleep();                                                                                                11

SX1278Receive(0);

}

}

 

if (!IsRadioBufEmpty())                                                                                               12

{

process_poll(&NetworkProcess);

}

}

}

}

 

PROCESS_END();

}

Line#1:用戶需要發送RF數據包;

Line#2:將處于持續接收的RF設置休眠狀態;

Line#3:通過SX1278發送該RF數據包;

Line#4:阻塞進程,直到RF發送數據包完畢;

Line#5:將RF切換到持續接收模式;

Line#6:射頻中斷服務程序發來消息:接收到數據包,或,接收錯誤;

Line#7:RF接收出錯,重新啟動RF接收功能,避免宕機錯誤;

Line#8:從RF緩沖區復制數據包到解析工作區;

Line#9:檢查接收數據包的CRC16是否正確;

Line#10:交付接收數據給Comm2Trm進程;

Line#11:如果數據包的CRC16錯誤,重新啟動RF接收功能,避免宕機錯誤;

Line#12:如果RF緩沖區還有數據包,給自身發poll消息,允許Contiki調度其他進程運行。

閱讀更多: LoRa實驗室, LoRa物聯網技術實戰

參考分類:

上一篇: LoRa點對點系統6 源代碼結構

下一篇: NB-IoT和LoRa使用頻譜比較

下一篇: PLC、DCS、FCS三大控

上一篇: NB-IoT和LoRa使用頻譜

推薦產品

更多