当前位置: 首页 > news >正文

基于RK3399+Linux QT地面测试台多参数记录仪测试平台软件设计(二)

rk3399 是由本土芯片厂商瑞芯微(Rockchip)研发的高性能、低功耗中国芯。在
2016 4 月,rk3399 首次在香港举行的电子展上亮相。芯片使用六核大 LITTLE 处理器:
包括四核的 Cortex-A53 和双核的 Cortex-A72,主频可达 2.0GHz。芯片兼容 3G4G
络通讯,接口资源丰富、整体性能方面优异,比如 USB3.0MIPI 双摄像头等设备接口。
在操作系统的使用上也有很多可选性,用户可以选择 Android/Linux/Debain 等作为操作
系统,也可以选择菲尼克斯、Flint OS 等轻型办公开发环境,常用软件都可兼容。
在硬件接口上,rk3399 提供了大量的资源,信迈RK3399开发板外观和具体接口定义如图 2.5
示。rk3399 有以下独特优点:
1. 显示接口丰富。还可以根据需求双屏同显或者双屏异显。视频方面支持双 MIPI
HDMIEDPDP 等众多主流显示输出口。
2. 网络通道多样化。双频无线网络接收(2.4GHz/5GHz),千兆以太网口,蓝牙通
4.1。此外开发板上还接有 Mini PCle 口,可以扩展 3G 4G 通信。
3. 外设接口齐全。USB2.0/3.0HOST,独立 PCIE 接口。常规的串口调试,42Pin
GPIO 接口方便开发者调试使用。
4. 操作系统兼容性强。LinuxUbuntuDebainAndroid 等开源操作系统,用户可
自己选择合适的固件进行烧写。

 

以某型号数据记录仪的工作需求为目标,根据测试 工作流程,以 Linux-Qt 为主要开发手段,设计一款功能完备、界面友好、操作简洁的测试台软件。
3.1 软件设计原理
根据需求和总体设计软件分为三个工作模式,功能模块图如图 3.1 所示。从图中可
以明显看到软件包括模拟信号源、存储器检测回读、数据处理三个功能窗口。每个窗口
功能独立,又紧密结合。可以配合工作进行测试,也可以单独工作进行某一项测试。

首先是模拟源窗口,主要负责飞行实验前地面数据源模拟,由上位机发送指令控制
测试台中的主控 CPU,产生 5 路开关量、2 路模拟量、1 422 数据,5 路网络数据。
目的是为了在飞行试验前,对系统的整个流程进行测试。通过发送已设定好的模拟数据
并存储到 Flash 中,然后回读数据,经过初步对比和进一步数据处理来验证整个系统的
工作状态。存储器检测回读窗口包括网络配置、存储器选择、查询当前存储状态、读取
次数和读取量设置、停止读数、记录仪擦除等功能,核心任务是对已经存在 Flash 中的
数据进行回读。最后是数据处理窗口,主要功能是对已经回读并存放到桌面的的原始数
据文件进行分离,按照不同通道将数据分开,便于单独研究。
通讯模式采用串口指令收发和 UDP 数据回读两种。其中串口通讯采用发送+反馈的
方式,保证每一条指令的准确度,同时在软件界面给予即时显示,退出时生成.log 日志
文件,便于查看。
下位机收到某一条指令以后会及时给予反馈。当上位机发送数据回读指令时,记录
仪通过网络 UDP 传输将已存到 Flash 中的数据传回上位机并储存为本地文件,进行下一
步处理。数据包格式为:帧头+帧计数+数据+校验和。表 3.13.2 为详细的控制指令表。

 

