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

Linux上位机开发实战(开篇)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        传统的上位机开发,一般都是默认pc软件开发。既然是pc软件,一般来说都是基于windows平台开发。开放的框架,无非是wpf、qt、mfc这三种。但是事实上,很多嵌入式的平台,也需要进行界面开发。如果是单片机、类似于stm32这种,大多数都是用ucGUI或者是lvgl。而linux平台呢,非常建议大家用qt进行开发。有了图形界面之后,系统的很多交互都会非常方便,效率也比webserver+网页方便很多。

1、Qt开发的好处

        个人觉得qt开发最大的好处就是跨平台。简单来说,windows上面怎么做,linux平台就怎么做。这样写下来的代码,几乎不需要修改就可以port到嵌入式平台上面使用。

2、不需要安装虚拟机开发Qt

        目前市面上,已经有非常多的卡片电脑。类似于树莓派、鲁班猫这样的开发板,自己烧录好image之后,就可以开发了。常用的qt开发环境,直接apt-get下载即可,不需要做什么交叉编译、也不需要安装虚拟机。以前通过这种开发方式来进行上位机开发,这是很老的开发模式,效率也不高。所以,还是建议大家直接选择开发板进行二次开发。

3、开发板可以进行gdb调试

        现在的开发板非常强大,动不动都是4核cpu、6核cpu。板子上面除了gcc、g++之外,还有gdb工具。这也就是说,如果出现了编译错误,可以直接用gdb进行调试。和打印log相比较,gdb调试一开始的时候,也许需要记住很多的命令,等到用熟了之后,其实开发效率非常高。

4、编译不需要集成开发环境

        开发qt的时候,可能很多同学还是习惯用qt creator这种IDE进行开发。当然如果是画界面,用qt designer还是非常方便的。但是如果是编译调试,其实makefile & g++ & uic/moc/rcc命令的方式更加便捷、高效。

5、借助于deepseek之类的工具进行开发

        自从有了chatgpt/deepseek之类的工具之后,其实开发效率提高了很多。对于控件的选择、定时器、数据库、网络、图形绘制这种常见的工作,用工具来解决其实是最快的。也就是说,我们把命令告诉工具,这样生成的代码粘贴到我们自己的软件当中,这种方式其实效率是最高的。

        虽然生成的代码可能有问题,但是我们可以进一步去分析和调试,甚至于可以在这个基础之上进行优化。我们自己的价值,应该是怎么把应用和客户的需求bind在一起。

6、可以直接控制硬件

        和pc操作不同,很多嵌入式设备是和电气、机械、电机、camera直接沟通的。所以很多时候我们的算法结果,是可以直接操作其他硬件设备的,比如通过232/485/can/usb/网络去进行控制,这是pc上面所没有的体验。

7、稳定性和实时性考虑

        很多工业、医疗设备,对稳定性要求很高,基本是要求不能死机的。只有设备稳定了,才会要求后面的性能和易操作性,没有稳定一切都是0。

        另外,很多的arm soc旁边都有一个mcu,完全可以通过这个mcu做一些实时性的动作,这也是一般pc没有办法做到的。

8、户外便捷性

        嵌入式设备很多都是用电池的,在户外进行使用的。所以软件运行的过程当中,是不是需要进入睡眠模式,或者是低功耗模式,这也是一个考验。

9、启动速度

        原则上,嵌入式设备启动速度越快越好。甚至于说,图形界面先出来,然后边运行边加载,这总比长时间没有反应要强很多。这方面,非常建议大家多多看看其他家嵌入式设备界面的做法,争取能够做到取长补短。

10、软硬结合才是合适的商业模式

        纯软件开发,就目前的商业环境来说,很容易做成一锤子买卖。或者软件容易被人破解。但是如果我们是软件跟着嵌入式设备走,搭配一定的加密逻辑,这样就变成不单卖软件,而是去卖模块。这样客户拿到了实体东西,也不会觉得亏。要不然,只是一个软件交出去了,客户怎么着都不会满意。

        对于开发者来说,自己的利益得到了保护,也才有信心和去不停迭代软件和算法,形成一个良性的软件开发模式。毕竟自己的工作得到了认可和汇报,才方便进行后续的开发工作。

        和pc上位机比较,嵌入式成本上优势很大,这也是嵌入式设备长盛不衰的一个重要原因。

相关文章:

  • 认识vue2脚手架
  • LangChain4j开发RAG入门示例
  • Unity Dots从入门到精通之 Prefab引用 转 实体引用
  • QT:TCP示例
  • linux查看定时任务与设置定时任务
  • C#的判断语句总结
  • C++面试题:C++怎么避免头文件循环引用?
  • 游戏引擎学习第146天
  • 学习小程序开发--Day1
  • 学习网络安全需要哪些基础?
  • C++单例进化论
  • P8686 [蓝桥杯 2019 省 A] 修改数组--并查集 or Set--lower_bound()的解法!!!
  • 设计模式 一、软件设计原则
  • Spring源码探析(二):BootstrapContext初始化深度解析(默认配置文件加密实现原理)
  • [算法笔记]cin和getline的并用、如何区分两个数据对、C++中std::tuple类
  • uniapp版本加密货币行情应用
  • Unity DOTS从入门到精通之EntityCommandBufferSystem
  • C#模拟鼠标点击,模拟鼠标双击,模拟鼠标恒定速度移动,可以看到轨迹
  • 【vitepress】如何搭建并部署自己的博客网站
  • sqlserver中的锁模式 | SQL SERVER如何开启MVCC(使用row-versioning)【启用行版本控制减少锁争用】
  • 巴基斯坦军方:印度导弹袭击巴首都附近空军基地
  • 中非民间对话在赞比亚举行
  • 长期对组织隐瞒真实年龄,广元市城发集团原董事韩治成被双开
  • 江西暴雨强对流明显,专家:落雨区高度重叠,地质灾害风险高
  • 商务部:中方愿同各国一道加强合作,促进跨境电商健康可持续发展
  • 商务部再回应中美经贸高层会谈