上百篇原创人工智能系列教程,从理论到实战,手把手带你掌握人工智能,点击☞这里☜进入传送门~
文末有体验心得和RTOS比较,赶时间的小伙伴可以直接拉到文末哦~
1. TencentOS-tiny 正式开源
国产 RTOS 如雨后春笋般诞生的今天,腾讯于昨日正式开源发布了自己的物联网操作系统:TencentOS-tiny
,来看看官方怎么说:
TencentOS tiny是腾讯面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率。TencentOS tiny 提供精简的 RTOS 内核,内核组件可裁剪可配置,可快速移植到多种主流 MCU (如STM32全系列)及模组芯片上。而且,基于RTOS内核提供了丰富的物联网组件,内部集成主流物联网协议栈(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物联网终端设备及业务快速接入腾讯云物联网平台。
作为一个码农,我要这堆balabala的文字有何用???
Talk is cheap, Show me the code.
放上Github,用代码说话,开干!
2. 文件目录架构概览
TencentOS-tiny
的整个文件目录如图,嗯,是我熟悉的风格:
这个文件目录组织架构,普普通通,给个中肯的评价吧。
不过其中有几个特点倒是值得一提:
board文件夹
这个文件夹是 TencentOS-tiny 适配的开发板集合,这点做的非常好,开发者在移植完之后可以提交PR合并上去,避免后续开发者再进行重复的移植工作,到手就可以用,目前的情况还是和可观的,如图:
device文件夹
在这个文件夹中,可以看到 TencentOS-tiny 支持的通信模组设备还是很丰富的,覆盖了常用的 NB-iot 模组、WIFI模组、2G/4G模组、lora模组:
TencentCloud_SDK 上云组件
在 components/connectivity
这个文件夹中,可以看到 TencentCloud_SDK 上云组件,毫无疑问,腾讯自家的OS,肯定对自家的云平台支持性最好:
3. 眼见为虚,上手为实
这里我使用的是小熊派开发板,和官网EVK板是亲兄弟(斜眼笑.jpg),主控是STM32L431RCT6,刚好TencentOS-tiny/board中有移植好的,直接拿来用哈哈哈,先体验一下这个操作系统:
进入board/TencentOS_tiny_EVB_MX
:
OS配置文件
进入后即可看到 TencnetOS-tiny
系统的配置文件 tos_config.h
,同样,该OS使用宏定义开关来配置需要的模块,比如内核中的信号量、事件集、队列等等:
对于系统中一些重要的参数,也在宏定义中配置:
BSP板级支持包
对于开发板上的硬件,TencentOS-tiny并没有提供设备驱动框架,所以直接使用STM32CubeMX + HAL 库来操作板上硬件:
Keil工程 —— HelloWorld
这里我使用的是 Keil MDK 5.28
,所以进入 Keil 文件夹,进入后 TencentOS-tiny 提供了针对该开发板的很多示例工程,这点是我没有想到的,点个赞:
刚接触到 TencentOS-tiny,先来个 HelloWorld,直接上云的话,步子有点大,容易扯到…进入 hello_world
文件夹打开工程。
4. 初探 TencentOS-tiny
在上一步打开工程后,开始探索一下这个新系统~
工程架构
在MDK中整个工程架构还是很清晰的,如图:
TencentOS-tiny内核启动流程
这一点要值得赞赏,内核启动非常简洁,就是一个main函数:
板级初始化
先来看启动流程第一步:板级初始化。
该函数在mcu_init.c
文件中,因为我使用的板子是小熊派开发板,没有DHT11和OLED,只想串口打印HelloWorld,所以将需要的代码都屏蔽了:
printf重定向到串口
在 main 函数中,OS启动时有这样一句代码:
printf("Welcome to TencentOS tiny\r\n");
那么,TencentOS-tiny是如何重定向printf函数呢?
答案还是在mcu_init.c
:
如果想知道为什么实现这三个函数就可以将printf重定向到串口,可以参考我的这篇博客:【STM32Cube-09】重定向printf函数到串口输出的多种方法。
在代码中可以看到,printf函数被重定向到了串口2,因为这是其他开发板的支持包,不能更改实现代码,所以只能再找一个USB转串口,将小熊派的UART2连接到电脑上,如图:
HelloWorld示例
探索完OS是如何启动的之后,再来探索一下HelloWorld线程是如何创建的,打开hello_world.c
文件可以看到创建线程的代码非常简洁:
首先进行线程相关宏定义:
然后是线程主体函数:
最后是创建线程的函数:
那么,创建线程的函数如何执行呢?
别急,答案就在 main.c
中:
所以,当在hello_world.c
中定义了函数application_entry
时,main.c中弱定义的函数失效,系统就会执行用户定义的函数。
编译代码
接下来编译代码,编译之后的信息如下:
在map文件中看看:
我的天这代码写的也太简洁了吧好评!!!
下载运行
下载代码到开发板上,可以在串口助手中看到系统正常运行并打印结果:
至此,对 TencentOS-tiny 这个新的操作系统有所了解了吧哈哈,后续再来带大家玩玩上云,不然都对不起生它的腾讯爸爸~
5. 体验心得
总的来说,TencentOS-tiny给我的感觉还是很好的:
-
和云厂家的物联网操作系统相比(比如菊厂的LiteOS)
TOS显然做的很有优势,在board中适配了主流的一些开发板,极大的方便了开发者,并且在代码风格方面和裸机开发没太大的区别,代码量上也做的非常小。 -
和RT-Thread相比:
这个,,,没法比,拿轿车和卡车比,不在一个级别上。
最后给点建议,对于还没有深入学习RTOS的小伙伴,建议学习RT-Thread,生态非常完善,如果已经学习过RTOS,那么TencentOS-tiny非常值得一试,相对于LiteOS,AliOS,非常简洁,玩的很爽,而且是腾讯家的东西,后期要开发微信小程序也是非常方便的,都是自己的东西。
更多精彩文章及资源,请关注我的微信公众号:『mculover666』。