前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TencentOS tiny 正式开源 | 极速上手探索体验

TencentOS tiny 正式开源 | 极速上手探索体验

作者头像
Mculover666
发布2020-07-16 11:19:45
1.9K0
发布2020-07-16 11:19:45
举报
文章被收录于专栏:TencentOS-tiny

文末是体验心得和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,用代码说话,开干!

  • TencentOS-tiny官网:

『https://cloud.tencent.com/product/tos-tiny』

  • TencentOS-tiny源码仓库:

『https://github.com/Tencent/TencentOS-tiny』

温馨提示:文末点击阅读原文可以直接跳转到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板是亲兄弟

,主控是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启动时有这样一句代码:

代码语言:javascript
复制
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,非常简洁,玩的很爽,而且是腾讯家的东西,后期要开发微信小程序也是非常方便的,都是自己的东西。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Mculover666 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. TencentOS-tiny 正式开源
  • 2. 文件目录架构概览
    • board文件夹
      • device文件夹
        • TencentCloud_SDK 上云组件
        • 3. 眼见为虚,上手为实
          • OS配置文件
            • BSP板级支持包
              • Keil工程 —— HelloWorld
              • 4. 初探 TencentOS-tiny
                • 工程架构
                  • TencentOS-tiny内核启动流程
                    • 板级初始化
                      • printf重定向到串口
                        • HelloWorld示例
                          • 编译代码
                            • 下载运行
                            • 5. 体验心得
                            相关产品与服务
                            区块链
                            云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档