正点原子linux开发板怎么调试

正点原子linux开发板怎么调试,第1张

ui

正点原子Linux开发板——Qt串口上位机实验

门牙会稍息

原创

关注

3点赞·53人阅读

前言:

最近在学习嵌入式qt开发,然后跟着教程编写了一个简单的串口上位机程序,在编写的时候还算比较顺利,但在调试的时候花了点功夫,折腾了一下午。最后还是理清了思路,解决了问题,特写此博客进行记录和总结。

串口上位机界面设计:

整个软件的界面我都是用ui来设计的,其实也可以用代码,但是想了想有好多布局相互嵌套比较麻烦。最后就使用了ui界面来设计。

ui界面设计

串口上位机程序功能设计:

然后像串口对象初始化,槽函数,一些逻辑关系都用代码来实现,头文件就只有一些变量、槽的定义。

头文件

#include "widget.h"

#include "ui_widget.h"

#include <QMessageBox>

Widget::Widget(QWidget *parent)

: QWidget(parent)

, ui(new Ui::Widget)

{

ui->setupUi(this)

//lcd屏的分辨率是1024X600

this->setFixedSize(QSize(1024, 600))

//new 一个QSerialPort对象

serialPort = new QSerialPort(this)

//通过foreach语句将windows或imx6ull可用串口识别出来,并添加至对应的下拉选择框

QStringList serialList

foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){

serialList += info.portName()

}

ui->comboBox->addItems(serialList)

//设置串口的信号与槽

connect(serialPort, SIGNAL(readyRead()), this, SLOT(readData()))

}

Widget::~Widget()

{

delete ui

}

void Widget::on_radioButton_clicked(bool checked)

{

//点击“打卡串口”button之后的一些串口配置 *** 作,和一些逻辑关系

if(checked){

//设置串口端

serialPort->setPortName(ui->comboBox->currentText())

//设置波特率

serialPort->setBaudRate(ui->comboBox_2->currentText().toInt())

//设置停止位

serialPort->setStopBits(QSerialPort::StopBits(ui->comboBox_4->currentText().toInt()))

//设置数据位

serialPort->setDataBits(QSerialPort::DataBits(ui->comboBox_6->currentText().toInt()))

//设置校验位

switch(ui->comboBox_5->currentIndex()){

case 0:

serialPort->setParity(QSerialPort::Parity::NoParity)

break

case 1:

serialPort->setParity(QSerialPort::Parity::EvenParity)

break

case 2:

serialPort->setParity(QSerialPort::Parity::OddParity)

break

case 3:

serialPort->setParity(QSerialPort::Parity::SpaceParity)

break

case 4:

serialPort->setParity(QSerialPort::Parity::MarkParity)

break

default:

break

}

serialPort->setFlowControl(QSerialPort::NoFlowControl)

if(!serialPort->open(QSerialPort::ReadWrite)){

QMessageBox::about(this, "串口打开错误提示", "可能被占用了")

return

}

//打开串口之后其他的选择按钮设置成不可用

ui->comboBox->setEnabled(false)

ui->comboBox_2->setEnabled(false)

ui->comboBox_4->setEnabled(false)

ui->comboBox_5->setEnabled(false)

ui->comboBox_6->setEnabled(false)

ui->radioButton->setText("关闭串口")

}

else{

serialPort->close()

ui->comboBox->setEnabled(true)

ui->comboBox_2->setEnabled(true)

ui->comboBox_4->setEnabled(true)

ui->comboBox_5->setEnabled(true)

ui->comboBox_6->setEnabled(true)

ui->radioButton->setText("打开串口")

}

}

void Widget::readData()

{

//将串口中的数据打印到textBrowser中

ui->textBrowser->insertPlainText(serialPort->readAll())

}

void Widget::on_pushButton_clicked()

{

//点击“发送”button之后,将textEdit中的内容写入串口

serialPort->write(ui->textEdit->toPlainText().toUtf8())

}

void Widget::on_pushButton_2_clicked()

{

//清屏 *** 作

ui->textEdit->clear()

ui->textBrowser->clear()

}

登录后复制

在windows端编写好程序之后,将工程文件发送到ubuntu进行qmake、make最后通过scp将ARM的可执行文件发送到开发板,接下来就是验证了

我用的是正点原子出厂的系统,所以在验证的时候需要使用到一个串口来连接到开发板执行编写好的上位机程序,所以一个串口就被占用了,正点原子教程视频就用开发板的另一个串口来进行测试

正点原子教程测试方式

因为放假回了家,我也没有带太多的东西,usb转ttl模块放在了学校。所以我在想怎么就用一个串口来完成实验。困扰我的就是唯一的一个串口必须留个上位机,然后要怎么执行开发板上的串口上位机程序?最初我想到了可以使用网络通过Xshell远程连接到开发板就可以执行,唯一的串口就拿来验证。

解决完上位机软件怎么在imx6ull上执行的问题,接下来就是验证了。验证的时候又出现了一些问题,上位机软件不像想象的那样一边发数据,一边就接收对应的数据,而出现了一些imx6ull的信息,好像还可以输入命令,感到非常奇怪。

我以为我的软件有问题,就在windows上换了一个串口软件,结果还是出现了类似的情况

最后也是在不断猜想和测试之后找到了原因,就是应因为我在给开发板上电的时候接入了串口线,然后先打开了windows上的串口,然后就使用到了串口,导致就相当于有一个串口控制imx6ull开发板,像Xshell中通过串口连接开发板一样。然后我尝试在windows的上位机软件输入命令想打开一个qt程序,最后也是成功打开证实了猜想

