构造开源环境下的
物与物通信
数据采集系统
● 在工程领域有大量的数据采集系统:
○ 电表,采集每家的用电情况;
○ 河流信息采集,采集河流的水文情况;
远程云端
网络
数据采集系统
● 远端云对终端进行管理,并保存数据;
● 终端主要负责数据信息采集,并把数据通过某
种方式传递给服务端;
● 既是传统的行业,也是物联网。
物联网
● 物联网:Internet of Things, IoT
○ 物与物间的通信,物与物间的网络;
● 这个概念的诞生也意味着“物”不再孤立,不再
是独立的一个计算单元,而是网络化的网络。
物联网的体系结构
终端的需求
● 根据不同的应用场合,终端设备的需求不尽相
同:
○ 体积
○ 功耗
○ 网络
方案一
● 设备终端通过GPRS与远程云服务器连接,并
把数据存储到数据库服务器;
● 在服务端构建专用
的TCP服务器,并负
责与数据进行交互,
读写数据;
GPRS
无线基站
方案二
● 各个设备终端与数据库服务器直连;
● 数据库服务器?
○ PostgreSQL
○ MySQL
● 终端直接存取数
据,每个终端作为
一个数据库的客
户端。
GPRS
无线基站
选择RT-Thread
为什么选择RT-Thread
● 开放式的构架:
○ 开源不等于免费,但开源等于开放;
○ 接受过工程、产品市场考验的开源软件;
● 特别适合于ARM Cortex-M3/M4处理器:
○ 低体积、低资源占用;
○ 低功耗
○ 多种连接方式
● 不仅仅是一个操作系统内核,逐渐演化成一个
系统平台。
RT-Thread介绍
● RT-Thread是一款由中国开源社区主导开发的开源实时操
作系统(GPLv2许可协议),包含实时嵌入式系统相关的各
个组件:TCP/IP协议栈、文件系统、libc接口、图形界面等。
● 市场应用情况:
北京公科飞达
RT-Thread实时操作系统构架
CPU: ARM/MIPS/PPC
BSP: Board Support Package
SPI UART USB EMAC
Flash SDIO/MMC
Real-Time Kernel
Thread
Object
Container
Timer
Semaphore
Mailbox MessageQ
Event
User App1 User App2 User Drv
Mutex
Components
finsh shell
DFS lwIPDeviceFramwwork
GUIPOSIX
RT-Thread的发展情况
● 诞生于2006年年初,初始目标是应用在手持设备中;
● 2008年开始支持ARM Cortex-M3处理器;
● 2011年3月成为ARM Connected Community合作伙伴;
● 2012年第一届龙芯开源大赛特等奖;
● 2012年第六届中日韩开源软件竞赛技术优胜奖;
● 后续越来越广泛的应用到工程、产品领域;
● 2013年开始支持ARM Cortex-R系列处理器;
● 底发布RT-Thread 正式版;
● 当前开发版本:
RT-Thread实时核心:技术指标
● 最小版本资源占用情况:
○ ROM,1kB RAM
● 线程上下文切换时间(在72MHz的32位ARM
Cortex-M3处理器测试得到):
○ 挂起操作引起线程上下文切换:
○ 信号量操作引起线程上下文切换:
○ 邮箱引起线程上下文文切换:
RT-Thread的开发方式、流程
● RT-Thread官方网站:
○
● 开发主干:
○
● 社区需求/兴趣、解决问题
○ 新组件 --> 提交到github --> 成为新组件维护人
○ 新分支 --> 提交到github --> 成为新分支维护人
○ 补丁 --> 发出pull request --> 维护人review --> 合并
到github中
RT-Thread的开发方式、流程
● 社区方式开发:
○ 维护人(maintainer)
■ + 开发人员(developer)
○ 内核/组件/分支
○ 维护人也担当测试、评审员的角色
● 稳定性依赖于社区的测试及发布前的测试
○ 也试图建立一些自动化测试工具
RT-Thread低功耗模型
系统运行时间
数据采集
数据记录
通讯任务
空闲任务
系统任务
● 芯片的功耗和是否休眠有很大的关
系,以及外设是否关闭时钟相关;
● 在实时操作系统中,当系统无其他事
情可以进行时,将切换到idle任务中
执行。
RT-Thread低功耗模型
● idle任务代表着整个系统可以进入到休眠状态;
● 系统可以依据当前的状况来判定,设备可以进入到哪种运
行模式中:sleep/timer/shutdown mode
Idle任务
sleep模式:关闭CPU时钟
timer模式:关闭外设时钟
停止模式:关闭外设时钟
睡眠状态
timer模式:关闭外设时钟
RT-Thread低功耗模型
● timer模式:
○ 1. 在这种模式下,系统的OS tick中断停止;
○ 2. 开启睡眠时的低功耗时钟;
○ 3. 当唤醒时,对OS tick进行校正;
Idle任务
睡眠状态
开启PM硬件定时器
对OS Tick进行补偿
RT-Thread低功耗模型
● 系统是否能够进入睡眠依赖于多种条件:
○ 外设是否正在使用(例如使用了DMA进行传输);
○ 驱动是否准备好,是否能够进入睡眠;
○ 以及通知外设驱动,Host准备进入睡眠状态;
RT-Thread的互联互通:TCP/IP协议栈
● 采用了全功能的lwIP TCP/IP协议栈,支持:
○ ARP、IP、ICMP、IGMP、UDP、TCP
○ PPP、DHCP、DNS
○ HTTP、TFTP、FTP等多种协议;
● 提供BSD socket标准风格的编程
接口,方便移植/调试现有的一些
网络应用程序;
● 为微控制器进行优化,最小约5kB
RAM占用;
Application
API(socket, net_con)
TCP/UDP
ARP, IP, ICMP
Eth Rx Eth Tx
应用层
IP层
驱动层
RT-Thread的互联互通:TCP/IP扩展
● 支持GPRS、CDMA等2G技术;
● 支持WCDMA等3G技术;
● WIFI技术:
○ 国内第一个用于ARM Cortex-M3处理器的开源WIFI驱
动;
方案三
● 终端保留一个基本的HTTP客户端,数据直接发到web服
务器;
● 多个web服务器(或本地web服务器)进行负载均衡;
● 终端通过web方式
与web服务器进行
交互;
GPRS
无线基站
Web方式的通信传输
● 当前应用最广泛的技术;
● 存在大量为高并发连接而优化的方案;
● Web技术也存在于大量的移动设备中,例如手
机、平板。
更灵活的网络连接方式
● json,轻量级的数据交换格式:
○ 易于阅读、理解;
○ 传输的数据量小;
○ 易于生成、解析,可以跨越网络、语言、机器;
● {"level": 100, "name":"device", "value":
[0,1]}
M2M json模型
● 以json数据交换格式作为机器间通信的协议格
式;
● 不仅仅是web,也可以是其他通信方式(例如
UART)
M2M json编译器
● 面向嵌入式设备,但融合于现代的web技术;
● 对C代码结构体生成json的编码、解码函数:
//
struct sub_foo
{
int event;
};
JSON_EXPORT(sub_foo);
struct foo
{
int a;
char msg[8];
struct sub_foo child;
};
JSON_EXPORT(foo);
mjsonc
foo_encode_json(struct foo
*self, buf, size)
{
}
foo_decode_json(struct foo
*self, buf, size)
{
}
{"a": 10, "msg": "this is a message ",
"child":{"event":10}}
成果
● 网络化的数据采集系统;
● 设备终端采用PPP拨号方式连接外置模
块;
● 设备待机功耗:10uA,平均功耗 < 100uA。