Keil+STM32CubeMX+FreeRTOS+ME909移植C-SDK上Aliyun IoT

習慣了使用STM32CubeMX+FreeRTOS的組合,而爲了使用阿里雲IOT而移植AliOS-Things則顯得有些大費周章,移植目標能夠讓c-sdk中的例程mqtt_example.c在 stm32上跑起來,硬件選擇的是手頭上的有的STM32f7+華爲ME909 4G模塊。

 

首先還是要把源文件手動添加到keil的工程裏面,在添加完源文件,鏈接的時候我看到的這樣的

 

35個錯誤,剛開始我的心內是崩潰的,中間我曾考慮過要放棄... 

 

不過仔細看了下依賴的接口,都是HAL層的接口,沒有出現太麻煩的平臺依賴的接口, SDK在設計之初還是考慮到了移植性的問題,HAL接口分爲兩類,一類是操作系統層的鎖,信號量,時間等資源,另一類是網絡層的接口,收發數據等。

 

接下來主要是實現這些接口,好在STM32CubeMX生成的代碼使用CMSIS標準接口,大多數SDK 中 HAL OS層的都能找到對應函數,只要實現一個接口封裝就可以,添加了一個目錄 iotkit-embedded\src\ref-impl\hal\os\cmsis_os,通過添加HAL_OS_cmsis.c文件實現了接口封裝。

 

完成後再編譯錯誤少了一大半,看到了希望... 但仍還有部分函數接口沒有鏈接上。

 

 

接下來主要是網絡接口層的實現,通過ME909實現AT指令TCP連接上網

 

網絡層接口實現完成之後,終於到了激動人心的時刻,編譯成功!!!

 

 

下載程序,設備端修改自己的三元組,實現了一個溫溼度傳感器上報的設備,最終可以看下運行的打印信息和平臺側的效果

 

 

 

 

     總的來說移植C-SDK還是很有工作量和難度的,但是相比移植和使用AliOS-Things,關鍵還可以繼續使用自己比較熟悉的Keil+STM32CubeMX+FreeRTOS的組合,還是能達到比較令人滿意的結果。

 

    另外Link Kit SDK C-SDK移植到MCU過程中,還是發現對於MCU有很多不太友好的地方,畢竟MCU的資源有限,比如堆棧深度要儘量小,而SDK中某些邏輯最大的堆棧深度已經達到了5632字節。另外最好少使用一些頻繁動態內存分配,MCU中內存管理比較簡單,頻繁動態分配容易產生內存碎片,還有像realloc這種高級的接口最好不要用,很多RTOS不支持。希望後續SDK針對MCU可以專門做些優化。

 

 

歡迎拍磚,指正,更多信息請關注下方二維碼 無人機開發者

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章