基于FreeRTOS的嵌入式设备管理关键技术研究及实现(学习三)

news2024/11/26 16:53:23

设备节点功能模块设计

在本文节点功能设计中,拥有用于检测温度的温度传感器、监测湿度的湿度传感器以及 调节空调温度的IR红外发射器,另留有部分外接扩展串口,因此可能会在实际使用中扩展更多的设备模块与功能。

可见,如何高效地管理设备及其挂载资源,是一个值得研究的重要方向。
本章对设备节点功能以及通信协议接口进行了设计,实现了设备端与客户端平台间的通信以及设备端的功能模块,同时设计了本文重点讨论的设备端远程升级模块。

需求分析

在软件架构的整体设计中,本文的终端节点所需要完成的功能主要有两个,首先是环境监测,需要对环境数据进行实时采集,并根据数据进行环境温湿度调整,以达到节能的目的。

其次是设备管理平台通信,通信中除了设备的上报接口、接收平台指令接口之外,还应有设备注销和注销接口来构成完善的设备管理功能。

此外,本文还设计了远程升级模块,其中包含了对差分文件的还原算法以支持差分升级。

除此之外需要考虑的是嵌入式设备通常在计算能力、存储能力以及通信能力方面受到限制。

因此,节点的功能设计需要综合考虑以上因素,设计出功能结构清晰,低耦合度同时兼顾实时性的软件系统结构。

综上所述,本文终端的设计需满足设备功能低功耗多任务、软件设计低耦合高实时性的要求。

通信需求及协议栈设计

由于NB网络的低带宽以及终端小型设备的低计算能力,因特网中使用广泛的HTTP协议并不适用,因为其具有冗长的报文格式以及复杂的通信规则。

因此,在本项目的网络环境下,需要对网络通信协议进行选型。

物联网中常用的应用层通信协议有:MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)协议与CoAP(Constrained Application Protocol,受限应用协议)。

  • MQTT协议是一种基于TCP协议的双向控制可靠协议,但功耗较高。
  • CoAP协议是一种基于UDP协议的适用于资源受限的设备,由于不需要维持长连接而功耗降低,因此比较适用于电池供电的应用场景。

本论文驱动在环境信息数据采集功能设计中使用基于CoAP协议的LwM2M协议。

LwM2M协议在是OMA面向NB-IoT发布的轻量级端到端协议,该协议栈基于UDP,提供轻量化报文结构的方案,对窄带物联网中的通信方式提供了参考标准。
LwM2M协议是应用层协议,具体协议栈:
在这里插入图片描述

LwM2M协议定义了LwM2M Server、LwM2M Client和Bootstrap Server三个逻辑实体以及Bootstrap、Device Discovery and Registration、Device Management and Service Enablement和Information Reporting四个逻辑接口,逻辑实体和逻辑接口关系如图所示。

在这里插入图片描述
Bootstrap Server 通过Bootstrap接口对LwM2MClient进行配置。
LwM2M Client通过Device Discovery and Registration接口在服务器进行注册并通知服务器所具备的能力,并会调用Information Reporting接口向服务器上报资源信息。

LwM2M Server可以通过Device Mangement and Service Enablement 接口向Client发送指令信息。

由于本文使用NB-IoT技术作为底层通信技术,该技术具有带宽较窄的特点,因此本文参考了LwM2M协议标准,设计了基于FreeRTOS的机房环境监测终端,实现了协议的部分接口以完成终端功能。

该终端可根据环境实时情况调整机房空调参数,同时将数据实时上报给云平台,平台侧可通过平台的Web UI人为下发指令,实时获取终端数据以及命令终端执行某些特定功能。

终端驱动利用LwM2M协议的设备管理功能进行设备的管理操作,以实现设备的数据上云以及远程管理等功能,降低了设备功耗。

利用FreeRTOS实现功能模块的分割以达到功能间的低耦合,同时保持设备状态实时性。

在这里插入图片描述
本文设备管理驱动总体架构参考TCP/IP五层协议进行设计,从下至上依次是:

  1. 设备层。本文采用的硬件平台包括ARM-Cortex M3架构的STM32F103系列芯片,外接AM2302传感器以及IR红外发射器。
  2. 物理层以及数据链路层。3GPP对NB-IoT的物理层和数据链路层有相应的规定及标准。
  3. 网络层。使用IP协议。
  4. 传输层:在设备通信时均采用UDP以及保证通信安全的DTLS协议,而在进行资源下载时,使用TCP以及保证通信安全的TLS协议。
  5. 应用层。首先,在设备通信时采用基于CoAP并可将设备抽象成对象-资源模型的LwM2M协议,使设备在通信过程中保证实时性以及更高的成功率。同时在软件设计时,使用FreeRTOS保证软件结构清晰、代码耦合度低。其次,应用层还包含了固定的处理逻辑,具体为差分包还原算法以及代码覆盖逻辑。此外,本文的项目需求中还有动态控制空调的要求,因此应用层还应该包括空调控制逻辑,这个部分需要依托特定的红外编码规范,会在下文中阐述。

