嵌入式网络设备一次盲点补报的开发经验(一)

作者: 良知犹存

作者:良知犹存

转载授权以及围观:欢迎添加微信号:Conscience_Remains

总述

曾经开发的时候遇到这样一个情况,们的设备是车载设备,在车辆行驶过程中需要实时上报车辆数据,但是由于用的网络端是2G网,在行驶过程中,会遇到信号不好导致网络中断的情况,最早时候因为配置联网状态机很快,重联网时间很小,直接就选择重联网之后再进行上报。可是在实际使用过程中发现,基站的切换、网络信号不好都会导致网络中断,重联网机制也不是每次都很迅速。所以开始考虑将数据本地保存,等待联网成功之后再次进行补报。下面就介绍一下具体的思路。

一、需求的落地

确认思路实现方式:

思路就代表未来代码执行的逻辑,所以第一步选择梳理逻辑。首先脑海中大致会出现两种数据结构,一种是栈排序;一种是队列。

顺道也简单介绍一下这两种数据结构:

下图是栈排序的示意图,看图说话,栈是CPU分配的一块内存,分成很多个小单元用来储存数据,栈有栈顶和栈底。

入栈的动作是,当数据来的时候从栈底开始进行储存,当储存的数据top指向的地址从栈底到了栈顶地址,那么意味着本次分配的栈空间都满了。

出栈的时候,数据从存放的最高处top开始pop,直至top指向的地址等于栈底的地址,那么说明栈空了。

队列有链表式有顺序表式,两者一个是动态分配内存一个是静态分配内存,但是对于数据的进出来说都是一样的,队列是一边设置为数据入队口,一边为数据出队口。

这两者最大区别就是栈是先入后出 (First input Last output),而队列是先入先出(FIrst input First output) 。

针对设备实际情况来看,盲点的时间长度是不可知的,也相当于说数据的长度是未知的。们需要获知到最新的数据,而内存是有限的,所以们需要在大量数据保存的时候把旧的数据不停的覆盖掉,保留最新的数据,并且第一时间上报最新的数据,综合考虑栈结构最适合们。

确认平台控制分配内存大小:

操作平台:STM32

RAM大小:32K

因为不同的芯片不同内存不一样,可用于分配的内存不一样,例如这次们要进行一个小时的盲点补报的数据保存,按照实时上报数据大小乘以频次,再乘以总数量计算得到们需要至少25k的内存,又因为程序运行需要十多K的内存,芯片RAM总大小只有32K,最后经过测试22K的大小刚合适。

const int MaxCachesLen = 22 * 1024;

const int MaxCachesCount = MaxCachesLen / sizeof(Message);

g_Caches = (Message**)malloc(sizeof(Message*) * MaxCachesCount);

这就是分享的一篇盲点补报的文章,因为晚上写文章也比较晚了,所以就早点休息了,明天分享代码分析篇,如果大家有什么更好的思路,欢迎分享交流哈。

原文作者:良知犹存

原文链接:https://www.cnblogs.com/conscience-remain/p/13389186.html

更多推荐

更多
  • .NET人工智能教程-四、使用自然语言理解 什么是 NLU?,自然语言理解的历史,为什么机器很难理解自然语言,语言理解智能服务(LUIS),为 LUIS 获取 Azure 订阅,演示:定义应用,概述,自然语言的复杂性,统计模型作为解决方案是不够的,充满希望的未来,基于 LUIS
    Apache CN

  • .NET人工智能教程-十、人工智能的未来 AI 为什么这么受欢迎?,改进的计算能力,人工智能算法的发明,数据是新的货币,云计算的出现,服务 vs 解决方案?,认知类别,NLU 的挑战和未来,演讲的挑战和未来,搜索的挑战和未来,挑战和建议的未来,AI 优先,智能边缘,将被淘汰的是
    Apache CN

  • .NET人工智能教程-七、与语音 API 交互 与语音互动的方式,入门指南,首先获取 JSON Web 令牌,消费者语音 API,语音合成,定制语音服务,说话人识别,摘要,认知搜索 API,语音识别,语音识别内部,定制声学模型,自定义语言模型,发音数据,自定义语音转文本端点,说话人验
    Apache CN

  • .NET人工智能教程-五、探索认知语言模式 iamfeanggoodgermanyvsargentinafootballliveepic fail,Bing 拼写检查 API,文本分析 API,Web 语言模型(WebLM) API,语言分析 API,概述,这是什么?
    Apache CN

  • .NET人工智能教程-一、人工智能基础入门 真实与虚构,历史和演变,微软和人工智能,基本概念,微软的认知服务,概述,当前的事态,人工智能的商品化,机器学习,语言,演讲,计算机视觉,视力,演讲,语言,知识,搜索, 想象一下,创建一个如此智能的软件,它不仅能理解人类语言,还能理解俚语
    Apache CN

  • .NET人工智能教程-三、使用微软技术构建对话式用户界面 什么是对话式用户界面?,简史,设计原则,微软机器人框架,使用 Bot 框架创建 CUI 应用,概述,一开始:命令行界面(CLI),然后是图形用户界面,UI 又一次进化了:对话式用户界面,艾在《崔》中的角色,崔的陷阱,混合用户界面(CUI
    Apache CN

  • .NET人工智能教程-二、在 Visual Studio 中创建基于人工智能的应用 使用认知服务的先决条件,设置开发环境,获取认知服务的 Azure 订阅密钥,测试 API,创建你的第一个基于人工智能的应用,让你的应用更有趣,概述,步骤 1:设置 Azure 帐户,步骤 2:创建一个新的认知服务帐户,步骤 3:获取订阅
    Apache CN

  • .NET人工智能教程-八、应用搜索产品 搜索无处不在,普及、预测、主动(搜索的三个 p),冰的历史,必应有什么独特之处?,搜索 API,Bing 图像搜索 API,Bing 新闻搜索 API,Bing 视频搜索 API,如何使用 Bing 视频搜索 API,Bing 网络搜索
    Apache CN

  • .NET人工智能教程-九、使用建议 了解基础知识,经常汇集(FBT)的建议,逐项,基于过去历史的建议,这些建议是如何起作用的?,模型和类型,建议构建,经常聚集在一起(FBT)建设,排名,SAR(智能自适应)构建,在构建中设置规则,离线评估,用户界面,摘要, 机器学习无处不
    Apache CN

  • .NET人工智能教程-六、消费和应用 LUIS 规划您的应用,创建 LUIS 应用,添加意图,添加/标记话语,发布您的应用,添加实体,添加短语列表,建议的后续步骤,LUIS 与 Bot 框架的集成,将您的机器人添加到 Skype,概述,机器人应该能做什么?,机器人需要用户提供什么信息
    Apache CN

  • 近期文章

    更多
    文章目录

      推荐作者

      更多