自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 Buildroot构建Qt根文件系统-思维导图-学习笔记-基于正点原子阿尔法开发板

介绍了如何使用Buildroot构建支持Qt的根文件系统。首先,下载并解压Buildroot源码,接着安装必要的库以支持图形配置菜单。通过"make menuconfig"命令打开配置菜单,或者编辑IMX6ULL Qt配置文件,设置ARM架构、工具链、Qt5模块、系统属性、文件系统和网络配置。使用更新后的镜像源提高下载速度,之后运行"make -j 16"命令构建根文件系统。完成后,将生成的rootfs.tar文件烧写到TF卡的rootfs分区,并在开发板上测试启动。启动成功后,登录系统并验证触摸功能...

2024-08-26 20:05:14 1711

原创 嵌入式Qt移植之编译Qt项目-思维导图-学习笔记-基于正点原子阿尔法开发板

介绍了嵌入式Qt移植中编译Qt项目的过程。首先,需要安装交叉编译器,可以参考给出的链接。接着,使用交叉编译好的qmake编译Qt项目,需要将交叉编译工具链的路径添加到环境变量PATH中。然后,通过查找qmake位置,进入Qt项目,使用qmake生成Makefile,再通过make命令编译生成可执行文件。最后,将生成的可执行文件拷贝到开发板文件系统下即可使用。如果使用Busybox根文件系统,需要手动打开网络,包括启动网络服务、获取IP、设置用户密码等步骤。

2024-08-26 14:16:05 389

原创 嵌入式Qt移植之Qt部署到Busybox根文件系统-思维导图-学习笔记-基于正点原子阿尔法开发板

将编译好的Qt部署到Busybox根文件系统中的具体步骤。首先,将配置好的TF卡插入Ubuntu系统,并将qt-everywhere-src-5.12.9目录下的arm-qt-imx6ull拷贝至/usr/lib目录。然后,将TF卡插入开发板启动,编辑/etc/profile文件以配置Qt的环境变量,确保更改生效。为了支持Qt程序显示中文,需将Windows系统下的中文字库复制到Linux系统中的/usr/share/fonts目录,注意仅限于个人学习用途。最后,通过重启设备并运行编译好的Qt示例程序...

2024-08-25 19:11:47 734

原创 嵌入式Qt移植之tslib部署到Busybox根文件-思维导图-学习笔记-基于正点原子阿尔法开发板

介绍了如何在嵌入式Qt移植过程中,将tslib部署到Busybox根文件系统。首先,通过Ubuntu虚拟机将TF卡挂载,删除出厂文件系统,并将Busybox根文件系统解压到TF卡的rootfs分区,确保开发板能从SD卡启动。接着,将编译好的tslib拷贝到Busybox根文件系统的/usr/lib目录。为了避免与已存在的tslib冲突,需要重新配置tslib的环境变量。配置过程中,需要注意电阻屏和电容屏的不同需求,尤其是对于电容屏的校准文件要慎重处理。最后,通过重启开发板并运行ts_test,确......

2024-08-25 15:56:13 586

原创 编译 ARM 平台 Qt5.12.9 源码-思维导图-学习笔记-基于正点原子阿尔法开发板

编译ARM平台的Qt5.12.9源码分为几个主要步骤。首先,下载合适的平台源码,其中Windows平台生成.dll库文件,Linux平台生成.so库文件,这些动态库在运行时被加载到应用程序中。下载源码可通过Qt官方网站或使用wget指令完成。在下载和解压过程中,用户需要特别注意路径和文件名的准确性。接下来,编辑qmake.conf文件以配置相关编译器及路径。为避免手动输入错误,正确配置文件已上传至gitee,用户可直接下载并编辑,确保配置路径准确。配置编译选项时,使用./configure -help...

2024-08-24 13:45:00 978

原创 嵌入式Qt移植之tslib编译-思维导图-学习笔记-基于正点原子阿尔法开发板