软件功能需求

从软件设计层面,本文的设备功能上主要分为环境数据采集功能、远程升级功能、只能环境控制功能以及云端通信功能,这样的模块设计需要配合具体的协议与操作系统进行编写,软件架构图如图所示。
在这里插入图片描述

硬件选型主要选择由STM32处理器、温湿度传感器AM2302、IR发射器等各个环境参数传感器和NB-IoT通信模块组成;远程升级功能主要需要具体的算法以及支持无线数据交换的通信模组。
在这里插入图片描述
FreeRTOS封装了五种内存分配方式
在这里插入图片描述
(1) headp_1
heap_1内存分配方案逻辑最简单,该方案只能申请内存,而这块内存不能被释放。
对于大多数嵌入式系统,特别是对安全要求高的嵌入式系统,这种内存管理策略很有用,因为对系统软件来说,逻辑越简单越容易兼顾安全。我们可以将第一种内存管理看做追加式的顺序分配,调用pvPortMALLOC()时就从空闲内存中分配一段空间给新的变量。这个内存管理策略使用两个局部静态变量来跟踪内存分配,变量定义为:
在这里插入图片描述
其中,变量xNextFreeByte记录已经分配的内存大小,用来定位下一个空闲的内存堆位置。
内存堆在软件上的表达实际是大数组,通过偏移量和已分配内存就可以定位到最近的未分配空间。
为了加快运行速度,变量pucAlignedHeap指向对齐后的内存堆起始位置。
为了提高性能,FreeRTOS会进行对齐操作,不同的硬件架构对齐操作也不同。

(2)heap_2
第二种内存管理策略较第一种复杂,除了实现了嵌入式设备内的内存分配,同时允许释放内存空间。它使用最佳匹配算法,但不允许空闲块合并,因此会造成内存碎片。
这个内存管理策略适用于重复的分配和删除具有相同堆栈空间的任务、队列、信号量、互斥量等等,并且不考虑内存碎片的应用程序,不适用于分配和释放随机字节堆栈空间的应用程序。
与第一种内存管理策略一样,内存堆仍然是一个大数组,定义为:
static uint8_t uncHeap[configTOTAL_HEAP_SIZE];
局部静态变量pucAlignedHeap指向对齐后的内存堆起始位置。

(3)heap_3
heap_3.c的设计初衷是为了确保线程安全,保证不会被多个线程同时分配或回收内存,只是简单的包装一下标准函数malloc()和free()以确保线程安全,在大多数情况下,这些包装器是需要编译器提供,它们依赖于编译器自己的malloc()和free()实现。

(4)heap_4
在上文中提及的heap_@内存分配策略中,分配算法使用的是最佳匹配算法,会将空闲块形成空闲空间大小排序的链表,当需要为代码分配内存空间时,会从头遍历链表找到最小的满足条件的空闲块,但这样会形成很多空间很小的空间碎片,这些空间碎片可能很难满足任何的空间分配需求,因此内存利用率较低。
而heap_4内存分配策略会将相邻的空闲块合并,形成更大的空闲块。
本文中的程序设计因为需要对内存进行反复动态分配和释放,所以选择使用heap_4的内存分配方式。

(5)heap_5
heap_5内存分配策略使用的是首次适应算法,优先使用低地址空间,而为了提高内存空间的利用率,会在相邻空闲块上使用合并算法将小的内存碎片合并成大的空闲块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年03月份青少年软件编程Python等级考试试卷三级真题(含答案)

2023-03 Python三级真题 分数:100 题数:38 测试时长:60min 一、单选题(共25题,共50分) 1.十进制数111转换成二进制数是?( )(2分) A.111 B.1111011 C.101111 D…

青岛大学_王卓老师【数据结构与算法】Week04_10_线性表的应用3_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–…

Spring Boot中的度量指标及使用方法

Spring Boot中的度量指标及使用方法 简介 Spring Boot是目前流行的Java后端框架之一,它提供了许多有用的功能,其中包括度量指标。度量指标可以帮助我们监测应用程序的性能、稳定性和可靠性,以便及时发现并解决问题。本文将介绍Spring Boot中…

使用Jetpack Compose集成WebView

