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

习惯了使用STM32CubeMX+FreeRTOS的组合,而为了使用阿里云IOT而移植AliOS-Things则显得有些大费周章,移植目标能够让c-sdk中的例程mqtt_example.c在 stm32上跑起来,硬件选择的是手头上的有的STM32f7+华为ME909 4G模块。

 

首先还是要把源文件手动添加到keil的工程里面,在添加完源文件,链接的时候我看到的这样的

Keil+STM32CubeMX+FreeRTOS+ME909移植C-SDK上Aliyun IoT_第1张图片

 

35个错误,刚开始我的心内是崩溃的,中间我曾考虑过要放弃... 

 

不过仔细看了下依赖的接口,都是HAL层的接口,没有出现太麻烦的平台依赖的接口, SDK在设计之初还是考虑到了移植性的问题,HAL接口分为两类,一类是操作系统层的锁,信号量,时间等资源,另一类是网络层的接口,收发数据等。

 

接下来主要是实现这些接口,好在STM32CubeMX生成的代码使用CMSIS标准接口,大多数SDK 中 HAL OS层的都能找到对应函数,只要实现一个接口封装就可以,添加了一个目录 iotkit-embedded\src\ref-impl\hal\os\cmsis_os,通过添加HAL_OS_cmsis.c文件实现了接口封装。

 

完成后再编译错误少了一大半,看到了希望... 但仍还有部分函数接口没有链接上。

 

Keil+STM32CubeMX+FreeRTOS+ME909移植C-SDK上Aliyun IoT_第2张图片

 

接下来主要是网络接口层的实现,通过ME909实现AT指令TCP连接上网

 

Keil+STM32CubeMX+FreeRTOS+ME909移植C-SDK上Aliyun IoT_第3张图片

网络层接口实现完成之后,终于到了激动人心的时刻,编译成功!!!

 

Keil+STM32CubeMX+FreeRTOS+ME909移植C-SDK上Aliyun IoT_第4张图片

 

下载程序,设备端修改自己的三元组,实现了一个温湿度传感器上报的设备,最终可以看下运行的打印信息和平台侧的效果

 

Keil+STM32CubeMX+FreeRTOS+ME909移植C-SDK上Aliyun IoT_第5张图片

Keil+STM32CubeMX+FreeRTOS+ME909移植C-SDK上Aliyun IoT_第6张图片

Keil+STM32CubeMX+FreeRTOS+ME909移植C-SDK上Aliyun IoT_第7张图片

 

 

 

     总的来说移植C-SDK还是很有工作量和难度的,但是相比移植和使用AliOS-Things,关键还可以继续使用自己比较熟悉的Keil+STM32CubeMX+FreeRTOS的组合,还是能达到比较令人满意的结果。

 

    另外Link Kit SDK C-SDK移植到MCU过程中,还是发现对于MCU有很多不太友好的地方,毕竟MCU的资源有限,比如堆栈深度要尽量小,而SDK中某些逻辑最大的堆栈深度已经达到了5632字节。另外最好少使用一些频繁动态内存分配,MCU中内存管理比较简单,频繁动态分配容易产生内存碎片,还有像realloc这种高级的接口最好不要用,很多RTOS不支持。希望后续SDK针对MCU可以专门做些优化。

 

 

欢迎拍砖,指正,更多信息请关注下方二维码 无人机开发者

 

Keil+STM32CubeMX+FreeRTOS+ME909移植C-SDK上Aliyun IoT_第8张图片

你可能感兴趣的:(IoT)