習慣了使用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可以專門做些優化。
歡迎拍磚,指正,更多信息請關注下方二維碼 無人機開發者