软件功能包括以下内容:
1,用户可以在软件开机界面选择工作模式。包括模拟源模式/数据回读模式/数据分
离模式。
2,在模拟源模式下,软件通过发送串口指令使能测试台中的继电器,同时控制 CPU
产生模拟数据源。操作方式分为自动和手动两种。实验过程中可随时开启或关闭任意一
路开关量,方便测试系统的某一路开关是否正常工作。
3,在数据回读模式下,上位机通过查询指定存储器中的存储信息选择读取数据,读
数过程中不能进行其他操作。读数完毕后,可根据需求擦除数据记录装置(整体擦除),
擦除前需要再次确认。
4,数据分离模式。对已经回读并存储的数据文件进行进一步分离,用户可按照需求
分离一路或者多路数据。每路数据分离互不干扰,都是独立的功能模块。
3.2 Qt 信号通信机制
作为一款上位机控制软件,与通过指令收发的形式与下位机进行通信是其主要职能。
使用 Qt 开发,首先要考虑通信问题。信号与槽(Signal & Slot)机制是 Qt 软件独创的
一种通信方式[16]。信号类似与一个开关,而槽函数类似于一个灯泡。当开关触发后,灯
泡开始工作。信号与槽也是如此[17]。当表示信号函数的事件触发后,比如点击一个按钮,
就会发出一个信号,需要实现的目的就是槽函数要表达的信息。它隐藏了复杂的底层实
现,完成信号和槽的关联后,发射信号并不需要知道 Qt 是如何找到槽函数的[18]。与某
些开发框架的回调函数(callbacl)相比,信号与槽这种机制更加灵活多变,也让 Qt
界面设计时,对各个组件的编程目标更加明确。
信号和槽函数是用 QObject::connect()函数进行连接的的。一般写成:
QObject::connect(sender,SIGNAL(signal()),recevier,SLOT(slot()));
或者 connect(sender,SIGNAL(signal()),recevier,SLOT(slot()));//QObject 可省略
在上面的函数中,sender 表示发出信号的控件名,signal()是该信号的名称。比如按
钮的点击,文本框的输入等。同理,recevier 表示接收信号的类名称,可以是窗体,或
者对话框等。slot()函数为相对应的槽函数,表明接收信号的类要执行的操作[19]。可以是
窗体的弹出,或者显示一段文本。在使用信号和槽函数机制进行编程时,需要明确以下
内容:
4. 一个信号允许与数个槽函数进行配对,数个信号也能够关联相同的槽函数[20]。信
号与槽函数之间并没有固定的数目匹配。需要注意的是,当一个信号与几个槽函数连接
时,槽函数的实现需要参照具体程序,根据程序中关系的先后依次进行。这种一对多,
多对一的对应关系可以用图 3.2 表示。
5. 不同信号之间也能够互相建立关系。并不是信号必须对应槽函数。信号也可以触
发另一个信号,再去响应一个或几个槽函数,可以根据具体的情况灵活运用[21]
6. 信号与槽函数的关联方式是很迅速的、即时的。类似于中断,当触发了一个信号
槽函数时,会立刻执行。只有这个槽函数执行完毕,主程序才会继续运行[22]
信号与槽函数的通信机制是 Qt 编程的根本原则。除此之外,还有一些函数需要事件
去触发。比如鼠标操作和键盘的键入。这些操作在 Qt 中都有对应的函数来响应。图 3.3
为常见的几种事件处理函数[23]
3.3 软件程序界面的设计和实现
根据 Qt 的通信机制,结合项目需求,软件除开机界面外,设计为三个功能窗口。分
别是模拟源窗口、数据回读窗口、数据分离窗口。
3.3.1 开机界面
开机界面显示软件名称和版本号以及软件功能入口。包括模拟源窗口、数据回读窗
口、数据分离窗口三个功能窗口。每个窗口都是功能独立,互不干扰。使用时,可以根
据具体需求选择对应的的功能按钮。开机界面如图 3.4 所示。

3.3.2 地面数据模拟窗口
地面数据模拟是整个系统的必要一环。在飞行试验前,有必要用模拟数据来检测记
录仪的工作情况。模拟源分为手动和自动两种模式。模拟源窗口界面如图 3.5 所示。
点击系统上电后,软件发指令给 CPU,控制继电器工作,系统上电。手动模式下可
以自由选择任意开关量和模拟量进行测试,方便检查系统某一路是否故障。自动模式下,
软件只发送一条指令。CPU 收到指令后,会自动上电,依次启动各路开关量和模拟量数
据,并记录在存储器中,实现操作自动化。测试台上都有相应的信号灯显示某一路开关
是否打开。右边窗口显示即时操作信息和反馈信息。
模拟源模式的工作时间可以自行控制,通常试验时间为 3-5 分钟。其中,每一路开
关量数据的开关时间均以数据的形式存存储器中,回读后可以通过数据直观的看到每个
开关的启动时间和顺序。图 3.4 <系统上电><自动模式>按钮均为为复用按钮,点击
一次就会变<系统断电><停止测试>。测试台中的主控 CPU 负责对收到的数据进行总
体的编帧存储。
3.3.3 数据回读窗口
数据回读是整个软件功能的核心部分。负责将已经编帧并存储到 Flash 中的数据回
读到上位机。硬件接口为百兆以太网接口芯片 W5300,采用 UDP 协议进行回读。回读
后的数据存储到桌面上,数据格式为.hex 文件。窗口界面如图 3.6 所示。
首先点击<系统上电>按钮,然后配置网络 IP 和端口号。点击<连接>按钮,界面显
示当前网络连接状态。接着选择存储器。系统装配有两个存储器芯片,且均有备份,确
保数据保存完整。点击<读取记录器信息>按钮,会在界面显示当前存储器的存储状态,
包括上电次数,数据大小等信息,用户可根据显示的信息选择读取次数和读取量,点击
<读主存储器>或者<读备存储器>开始读数。数据会保存到桌面,以读取时间命名。读取
结束后,文本框内会有提示。最后点击<停止读数>按钮,使 FPGA 端空闲。用户也可以
根据情况选择擦除存储器。界面右侧文本框内容为操作步骤。每一步操作和反馈均在下
方文本框内即时显示。每个按钮在上一步操作未完成之前,都是灰色不可用的,这样做
的目的是为了防止用户误操作。读取结束后点击<退出>按钮,退出当前界面,返回主界
面,执行下一步操作。
3.3.4 数据分离窗口
数据分离窗口的主要功能是对已经回读的原始数据文件进行分离。数据分离窗口界
面如图 3.7 所示。

