- 博客(233)
- 收藏
- 关注
原创 网络编程重点
1.想要在程序中使用 Qt 网络模块,我们需要在 pro 项目配置文件里增加下面的一条语句:QT += network2.获取本机的网络信息Qt 提供了 QHostInfo 和 QNetworkInterface 类用于关于本机的网络信息查询(IP地址、MAC地址、主机名)。private: /*点击获取和清空文本按钮*/ QPushButton *pushButton[2]; /*文本浏览框用于显示本机的信息*/ QTextBrowser *textBrowser;/*点击获取本地信
2022-04-06 22:33:36 372
原创 根文件系统构建
1.什么叫做根文件系统?根文件系统一般也叫做 rootfs,Linux 中的根文件系统更像是一个文件夹或者叫做目录(在我看来就是一个文件夹,只不过是特殊的文件夹),在这个目录里面会有很多的子目录。根目录下和子目录中会有很多的文件,这些文件是 Linux 运行所必须的,比如库、常用的软件和命令、设备文件、配置文件等等。根文件系统首先是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内
2022-04-03 16:46:56 1061
原创 修改CPU主频和网络驱动测试
1.CPU主频修改输入如下命令查看cpu信息:cat /proc/cpuinfoBogoMIPS为3.00,BogoMIPS是linux系统中衡量处理器运行速度的一个“尺子”,处理器性能越强,BogoMIPS值就越大。查看当前CPU的工作频率方法:进入目录:/sys/devices/system/cpu/cpu0/cpufreq此目录中记录了cpu频率等信息,这些文件的含义如下:cpuinfo_cur_freq:当前 cpu 工作频率,从 CPU 寄存器读取到的工作频率。cpuinfo
2022-04-03 16:18:04 2742
原创 Linux内核编译
1.linux内核获取linux官网:https://www.kernel.org2.linux内核初次编译编译内核之前需要先安装lzop库,否则编译失败,命令如下:sudo apt-get install lzop将linux源码的压缩包解压:tar -vxjf linux-imx-4.1.15-2.1.0-g8a006db.tar.bz23.编译出对应的Linux镜像文件创建.sh的shell脚本,在脚本中输入一下内容:#!/bin/shmake ARCH=arm CROSS_C
2022-03-31 23:27:01 1652
原创 U-Boot图形化配置及其原理
1.uboot或linux内核可以通过输入make menuconfig来打开图形化配置界面,menuconfig是一套图形化的配置工具,需要ncurses库支持安装ncurses库,命令如下:sudo apt-get install build-essentialsudo apt-get install libncurses5-devmenuconfig 重点会用到两个文件:.config 和 Kconfig,.config 文件前面已经说了,这个文件保存着 uboot 的配置项,使用 menu
2022-03-31 22:27:57 1002
原创 U-Boot顶层Makefile详解
1.uboot源码文件的功能使用make xxx_deconfig命令即可配置ubootmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig2.MAKEFLAGS变量make是支持递归调用的,其实是在Makefile中使用make命令来执行其他的Makefiel文件,一般都是子目录中的makefile文件。假如在当前目录下存在一个“subdir”子目录,这个子目录中又有其对应的 M
2022-03-28 23:00:15 1616 1
原创 U-Boot命令使用
1.进入uboot的命令行模式以后输入helo或者?,然后按下回车即可查看当前uboot所支持的命令2.查看命令的详细用法:? bootz 或 help bootz3.信息查询命令:bdinfo、printenv、versionbdinfo:用于查看板子信息printenc:用于输出环境变量的信息,uboot中的环境变量都是字符串bootdelay:表示bbuoot启动延时时间version:用于查看uboot的版本号4.环境变量操作命令(1)修改环境变量setenv:用于设置或者修改环境
2022-03-27 19:55:05 3610
原创 使用linux蓝牙指南
一.初始化步骤1.启动linux内核的蓝牙功能并添加配置CONFIG_BT_HCIUART=yCONFIG_BT_HCIUART_H4=yCONFIG_BT=yCONFIG_BT_L2CAP=yCONFIG_BT_SCO=yCONFIG_BT_RFCOMM=yCONFIG_BT_RFCOMM_TTY=yCONFIG_BT_BNEP=yCONFIG_BT_BNEP_MC_FILTER=yCONFIG_BT_BNEP_PROTO_FILTER=yCONFIG_BT_HIDP=y2.启
2022-03-24 23:42:29 7039
原创 Linux磁盘管理
1.Linux中一般不叫分区,叫挂载点。挂载点就是将一个硬盘的一部分做成文件夹的形式,这个文件夹的名字就是挂载点。2.文件/etc/fstab详细记录了Ubuntu硬盘分区的情况3.ls /dev/sd* 打印出所有/dev/sd开头的设备文件4.磁盘分区命令fdiskfdisk [参数]-b<分区大小> 指定每个分区的大小-l 列出指定设备的分区表-s <分区编号>...
2022-03-20 23:17:58 677
原创 Qt学习笔记
1.信号与槽关联是用QObject::connect()函数实现的,其基本格式是:QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));sender是发射信号的对象的名称,receiver是接受信号的对象名称,signal()是信号名称,slot是槽函数connect(pushButton,SIGNAL(clicked()),this,SLOT(close()));一个信号可以连接另一个信号(说明connect万物皆可
2022-03-19 16:20:55 760
原创 第三方库的使用支持
1.当需要使用第三方库文件时,编译环境中的makefile该如何修改?1.第三方库通过函数调用的方式提供库中的功能2.库文件发布时都附带了声明库函数原型的头文件3.编译阶段使用头文件,链接阶段使用库文件2.第三方库在项目中的位置3.第三方库的编译阶段支持定义变量DIR_LIBS_INC用于指示头文件的存储位置DIR_LIBS_INC ::= (DIRPROJECT)/libs/inc使用DIRLIBSINC提示make头文件的存储位置vpath(DIR_PROJECT)/libs/inc
2022-03-13 12:08:06 504
原创 make中的路径搜索
1.常用的源码管理方式项目中的makefile必须能够正确的定位源文件和依赖的文件,最终编译可执行程序特殊的预定义变量VPATH:VPATH变量的值用于指示make如何查找文件不同文件夹可作为VPATH的值同时出现文件夹的名字之间需要使用分隔符进行区分例1:VPATH:= inc src(空格)例1:VPATH:= inc; src(分号)例1:VPATH:= inc: src(冒号)make对于VPATH值的处理方式:当前文件夹找不到需要的文件时,VPATH会被使用make会在VP
2022-03-06 22:29:42 597
原创 make的隐式规则
1.makefile中出现同名目标时依赖:所有的依赖将合并在一起,成为目标的最终依赖命令:当多处出现同一目标命令时,make发出警告所有之前定义的命令被最后定义的命令取代注意事项:当使用include关键字包含其他文件时,需要确保被包含的文件中的同名目标只有依赖,没有命令;否则,同名目标的命令将被覆盖2.什么是隐式规则mkae提供了一些常用的,例行的规则实现当相应目标的规则未提供时,make尝试使用隐式规则make所有预定义变量有哪些:$(.VARIABLES)初探隐式规则: ma
2022-03-05 23:54:26 325
原创 自动生成依赖关系
1.编译行为带来的缺陷预处理器将头文件中的代码直接插入源文件编译器只通过预处理后的源文件产生目标文件因此,规则中以源文件为依赖,命令可能无法执行实现想法:通过命令自动生成对文件的依赖将生成的依赖自动包含进makefile中当头文件改动后,自动确认需要重新编译的文件预备工作:Linux命令sed编译器依赖生成选项gcc -MM(gcc -M)linux中的sed命令:sed是一个流编辑器,用于流文本的修改(曾、删、改、查)sed用于流文本中的字符串替换sed的字符串替换方式为:se
2022-02-27 22:42:43 388
原创 Qt中的多线程编程
1.Qt中通过QThread直接支持多线程QThread是一个跨平台的多线程解决方案QThread以简介易用的方式实现多线程编程QThread中的关键成员函数;void run():线程体函数,用于定义线程功能(执行流)void start():启动函数,将线程入口地址设置为run函数void terminate():强制结束线程(不推荐)QThread编程实例:QThread编程示例:...
2022-02-22 22:53:03 583
原创 Qt进程与线程概念
1.程序和进程的区别程序是硬盘中静态的文件:存储系统中的一段二进制表示进程是内存中动态的运行实体:数据段,代码段,PC指针,等2.程序和进程的联系一个程序可能对应多个进程:一个程序多次运行,每次运行产生一个进程一个进程可能包含多个程序:一个程序依赖多个其他动态库注意:资源分配的基本单位是进程;CPU调度执行的基本单位是线程3.线程的概念进程内的一个执行单元操作系统中的一个可调度的实体进程中相对独立的一个控制流序列执行时的现场数据和其他调度所需的信息4.深入理解进程和线程进程中可以存
2022-02-22 21:18:25 365
原创 Qt Tcp网络编程
1.Qt中的TCP客户端编程Qt中的TCP客户端编程:对于Qt编程而言,网络只是数据传输的通道Qt提供了QTcpSocket类(封装了TCP协议细节)将QTcpSocket的对象当做黑盒使用,进行数据收发 QTcpSocket的使用方式:1.连接服务端主机(connectToHost())2.发送数据/接受数据(write()/read())3.关闭连接(close())QTcpSocket的注意事项:默认情况下,QTcpSocket使用异步编程的方式:操作完成后立即返回通过发送信
2022-02-20 17:32:12 2759
原创 Qt网络编程
1.网络基本概念MAC地址(硬件地址):网络设备出厂时设定的全球唯一硬件地址网络地址(软件地址):每一台网络主机都有唯一的地址网络端口:每一台网络主机可以通过不同端口进行多路通信交换机:端到端数据转发 基于硬件地址实现不同设备间的数据转发 特点:工作层次低,转发速度快路由器:决定数据转发路线,执行转发操作 基于软件地址实现不同网络间的数据转发 特点:能够选择数据通道,实现通信控制...
2022-02-19 15:03:27 3759 1
原创 Qt中的文件操作
1.Qt中IO操作的处理方式Qt通过统一的接口简化了文件与外部设备的操作方式Qt中的文件被看做一种特殊的外部设备Qt中的文件操作与外部设备的操作相同2.IO操作中的关键函数接口打开设备:bool open(OpenMode mode)读取数据:QByteArray read(qint64 maxSize)写入数据:qint64 write(const QByteArray& byteArray)关闭设备:void close()IO操作的本质:连续存储空间的数据读写3.中的设备的
2022-02-15 23:33:59 4244
原创 Qt应用程序中的主窗口
1.应用程序中的主窗口的工具栏主窗口是与用户进行长时间交互的顶层窗口程序的绝大多数功能直接由主窗口提供主窗口通常是应用程序启动后显示的第一个窗口整个程序由一个主窗口和多个对话框组成Qt中的主窗口:Qt开发平台中直接支持主窗口的概念QMainWindow是Qt中主窗口的基类QMainWindow继承于QWidget是一种容器类型的组件QMainWindow中封装的秘密:QMainWindow中的组件布局:在Qt中提供与菜单相关的类组件:在Qt主窗口中创建菜单:QMenubar* mb
2022-02-13 22:55:52 1486
原创 网络编程剖析
1.网络编程核心概念:协议:为进行数据通信而预定义的数据规则地址:网络通信中的用于标识设备的整数值端口号:设备为收发数据而指定的数值,用于标识具体连接可理解为:设备中用于网络通信的数据通道服务端:等待连接的设备客户端:发起连接的设备网址就是IP地址吗?URL是什么?,域名又是什么?网址不是IP地址,是网络信息资源的地址(如:具体网页的地址),即:URL域名是IP地址的别名,多个域名可指向同一个IP地址协议一定是看不懂的二进制数据吗?协议是一种约定,协议可以基于文本定义,也可以基于二进
2022-02-12 17:13:18 525
原创 Qt布局管理器
1.存在的问题目前的GUI开发方式:绝对定位直接在像素级指定各个组件的位置和大小void QWidget::move(int x, int y)void QWidget::resize(int w, int h);问题:组件的位置和大小无法自适应父窗口的变化2.解决方案:布局管理器提供相关的类对界面组件进行布局管理能够自动排列窗口中的界面组件窗口变化后自动更新界面组件的大小QLayout是Qt中布局管理器的抽象基类通过继承QLayout实现了功能各异且互补的布局管理器Qt中可以根据需
2022-02-08 23:56:57 983
原创 Qt对话框及类型
1.对话框的概念对话框是与用户进行简短交互的顶层窗口QDialog是Qt中所有对话框窗口的基类QDialog继承于QWidget是一种容器类型的组件QDialog的意义:QDialog作为一种专用的交互窗口而存在QDialog不能作为子部件嵌入其他容器中QDialog是定制了窗口式样的特殊的QWidget编程实验:QDialog和QWidget的区别int main(int argc, char *argv[]){ QApplication a(argc, argv);
2022-02-07 00:15:00 1910 1
原创 Qt对象间的父子关系
1.Qt对象间可以存在父子关系每一个对象都保存有它所有子对象的指针每一个对象都有一个指向其父对象的指针2.当指定Qt对象的父对象时其父对象会在子对象链表中加入该对象的指针该对象会保存指向其父对象的指针QObject* p = new QObject();QObject* c1 = new QObject();QObject* c2 = new QObject();c1->setParent(p);c2->setParent(p);编程实验:对象间的父子关系#inclu
2022-02-06 23:41:18 838
原创 makefile条件判断语句和函数
1.makefile中支持条件判断语句可以根据条件的值来决定make的执行可以比较两个不同变量或者变量和常量值ifxxx(arg1,arg2)elseendif注意事项:条件判断语句只能用于控制make实际执行的语句;但是,不能控制规则中命令的执行过程。工程经验:条件判断语句之前可以有空格,但不能有Tab字符(’\t’)在条件语句中不要使用自动变量($@, $^, $<)一条完整的条件语句必须位于同一个makefile中条件判断类似C语言中的宏,预处理阶段有效,执行阶段无
2022-02-02 21:23:41 2605
原创 makefile变量
1.变量和不同的赋值方式(1)makefile中支持程序设计语言中变量的概念(2)makefile中的变量只代表文本数据(字符串)(3)makefile中的变量名规则变量名可以包含字符,数字,下划线不能包含“:”,"#","=“或” "变量名大小写敏感(4)变量的定义和使用cc:=gccTARGET:=hello.out //变量定义$(TARGET):func.o main.o $(cc) -o $(TARGET) func.o main.o //变量使用(5)makefi
2022-01-31 18:17:13 3263 1
原创 makefile的结构和伪目标的引入
1.makefile的意义makefile用于定义源文件间的依赖关系makefile说明如何编译各个源文件并生成可执行文件makefile中的元素含义:targets:(可以包含多个目标,使用空格对多个目标名进行分隔)通常是需要生成的目标文件名make所需执行的命令名称prerequisities:(可以包含多个依赖,使用空格对多个依赖进行分隔)当前目标所依赖的其他目标或文件command:完成目标所需执行的命令**规则中的注意事项:**Tab键:'\t' 每一个命令行必须以Tab
2022-01-31 17:28:19 128
原创 makefile简介
1.make是一个应用程序解析源程序之间的依赖关系根据依赖关系自动维护编译工作执行宿主操作系统中的各种命令2.makefile是一个描述文件定义一系列的规则来指定源文件编译的先后顺序拥有特定的语法规则,支持函数定义和函数调用能够直接集成操作系统中的各种命令3.make和makefile之间的关系makefile中的描述用于指导make程序如何完成工作;make根据makefile中的规则执行明林,最后完成编译输出最简单的makefile示例:hello://目标 echo "hell
2022-01-31 15:37:47 1184
原创 计算器核心解析算法
问题:计算机如何读懂四则运算表达式?1.后缀表达式(1)人类习惯的数学表达式叫做中缀表达式(2)另外,还有一种将运算符放在数字后面的后缀表达式(消除了中缀表达式中的括号)(3)实例:2.中缀or后缀中缀表达式符合人类的阅读和思维习惯后缀表达式符合计算机的运算方式消除了中缀表达式中的括号同时保留中缀表达式中的运算优先级3.计算器核心算法解决方案:(1)将中缀表达式进行数字和运算符的分离(2)将中缀表达式转换为后缀表达式(3)通过后缀表达式计算最终结果4.分离算法分析思想:以符
2022-01-29 23:02:25 2177
原创 Qt中的字符串类
1.Qt中的字符串类采用Unicode编码使用隐式共享技术来节省内存和不必要的数据拷贝跨平台使用,不必考虑字符串的平台兼容性2.QString vs stringQString直接支持字符串和数字的相互转换QString直接支持字符串的大小比较QString直接支持不同字符编码间的相互转换QString直接支持std::string和str::wstring的相互转换QString直接支持正则表达式的应用#include <QDebug>void Sample_1()
2022-01-29 15:51:07 1033
原创 Qt中的消息处理
1.Qt消息模型Qt封装了具体操作系统的消息机制Qt遵循经典的GUI消息驱动事件模型思考:Qt中如何表示用户消息?Qt中如何映射用户消息到消息处理函数?Qt中消息映射需要遵循什么规则?2.信号与槽Qt中定义了与系统消息相关的概念:信号(Signal):由操作系统产生的消息槽(Slot):程序中的消息处理函数连接(Connect):将系统消息绑定到消息处理函数Qt中的消息处理机制:信号到槽的连接必须发生在两个Qt类对象之间!Qt的核心-QObject::connect函数:b
2022-01-24 00:08:17 857
原创 Qt计算器实现
1.QLineEdit组件QLineEdit用于接受用户输入QLineEdite能够获取用户输入的字符串QLineEdite是功能性组件,需要父组件作为容器QLineEdite能够在父组件中进行定位Qwidget w; //生成QWidget对象,顶级组件QLineEdit le(&w); //生成QLineEdite对象,其父组件为QWidgetle.setAlignment(Qt::AlignRight); //设置显示的字符串向右边对齐le.move(10. 10); //移动
2022-01-22 17:21:32 2170
原创 Qt中的坐标系统
1.坐标系统GUI操作系统都有特定的坐标系统图形界面程序在坐标系统中进行窗口和部件的定位定位类型:顶级窗口部件的定位窗口内部件的定位窗口部件的大小设置Qt使用统一的坐标系统定位窗口部件的位置和大小Qt部件提供成员函数在坐标系统中进行定位QWidget类提供了窗口部件所需要的坐标系统成员函数2.坐标系统相关的成员函数QWidget类中的坐标系统成员函数:x()y()width()height()geometry():x(),y(),width(),height()frame
2022-01-22 15:56:40 1404
原创 窗口部件及窗口类型
1.窗口组件图形用户界面由不同的窗口和窗口组件构成头文件包含窗口组件,对应Qt中的GUI模块Qt以组件对象的方式构成图形用户界面组件的类型:容器类(父组件):用于包含其他的界面组件功能类(子组件):用于实现特定的交互功能Qt中没有父组件的顶级组件叫做窗口QWidget类继承自QObjiec类和QPaintDevice类:QObject是所有支持Qt对象模型的基类QPaintDevice是Qt中所有可描绘制组件的基类2.QWidget组件Qwidget能够绘制自己和处理用户的输入
2022-01-21 00:16:54 1055
原创 Qt工程创建
1.Qt Creator工程管理1.Qt Creator以工程项目的方式对源码进行管理2.一个Qt Creator工程包含不同类型的文件.pro项目描述文件.pro.user用户配置描述文件 //Qt Creator自动生成以及后期维护.h头文件.cpp源文件.ui界面描述文件资源文件(图片,音频,等)Qt Creator# 注释起始符Qt 模块声明TARGET 可执行文件名TEMPLATE 程序模板声明SOURCES 源码文件声明HEADERS 头文件声明FORMS 界面
2022-01-19 23:56:55 408
原创 摄像头V4L2编程应用开发
1.V4L2简介Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux系统操作系统下一套用于采集图片、视频、和音视频数据的通用API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。在linux中,一切皆文件,所有外设都被看做是一种特殊的文件,成为“设备文件”。视频设备可以看做是设备文件,可以像访问普通文件一样对其进行读写。V4L2驱动的摄像头的设备文件一般是/dev/videoX(X为任意数字,要与自己的设
2022-01-16 22:00:09 1902
原创 Framebuffer应用开发
1.LCD Framebuffer操作原理LCD Framebuffer就是一款显存,在嵌入式系统中,显存被包含在内存中。LCD Framebuffer里的若干字节(根据驱动程序对LCD控制器的配置而定)表示LCD屏幕中的一个像素点,一一对应整个LCD屏幕。LCD控制器周而复始的从Framebuffer中取出一个像素的颜色值显示在LCD屏幕上。如上图,只需要在Framebuffer中填入不同的值,驱动程序和硬件控制器会把这些数据传输到对应LCD屏幕上的像素点,从而显示不同的颜色。2.Framebuff
2022-01-16 18:18:11 244
原创 Linux串口通信编程
1.串口介绍linux操作系统对串行口提供了很好的支持,linux系统中串口设备被当做一个字符设备处理。linux系统后在/dev目录下有若干个ttySx(x代表从0开始的正整数)设备文件。ttyS0对应第一个串口,也就是Windows系统下的串口设备COM1.2.串口操作方法操作串口的方法与文件类似,可以使用与文件操作相同的的方法打开和关闭串口、读写。以及使用select()函数监听串口。不同的是,串口是一个字符设备,不能使用fseek()之类的文件定位函数。此外串口是个硬件设备,还可以设置串口
2022-01-14 00:25:20 4613
原创 linux中的信号
什么是信号信号是内容受限的一种异步通信机制(1)信号的目的:用来通信(2)信号是异步的(对比硬件中断)(3)信号本质上是int型数字编号(事先定义好的)2.信号由谁发出(1)用户在终端按下按键(2)硬件异常后由操作系统内核发出信号(3)用户使用kill命令向其他进程发出信号(4)某种软件条件满足后也会发出信号,如alarm闹钟时间到会产生SIGALARM信号,向一个读端已经关闭的管道write时会产生SIGPIPE信号3.信号由谁处理、如何处理(1)忽略信号(2)捕获信号(信号绑定了
2022-01-10 21:28:09 115
原创 文件属性介绍
1.linux中各种文件类型2.普通文件(- regular file)(1)文本文件。文件中的内容是由文本构成的,文本指的是ASCII码字符。文件里的内容本质上都是数字(不管什么文件内容本质上都是数字,因为计算机中本身就只有1和0),而文本文件中的数字本身应该被理解为这个数字对应的ASCII码。常见的.c文件, .h文件 .txt文件等都是文本文件。文本文件的好处就是可以被人轻松读懂和编写。所以说文本文件天生就是为人类发明的。(2)二进制文件。二进制文件中存储的本质上也是数字,只不过这些数字并不是
2022-01-10 20:57:22 2054
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人