前言
上一篇,移植应用前的通讯接口工作和全屏工作都已经完成了。本篇移植开发的商业应用。
交叉编译好应用
(略),参照《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系统开发就是软硬系统结合,问题出现确实比较多,而且涉猎的知识面比较广,对于基础也有一定要求的入门门槛。
33021990)