Tslib是一个用于处理触摸屏事件的开源库,作为驱动层与应用层之间的适配层,能够将触摸屏的坐标信息传递给Qt进行处理。下载Tslib源码可以通过git地址(https://github.com/kergoth/tslib)或者从开发板光盘路径中获取。在Ubuntu中,将下载的压缩包解压并进入相应目录。编译Tslib源码需要先安装autoconf、automake、libtool和pkg-config等软件,然后执行autogen.sh生成Makefile。接下来,使用特定的配置命令`./configure

2024-08-24 09:00:00 478

原创 嵌入式Qt移植前期准备-思维导图-学习笔记-基于正点原子阿尔法开发板

Qt移植是为了在自制系统或资源受限的嵌入式系统上运行Qt应用,或者使用特定Qt版本。可以通过编译Qt源码或使用开源构建框架如Buildroot和Yocto来移植。编译Qt源码需要从官网获取源码并编译,生成.so库文件;Buildroot方便构建,Yocto则相对复杂且庞大。准备嵌入式Qt移植需要安装通用型交叉编译器,特别是针对ARM架构的交叉编译器,如Linaro GCC编译工具链。下载并解压Linaro GCC编译器到Ubuntu系统的指定目录,修改环境变量并重启系统即可完成交叉编译器的安装和验证..

2024-08-23 17:10:30 717

原创 Qt串口编程Serial Port-思维导图-学习笔记-基于正点原子阿尔法开发板

正点原子的 I.MX6U 开发板出厂系统已预配置两路串口,其中UART1用于调试,UART3可编程。在Qt串口编程中,需在项目文件中添加串口模块支持,并在mainwindow.h中声明相关变量和方法。mainwindow.cpp中实现了界面布局初始化、串口扫描、波特率和数据位等参数的初始化,以及串口打开、关闭和数据发送接收的功能。通过垂直和网格布局,用户界面支持全屏显示,并可根据系统可用串口动态更新选项。编程时,由于UART1已被占用,开发者需使用UART3进行串口通信。

2024-08-22 09:45:00 1161

原创 Qt使用开发板上的按键-思维导图-学习笔记-基于正点原子阿尔法开发板

如何使用 Qt 在 I.MX6U 开发板上监测按键并显示按键状态。首先,出厂内核设备树在路径 arch/arm/boot/dts/imx6ull-14x14-evk.dts 中已将 KEY0 按键注册为 gpio-keys 类型设备,键值为 114,对应 Qt 的 Key_VolumeDown 键值。该按键在普通键盘上找不到,但某些笔记本电脑可以通过 FN + F6 等组合键模拟。在 Windows/Ubuntu 上使用 Key_Down 进行测试,而在开发板上则使用 KEY0 按键。为了监测 KEY0..

2024-08-21 14:45:00 819

原创 Qt点亮开发板的一个LED-思维导图-学习笔记-基于正点原子阿尔法开发板

使用 Qt 在开发板上控制一个 LED。首先,界面初始化设置在嵌入式系统中根据屏幕大小进行全屏显示,按钮居中显示。由于出厂系统中 LED 的触发方式为心跳方式,为方便控制,需要通过 system() 函数将其触发方式改为 none。接着,描述了设置 LED 的方法,包括写入“0”或“1”来分别关闭和开启 LED,在写入之前先读取其当前状态以防止其他设置冲突。获取 LED 状态的代码负责读取 LED 的当前状态,并显示在按钮上。最后,设置 LED 状态的方法是一个槽函数,由按钮点击触发,负责切换 LED 状态

2024-08-21 09:15:00 589

原创 I.MX6U交叉编译Qt项目-思维导图-学习笔记-基于正点原子阿尔法开发板

在I.MX6U平台上交叉编译Qt项目需要几个步骤。首先,将交叉编译工具fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh拷贝至Ubuntu系统并修改其权限,然后运行脚本安装工具,默认目录为/opt/fsl-imx-x11/4.1.15-2.1.0。使用前需启用环境变量source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa

2024-08-20 15:00:00 487

原创 UDP 通信-Qt-思维导图-学习笔记

UDP(用户数据报协议)是一种轻量级、无连接且不可靠的协议,适用于需要快速响应的场景,如文字聊天和音视频通信。其优点是资源消耗小、处理速度快,但缺点是数据传输不可靠,可能会丢包。QUdpSocket类提供了通过UDP进行数据报发送和接收的功能,常用方法包括bind()、writeDatagram()和readDatagram()。UDP通信有三种模式:单播、广播和组播。单播是端对端通信,广播将消息发送到同一局域网内的所有主机,而组播则是将消息发送到特定的主机组。组播使用D类IP地址范围......

2024-08-20 09:30:00 2532

原创 TCP 通信-Qt-思维导图-学习笔记

TCP通信的基本概念和实现方法,包括服务端和客户端的操作步骤。TCP是一种面向连接、可靠且基于字节流的传输层通信协议。建立TCP连接需要服务端监听特定的端口并等待客户端连接,客户端通过指定的IP地址和端口号连接服务端,成功连接后即可进行数据的发送和接收。本文还详细讲述了在Qt框架中如何实现TCP通信,服务端通过QTcpServer监听连接请求,并通过QTcpSocket进行数据的读写;客户端使用QTcpSocket连接服务端并进行通信。实际应用中,需要选择正确的IP地址和未被占用的高端口号进行监听和连接..

2024-08-19 14:15:00 1374

原创 Qt网络编程基础-思维导图-学习笔记

Qt网络编程的基础知识,涵盖了TCP/IP客户端和服务器的实现,以及如何获取本机网络信息。Qt网络模块提供了编写TCP/IP客户端和服务器的类,如QTcpSocket用于实现TCP客户端功能,QTcpServer用于实现TCP服务器功能,以及QUdpSocket用于实现UDP通信。高级类如QNetworkRequest、QNetworkReply和QNetworkAccessManager用于执行通用协议的网络操作。网络配置管理类包括QNetworkConfiguration......

2024-08-19 08:45:00 540

原创 绘图与图表-Qt-思维导图-学习笔记

在绘图与图表程序中,QPainter类是绘图系统的核心,用于直接操作绘图。QWidget类作为绘图“画布”,提供绘图区域。通过重写paintEvent()方法,可以实现自定义的绘图操作及刷新。当界面初始化或需要刷新时,该事件会自动触发。应用实例展示了如何使用QPainter在窗口中心绘制并旋转CD图片,每100ms旋转1度角。QChart模块提供了绘制常见图表的接口,如曲线图、折线图等,且不需要学习第三方组件。在程序中,创建QSplineSeries对象表示曲线,QChart对象表......

2024-08-18 08:30:00 2161

原创 多线程-Qt-思维导图-学习笔记

继承 QThread 的线程继承 QThread 是创建线程的常见方法。在这种方式中,只有 run() 方法在创建的线程里执行,其他方法即使属于子线程类也在主线程内执行。用户需要重写 run() 方法,将耗时操作写在其中。应用实例中,通过 QThread 类继承线程,并在 MainWindow 类中使用,通过按钮开启线程。当线程执行完成时,发送 resultReady 信号到主线程。继承 QObject 的线程继承 QObject 类创建线程更加灵活,可以通过 moveToThread() 方...

2024-08-18 06:00:00 983

原创 文本读写-Qt-思维导图-学习笔记

QFile类提供了读取和写入文件的接口,是嵌入式系统中最简单的方法之一。QFile可用于读写文本和二进制文件,并能与QTextStream或QDataStream一起使用。文件路径必须使用‘/’分隔符,基本操作包括检查文件存在、删除文件、打开和关闭文件等。QFile::open()函数需要传递QIODevice::OpenModeFlag枚举类型参数,以决定文件的打开方式。QTextStream类提供了一个方便的接口来读写文本,常与QFile结合使用。通过流操作符“”,可以方便地读写...

2024-08-17 14:45:00 557

原创 项目控件组(基于项)Item-Based-Qt-思维导图-学习笔记

QListWidget是一种继承自QListView的控件,提供基于项的列表管理,允许用户方便地添加和删除项目。相比QListView,QListWidget更易用,用户无需自行建模。一个典型的用法示例是创建一个QListWidget来显示音乐文件列表,并添加一个按钮触发文件选择操作。当用户点击按钮时,调用系统文件打开窗口并过滤只显示.mp3后缀的文件。用户选择后,这些文件路径将作为项添加到QListWidget中。QTreeWidget继承自QTreeView,提供预定义树模型的树视图,适合管理和显示..

2024-08-17 08:15:00 889

原创 项目视图组(基于模型)Model-Based-Qt-思维导图-学习笔记

Qt 提供了一系列基于模型的视图组件,用于展示和管理数据。这些视图组件包括 QListView、QTreeView、QTableView、QColumnView 和 QUndoView。QListView 继承自 QAbstractItemView,提供非分层的列表或图标视图,主要区别于基于项的 QListWidget,它需要使用模型来减少数据冗余并提高效率。QTreeView 用于展示树形结构的数据,通过 QStandardItemModel 构建树状模型。QTableView 提供表格视图,通过设置..

2024-08-16 14:00:00 541

原创 容器(Containers)-Qt-思维导图-学习笔记

容器(Containers)在Qt中用于组织和管理界面元素。QGroupBox 提供分组框功能,通常用于包含和组织一组相关的控件。QScrollArea 允许在其子部件超出可见范围时使用滚动条查看内容。QToolBox 和 QTabWidget 分别通过选项卡显示多个小部件和页面,以节省界面空间。QStackedWidget 则提供一个小部件堆栈,通过信号槽机制在不同页面间切换。QDockWidget 允许小部件在 QMainWindow 内停靠或浮动,可配置其初始停靠区域和移动限制。每种容器都有.....

2024-08-16 09:15:00 734

原创 空间间隔组(Spacers)-Qt-思维导图-学习笔记

QSpacerItem 是一个继承自 QLayoutItem 的类,主要用于在布局中提供空白或空间间隔。它可以创建水平间隔(Horizontal Spacer)和垂直间隔(Vertical Spacer),帮助调整子部件之间的距离。使用 QSpacerItem,开发者可以灵活地控制布局的结构和外观。在实际应用中,QSpacerItem 经常与按钮等控件结合使用。例如,在一个垂直布局中,可以添加一个垂直间隔和一个按钮,而在一个水平布局中,则可以添加多个按钮和一个水平间隔。通过这种方式,可以实现良好的...

2024-08-15 14:00:00 703

原创 布局管理(Layouts)-Qt-思维导图-学习笔记

Qt 提供了丰富的布局管理类,包括 QBoxLayout、QGridLayout、QFormLayout 和 QStackedLayout,它们都继承自 QLayout。QBoxLayout 提供水平或垂直排列子部件的功能,通过将父布局的空间分成多个框来管理子部件。QGridLayout 则将空间划分为行和列,适合需要精确对齐的布局,并可以通过设置行列比例来控制布局的伸缩性。QFormLayout 专注于表单布局,将标签和输入部件按行排列,适用于简单的表单界面。QStackedLayout 允许在多个子..

2024-08-15 08:15:00 565

原创 显示窗口部件(Display Widgets)-Qt-思维导图-学习笔记

在Qt Designer的显示窗口部件中,提供了10种用于显示内容的小部件,包括QLabel、QTextBrowser、QGraphicsView、QCalendarWidget、QLCDNumber和QProgressBar等。QLabel用于显示文本或图像,适合单一图像展示;QTextBrowser则是带有超文本导航功能的文本浏览器;QGraphicsView用于可视化QGraphicsScene的内容。QFrame是所有有框架窗口部件的基类,能够绘制各种框架形状,如Box......

2024-08-14 14:15:00 1014

原创 输入窗口部件(Input Widgets)-Qt-思维导图-学习笔记

Qt Designer 提供了16种输入部件,用于开发不同类型的用户界面控件。这些部件包括组合框(ComboBox)、字体组合框(FontComboBox)、单行编辑框(LineEdit)、文本编辑框(TextEdit)、纯文本编辑框(PlainTextEdit)、数字旋转框(SpinBox)及其变种双精度数字旋转框(DoubleSpinBox)、时间编辑框(TimeEdit)、日期编辑框(DateEdit)、日期时间编辑框(DateTimeEdit)、数字拨盘框(Dial)、水平和垂直滚动条

2024-08-14 10:15:00 817

原创 按钮(Buttons)-Qt-思维导图-学习笔记

按钮是 Qt 中常用的控件,广泛应用于嵌入式系统和 PC 端的界面交互中。Qt 提供了六种内置按钮部件,包括 QPushButton、QToolButton、QRadioButton、QCheckBox、QCommandLinkButton 和 QDialogButtonBox。QPushButton 是最常用的下压按钮,常用于触发命令或事件。QToolButton 则多用于工具栏中的快速访问按钮,通常显示图标。QRadioButton 提供互斥选择功能,适合“多选一”场景。QCheckBox 支持多选多,

2024-08-13 14:45:00 978

原创 Qt信号与槽-思维导图-学习笔记

Qt的信号与槽机制是其编程的基础,使得界面组件的交互操作更加直观和简单。信号(Signal)是特定情况下被发射的事件,如按钮点击等;槽(Slot)是对信号响应的函数,可以在类的任意部分定义。使用QObject::connect()函数可以将信号和槽关联起来。连接信号与槽的规则要求信号与槽的参数个数和类型需一致,并且需要在类的定义中加入Q_OBJECT宏。在实际项目中,可以通过在头文件声明信号和槽,并在源文件中实现槽函数,然后使用connect()函数连接信号与槽。Qt提供了大量预定义好的信号与槽......

2024-08-13 10:15:00 766

原创 Qt环境搭建-思维导图-学习笔记

在Windows系统中,用户可以从Qt官网下载Qt 5.12.9安装包,建议使用迅雷加速下载。安装时需断网,选择安装目录和组件,同意许可协议后完成安装,并启动Qt Creator。在Ubuntu系统中,首先准备Ubuntu 18.04镜像文件并创建虚拟机。下载Qt安装包后,通过FTP发送到Ubuntu,安装vsftpd服务并配置,使用FileZilla传输文件。通过wget命令下载Qt安装包并赋予执行权限,使用sudo权限安装Qt,断网后配置目录和组件,完成安装并启动Qt Creator......

2024-08-10 10:15:00 606

原创 CAN 应用编程基础-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

CAN(控制器局域网络)是一种ISO国际标准化的串行通信协议,最初由德国博世公司开发,旨在解决汽车电子控制系统之间的通讯问题,减少信号线数量。CAN已成为欧洲汽车网络的标准协议,并应用于工业自动化、医疗设备等领域。CAN采用多主控制方式,允许所有单元在总线空闲时开始发送消息。其具有高位速率、高抗电磁干扰性和强错误检测能力。CAN总线通过两根线(CAN_H和CAN_L)连接,节点通过差分电压传输信号。CAN协议参考了OSI七层模型,但只定义了传输层、数据链路层和物理层......

2024-08-08 15:15:00 1037

原创 socket 编程基础(网络编程)-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

socket编程是一种在Linux下的进程间通信机制,用于不同主机上或同一主机上应用程序之间的通信。它通常采用客户端与服务器的模式进行通信,多个客户端可以同时连接到服务器。开发人员通过调用内核提供的socket接口来开发应用程序,socket作为应用层与TCP/IP协议的中间软件抽象层,简化了开发过程。socket编程广泛应用于网络程序设计,并且基于BSD socket标准的应用程序可以方便地移植到不同平台。编程接口包括创建套接字的socket()函数、绑定IP地址和端口的bind()函数......

2024-08-08 10:15:00 572

原创 网络基础知识-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

网络通信是不同主机上的进程间通信,使用套接字(Socket)实现数据传输。网络通信分为硬件层、驱动层和应用层,数据通过网络连接(有线或无线)传输,涉及TCP/IP等协议。TCP/IP模型简化了OSI七层模型,分为应用层、传输层、网络层和网络接口层。数据在传输中需经历封装和拆封过程。IP地址是标识互联网主机的唯一标识,分为A、B、C、D、E类,每类地址有特定用途和范围。TCP协议通过三次握手建立连接、四次挥手关闭连接,提供可靠传输。UDP协议无连接、不可靠,传输速度快,适用于实时视频传输等。端口号用于....

2024-08-07 15:15:00 1144

原创 音频应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

ALSA(高级Linux声音体系)是Linux系统下的主流音频架构,替代了旧版的OSS,提供音频和MIDI支持。ALSA框架设计复杂,采用分离和分层思想,在应用层提供alsa-lib库(标准API)以简化音频硬件控制。alsao-lib库为开发者提供统一接口,隐藏驱动层实现。混音器配置通过alsamixer和amixer工具实现,核心在alsa-lib库的Mixer Interface模块。PCM插件扩展PCM设备功能,如hw插件直接与ALSA内核通信,提供无转换的原始通信。plughw插件提供....

2024-08-07 10:00:00 1933

原创 看门狗应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

看门狗定时器是一种计数器设备,若在指定时间内未复位,会触发系统重启或中断信号。在I.MX6UL/I.MX6ULL SoC中,集成了两个看门狗定时器:WDOG1 和 WDOG2,其中WDOG1可产生中断信号和复位CPU。Linux系统下,看门狗设备节点通常在/dev/目录下,系统默认节点为/dev/watchdog。应用程序通过ioctl()函数控制看门狗,包括打开设备、获取设备信息、设置超时时间、开启/关闭看门狗计时和喂狗操作。常用的ioctl指令宏包括WDIOC_GETSUPPORT获取设备支持功能...

2024-08-03 16:05:11 882

原创 串口应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

介绍了串口应用编程,强调了串口在Linux系统中的重要性和应用。串口是一种数据按顺序传输的接口,通常用于工业领域,并在Linux中被视为标准输入输出设备,通过设备节点进行操作。文中介绍了终端的定义与分类,包括本地终端和基于网络的远程终端,以及如何在Linux中查看终端和串口设备节点。接着,内容分析了串口应用编程的基本操作,包括使用ioctl()、read()和write()等函数,以及封装在termios API中的串口配置。termios结构体是控制终端行为的核心,涉及输入输出模式、波特率、数据位..

2024-08-03 12:56:40 816

原创 V4L2 摄像头应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

V4L2(Video for Linux Two)是Linux内核中的视频设备驱动框架,为视频类设备(如摄像头)提供统一接口规范。V4L2注册的设备在系统的/dev/目录下生成设备节点文件,通常命名为videoX。应用程序通过对这些设备节点进行I/O操作来配置和使用设备。摄像头应用编程的步骤包括:打开设备:使用open函数打开摄像头设备文件。查询设备属性:使用ioctl()函数查询设备功能,确保其支持视频采集功能。......

2024-07-29 17:13:36 349

原创 PWM 应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

在u-boot环境中,通过/sysfs目录操作I.MX6U的8个PWM控制器。每个控制器的属性文件包含npwm(只读,显示PWM输出路数),export(导出PWM控制器),和unexport(删除导出的PWM控制器)。导出后会生成pwm0目录,包含enable(使能状态),polarity(极性设置),period(周期设置),和duty_cycle(占空比设置)等属性文件。在编写应用程序时,需校验传入参数数量并打印PWM配置信息,生成PWM设备路径并检查路径是否存在,不存在则导出PWM.......

2024-07-29 10:00:00 993

原创 FT_New_Face error: 2

在 FreeType 库中,FT_New_Face 函数通过返回一个错误代码来指示是否成功加载了字体文件。函数返回的错误代码为 2,这通常意味着 FreeType 无法打开指定的字体文件。

2024-07-28 15:49:31 270

原创 在 LCD 上显示字符-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

在LCD屏幕上显示字符的传统方法是通过字符取模,生成字符点阵并在LCD上显示。这种方法涉及使用二维数组表示字符点阵,每个小方块对应一个bit位。例如,一个64x86的字符点阵可以用一个86行8列的unsigned char数组表示。虽然这种方法简单,但不适用于复杂应用。现代方法使用操作系统字体文件和开源字体引擎如FreeType来解析字体文件,读取字符位图数据。FreeType是一个开源、高效、可定制且可移植的字体引擎库,提供统一的接口来访问多种不同格式的字体文件。通过FreeType......

2024-07-28 15:38:16 454

原创 LCD 横屏切换为竖屏-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

将默认横屏显示的 LCD 屏切换为竖屏显示。LCD 屏在默认横屏模式下具有固定坐标体系,例如在 800x480 分辨率下,左上角坐标为(0, 0),右下角为(799, 479)。显存地址的计算公式为 base + (y * width + x) * pix_bytes。在竖屏模式下,应用程序认为的起点为左下角(0, 0),需要将坐标转换为实际的物理坐标。显存地址计算公式调整为 base + ((height - 1 - x) * width + y) * pix_bytes。

2024-07-25 15:12:16 634

原创 在 LCD 上显示 png 图片-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

在LCD上显示PNG图片需要了解PNG的无损压缩、体积小、索引彩色模式、优化网络传输显示及透明效果等特点。libpng是一款免费、开源的C语言库,支持PNG图像的解码和编码,并依赖于zlib库。移植过程包括下载及编译zlib源码,再下载并编译libpng源码,确保在开发板上正确配置和安装。libpng使用指南介绍了如何创建和初始化png_struct和png_info对象,设置错误返回点,指定数据源,并通过high-level或low-level接口读取和解码PNG图像数据......

2024-07-25 14:08:48 1237

原创 在 LCD 上显示 jpeg 图像-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

JPEG(Joint Photographic Experts Group)是一种广泛使用的图像压缩标准,提供有损压缩,能够在保持图像质量的同时显著减小文件大小。libjpeg是一个用C语言编写的开源库,支持JPEG图像的解码和编码,以及其他相关功能。用户可以通过下载libjpeg的源码并进行编译,将其移植到不同的系统中使用。libjpeg库包含多个API,用户可以通过查看头文件jpeglib.h来了解这些API的功能。在使用libjpeg进行图像处理时,需要注意错误处理。

2024-07-24 14:30:00 1916

Buildroot构建Qt根文件系统-思维导图-学习笔记-基于正点原子阿尔法开发板

介绍了如何使用Buildroot构建支持Qt的根文件系统。首先,下载并解压Buildroot源码,接着安装必要的库以支持图形配置菜单。通过"make menuconfig"命令打开配置菜单,或者编辑IMX6ULL Qt配置文件,设置ARM架构、工具链、Qt5模块、系统属性、文件系统和网络配置。使用更新后的镜像源提高下载速度,之后运行"make -j 16"命令构建根文件系统。完成后,将生成的rootfs.tar文件烧写到TF卡的rootfs分区,并在开发板上测试启动。启动成功后,登录系统并验证触摸功能,通过测试tslib和配置Qt的环境变量确保触摸和显示功能正常。最后,通过运行Qt示例和交叉编译Qt项目验证Qt环境配置的有效性。

2024-08-26

嵌入式Qt移植之编译Qt项目-思维导图-学习笔记-基于正点原子阿尔法开发板

介绍了嵌入式Qt移植中编译Qt项目的过程。首先,需要安装交叉编译器,可以参考给出的链接。接着,使用交叉编译好的qmake编译Qt项目,需要将交叉编译工具链的路径添加到环境变量PATH中。然后,通过查找qmake位置,进入Qt项目,使用qmake生成Makefile,再通过make命令编译生成可执行文件。最后,将生成的可执行文件拷贝到开发板文件系统下即可使用。如果使用Busybox根文件系统,需要手动打开网络,包括启动网络服务、获取IP、设置用户密码等步骤。

2024-08-26

嵌入式Qt移植之Qt部署到Busybox根文件系统-思维导图-学习笔记-基于正点原子阿尔法开发板

将编译好的Qt部署到Busybox根文件系统中的具体步骤。首先,将配置好的TF卡插入Ubuntu系统,并将qt-everywhere-src-5.12.9目录下的arm-qt-imx6ull拷贝至/usr/lib目录。然后,将TF卡插入开发板启动,编辑/etc/profile文件以配置Qt的环境变量,确保更改生效。为了支持Qt程序显示中文,需将Windows系统下的中文字库复制到Linux系统中的/usr/share/fonts目录,注意仅限于个人学习用途。最后,通过重启设备并运行编译好的Qt示例程序,测试其运行情况和触摸功能。

2024-08-25

嵌入式Qt移植之tslib部署到Busybox根文件-思维导图-学习笔记-基于正点原子阿尔法开发板

介绍了如何在嵌入式Qt移植过程中,将tslib部署到Busybox根文件系统。首先,通过Ubuntu虚拟机将TF卡挂载,删除出厂文件系统,并将Busybox根文件系统解压到TF卡的rootfs分区,确保开发板能从SD卡启动。接着,将编译好的tslib拷贝到Busybox根文件系统的/usr/lib目录。为了避免与已存在的tslib冲突,需要重新配置tslib的环境变量。配置过程中,需要注意电阻屏和电容屏的不同需求,尤其是对于电容屏的校准文件要慎重处理。最后,通过重启开发板并运行ts_test,确认tslib配置是否正常,确保触摸屏能够准确响应。

2024-08-25

嵌入式Qt移植之tslib编译-思维导图-学习笔记-基于正点原子阿尔法开发板

Tslib是一个用于处理触摸屏事件的开源库,作为驱动层与应用层之间的适配层,能够将触摸屏的坐标信息传递给Qt进行处理。下载Tslib源码可以通过git地址(https://github.com/kergoth/tslib)或者从开发板光盘路径中获取。在Ubuntu中,将下载的压缩包解压并进入相应目录。编译Tslib源码需要先安装autoconf、automake、libtool和pkg-config等软件,然后执行autogen.sh生成Makefile。接下来,使用特定的配置命令`./configure --host=arm-linux-gnueabihf等进行配置,并执行make和make install`完成编译和安装。编译完成后,生成的arm-tslib-imx6ull目录下应包含ARM格式的tslib文件,否则需要重新配置交叉编译器环境并重新编译。

2024-08-23

编译 ARM 平台 Qt5.12.9 源码-思维导图-学习笔记-基于正点原子阿尔法开发板

编译ARM平台的Qt5.12.9源码分为几个主要步骤。首先,下载合适的平台源码,其中Windows平台生成.dll库文件,Linux平台生成.so库文件,这些动态库在运行时被加载到应用程序中。下载源码可通过Qt官方网站或使用wget指令完成。在下载和解压过程中,用户需要特别注意路径和文件名的准确性。接下来,编辑qmake.conf文件以配置相关编译器及路径。为避免手动输入错误,正确配置文件已上传至gitee,用户可直接下载并编辑,确保配置路径准确。配置编译选项时,使用./configure -help查看可配置选项。正点原子提供了简化配置过程的脚本autoconfigure.sh,下载并修改路径后,赋予脚本执行权限并执行脚本进行配置。在此之前需确保已安装g++编译器。配置成功后,继续安装Python环境并执行make -j 16进行并行编译,最后通过make install完成安装并检查安装结果。

2024-08-23

嵌入式Qt移植前期准备-思维导图-学习笔记-基于正点原子阿尔法开发板

Qt移植是为了在自制系统或资源受限的嵌入式系统上运行Qt应用,或者使用特定Qt版本。可以通过编译Qt源码或使用开源构建框架如Buildroot和Yocto来移植。编译Qt源码需要从官网获取源码并编译,生成.so库文件;Buildroot方便构建,Yocto则相对复杂且庞大。 准备嵌入式Qt移植需要安装通用型交叉编译器,特别是针对ARM架构的交叉编译器,如Linaro GCC编译工具链。下载并解压Linaro GCC编译器到Ubuntu系统的指定目录,修改环境变量并重启系统即可完成交叉编译器的安装和验证。根文件系统的准备对于驱动开发也同样重要。

2024-08-23

Qt串口编程Serial Port-思维导图-学习笔记-基于正点原子阿尔法开发板

正点原子的 I.MX6U 开发板出厂系统已预配置两路串口,其中UART1用于调试,UART3可编程。在Qt串口编程中,需在项目文件中添加串口模块支持,并在mainwindow.h中声明相关变量和方法。mainwindow.cpp中实现了界面布局初始化、串口扫描、波特率和数据位等参数的初始化,以及串口打开、关闭和数据发送接收的功能。通过垂直和网格布局,用户界面支持全屏显示,并可根据系统可用串口动态更新选项。编程时,由于UART1已被占用,开发者需使用UART3进行串口通信。

2024-08-21

Qt使用开发板上的按键-思维导图-学习笔记-基于正点原子阿尔法开发板

如何使用 Qt 在 I.MX6U 开发板上监测按键并显示按键状态。首先,出厂内核设备树在路径 arch/arm/boot/dts/imx6ull-14x14-evk.dts 中已将 KEY0 按键注册为 gpio-keys 类型设备,键值为 114,对应 Qt 的 Key_VolumeDown 键值。该按键在普通键盘上找不到,但某些笔记本电脑可以通过 FN + F6 等组合键模拟。在 Windows/Ubuntu 上使用 Key_Down 进行测试,而在开发板上则使用 KEY0 按键。为了监测 KEY0,开发者可以使用 C 语言创建线程,或重写键盘事件来检测按键的按下和松开。代码实现中,通过 QGuiApplication::screens() 获取屏幕分辨率,设置界面全屏显示,并居中显示按钮。重写 keyPressEvent 和 keyReleaseEvent 方法,通过判断 event->key() 来识别按键状态,并更改标签文本以反映按键的按下或松开状态。

2024-08-19

Qt点亮开发板的一个LED-思维导图-学习笔记-基于正点原子阿尔法开发板

使用 Qt 在开发板上控制一个 LED。首先,界面初始化设置在嵌入式系统中根据屏幕大小进行全屏显示,按钮居中显示。由于出厂系统中 LED 的触发方式为心跳方式,为方便控制,需要通过 system() 函数将其触发方式改为 none。接着,描述了设置 LED 的方法,包括写入“0”或“1”来分别关闭和开启 LED,在写入之前先读取其当前状态以防止其他设置冲突。获取 LED 状态的代码负责读取 LED 的当前状态,并显示在按钮上。最后,设置 LED 状态的方法是一个槽函数,由按钮点击触发,负责切换 LED 状态。本文强调 Qt 本身不直接控制硬件,而是通过驱动层提供的接口进行交互,应用开发人员需理解这些接口以有效控制硬件。驱动开发人员则需确保接口的稳定性和高效性,满足应用层需求。

2024-08-19

I.MX6U交叉编译Qt项目-思维导图-学习笔记-基于正点原子阿尔法开发板

在I.MX6U平台上交叉编译Qt项目需要几个步骤。首先,将交叉编译工具fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh拷贝至Ubuntu系统并修改其权限,然后运行脚本安装工具,默认目录为/opt/fsl-imx-x11/4.1.15-2.1.0。使用前需启用环境变量source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi。进入Qt项目目录,用qmake生成项目文件,随后用make命令编译生成可执行文件。将编译好的程序拷贝到开发板,禁用Qt桌面启动,方法包括使用killall /opt/QDesktop或修改/etc/rc.local文件。最后,直接执行拷贝的可执行文件,若需开机自启动,则编辑/etc/rc.local文件

2024-08-19

UDP 通信-Qt-思维导图-学习笔记

UDP(用户数据报协议)是一种轻量级、无连接且不可靠的协议,适用于需要快速响应的场景,如文字聊天和音视频通信。其优点是资源消耗小、处理速度快,但缺点是数据传输不可靠,可能会丢包。QUdpSocket类提供了通过UDP进行数据报发送和接收的功能,常用方法包括bind()、writeDatagram()和readDatagram()。UDP通信有三种模式:单播、广播和组播。单播是端对端通信,广播将消息发送到同一局域网内的所有主机,而组播则是将消息发送到特定的主机组。组播使用D类IP地址范围(224.0.0.0至239.255.255.255)。在实际应用中,绑定端口、加入组播组、发送和接收消息是基本操作。在同一台主机上运行多个实例时,不同实例不能绑定同一端口,但在局域网内的不同主机上可以绑定相同的端口。组播消息会被发送主机自己也接收,局域网内其他主机运行此程序并加入组播组后也能收发消息。

2024-08-18

TCP 通信-Qt-思维导图-学习笔记

TCP通信的基本概念和实现方法,包括服务端和客户端的操作步骤。TCP是一种面向连接、可靠且基于字节流的传输层通信协议。建立TCP连接需要服务端监听特定的端口并等待客户端连接,客户端通过指定的IP地址和端口号连接服务端,成功连接后即可进行数据的发送和接收。本文还详细讲述了在Qt框架中如何实现TCP通信,服务端通过QTcpServer监听连接请求,并通过QTcpSocket进行数据的读写;客户端使用QTcpSocket连接服务端并进行通信。实际应用中,需要选择正确的IP地址和未被占用的高端口号进行监听和连接。示例程序选择本地环回IP地址127.0.0.1进行测试,并提供了详细的代码说明和注释。通过本文,读者可以学习如何在Qt中实现TCP通信,并在不同的网络环境中进行测试和应用。

2024-08-18

Qt网络编程基础-思维导图-学习笔记

Qt网络编程的基础知识,涵盖了TCP/IP客户端和服务器的实现,以及如何获取本机网络信息。Qt网络模块提供了编写TCP/IP客户端和服务器的类,如QTcpSocket用于实现TCP客户端功能,QTcpServer用于实现TCP服务器功能,以及QUdpSocket用于实现UDP通信。高级类如QNetworkRequest、QNetworkReply和QNetworkAccessManager用于执行通用协议的网络操作。网络配置管理类包括QNetworkConfiguration、QNetworkConfigurationManager和QNetworkSession。 为了使用Qt网络模块,需要在项目配置文件(.pro文件)中添加QT += network语句。通过Qt可以实现查询本机网络信息的界面和功能,这为后续的网络编程打下基础。主要使用的类有QHostInfo和QNetworkInterface,用于查询主机信息和网络接口信息。 应用实例展示了如何通过这些类获取本地网络所有接口的信息,并在文本浏览框上显示。点击按钮可获取并刷新信息,点击清空按钮可清空文本内容。关键代码部分包括..

2024-08-18

多线程-Qt-思维导图-学习笔记

继承 QThread 的线程 继承 QThread 是创建线程的常见方法。在这种方式中,只有 run() 方法在创建的线程里执行,其他方法即使属于子线程类也在主线程内执行。用户需要重写 run() 方法,将耗时操作写在其中。应用实例中,通过 QThread 类继承线程,并在 MainWindow 类中使用,通过按钮开启线程。当线程执行完成时,发送 resultReady 信号到主线程。 继承 QObject 的线程 继承 QObject 类创建线程更加灵活,可以通过 moveToThread() 方法将 QObject 类移至一个线程中执行。在此方式中,可以有多个耗时操作方法作为槽函数,由主线程调用。应用实例中,通过继承 QObject 类创建线程,并在 MainWindow 类中使用,通过按钮开启和关闭线程。使用加锁操作确保线程的安全终止,避免访问冲突。程序示例展示了如何使用 QMutexLocker 确保线程安全,避免 terminate() 方法的不安全性。

2024-08-16

绘图与图表-Qt-思维导图-学习笔记

在绘图与图表程序中,QPainter类是绘图系统的核心,用于直接操作绘图。QWidget类作为绘图“画布”,提供绘图区域。通过重写paintEvent()方法,可以实现自定义的绘图操作及刷新。当界面初始化或需要刷新时,该事件会自动触发。应用实例展示了如何使用QPainter在窗口中心绘制并旋转CD图片,每100ms旋转1度角。 QChart模块提供了绘制常见图表的接口,如曲线图、折线图等,且不需要学习第三方组件。在程序中,创建QSplineSeries对象表示曲线,QChart对象表示图表,QChartView对象表示图表视图。通过创建QValueAxis的X轴和Y轴对象并将其添加到图表中,与曲线对象关联。此外,定时器生成随机数据并更新曲线。

2024-08-15

文本读写-Qt-思维导图-学习笔记

QFile类提供了读取和写入文件的接口,是嵌入式系统中最简单的方法之一。QFile可用于读写文本和二进制文件,并能与QTextStream或QDataStream一起使用。文件路径必须使用‘/’分隔符,基本操作包括检查文件存在、删除文件、打开和关闭文件等。QFile::open()函数需要传递QIODevice::OpenModeFlag枚举类型参数,以决定文件的打开方式。 QTextStream类提供了一个方便的接口来读写文本,常与QFile结合使用。通过流操作符“<<”和“>>”,可以方便地读写单词、行和数字,并支持字段填充和对齐的格式化选项。在实际应用中,QTextStream的这些特性使得文本处理更加灵活和丰富。 应用实例展示了如何使用QFile和QTextStream进行简单的文本文件读取和写入操作,包含在mainwindow.h和mainwindow.cpp文件中的具体代码。示例代码展示了如何通过按钮操作打开和关闭文本文件,并使用QTextStream进行文本的读写。虽然QFile和QTextStream的操作方式看似相似,但QTextStream支持的格式化选项...

2024-08-15

项目控件组(基于项)Item-Based-Qt-思维导图-学习笔记

QListWidget是一种继承自QListView的控件,提供基于项的列表管理,允许用户方便地添加和删除项目。相比QListView,QListWidget更易用,用户无需自行建模。一个典型的用法示例是创建一个QListWidget来显示音乐文件列表,并添加一个按钮触发文件选择操作。当用户点击按钮时,调用系统文件打开窗口并过滤只显示.mp3后缀的文件。用户选择后,这些文件路径将作为项添加到QListWidget中。QTreeWidget继承自QTreeView,提供预定义树模型的树视图,适合管理和显示树状结构数据。它通过QTreeWidgetItem管理每个树项,无需用户自定义模型。示例包括模拟联系人分组,支持群发信息,使用信号槽机制管理节点状态。QTableWidget继承自QTableView,为基于项的表视图,使用QTableWidgetItem管理表格数据,简化数据管理操作。用法示例包括设置表格行列数、标题,通过双击编辑表格内容,并使用信号槽机制处理用户交互。

2024-08-15

项目视图组(基于模型)Model-Based-Qt-思维导图-学习笔记

Qt 提供了一系列基于模型的视图组件,用于展示和管理数据。这些视图组件包括 QListView、QTreeView、QTableView、QColumnView 和 QUndoView。QListView 继承自 QAbstractItemView,提供非分层的列表或图标视图,主要区别于基于项的 QListWidget,它需要使用模型来减少数据冗余并提高效率。QTreeView 用于展示树形结构的数据,通过 QStandardItemModel 构建树状模型。QTableView 提供表格视图,通过设置模型来管理数据项。QColumnView 则在多个 QListView 中显示分层数据,而 QUndoView 则展示撤销堆栈的内容,允许用户操作历史命令。所有这些视图组件都依赖于不同类型的 Qt 数据模型,如 QStringListModel、QStandardItemModel 和 QSqlTableModel 等,来实现灵活的数据管理和展示功能

2024-08-15

容器(Containers)-Qt-思维导图-学习笔记

容器(Containers)在Qt中用于组织和管理界面元素。QGroupBox 提供分组框功能,通常用于包含和组织一组相关的控件。QScrollArea 允许在其子部件超出可见范围时使用滚动条查看内容。QToolBox 和 QTabWidget 分别通过选项卡显示多个小部件和页面,以节省界面空间。QStackedWidget 则提供一个小部件堆栈,通过信号槽机制在不同页面间切换。QDockWidget 允许小部件在 QMainWindow 内停靠或浮动,可配置其初始停靠区域和移动限制。每种容器都有其独特的用途和配置选项,使得Qt界面设计更加灵活.

2024-08-15

空间间隔组(Spacers)-Qt-思维导图-学习笔记

QSpacerItem 是一个继承自 QLayoutItem 的类,主要用于在布局中提供空白或空间间隔。它可以创建水平间隔(Horizontal Spacer)和垂直间隔(Vertical Spacer),帮助调整子部件之间的距离。使用 QSpacerItem,开发者可以灵活地控制布局的结构和外观。 在实际应用中,QSpacerItem 经常与按钮等控件结合使用。例如,在一个垂直布局中,可以添加一个垂直间隔和一个按钮,而在一个水平布局中,则可以添加多个按钮和一个水平间隔。通过这种方式,可以实现良好的界面排版。

2024-08-14

布局管理(Layouts)-Qt-思维导图-学习笔记

Qt 提供了丰富的布局管理类,包括 QBoxLayout、QGridLayout、QFormLayout 和 QStackedLayout,它们都继承自 QLayout。QBoxLayout 提供水平或垂直排列子部件的功能,通过将父布局的空间分成多个框来管理子部件。QGridLayout 则将空间划分为行和列,适合需要精确对齐的布局,并可以通过设置行列比例来控制布局的伸缩性。QFormLayout 专注于表单布局,将标签和输入部件按行排列,适用于简单的表单界面。QStackedLayout 允许在多个子布局之间切换,每次仅显示一个布局。Qt 的布局类可以嵌套使用,适应复杂的用户界面需求

2024-08-14

显示窗口部件(Display Widgets)-Qt-思维导图-学习笔记

在Qt Designer的显示窗口部件中,提供了10种用于显示内容的小部件,包括QLabel、QTextBrowser、QGraphicsView、QCalendarWidget、QLCDNumber和QProgressBar等。QLabel用于显示文本或图像,适合单一图像展示;QTextBrowser则是带有超文本导航功能的文本浏览器;QGraphicsView用于可视化QGraphicsScene的内容。QFrame是所有有框架窗口部件的基类,能够绘制各种框架形状,如Box、Panel和WinPanel等。其阴影效果可以选择Plain、Raised或Sunken。QFrame还可以绘制水平或垂直的线条,分别对应HLine和VLine。在实际应用中,可以通过实例化QFrame对象来实现不同的显示效果,如绘制水平和垂直的分隔线。

2024-08-14

输入窗口部件(Input Widgets)-Qt-思维导图-学习笔记

Qt Designer 提供了16种输入部件,用于开发不同类型的用户界面控件。这些部件包括组合框(ComboBox)、字体组合框(FontComboBox)、单行编辑框(LineEdit)、文本编辑框(TextEdit)、纯文本编辑框(PlainTextEdit)、数字旋转框(SpinBox)及其变种双精度数字旋转框(DoubleSpinBox)、时间编辑框(TimeEdit)、日期编辑框(DateEdit)、日期时间编辑框(DateTimeEdit)、数字拨盘框(Dial)、水平和垂直滚动条(Horizontal和Vertical ScrollBar)、水平和垂直滑动条(Horizontal和Vertical Slider)、以及按键序列编辑框(KeySequenceEdit)。这些部件分别继承自不同的基类,提供了丰富的功能,例如文本输入、选择和格式化,允许用户通过点击、滑动或键盘操作来控制输入和选择值。

2024-08-13

按钮(Buttons)-Qt-思维导图-学习笔记

按钮是 Qt 中常用的控件,广泛应用于嵌入式系统和 PC 端的界面交互中。Qt 提供了六种内置按钮部件,包括 QPushButton、QToolButton、QRadioButton、QCheckBox、QCommandLinkButton 和 QDialogButtonBox。QPushButton 是最常用的下压按钮,常用于触发命令或事件。QToolButton 则多用于工具栏中的快速访问按钮,通常显示图标。QRadioButton 提供互斥选择功能,适合“多选一”场景。QCheckBox 支持多选多,常用于设置选项。QCommandLinkButton 类似于普通按钮,但带有箭头图标,指示点击后将执行进一步操作。QDialogButtonBox 用于对话框中的自定义按钮。通过信号与槽机制,这些按钮可以与各种事件和操作紧密结合,实现丰富的人机交互。

2024-08-12

Qt信号与槽-思维导图-学习笔记

Qt的信号与槽机制是其编程的基础,使得界面组件的交互操作更加直观和简单。信号(Signal)是特定情况下被发射的事件,如按钮点击等;槽(Slot)是对信号响应的函数,可以在类的任意部分定义。使用QObject::connect()函数可以将信号和槽关联起来。连接信号与槽的规则要求信号与槽的参数个数和类型需一致,并且需要在类的定义中加入Q_OBJECT宏。在实际项目中,可以通过在头文件声明信号和槽,并在源文件中实现槽函数,然后使用connect()函数连接信号与槽。Qt提供了大量预定义好的信号与槽,基本满足开发需求,如果需要自定义信号与槽,可以按照指定方法进行定义。在开发过程中,可以利用Qt Creator和Qt帮助文档查看和使用这些信号与槽,帮助文档提供了详细的信息和使用说明。

2024-08-11

Qt环境搭建-思维导图-学习笔记

在Windows系统中,用户可以从Qt官网下载Qt 5.12.9安装包,建议使用迅雷加速下载。安装时需断网,选择安装目录和组件,同意许可协议后完成安装,并启动Qt Creator。在Ubuntu系统中,首先准备Ubuntu 18.04镜像文件并创建虚拟机。下载Qt安装包后,通过FTP发送到Ubuntu,安装vsftpd服务并配置,使用FileZilla传输文件。通过wget命令下载Qt安装包并赋予执行权限,使用sudo权限安装Qt,断网后配置目录和组件,完成安装并启动Qt Creator。为配置Qt Creator的中文输入,在Ubuntu系统中安装简体中文语言包和中文输入法(如fcitx-sunpinyin),并配置为默认输入法。修改.profile文件将系统时间设置为北京时间。安装gcc和g++及其他必要库,检查版本确保环境配置完成。

2024-08-08

CAN 应用编程基础思维导图-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

CAN(控制器局域网络)是一种ISO国际标准化的串行通信协议,最初由德国博世公司开发,旨在解决汽车电子控制系统之间的通讯问题,减少信号线数量。CAN已成为欧洲汽车网络的标准协议,并应用于工业自动化、医疗设备等领域。CAN采用多主控制方式,允许所有单元在总线空闲时开始发送消息。其具有高位速率、高抗电磁干扰性和强错误检测能力。CAN总线通过两根线(CAN_H和CAN_L)连接,节点通过差分电压传输信号。CAN协议参考了OSI七层模型,但只定义了传输层、数据链路层和物理层。Linux系统中的SocketCAN使CAN总线通信类似于以太网通信,提高了开发接口的灵活性。在SocketCAN编程中,通过创建套接字、绑定设备、设置过滤规则和进行数据发送接收来实现通信。CAN数据帧格式包括标准帧和扩展帧,通过显性和隐性电平变化发送数据。实际应用中,可以通过SocketCAN进行数据发送和接收,并使用适当的过滤规则和错误处理机制。

2024-08-07

socket 编程基础(网络编程)思维导图-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

socket编程是一种在Linux下的进程间通信机制,用于不同主机上或同一主机上应用程序之间的通信。它通常采用客户端与服务器的模式进行通信,多个客户端可以同时连接到服务器。开发人员通过调用内核提供的socket接口来开发应用程序,socket作为应用层与TCP/IP协议的中间软件抽象层,简化了开发过程。 socket编程广泛应用于网络程序设计,并且基于BSD socket标准的应用程序可以方便地移植到不同平台。编程接口包括创建套接字的socket()函数、绑定IP地址和端口的bind()函数、进入监听状态的listen()函数、接受连接请求的accept()函数、建立连接的connect()函数,以及用于数据传输的read()/recv()和write()/send()函数。 创建和关闭套接字分别通过socket()和close()函数完成。服务器程序通过调用socket()、bind()、listen()、accept()等函数建立连接,客户端通过socket()和connect()函数连接服务器。IP地址格式转换可使用inet_ntop()和inet_pton()函数.....

2024-08-07

网络基础知识-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

网络通信是不同主机上的进程间通信,使用套接字(Socket)实现数据传输。网络通信分为硬件层、驱动层和应用层,数据通过网络连接(有线或无线)传输,涉及TCP/IP等协议。TCP/IP模型简化了OSI七层模型,分为应用层、传输层、网络层和网络接口层。数据在传输中需经历封装和拆封过程。IP地址是标识互联网主机的唯一标识,分为A、B、C、D、E类,每类地址有特定用途和范围。TCP协议通过三次握手建立连接、四次挥手关闭连接,提供可靠传输。UDP协议无连接、不可靠,传输速度快,适用于实时视频传输等。端口号用于唯一标识主机上的网络进程,通过“IP地址+端口号”区分主机上的不同进程。

2024-08-06

音频应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

ALSA(高级Linux声音体系)是Linux系统下的主流音频架构,替代了旧版的OSS,提供音频和MIDI支持。ALSA框架设计复杂,采用分离和分层思想,在应用层提供alsa-lib库(标准API)以简化音频硬件控制。alsao-lib库为开发者提供统一接口,隐藏驱动层实现。混音器配置通过alsamixer和amixer工具实现,核心在alsa-lib库的Mixer Interface模块。 PCM插件扩展PCM设备功能,如hw插件直接与ALSA内核通信,提供无转换的原始通信。plughw插件提供软件特性如采样率转换,适合硬件不支持的情况。dmix插件支持混音,允许多个音频流同时播放。softvol插件支持软件音量控制。 音频设备节点在/dev/snd目录下生成,应用程序通过alsa-lib库函数控制底层硬件。ALSA的配置文件如alsa.conf和asound.conf文件提供用户定制化需求。开发者可参考ALSA文档进行插件定义和使用。音频回环测试工具alsaloop可实现录音和播放,源码可在alsa-utils包中找到。

2024-08-06

看门狗应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

看门狗定时器是一种计数器设备,若在指定时间内未复位,会触发系统重启或中断信号。在I.MX6UL/I.MX6ULL SoC中,集成了两个看门狗定时器:WDOG1 和 WDOG2,其中WDOG1可产生中断信号和复位CPU。Linux系统下,看门狗设备节点通常在/dev/目录下,系统默认节点为/dev/watchdog。应用程序通过ioctl()函数控制看门狗,包括打开设备、获取设备信息、设置超时时间、开启/关闭看门狗计时和喂狗操作。常用的ioctl指令宏包括WDIOC_GETSUPPORT获取设备支持功能,WDIOC_GETTIMEOUT和WDIOC_SETTIMEOUT分别获取和设置超时时间,WDIOC_SETOPTIONS控制看门狗计时开关,WDIOC_KEEPALIVE用于喂狗。在实际编程中,先打开看门狗设备,获取支持功能,设置和获取超时时间,开启计时并定期喂狗,确保系统在正常工作时不会因超时导致复位重启。开发板测试中需要确保看门狗未被其他功能占用。

2024-08-03

串口应用编程-嵌入式LinuxC应用编程

介绍了串口应用编程,强调了串口在Linux系统中的重要性和应用。串口是一种数据按顺序传输的接口,通常用于工业领域,并在Linux中被视为标准输入输出设备,通过设备节点进行操作。文中介绍了终端的定义与分类,包括本地终端和基于网络的远程终端,以及如何在Linux中查看终端和串口设备节点。 接着,内容分析了串口应用编程的基本操作,包括使用ioctl()、read()和write()等函数,以及封装在termios API中的串口配置。termios结构体是控制终端行为的核心,涉及输入输出模式、波特率、数据位、校验位和停止位等配置。在程序实现中,首先解析用户输入参数,初始化并配置串口,选择读写模式,并使用异步I/O处理数据读取。最后,程序在结束时恢复原始配置并关闭串口设备。

2024-08-02

V4L2 摄像头应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

V4L2(Video for Linux Two)是Linux内核中的视频设备驱动框架,为视频类设备(如摄像头)提供统一接口规范。V4L2注册的设备在系统的/dev/目录下生成设备节点文件,通常命名为videoX。应用程序通过对这些设备节点进行I/O操作来配置和使用设备。 摄像头应用编程的步骤包括: 打开设备:使用open函数打开摄像头设备文件。 查询设备属性:使用ioctl()函数查询设备功能,确保其支持视频采集功能。 设置设备参数:枚举摄像头支持的像素格式、分辨率和帧率,并使用ioctl()设置视频采集格式和帧率。 初始化帧缓冲:申请帧缓冲区,建立内存映射,并将帧缓冲放入队列中。 开启视频采集:使用ioctl()开启视频采集。 读取和处理数据:在一个无限循环中,从摄像头读取视频数据并显示到LCD屏幕上。 对于不支持RGB565格式的摄像头,如一些UVC USB摄像头,需要将采集到的YUYV格式数据转换为RGB565格式才能显示。代码中添加了yuyv_to_rgb565函数用于实现像素格式转换。

2024-07-29

PWM 应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

在u-boot环境中,通过/sysfs目录操作I.MX6U的8个PWM控制器。每个控制器的属性文件包含npwm(只读,显示PWM输出路数),export(导出PWM控制器),和unexport(删除导出的PWM控制器)。导出后会生成pwm0目录,包含enable(使能状态),polarity(极性设置),period(周期设置),和duty_cycle(占空比设置)等属性文件。 在编写应用程序时,需校验传入参数数量并打印PWM配置信息,生成PWM设备路径并检查路径是否存在,不存在则导出PWM。调用pwm_config函数配置周期、占空比和使能状态。若失败则退出程序。 在开发板上测试时,需要修改内核源码和设备树以使用PWM。可通过u-boot命令行禁用LCD和backlight设备,腾出PWM1供测试。设置disable_lcd环境变量并执行修改设备树的命令,确保对本次启动生效。重启会恢复原状态。

2024-07-28

SIMSUN.TTC字体

简体字体

2024-07-28

在LCD显示字符-LinuxC应用开发

在LCD屏幕上显示字符的传统方法是通过字符取模,生成字符点阵并在LCD上显示。这种方法涉及使用二维数组表示字符点阵,每个小方块对应一个bit位。例如,一个64x86的字符点阵可以用一个86行8列的unsigned char数组表示。虽然这种方法简单,但不适用于复杂应用。 现代方法使用操作系统字体文件和开源字体引擎如FreeType来解析字体文件,读取字符位图数据。FreeType是一个开源、高效、可定制且可移植的字体引擎库,提供统一的接口来访问多种不同格式的字体文件。通过FreeType,可以直接从字体文件中读取字符的位图数据,简化了字符显示的过程。 FreeType的移植涉及下载源码、交叉编译和安装到开发板。在应用程序中,需要包含FreeType的头文件并初始化库,加载字体文件,设置字体大小,然后加载和显示字符。FreeType库的使用包括初始化库、加载face对象、设置字体大小和加载字形图像等步骤。 通过这些方法,可以在LCD屏幕上高效且灵活地显示各种字符,支持复杂的字体和布局需求。

2024-07-28

LCD 横屏切换为竖屏-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

将默认横屏显示的 LCD 屏切换为竖屏显示。LCD 屏在默认横屏模式下具有固定坐标体系,例如在 800x480 分辨率下,左上角坐标为(0, 0),右下角为(799, 479)。显存地址的计算公式为 base + (y * width + x) * pix_bytes。在竖屏模式下,应用程序认为的起点为左下角(0, 0),需要将坐标转换为实际的物理坐标。显存地址计算公式调整为 base + ((height - 1 - x) * width + y) * pix_bytes。代码编写方面,主要是通过 FrameBuffer 应用编程进行逻辑调整,以实现竖屏显示效果。

2024-07-25

在 LCD 上显示 png 图片

在LCD上显示PNG图片需要了解PNG的无损压缩、体积小、索引彩色模式、优化网络传输显示及透明效果等特点。libpng是一款免费、开源的C语言库,支持PNG图像的解码和编码,并依赖于zlib库。移植过程包括下载及编译zlib源码,再下载并编译libpng源码,确保在开发板上正确配置和安装。libpng使用指南介绍了如何创建和初始化png_struct和png_info对象,设置错误返回点,指定数据源,并通过high-level或low-level接口读取和解码PNG图像数据。解码后的数据可进一步处理或直接显示到LCD上。应用编程时需将RGB888格式转换为RGB565格式,再将数据刷入显存中显示。

2024-07-25

在 LCD 上显示 jpeg 图像

JPEG(Joint Photographic Experts Group)是一种广泛使用的图像压缩标准,提供有损压缩,能够在保持图像质量的同时显著减小文件大小。libjpeg是一个用C语言编写的开源库,支持JPEG图像的解码和编码,以及其他相关功能。用户可以通过下载libjpeg的源码并进行编译,将其移植到不同的系统中使用。libjpeg库包含多个API,用户可以通过查看头文件jpeglib.h来了解这些API的功能。在使用libjpeg进行图像处理时,需要注意错误处理,可以通过注册自定义错误处理函数来修改默认的错误处理方式。此外,libjpeg还提供了详细的解码流程,包括创建解码对象、设置数据源、读取JPEG文件头信息、设置解码参数、开始解码、读取数据、结束解码以及释放解码对象等步骤。通过这些步骤,用户可以有效地使用libjpeg库来处理JPEG图像。

2024-07-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除