图中每一个按钮都代表分离一路数据。点击每个按钮,自动弹出文件索引窗口,选
择分离已经回读的任意一次原始数据。分离结束后,弹出信息提示框表明分离结束。输
出的子数据文件存放到桌面上。通过分离数据,进一步观察分析每一路数据,与预先设
定好的模拟数据作对比,进而对整个系统的运行情况作出结论。
数据分离基本思路是按照不同通道数据的帧头进行分离。由于每个通道的数据都是
独立互不影响的,且数据格式固定,即帧头+帧计数+数据+校验和。所以按照帧头判断
可以很准确的将原始数据分离开来。分离过程程序设计流程图如图 3.8 所示

 信迈提供RK3399+LINUX QT软硬件及定制方案。

相关文章:

基于RK3399+Linux QT地面测试台多参数记录仪测试平台软件设计(二)

rk3399 是由本土芯片厂商瑞芯微&#xff08;Rockchip&#xff09;研发的高性能、低功耗“中国芯”。在 2016 年 4 月&#xff0c;rk3399 首次在香港举行的电子展上亮相。芯片使用六核大 LITTLE 处理器&#xff1a; 包括四核的 Cortex-A53 和双核的 Cortex-A72&#xff0c;主频可…...

追梦之旅【数据结构篇】——详解C语言实现动态版顺序栈

详解C语言动态实现顺序栈~&#x1f60e;前言&#x1f64c;预备小知识&#x1f49e;栈的概念及结构整体实现内容分析&#x1f49e;1.头文件编码实现&#x1f64c;2.功能文件编码实现&#x1f64c;3.测试文件的编写&#xff1a;&#x1f64c;总结撒花&#x1f49e;&#x1f60e;博…...

Ubuntu 使用Nohup 部署/启动/关闭程序

目录 一、什么是nohup&#xff1f; 二、nohup能做什么&#xff1f; 三、nohup如何使用&#xff1f; 四、怎么查看/关闭使用nohup运行的程序&#xff1f; 命令 实例 一、什么是nohup&#xff1f; nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令&#xff0c…...

Spring 用到了哪些设计模式

关于设计模式&#xff0c;如果使用得当&#xff0c;将会使我们的代码更加简洁&#xff0c;并且更具扩展性。本文主要讲解Spring中如何使用策略模式&#xff0c;工厂方法模式以及Builder模式。1. 策略模式关于策略模式的使用方式&#xff0c;在Spring中其实比较简单&#xff0c;…...

Linux上基于PID找到对应的进程名以及所在目录

Linux上基于PID找到对应的进程名以及所在目录前言找到进程的pid通过top命令查看通过 ps -ef |grep nignx进行查看通过端口号进行查看查看nginx进程目录前言 在一台新接触的服务器&#xff0c;却不熟悉搭建所在目录的时候&#xff0c;这时候就就可以通过ps查找进程&#xff0c;并…...

jvm知识点与面试题

jvm 1. 定义&#xff1a;Java虚拟机&#xff08;Java virtual machine&#xff09;&#xff0c;一种能够运行Java字节码的虚拟机。 1.1. Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 2. jvm基本结构&#xff1a; 2.1. 1 类加载…...

算法前缀和—Java版

前缀和概念 假设有数组 A[1,2,3,4,5,6,7] 为原数组&#xff0c;有数组 B作为A的前缀和数组&#xff0c;那么B[1,3,6,10,15,21,28]&#xff1b;可以发现B[i] A[0]....A[i]&#xff0c;即B[i]是数组A的前面i个数的总和。可以前缀和表示如下公式&#xff1a; B[i]∑j0iA[j]B[i]\s…...

拨开迷雾 看见vivo穿越周期的秘密

文|智能相对论作者|佘凯文任何一个行业都有周期性&#xff0c;就好像我们在做股票投资的时候&#xff0c;提到最多的就是周期规律&#xff0c;因为只有掌握规律才可以让我们赚到钱。所以不论是哪家公司都逃脱不了行业周期的宿命。行业寒冬方显强者本色就拿手机行业来说吧&#…...

浅谈常用的日志框架

