- 博客(25)
- 收藏
- 关注
原创 绘制位图逻辑
初始化 FreeType 库,确保能够使用其 API 进行字体加载和渲染。标志让 FreeType 自动生成。释放 FreeType 资源,防止。设定字体的像素大小,影响。,准备绘制下一个字符。
2025-04-03 15:48:54
191
原创 UART(通用异步收发传输器)
UART 是一种用于串行通信的协议,它允许数据通过一条线路(或两条线路:一条用于发送,另一条用于接收)在计算机或其他设备之间传输。它广泛应用于设备之间的通信,如嵌入式系统、传感器、计算机串口、调试端口等。在 UART 协议中,数据是 串行 传输的,意味着数据不是同时传输的,而是一个比特一个比特地传输。我们通常会设置每个数据帧的格式来确保正确的传输和接收,这就涉及到 开始位、数据位、校验位和结束位。一个典型的 UART 数据帧的组成如下:1. 开始位(Start Bit) 功能:开始位用来通知
2025-03-26 23:25:44
863
原创 Linux网络编程
在 Linux 环境下进行网络编程是开发网络应用程序的基础,其中 TCP(传输控制协议)和 UDP(用户数据报协议)是两种常用的传输层协议。TCP 提供面向连接、可靠的数据传输,而 UDP 则提供无连接、不可靠但高效的数据传输。TCP 服务器端的基本流程包括创建套接字、绑定地址和端口、监听连接、接受客户端连接以及接收和处理数据。UDP 服务器端的基本流程包括创建套接字、绑定地址和端口、接收和处理数据。TCP 客户端的基本流程包括创建套接字、连接到服务器、发送和接收数据。
2025-03-26 10:42:37
283
原创 Linux输入系统应用编程
Linux 输入系统是处理用户输入设备(如键盘、鼠标、触摸屏、游戏手柄等)的软件架构。在应用编程层面,它提供了与这些输入设备交互的接口。
2025-03-25 22:27:09
1413
原创 交叉编译程序
如果交叉编译工具链的前缀是arm-buildroot-linux-gnueabihf-,在交叉编译开源软件时如果里面有configure,万能命令如下。为了知道我使用当前编译器时会遍历哪些头文件路径以及库文件路径时,可以用以下命令(这里使用的编译器为。后面遇到具体的程序时同上过程。交叉编译程序的万能命令。
2025-03-20 16:43:41
929
原创 头文件、库文件的区分与作用
头文件和库文件在C/C++程序开发中扮演着不可或缺的角色。头文件提供了函数和数据的声明,是编译器理解代码的桥梁;库文件则提供了函数和数据的具体实现,是链接器和运行时系统的基础。理解它们的区别与联系,对于编写高效、可维护的代码至关重要。通过合理使用头文件和库文件,开发者可以实现代码的模块化、复用和高效管理,从而提高开发效率和程序性能。
2025-03-20 15:08:44
758
原创 Framebuffer应用编程
Framebuffer(帧缓冲区)是操作系统提供的一块内存映射区域,直接对应显示设备的像素数据。用户可以通过mmap将该区域映射到用户空间,进而操作屏幕上的像素点。常见的 Framebuffer 设备文件是/dev/fb0,不同的显示设备可能对应/dev/fb1/dev/fb2等。本篇文章介绍了 Linux Framebuffer 的基本概念,并通过示例代码讲解了 Framebuffer 设备的初始化、内存映射、像素绘制和清屏等操作。
2025-03-19 21:20:44
262
原创 Linux文件IO
open()是,用于打开文件。它返回一个,用于后续读写操作。pathnameflagsmodeO_CREAT返回值:成功返回,失败返回-1,并设置errno以指示错误原因flagsflags主要分为和,可使用(位或)组合。O_RDONLYO_WRONLYO_RDWRmodeO_CREATmode以指定文件权限,如0644。2.write()fd:文件描述符,表示已打开的文件。buf:指向要写入数据的缓冲区的指针。count:要写入的字节数。成功时:返回实际写入的字节数(通常等于count失败时:返回-1。
2025-03-19 17:08:58
1026
原创 GCC与Makefile
gcc过程:预处理(.i文件)-> 编译(.s文件)-> 汇编(.o文件)-> 链接(将目标文件.o和库文件链接生成可执行文件)生成可执行文件test后,当需要对a.c改动时,重新进行gcc,这时对b.c也会重新编译,完全没有必要。所以一开始应该分开编译,最后再将所有目标文件进行链接。,只重新编译那些需要更新的文件,从而提高构建效率。Makefile 的核心思想是通过定义。改进Makefile,自动生成依赖文件。Makefile语法。
2025-03-17 15:18:54
173
原创 C++函数指针和std:function、std:bind
std:bind——将函数或可调用对象与特定参数绑定,从而创建一个新的可调用对象;语法:函数类型+(指针)(参数类型)= 所指函数。封装lambda表达式。
2024-09-23 09:10:19
267
原创 C++STL
STL(Standard Template Library,标准模板库)STL从广义上分为:容器(container)算法(algorithm)迭代器(iterator)容器和算法之间通过迭代器进行无缝连接STL几乎所有代码都采用了模板类或者模板函数
2024-09-03 21:26:16
1523
原创 C++模板
将声明和实现写到同一个文件中,并更改后缀名为.hpp,.hpp是约定的名称,并不是强制。typename --- 表面其背后的符号是一种数据类型,可以用class代替。建立一个通用类,类中的成员数据类型可以不具体制定,用一个虚拟的类型来代表。建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个。T --- 通用的数据类型,名称可以替换,通常为大写字母。全局函数类外实现 - 需要提前要编译器知道全局函数的存在。在上述代码中,如果传入的是数组或者类,就无法实现了。模板的通用性并不是万能的。
2024-08-16 10:08:38
350
原创 C++文件操作
文件的类型分为两种:1.文本文件 - 文件以文本的ASCII码形式存储在计算机中2.二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们操作文件的三大类1.ofstream:写操作2.ifstream:读操作3.fstream:读写操作。
2024-08-03 22:55:40
397
原创 C++继承
首先,无论是哪一种继承方式,父类中的私有类型是无法访问的(设置成友元除外)。而变成子类中的private类型时,子类本身是可以对其进行访问的,比如第三种情况。当然,在类外依旧无法访问类内的私有成员。父类的所有非静态成员属性都会被子类继承下去,其中private类型的只是没有办法访问,但是依旧被继承下来了。这里加上了Animal::,等于说指明了作用域,因此可以访问父类中的同名成员了。这样,后来的Sheep类,Tuo类以及YangTuo类都能指向同一份数据c。保护类型:类内可以访问,而类外不能访问。
2024-05-17 20:34:49
795
原创 C++ 友元
将一个类作为另一个类的友元,这样前一个类创建的对象就可以访问后一个类的私有成员变量。这时,将Friend设置为Building类的友元,就可以继续访问。在Friend函数中,如果直接调用私有成员变量,程序报错。这样,可以单独将类的一个成员函数作为友元。
2024-04-18 21:05:26
365
1
原创 C++ 深拷贝与浅拷贝
我们注意test函数,在p1创建时调用了含参构造函数,而这里m_Height由于是指针类型的,所以我们new了一块内存,使m_Height指向160的内存地址。此时在拷贝构造函数中我们看到,对于m_Height,这个是进行直接赋值的,由于m_Height是指针类型,所以这里代表。由于堆中内存需要手动销毁,所以我们选择在析构函数调用时顺便手动销毁堆中的内存,运行后发现程序报错。我们观察拷贝构造函数,发现此时p1,p2的堆区已经不一样了,这时再运行就没有问题了。这就是浅拷贝直接赋值会出现的问题,堆区指向重叠。
2024-04-16 23:13:03
607
1
原创 Java开发-一小时学会贪吃蛇游戏
(paintComponent方法其实属于Panel的超类JComponent,不过因为添加到框架时要用到JPanel,故这里也可以理解为重写),同时在MySnake类中,创建一个MyPanel类的对象,添加到f中。画完之后,要建立食物和蛇的互动,当蛇头坐标等于食物时,蛇的长度增加,由于长度增加这一事件属于活动,我们自然想到在actionPerformed方法中进行。是一种常见的做法,主要用于执行一些基本的图形绘制处理,如清除旧的画面内容,确保组件的其他部分正确渲染,以及处理一些继承的绘图逻辑。
2024-04-15 13:00:23
2228
1
原创 Java 稀疏数组
运行结果:意思是11行11列,有两个有效的元素(其余元素为0)1 2 1 的意思是第二行第三列有一个元素,值为12 3 2 的意思是第三行第四列有一个元素,值为2。
2024-04-11 21:17:44
265
1
原创 Java 多态
static 方法:因为static方法属于类本身而不是实例,因此子类无法提供一个不同的static方法来“替换”或“重写”父类中的static方法。(当你尝试在子类中定义一个与父类static方法签名相同的方法时,你实际上是在子类中隐藏(或阴影,shadowing)了父类的static方法,而不是重写它。这意味着在子类中调用该方法时,将执行子类的static方法,而不是父类的。对于子类对父类重写的方法,无论是父类引用指向子类对象(多态)还是直接创建一个子类对象,都会调用子类中已经重写的方法。
2024-04-11 19:47:09
295
1
原创 Java static字段
在使用时,(静态)代码块会在类被加载到JVM时运行,主要用于初始化静态变量,或者在类加载时执行一些只需执行一次的代码。如图在导入random后将其设为静态的,即可不用Math.random(),而是直接调用。关键字进行标记,并且它们不是类的成员,而是属于类本身。调用顺序:静态代码块->代码块->构造器。,且按照它们在类中出现的顺序执行。
2024-04-11 19:21:21
223
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人