国产欧美综合在线区,正在播放少妇呻吟对白,初めての、黒人とFUCK,久久精品热在线观看85,少女高清免费观看片,久久亚洲中文字幕无码毛片,无码视频,男人天堂手机版在线2017,国拍自产精品福利区,嗯啊灬别停啊灬用力灬快,欧美高清videossexohd,欧美国产亚洲精品AV无码片多多,中国人做人爱视频,欧美精品精精品免费视频,在线观看人与动牲交视频,日本熟妇多毛XXXXX视频,亚洲欧美日韩国产制服另类

產(chǎn)品分類

當(dāng)前位置: 首頁 > 工業(yè)電子產(chǎn)品 > 其他電子產(chǎn)品 > IoT物聯(lián)網(wǎng) > IoT傳感器

類型分類:
科普知識
數(shù)據(jù)分類:
IoT傳感器

LoRa點對點系統(tǒng)7 剖析核心代碼

發(fā)布日期:2022-05-25 點擊率:35

線數(shù)據(jù)包外,還需要驅(qū)動射頻和響應(yīng)多種中斷信號。為此,我們列出該進(jìn)程的邏輯,并且剖析它的代碼。

2 核心代碼邏輯

有2個特別注意的地方:

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

2. RF緩沖區(qū)中有多個數(shù)據(jù)包時,給自身發(fā)poll消息,讓其他進(jìn)程有機會運行。

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:用戶需要發(fā)送RF數(shù)據(jù)包;

Line#2:將處于持續(xù)接收的RF設(shè)置休眠狀態(tài);

Line#3:通過SX1278發(fā)送該RF數(shù)據(jù)包;

Line#4:阻塞進(jìn)程,直到RF發(fā)送數(shù)據(jù)包完畢;

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

Line#6:射頻中斷服務(wù)程序發(fā)來消息:接收到數(shù)據(jù)包,或,接收錯誤;

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

Line#8:從RF緩沖區(qū)復(fù)制數(shù)據(jù)包到解析工作區(qū);

Line#9:檢查接收數(shù)據(jù)包的CRC16是否正確;

Line#10:交付接收數(shù)據(jù)給Comm2Trm進(jìn)程;

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

Line#12:如果RF緩沖區(qū)還有數(shù)據(jù)包,給自身發(fā)poll消息,允許Contiki調(diào)度其他進(jìn)程運行。

閱讀更多: LoRa實驗室, LoRa物聯(lián)網(wǎng)技術(shù)實戰(zhàn)

參考分類:

上一篇: LoRa點對點系統(tǒng)6 源代碼結(jié)構(gòu)

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

推薦產(chǎn)品

更多