文章目录1.为什么需要日志框架2.常见日志框架2.1.日志框架介绍2.2.市面上的日志框架3.Slf4j使用3.1.如何在系统中使用SLF4j3.2.可能存在的问题4.SpringBoot日志的默认配置5.SpringBoot指定日志文件6.切换日志框架1.为什么需要日志框架 通过日志的方式记录系统运行的过程或错误以…...

字节是真的难进,测开4面终上岸,压抑5个月,终于可以放声呐喊

这次字节的面试&#xff0c;给我的感触很深&#xff0c;意识到基础的重要性。一共经历了五轮面试&#xff1a;技术4面&#xff0b;HR面。 下面看正文 本人自动专业毕业&#xff0c;压抑了五个多月&#xff0c;终于鼓起勇气&#xff0c;去字节面试&#xff0c;下面是我的面试过…...

Bash初识

Bash初识 1.简介: 一.什么是shell&#xff1f; 用过计算机的人知道&#xff0c;我只要点点鼠标计算机就能按照我们的要求来进行相应的操作&#xff0c;那么&#xff0c;你有没有想过计算机为什么能够识别我们的操作呢&#xff1f;俗话说&#xff0c;人有人语&#xff0c;机有机…...

ElasticSearch Script 操作数据最详细介绍

文章目录ElasticSearch Script基础介绍基础用法List类型数据新增、删除nested数据新增、删除根据指定条件修改数据根据指定条件修改多个字段数据-查询条件也使用脚本根据指定条件删除nested中子数据数据根据条件删除数据删除之后结果创建脚本&#xff0c;通过脚本调用根据条件查…...

【黑盒模糊测试】路由器固件漏洞挖掘实战--AFL++ qemu_mode

前言 很久之前就想写AFL++的qemu_mode了,只是模糊测试专题的文章有些过于耗费时间,加上工作原因导致一直搁置。最近需要出差会用到黑盒模糊测试,所以就当做复习一遍,我记得Fuzzing 101也有一个qemu_mode的练习,有空的话下一篇文章更新吧~ 编写不易,如果能够帮助到你,希望…...

【java实现Word模板导出】Xdocreport和Freemaker

如果只是生成简单的word文件的话可以使用 Hutool 上手简单使用方便。 但如果需要导出内容比较复杂的word文件的话用那个就不合适了&#xff0c;这时候就需要Xdocreport这玩意了。 制作模板 新建一个word文档在需要插入变量的地方使用快捷键 Crtl F9 来生成一个域 然后右键单…...

Stable-Baselines 3 部分源代码解读 3 ppo.py

Stable-Baselines 3 部分源代码解读 ./ppo/ppo.py 前言 阅读PPO相关的源码&#xff0c;了解一下标准库是如何建立PPO算法以及各种tricks的&#xff0c;以便于自己的复现。 在Pycharm里面一直跳转&#xff0c;可以看到PPO类是最终继承于基类&#xff0c;也就是这个py文件的内…...

[业务逻辑] 订单超时怎么处理

文章目录1.订单的过程分析2.JDK自带的延时队列 (单机)3.RabbitMQ的延时消息 (消息队列方案)4.RocketMQ的定时消息 (消息队列方案)5.Redis过期监听 (Redis方案)6.定时任务分布式批处理 (扫表轮训方案)7.总结1.订单的过程分析 一个订单流程中有许多环节要用到超时处理 买家超时未…...

iOS上架及证书最新创建流程

目前使用uniapp框架开发app&#xff0c;大大节省了我们兼容多端应用的工作量和人手&#xff0c;所以目前非常缺乏ios上架和证书创建流程流程的文档假如你没有任何的打包或上架经验&#xff0c;参考本文有很大的收益。通常申请ios证书和上架ipa应用&#xff0c;是需要MAC电脑的&…...

python入门

Python是一种高级编程语言&#xff0c;由荷兰计算机科学家Guido van Rossum于1991年发明。Python语言具有简洁、清晰和易于阅读的语法&#xff0c;同时也拥有广泛的应用领域&#xff0c;包括Web开发、数据分析、人工智能、科学计算等。Python的特点是能够快速开发原型和简单易读…...

Linux部署java项目

Linux部署java项目启动虚拟机这部分的操作之前学习虚拟机时已经做过,可以参照之前的笔记即可推荐大家重新解压纯净版的RockyLinux来实现启动后登录rockylinuxsudo su -修改root用户密码passwd下面就切换到客户端软件连接虚拟机ifconfigifconfig | more查看ip地址使用Bvssh软件连…...

elisp 从简单实例开始.

elisp 从简单实例开始. 我们怎样用elisp 与电脑交互,先从简单实例开始, 逐渐掌握它的几个对象. 与电脑交互,总要有输入,输出,先看两个简单例子. 输入从minibuffer,输出可以是minibuffer 或者缓冲区. 一: 从minibuffer 中输入, 在指定缓冲中插入文字(insert)x ;;;;;;;;;;;;;;;;…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...