產(chǎn)品分類

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

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

      LoRa點(diǎn)對(duì)點(diǎn)系統(tǒng)7 剖析核心代碼

      發(fā)布日期:2022-05-25 點(diǎn)擊率:26

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

      2 核心代碼邏輯

      有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)行。

      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:通過(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)行。

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

      參考分類:

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

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

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

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

      推薦產(chǎn)品

      更多
      主站蜘蛛池模板: 无码精品人妻一区二区三区影院 | 国产高清一区二区三区四区| 国产日韩精品一区二区在线观看播放 | 精品成人av一区二区三区| 国产丝袜无码一区二区视频| 无码国产精品一区二区免费16| 精品一区二区三区免费毛片 | 99精品国产高清一区二区麻豆| 熟女性饥渴一区二区三区| 日韩视频在线观看一区二区| 无码一区二区波多野结衣播放搜索| 日韩电影一区二区三区| 国内国外日产一区二区| 一区二区免费电影| 一区二区三区在线免费观看视频| 国产一区二区三区亚洲综合| 天海翼一区二区三区高清视频| 中文字幕无线码一区2020青青| 国产精品福利一区二区| 97久久精品无码一区二区| 日本一区频道在线视频| 无码人妻精品一区二区三区99性 | 制服中文字幕一区二区| 在线免费观看一区二区三区| 国产乱码精品一区二区三区四川人| 精品爆乳一区二区三区无码av| 亚洲综合在线一区二区三区| av一区二区三区人妻少妇| 无码日韩人妻av一区免费| 国产微拍精品一区二区| 国产高清视频一区二区| 国产一区风间由美在线观看| 国产乱码精品一区二区三区香蕉| 国产在线第一区二区三区| 国产一区二区三区免费视频| 中文字幕一区二区三区在线播放| 亚洲日韩精品一区二区三区无码| 无码国产精品一区二区免费模式| 精品国产a∨无码一区二区三区| 无码一区二区三区免费视频| 国产高清在线精品一区二区|