RK3568开发笔记(十):开发板buildroot固件移植开发的应用Demo,启动全屏显示

2023-09-19 12:21:57

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/133021990

红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…

瑞芯微开发专栏

上一篇:《RK3568开发笔记(九):开发板buildroot固件调通RS485口,运行项目中RS485协议调试工具Demo
下一篇:敬请期待…


前言

  上一篇,移植应用前的通讯接口工作和全屏工作都已经完成了。本篇移植开发的商业应用。


交叉编译好应用

  (略),参照《RK3568开发笔记(八):开发板烧写buildroot固件(支持hdmi屏),搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo测试


解决全屏标题栏占用问题

  交叉编译好了应用,放过去,跑起来没问题,也可以正常显示,但是一旦操作就出现被默认的qt程序占用。
  这是默认的应用:
  在这里插入图片描述
  这是正常全屏应用:
  在这里插入图片描述

  这是被占用之后的(点击任何地方,让应用获取焦点就这样了):
  在这里插入图片描述

  所以,这里理论上将原来的qt应用停掉,用我们的应用作为启动应用就可以了。


Buildroot固件系统将设置启动Qt应用

步骤一:定位到Qt启动的地方,验证标题栏

  一般linux系统大家会默认都在rcS里面加入一个界面启动脚本,界面启动脚本也在/etc/inid.d的S???里面。
  在这里插入图片描述

  首先我们先看下这个桌面进程是哪一个,先top,看到与i个QLauncher,杀掉他试试:
  在这里插入图片描述

Kill -9 685

  变灰了,看起来标题栏还是在:
  在这里插入图片描述

  于是我们,跑一下自己的应用测试验证一下,确实点击之后,标题栏还是被占用了,所以不是QLauncher的问题,是有一个灰色底色+任务栏,称之为控制台吧。

步骤二:定位到控制台,验证启动应用

  这个控制台可能是weton或者哪里的,不太清楚,咨询了官方查看了文档,好像是weston的:
  在这里插入图片描述

  所以直接干掉看效果:
  在这里插入图片描述

  干587

kill -9 587

  结果如下图:
  在这里插入图片描述

  确实是黑了,但是因此,我们使用界面的应用也启动不了:
  在这里插入图片描述

  这里陷入两难了,寻求官方支持。

步骤三:寻求官方支持求改weston的配置

  修改/etc/xdg/weston/weston.ini
  在这里插入图片描述

  在这里插入图片描述

  然后,再重启开发板测试:
  在这里插入图片描述

  再启动自己的应用:
  在这里插入图片描述

  可以启动了

步骤四:修改为自己的程序为开机启动

  前面已经定位了QLauncher,那么替换一下全路径就可以了。
  注意:这里要注意若是应用中使用了相对路径会直接换成调用脚本的路径为起始路径,这事经常容易犯的错误,且一时半伙定位不到,所以建议开发程序的时候,使用到路径一定要使用QApplication::applicationDir去获取可执行文件的类路径作为起始路径)
  在这里插入图片描述

  修改后为:
  在这里插入图片描述

  然后重启:

rboot

  重启就是我们的应用了,已经实测验证完了。


应用卡顿

  不用想就是RS485的上下拉过程了,因为应用的界面都做了二级缓存,所有的界面操作除开时钟之外,目前只有探测到变化才会修改一次界面值,而多次发送同样的数据,理论上不存在,以这个目标去论证。
  官方的usleep,睡眠是100字节才睡眠0.17ms左右,10016(107+2)约等于0.17ms,这样检测是不够的,直接使用QThread::msleep睡眠,之前做的海思的也是这个问题,具体值要根据测试来,这边测试最终是2ms的时候,不卡顿,当然,可以尝试1ms。
  在这里插入图片描述

  收发即使,收-即使处理了,发-PC即使收到了。
  手痒,测试一下1ms试试,发现1ms更顺利,所以改为1ms了。
  (这里不是105,回发的只有7字节,等于直接就是1ms之后就拉低了)


小结

  嵌入式linux系统开发就是软硬系统结合,问题出现确实比较多,而且涉猎的知识面比较广,对于基础也有一定要求的入门门槛。


上一篇:《RK3568开发笔记(九):开发板buildroot固件调通RS485口,运行项目中RS485协议调试工具Demo
下一篇:敬请期待…


若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/133021990

更多推荐

Mysql高级——索引优化和查询优化(1)

