當(dāng)前位置: 首頁(yè) > 工業(yè)電子產(chǎn)品 > 其他電子產(chǎn)品 > IoT物聯(lián)網(wǎng) > IoT傳感器
發(fā)布日期:2022-05-25 點(diǎn)擊率:26
線數(shù)據(jù)包外,還需要驅(qū)動(dòng)射頻和響應(yīng)多種中斷信號(hào)。為此,我們列出該進(jìn)程的邏輯,并且剖析它的代碼。
有2個(gè)特別注意的地方:
1. 如果RF_Rx_Error,需要重新啟動(dòng)RF接收功能,以避免引發(fā)宕機(jī)錯(cuò)誤;
2. RF緩沖區(qū)中有多個(gè)數(shù)據(jù)包時(shí),給自身發(fā)poll消息,讓其他進(jìn)程有機(jī)會(huì)運(yùn)行。
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:通過(guò)SX1278發(fā)送該RF數(shù)據(jù)包;
Line#4:阻塞進(jìn)程,直到RF發(fā)送數(shù)據(jù)包完畢;
Line#5:將RF切換到持續(xù)接收模式;
Line#6:射頻中斷服務(wù)程序發(fā)來(lái)消息:接收到數(shù)據(jù)包,或,接收錯(cuò)誤;
Line#7:RF接收出錯(cuò),重新啟動(dòng)RF接收功能,避免宕機(jī)錯(cuò)誤;
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錯(cuò)誤,重新啟動(dòng)RF接收功能,避免宕機(jī)錯(cuò)誤;
Line#12:如果RF緩沖區(qū)還有數(shù)據(jù)包,給自身發(fā)poll消息,允許Contiki調(diào)度其他進(jìn)程運(yùn)行。
下一篇: PLC、DCS、FCS三大控
上一篇: NB-IoT和LoRa使用頻譜