在Android开发中,WebView是一个非常重要的组件,它可以用来显示网页或加载在线内容。然而,在Jetpack Compose(Google推出的新的UI工具包)中,目前没有内置的WebView Composable。但不必担心,你可以…

【数据算法与结构】栈和队列课后习题

题目(共两道) 题目1 Qestion: 根据下面代码片段写出运行下列程序段的输出结果(元素类型为char) 题目代码片段 void main() {Stack S; char x,y; InitStack(S); // 初始化栈x ‘e ‘; y ‘c’; Push(S, ‘h‘); Push(S, ‘r‘); Push(S,y);Pop(S,x);…

了解Java可见性的本质

作者:早恒 前一段时间重温了伪共享(false sharing)问题,了解到深处有几个问题一直想不明白,加上开发过程中遇到volatile时总觉得理解不够透彻,借着这次脑子里这几个问题,探究下Java可见性的本质…

【C语言】深入学习函数(万字)

👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你…

文件上传+文件包含组合式getshell

实验目的 通过本实验,了解文件包含的特点,掌握图片马的执行方法,文件上传文件包含组合式getshell。 实验环境 操作机:kali 靶机:Windows 2007 用户名/密码:college/360College 实验地址:http…

jenkins部署springboot项目

jenkins部署springboot项目 1、创建一个项目 上传到gitee 1、创建项目 2、上传到git 2、jenkins创建一个pipeline项目 Pipeline简介 1)概念 Pipeline,简单来说,一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者…

优化chatGPT提示词的Prompts

你扮演一个专业的chatGPT提示词工程师,我将为您提供我的提示词,它用三个反引号分隔,请根据openai发布的提示词标准和优化技巧,改进和优化我的提示词,让chatGPT能够更好的理解。 我的第一个提示词是:“”“……

【UI设计】新拟态风格

新拟态风格 1.有且只有一个光源照射 那作者在追波上按钮也好还是卡片处理也好,仔细观察不难发现,它定了一个光源,是从左上向右下照射的,所以,越靠近光源的部分,越亮,远离光源的越暗(…

卡尔曼滤波实例分析(一)

1 现实问题 假设一个物体位于1000米处以自由落体运动,地面有一台具有特殊功能的雷达,对其进行观察,现需要对其下落的高度进行测量; (1)建模 速度:V gt 位置:Y -Vt Y0 &#xff0…

react笔记_06类组件

目录 复习展开运算符 组件什么叫做组件?分类类组件es6新增构造函数语法类组件渲染类组件的this指向类组件的三大属性state作用语法-初始化数据语法-修改state数据语法-获取state中的数据案例 propspropTypes属性(prop-types库)defaultProps属性 refs[1] 字符串形式的…

基于UFLD-v2的改进:UFLD-v2-plus

1 待解决问题 UFLD-v2是一个非常优秀的车道线检测模型。也有一些问题。 1 参数量太大,一个模型600M。 2 不能区分车道线。 2 工作内容 改进方法如下 2.1 降低参数量 对模型网络逐层参数量,可以发现,86%(很久之前分析的&…

基于STM32+华为云IOT设计的智能浇花系统

一、前言 随着社会的不断发展和人们生活水平的逐渐提高,人们逐渐追求高质量的生活,很多人都会选择在家里或办公室种植一些花卉以净化家庭空气,陶冶情操,但是很多人忙于工作、学习、出差、旅游或者一些其他的原因,不能及时地对花卉进行照料,短时间内导致很多花卉因缺水分…

100天精通Golang(基础入门篇)——第13天:深入解析Go语言中的字符串(string)及常用函数应用

🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《I…

怎么用爱问转换工具在线拆分PDF文件

我们平时在工作中会用到很多PDF文件,有的PDF文件内容很多,里面也有许多分类类别,其实对于这种内容多的PDF文件,可以使用拆分的方式,来获取自己需要的材料,那么,如何快速拆分PDF文件呢&#xff1…

VSCode离线安装Remote-SSH插件

最近想要在VSCode上安装Remote-SSH插件,以便可以远程登录云服务器进行开发或者文件编辑、文件传输等功能;但是VSCode中在线安装一直失败,所以记录一下离线安装的方法; 文章目录 一、下载VSCode Remote-SSH的离线插件,即…

python: PyCharm 2023.1打包项目成执行程序

IDE 最底部: pyinstaller -i heart.ico -D main.py 生成成功

Jenkins基础介绍以及docker安装Jenkins

Jenkins基础介绍以及docker安装Jenkins 什么是Jenkins? Jenkins是一个可扩展的持续集成引擎 持续集成就是通常说的CI(Continues Integration) 每次集成都通过自动化的构建(包括编译,发布,自动化测试&am…