执行./list命令打开了蛇姐list程序(qt程序的路径是/home/root/qt_project/list)

如果想要实现实验最初windows和imx6ull两个上位机互换数据的效果的话。要先通过windows中的上位机软件输入命令来打开imx6ull的上位机软件,这样相当于windows中的上位机连接的就是imx6ull的上位机了,而不是直接控制imx6ull了,之后就可以正常收发数据了。

总结:

学了qt快半个月了,这个串口上位机算是一个比较综合的练习了,结合了ui和代码设计。加上最后的调试也是收获颇多,如果有usb-ttl模块的话验证步骤就会更简单。

安装的桌面版本不同效果是不一样的。

一、Unity

Unity是Ubuntu自家的桌面环境方案,由Ubuntu打造并面向Ubuntu推出。目前还没有其它Linux发行版采用Unity作为桌面方案。

在Unity当中,我们可以感受到Ubuntu对于桌面环境视觉定位的理解,而且实际效果与传统Windows桌面没有太大区别。Unity最具特色的一项功能名为“scopes”,允许大家通过所谓“dash”搜索不同类型的网络与本地内容类型——当然也包括我们已经安装在系统当中的应用程序。它同时也是手机版Ubuntu系统的核心所在。Unity还拥有其它一些独特的设计,例如“HUD”就允许用户直接搜索某款程序中的菜单选项,并通过键盘直接加以启用。

二、GNOME 3

与其它各大主流高人气桌面Linux发行版一样,Ubuntu曾经一度使用过GNOME桌面方案的早期版本。不过自从GNOME 2逐步升级到GNOME 3乃至GNOME Shell桌面之后,Ubuntu决定自行探索发展道路。但GNOME并未因此放弃希望。GNOME Shell迎来了可观的提升,而且顺利打破了人们对于前代方案的成见。即使是那些更习惯于传统桌面环境的用户,也可以通过GNOME提供的经典模式找到熟悉的感觉。GNOME同时也利用扩展拥有了完整的可配置能力。

三、KDE Plasma 5

从传统角度讲,KDE与GNOME都属于Linux阵营中最具影响力的桌面环境选项。GNOME桌面阵营目前已经分裂成了GNOME、Unity、Cinnamon以及MATE,但KDE项目却仍然保持着旺盛的生命力。Plasma 5界面也拥有了前所未见的精致表现。

KDE在可配置性方面一直优于GNOME以及由GNOME衍生而成的各类Linux发行版。不过这到底是不是件好事,仍然取决于用户的实际情况。有些朋友热衷于探索繁多选项所带来的自由搭配空间,但也有些用户更倾向于使用GNOME那样的精简化方案。随着时间的推移,KDE已经在简化的道路上取得了相当可观的进展——现在很多高级选项都会被隐藏起来,用户可以直接享受其搭配合理的默认效果。

四、Cinnamon

Cinnamon原本专门面向面向Linux Mint所打造,但如今其已经在其它多种Linux发行版上找到了新的表演舞台,具体包括Ubuntu、Fedora以及Debian等等。

采用Cinnamon桌面方案的Linux Mint

最初作为GNOME 3 fork之一的Cinnamon采用现代代码编写而成,但同时又通过重新调整为用户提供一套更为传统的桌面界面。就在GNOME舍弃了任务栏以及开始菜单类界面来显示已安装应用程序的同时,Cinnamon则选择围绕这些更为传统的特性构建起自己的桌面环境。另外,相较于努力裁撤功能与选项以简化桌面效果的GNOME以及强调智能手机平台的Unity,Cinnamon始终在为桌面用户提供更多新增功能及改进。

五、MATE

MATE与Cinnamon是两种非常相似的桌面环境——事实上,Linux Mint同时支持Cinnamon或者MATE桌面环境。尽管Cinnamon采用了GNOME 3中的一部分代码并将其fork成一套更为传统的桌面,MATE却做得更为彻底——采用更加陈旧的GNOME 2桌面代码,并在现代Linux发行版当中对其进行更新。除了Mint之外,MATE也适用于诸如Fedora、Ubuntu以及Debian等其它Linux发行版。

六、Lxde

采用Lxde桌面的Lubuntu系统

Lxde目前已经成为轻量级兼用户友好桌面环境领域的王者。如果大家手头有一台古董级计算机,但又希望让它排上点用场,那么选择Lxde绝对没错。相较于现代Linux桌面环境,Lxde对于图形硬件、CPU时钟频率以及内存的要求都低得多。在这里我们虽然看不到令人眼花缭乱的图形特效,但却能够获得最为基本的轻量级桌面环境使用体验,并顺利启动并管理自己的应用程序。

七、Xfce

采用Xfce桌面的Xubuntu系统

Xfce目前的处境其实有点尴尬。从传统角度讲,它本来是仅次于GNOME与KDE的第三大人气选项。它在轻量化水平上稍优于KDE与GNOME。而在GNOME 3正式发布之后,Xfce已经成为最顶尖的“传统”Linux桌面环境。

那么你还觉得Linux的UI难看吗?

以上回答由东莞市万里行橡胶有限公司提供,望采纳。

C++的话,现在用的比较多的是qt,它是跨平台的。

另外还有Ultimate++,wxWidgets等,其中wxWidgets是基于GTK的,GTK是一个C的界面库,也是跨平台的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8786080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-21
下一篇 2023-04-21

发表评论

登录后才能评论

评论列表(0条)

保存