索引优化1.数据准备学员表插50万条,班级表插1万条。建表CREATETABLE`class`(`id`INT(11)NOTNULLAUTO_INCREMENT,`className`VARCHAR(30)DEFAULTNULL,`address`VARCHAR(40)DEFAULTNULL,`monitor`INTN

数据科学中的数据库简介

推荐:使用NSDT场景编辑器快速搭建3D应用场景用于高效视频、AI和图形的通用加速器数据科学中的数据库简介数据科学涉及从大量数据中提取价值和见解,以推动业务决策。它还涉及使用历史数据构建预测模型。数据库有助于对如此大量的数据进行有效的存储、管理、检索和分析。因此,作为一名数据科学家,您应该了解数据库的基础知识。因为它们

安卓页面绘制流程(3)Window注册

前言:本文属于安卓页面绘制流程的第3篇,主要介绍应用是如何把APP侧的Window向system进行注册的。主要分为2大块:第一块,APP侧在resume周期时向系统侧申请绑定。第二块,系统侧收到请求后处理绑定的流程。一.APP侧Window注册在上一篇文章中,我们已经讲过,在Activity的create周期内,其所

什么是Vue的自定义指令(custom directives)?如何自定义指令?

聚沙成塔·每天进步一点点⭐专栏简介⭐Vue.js的自定义指令⭐示例⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的

Learn Prompt-Prompt 高级技巧:MetaGPT

MetaGPT是一项引起广泛关注的研究成果,它引入了一个将人工工作流程与多智能体协作无缝集成的框架。通过将标准化操作(SOP)程序编码为提示,MetaGPT确保解决问题时采用结构化方法,从而减少出错的可能性。🎉开始阅读前,如果你对其他文章感兴趣,可以到欢迎页关注我们!「卡尔的AI沃茨」开源中文社区实时获得后续的更新和

网络安全进阶学习第二十课——CTF之文件操作与隐写

文章目录一、文件类型识别1、File命令2、Winhex3、文件头残缺/错误二、文件分离操作1、Binwalk工具2、Foremost3、dd4、Winhex三、文件合并操作1、Linux下的文件合并2、Windowsa下的文件合并四、文件内容隐写Winhex五、图片文件隐写1、图片混合2、LSB(最低有效位Least

PLC串口通讯和通讯接口知识汇总

在使用PLC的时候会接触到很多的通讯协议以及通讯接口,最基本的PLC串口通讯和基本的通讯接口你都了解吗?一、什么是串口通讯?串口是一种接口标准,是计算机上一种非常通用设备通信的协议。它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。典型的串口通讯标准常见有如下三种。EIARS232(通常简称“RS232”):

【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

文章目录一、命名空间namespace1、命名空间基本概念2、名称概念4、C语言的命名空间3、命名空间避免标识符冲突二、命名空间定义1、命名空间基本概念2、命名空间定义语法3、代码示例-命名空间定义使用三、命名空间使用1、命名空间默认访问方式2、使用命名空间3、使用默认的命名空间4、代码示例-使用命名空间四、标准流io

MySQL学习系列(11)-每天学习10个知识

目录1.数据库设计的关键因素2.使用存储过程和函数来提高性能和可重用性3.MySQL性能优化4.使用视图简化查询和提供数据安全性5.数据库备份和恢复策略的重要性和实践经验6.在分布式系统中保证数据一致性和可用性7.理解MySQL的复制和其在实际应用中的作用8.使用游标进行分页查询和遍历查询结果9.使用窗口函数10.数据

Redis 面试常见问答

本文出自:https://thinkinjava.cn作者:莫那鲁道1.什么是缓存雪崩?怎么解决?一般而言,我们会利用缓存来缓冲对数据库的冲击,假如缓存无法正常工作,所有的请求便会直接发送至数据库,进而导致数据库崩溃,从而导致整个系统崩溃。如何解决呢?2种策略(同时使用):对缓存做高可用,防止缓存宕机使用断路器,如果缓

深入学习 Redis - 分布式锁底层实现原理,以及实际应用

目录一、Redis分布式锁1.1、什么是分布式锁1.2、分布式锁的基础实现1.2.1、引入场景1.2.2、基础实现思想1.2.3、引入setnx1.3、引入过期时间1.4、引入校验id1.5、引入lua脚本1.5.1、引入lua脚本的原因1.5.2、lua脚本介绍1.6、过期时间续约问题(看门狗WatchDog)1.7

热文推荐