今天在浏览CSDN的推送的时候猛然发现一个消息,说是腾讯开源了新型RTOS
TecentOS Tiny!!!
github地址:https://github.com/Tencent/TencentOS-tiny
看到这个消息自己顿时就就不淡定了,当即放下了手中所有的活,开始着手移植这个今天刚刚开源的国产RTOS。在仔细看完了一些关于TecentOS的一些介绍后,我更不淡定了,我顿时就产生了一个想法:这简直就是物联网的明天!这么优秀的一款操作系统在今天之前我竟然从来没有听说。腾讯似乎搞得非常低调。
在全面上云的背景下,物联网设备也不例外。借助TencentOS tiny提供的更简单的软件接口,亿级物联网设备上云的门槛降降进一步降低,从而帮助物联网开发者能够更便捷的使用云端海量的计算、存储资源,以及先进的AI和大数据算法模型,有效支撑众多前沿物联网技术在智慧城市、智能家居、智能穿戴、车联网等行业的加速落地。
随着TencentOS tiny的开源,结合腾讯云物联网开发平台IoT Explorer,加上之前已经建设完成的国内最大规模LoRa网络,腾讯云物联网已经彻底打通从芯片通讯开发、网络支撑服务,物理设备定义管理,数据分析和多场景应用开发等一站式、全链条IoT云开发服务能力,物联网开发将变得更为简单、高效。
相比国外那些老牌的RTOS,腾讯这款新的RTOS有着它自己独特的优势。
本来以为,刚刚出现的操作系统移植怎么着,都得经历九九八十一难吧,谁知道这一次的移植,竟然出乎意料的顺利,腾讯已经几乎把板级支持帮我们全部做好了。
来看一下BSP的支持目录。
有没有看到自己熟悉的公司啊。没错他已经把正点原子的开发板的板级支持给做好了,竟然将适配做到了具体的一款产品,我不得不惊叹一句:腾讯牛逼。
算了就不继续吹牛了,开始移植。
(一)硬件软件说明:
单片机选型:STM32F429正点原子阿波罗开发板
下载方式:JLINK SWD下载
(二)操作步骤
1)选择正点原子的随便一个DEMO工程,这里我选择的是SD卡的工程
2) 准备TencentOS tiny的源码
TencentOS tiny的源码已经开源,github下载地址为:https://github.com/Tencent/TencentOS-tiny.git
一级目录 二级目录 说明
arch arm TencentOS tiny适配的IP核架构
board ALIENTEK_STM32F429移植目标芯片的工程文件
kernel core TencentOS tiny内核源码
pm TencentOS tiny低功耗模块源码
osal cmsis_os TencentOS tiny提供的cmsis os 适配
3)在工程文件夹中新建TecentOS_tiny文件夹
同时将arch board osal kernel拷贝到里面
如图:
4)添加代码到工程
5)添加头文件
6)修改一些代码
修改stm32f4xx_it.c的中断函数,在stm32f4xx_it.c文件中包含 tos.h 头文件
将
void PendSV_Handler(void)
改为
__weak void PendSV_Handler(void)
同时将 void SysTick_Handler(void)
的代码改成如下代码
void SysTick_Handler(void)
{
HAL_IncTick();
if(tos_knl_is_running)
{
tos_knl_irq_enter();
tos_tick_handler();
tos_knl_irq_leave();
}
}
然后就算移植完成了
同时将main.c文件代码改成如下代码:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
#include "string.h"
#include "cmsis_os.h"
//task1
#define TASK1_STK_SIZE 256
void task1(void *pdata);
osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE);
//task2
#define TASK2_STK_SIZE 256
void task2(void *pdata);
osThreadDef(task2, osPriorityNormal, 1, TASK2_STK_SIZE);
void task1(void *pdata)
{
int count = 1;
while(1)
{
printf("\r\nHello world!\r\n###This is task1 ,count is %d \r\n", count++);
LED0=!LED0;
osDelay(2000);
}
}
void task2(void *pdata)
{
int count = 1;
while(1)
{
printf("\r\nHello TencentOS !\r\n***This is task2 ,count is %d \r\n", count++);
osDelay(1000);
}
}
int main(void)
{
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz
delay_init(180); //初始化延时函数
uart_init(115200); //初始化USART
LED_Init(); //初始化LED
KEY_Init(); //初始化按键
LCD_Init();
osKernelInitialize(); //TOS Tiny kernel initialize
osThreadCreate(osThread(task1), NULL);// Create task1
osThreadCreate(osThread(task2), NULL);// Create task2
osKernelStart();//Start TOS Tiny
while(1)
{}
}
从这段代码我们非常明显的看出这个RTOS非常简单,命名非常接地气,避免使用了特别长的名字,用起来就一个字:爽!
我之前一直在想如何实现边缘设备的集群化管理,可以实现嵌入式设备的集群计算与资源共享,但是其中有非常难以实现的一环就在于,边缘设备之间的通信管理与网络协议。显然对于嵌入式设备而言,仅仅是通信的话,我们可以给出十几种方案,但是对于边缘集群我们至今给出很好的方案。随着边缘设备的不断增加,如果不给出很好的管理方案的话,那些大量而散碎的边缘算力终将被浪费掉。如果将这些碎片集中起来,相信在未来的每一个家庭都相当于可以拥有一台超级计算机。
腾讯的这个操作系统将网络设备从物理层一直做到了应用层
在TencentOS身上我看到了不久将来一场新的的嵌入式革命。
随着5G时代的来临,我在网上看到了这样的一种说法,边缘计算将死。随着通信带宽的不断提高,边缘计算似乎变得不再像从前那般迫切。但我认为这绝对不是边缘计算的冬天,而是其新的机遇。
5G技术离不开边缘计算。5G承载网引入资源池云化、控制平面/用户平面分离等新架构,解决传输侧对5G不同应用场景的支撑问题,其中边缘计算是最核心的技术之一。所以说5G不是边缘计算的终点,而5G的建设恰恰离不开边缘计算的支持。相比于传统集中部署的云计算,边缘计算在靠近数据源或用户的地方提供计算、存储等基础设施,并为边缘应用提供云服务和IT环境服务。这样,边缘计算可以将高带宽、低时延、本地化的业务下沉到网络边缘,解决了时延过长、汇聚流量过大等问题,为实时性和带宽密集型业务提供更好的支持。所以5G时代,边缘计算将是建设5G网络边缘云的普遍模式。
5G将会推动移动边缘计算加速发展。一是5G的四大特点,决定了5G业务的终结点不可能都在核心网后端的云平台,因此边缘计算的发展具有必要性。二是物联网的核心是让万物互联,而随着连接数的快速增长,一方面意味着海量数据的产生,另一方面物联网设备往往还需要智能计算,而边缘计算可以通过更靠近边缘的数据处理能力,帮助物联网更好地实现物与物之间的传感、交互和控制。三是SDN将助力移动边缘计算的发展。例如,SDN的架构能够让网络可以灵活互换使用云计算和边缘计算的资源,满足敏捷和动态系统需求,为用户提供最佳的服务。在众多垂直行业新兴业务中,对边缘计算需求最明确的主要是智能制造、智慧城市、直播游戏和车联网四个领域。而5G在车联网,智慧医疗,智能制造,视频直播,智慧城市等领域也将发挥重要作用。进一步说明了行业的发展离不开边缘计算技术和5G技术的支持,两者相辅相成。
在这之后我打算先放下对LINUX的学习。再来回来摸一下RTOS,研究一下这款RTOS的源码,相信一定会有非常大的收获。
不久之前我在看到鸿蒙OS的时候,还好好激动了一番,可惜鸿蒙定位终究还是高端芯片,低端设备终究无法跑起这么宏大的系统,基于LINUX的特性使他永远也不能做到真正的实时。这一次腾讯帮中国填补了这项空白。有了这项开源的RTOS,相信在不久的将来,中国的开发者再也不用向外国的公司支付昂贵的版权费。有了鸿蒙和TecentOS,中国自己的操作系统终于打开了一片天地。
原来腾讯不光会做游戏。希望中国的科技新贵们可以多一些这样的贡献,而不要永远着眼利益。