<rt id="m4md3"></rt>
  • <bdo id="m4md3"><meter id="m4md3"></meter></bdo>
  • <label id="m4md3"></label>
      <center id="m4md3"><optgroup id="m4md3"></optgroup></center>
      產品分類

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

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

      LoRa開發4:移植Contiki

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

      (Operating System,操作系統):“它很復雜”,“沒必要”,“內存太小”,“有學習成本”,“要改變編程思維”,“可能不穩定”……然而,基于以下理由,我們強烈推薦移植一個小型OS:

      降低復雜度

      LoRa終端的復雜度其實比我們想象的要高:它需要驅動SX1278,這需要處理很多事件,如接收數據超時,接收數據錯誤等;它需要實現網絡算法,申請入網,主動上報,低功耗喚醒,斷網續連等;它需要管理本地設備,采集傳感器數據,控制閥門等。

      使用OS,可以將上述任務分解成多個進程,開發者專注于每個進程的實現,可以有效降低復雜度。

      復用組件

      LoRa終端一定有這樣的需求:射頻CAD偵聽到喚醒信號后,快速通知進程接收數據幀;需要一個軟定時器來靈活地延時和喚醒……這些系統組件,OS都提供,要知道,這些豐富的組件可是經過嚴格測試的。復用成熟穩定的組件是提高軟件生產力的有效手段,這方面,操作系統功不可沒。

      提高CPU效率

      當LoRa終端“等待射頻發送數據包完成”前,它無事可干;而其他進程希望得到CPU運行權,不用擔心,操作系統會完成調度,它會將“因等待而無事可干”的進程阻塞,而將CPU分配給“具備運行條件”的進程享用。

      移植性更好

      有一天,因為某種原因(需要更強大的計算能力,需要更低成本等)需要更換LoRa終端的MCU,有操作系統支撐的系統就輕松多了,因為應用軟件調用的是操作系統的API,它很少與硬件層直接打交道;基本上,只要將操作系統移植到“新MCU平臺”,軟件系統就OK了。

      2  Contiki是一個怎樣的OS?

      Contiki是少有能同時實現2個目標的操作系統:對內存要求極低,同時支持進程阻塞機制。8位單片機的RAM極為寶貴,幾KB都是很大了,一般的RTOS(FreeRTOS或uc/os-ii等)無法運行,而Contikil可運行良好;有些操作系統,如OSAL也在極少的RAM上可以運行,但是這種基于“狀態機”開發的機制,讓代碼很難理解,程序執行流在狀態中來回判斷和切換,讓邏輯更復雜。

      節能內存

      Contiki有一個巧妙的機制來實現進程的調度:當進程被阻塞時,OS記錄該進程的下一C語言行號;當進程繼續運行時,從記錄的C語言行號繼續運行。這種機制從2個方面極大節省內存:所有的進程共享一個棧,沒有上下文機切換。甚至在小于1KB內存的MCU上,Contiki都可以良好地運行。

      進程可以阻塞

      在Contiki系統中可以實現如下語句,進程發送無線電數據包,然后阻塞自己,直到發送完畢。這種“優雅”的機制,非常符合程序員思維,同時降低了開發的復雜度。

      SX1278Send(packetbuf_dataptr(),packetbuf_datalen());

      PROCESS_YIELD_UNTIL(RF_Tx_Done ==s_tRFResult);

      移植簡單

      如果僅使用Contiki的內核,只需要移植clock.c,即從MCU中找一個定時器來給etimer進程提供時鐘源。如果使用Contiki的網絡協議棧,需要按radio.c實現無線收發函數。

      豐富的網絡協議棧

      針對無線通信,Contiki提供3種MAC協議,還有RIME通信原語和RPL路由協議;針對TCP/IP,Contiki提供uIP協議棧,它支持IPv4和IPv6。

      3 怎樣移植Contiki?

      移植一個操作系統是指將它運行在給定的硬件平臺。因為Contiki是非可剝奪的OS,不用實現上下文切換(CPU的寄存器保存與恢復),因此它的內核移植特別容易,一般是實現2個定時器:etimer和rtimer。

      如果站在3萬英尺的高度,一個基于Contiki嵌入式系統的層次結構如下所示。

      考慮2種情況,首先需要升級Contiki更高版本的軟件,其次需要將Contiki移植到不同的硬件平臺。為了盡可能地減少升級和移植的工作量,增加了ports文件夾,ports目錄中文件與core目錄中文件低耦合。

      3.1 移植Contiki內核

      如果僅僅只移植Contiki的內核,那么還是比較容易的,一般說來只需要修改2個文件:clock.c和contiki-conf.h。

      clock.c有2個函數需要適配對應硬件平臺:

      void clock_init(void); 設置一定時器,每秒產生CLOCK_SECOND個tick;

      void SysTick_handler(void); tick中斷時遞增時間,檢測是否有超時事件;

      contiki-conf.h:設置contiki系統的一些參數,如:CLOCK_CONF_SECOND=100;

      3.2 移植rtimer

      3.2.1 rtimer用途

      Contiki系統引入rtimer可以滿足精準定時的需要,一些對時間極為敏感的模塊(如MAC協議)依賴于rtimer。和etimer的粗粒度(常見為100Hz)不同,rtimer是細粒度(常見為1kHz)定時器。

      3.2.2 rtimer移植

      移植rtimer比較容易,基于MCU實現rtimer-arch.c和rtimer-arch.h。

      需要特別注意,大多數定時器(尤其是8位MCU)位寬為16位,即MAX=65535, rtimer的頻率定為1kHz比較合理,它既可以保證比較好的精度(1ms),又具備65秒的滿量程,這可以適應大多數的應用需要。

      另外,大多數應用需要隨機撤銷和重啟動rtimer,它可以通過添加2個函數來實現:rtimer_arch_disable_irq()和rtimer_arch_enable_irq()。

      關于rtimer更多的原理與應用介紹,請鏈接:

      http://blog.csdn.net/jiangjunjie_2005/article/details/44947899

      4 怎樣應用Contiki?

      Contiki是標準ANSI C語言開發,調用API函數和系統組件和一般的OS無異。在進程函數中開發,以下三點需要注意:

      1.       自動變量不能跨越阻塞語句

      2.       不能使用switch語句

      3.       執行語句位于PROCESS_BEGIN()和PROCESS_END()之間

      詳細了解該規則,請參考《Contiki開發要點》:

      http://blog.csdn.net/jiangjunjie_2005/article/details/44725997

      從一個入門級的Contiki進行代碼,請參考《Contiki開發5:Hello, Contiki》:

      http://blog.csdn.net/jiangjunjie_2005/article/details/51921568

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

      參考分類:

      上一篇: LoRa開發3:終端驅動設計

      下一篇: LoRa開發5:發送隨機數據

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

      上一篇: LoRa開發5:發送隨機

      推薦產品

      更多
      主站蜘蛛池模板: 狠狠色丁香久久婷婷综合五月| 色综合久久中文字幕网| 色综合久久天天综合| 天天在线天天综合网色| 色偷偷亚洲第一综合网| 激情综合色五月六月婷婷| 九月丁香婷婷亚洲综合色| 久久综合精品国产二区无码| 亚洲国产综合专区电影在线| 亚洲欧洲国产综合AV无码久久| 亚洲国产成人精品无码久久久久久综合| 国产亚洲欧洲Aⅴ综合一区| 亚洲成综合人影院在院播放| 一本久道久久综合中文字幕| 天天综合网色中文字幕| 亚洲综合AV在线在线播放| 天天综合亚洲色在线精品| 亚洲Av综合色区无码专区桃色| 成人综合久久综合| 91精品国产综合久久四虎久久无码一级| 97se亚洲综合在线| 亚洲国产免费综合| 国产成人综合久久精品下载| 伊人yinren6综合网色狠狠| 亚洲伊人色欲综合网| 亚洲色偷偷综合亚洲AV伊人蜜桃| 亚洲综合视频在线观看| 一本色道久久88精品综合| 伊人久久大香线蕉综合电影 | 天天综合网色中文字幕| 色综合色综合色综合色欲| 国产亚洲综合成人91精品| 亚洲色欲久久久综合网东京热| 国产综合无码一区二区辣椒| 国产成人精品久久综合| 一本色道久久88精品综合| 国产综合色在线精品| 亚洲婷婷第一狠人综合精品| 亚洲综合色丁香婷婷六月图片| 成人综合久久综合| 久久精品国产91久久综合麻豆自制 |