自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux笔记

Shell: 命令行解释器,用户与操作系统内核的接口脚本: 包含一系列命令的文本文件解释执行: 逐行读取并执行命令# 定义变量(注意=两边不能有空格)name="张三"age=25readonly PI=3.14159 # 只读变量# 使用变量echo $nameecho ${name} # 推荐用法echo "我是${name},今年${age}岁"# 删除变量unset name# 方法1: function关键字# 方法2: 直接定义。

2025-06-16 17:15:11 642

原创 Git详解:初学者完全指南

Git是一个分布式版本控制系统,用于管理代码的历史记录和协作开发。它解决了开发中的常见问题:版本控制(记录项目历史)、备份恢复(本地和远程仓库同步)、团队协作(合并代码)和分支管理(并行开发)。基本使用包括初始化仓库(git init)、添加文件(git add)、提交更改(git commit)、连接远程仓库(git remote)和分支操作(git branch/checkout/merge)。对于图书管理系统项目,建议从基础命令开始,逐步实践远程操作和分支管理,遵循"小步提交"原则

2025-06-14 11:10:19 456

原创 嵌入式就业指南

2025-06-05 18:02:49 155

原创 图书管理系统讲解

📝 图书管理系统架构概述(150字) 这是一个基于Spring MVC的传统三层架构图书管理系统,采用MVC设计模式分离关注点。技术栈包含JSP前端、Spring框架后端、JDBC数据访问和MySQL/H2数据库。系统分为Controller层处理HTTP请求(如BookController)、Service层实现业务逻辑(如BookService)、DAO层执行数据库操作(如BookDao)。核心领域模型包括Book(图书)、ReaderInfo(读者)和Lend(借阅记录)三个实体类。典型流程如用户请

2025-06-05 10:48:49 709

原创 嵌入式linux八股文

本文摘要涵盖了计算机基础与嵌入式开发的核心知识点,主要包括: 指针与内存管理 指针大小取决于系统位数(32位4字节/64位8字节) 内存分配方式:静态存储区、栈、堆(malloc/new) 内存对齐概念与取消方式(#pragma pack) 数据结构与算法 数组与链表对比(连续存储vs动态链接) 环形缓冲区实现原理(读写指针循环) 大小端存储模式及检测方法 操作系统核心概念 进程/线程区别(资源分配vs执行单元) 进程间通信方式(管道/共享内存等) 调度算法(抢占式/时间片轮转) 网络通信协议 TCP可靠传

2025-06-03 08:33:06 897

原创 I2C应用编程

主设备通过控制 SCL 生成时钟,并通过 SDA 发起通信、发送地址和数据;从设备则通过监听 SDA 和 SCL 线,在地址匹配时响应并参与数据传输。这种基于开漏输出和上拉电阻的设计,使得 I²C 总线能够高效地支持多设备通信。

2025-05-21 15:15:26 640

原创 Linux GPIO驱动开发实战:Poll与异步通知双机制详解

在嵌入式Linux开发中,GPIO按键驱动是最基础也最典型的案例之一。

2025-04-24 21:45:07 588

原创 绘制位图逻辑

初始化 FreeType 库,确保能够使用其 API 进行字体加载和渲染。标志让 FreeType 自动生成。释放 FreeType 资源,防止。设定字体的像素大小,影响。,准备绘制下一个字符。

2025-04-03 15:48:54 230

原创 UART(通用异步收发传输器)

UART 是一种用于串行通信的协议,它允许数据通过一条线路(或两条线路:一条用于发送,另一条用于接收)在计算机或其他设备之间传输。它广泛应用于设备之间的通信,如嵌入式系统、传感器、计算机串口、调试端口等。在 UART 协议中,数据是 串行 传输的,意味着数据不是同时传输的,而是一个比特一个比特地传输。我们通常会设置每个数据帧的格式来确保正确的传输和接收,这就涉及到 开始位、数据位、校验位和结束位。一个典型的 UART 数据帧的组成如下:1. 开始位(Start Bit) 功能:开始位用来通知

2025-03-26 23:25:44 1034

原创 Linux网络编程

在 Linux 环境下进行网络编程是开发网络应用程序的基础,其中 TCP(传输控制协议)和 UDP(用户数据报协议)是两种常用的传输层协议。TCP 提供面向连接、可靠的数据传输,而 UDP 则提供无连接、不可靠但高效的数据传输。TCP 服务器端的基本流程包括创建套接字、绑定地址和端口、监听连接、接受客户端连接以及接收和处理数据。UDP 服务器端的基本流程包括创建套接字、绑定地址和端口、接收和处理数据。TCP 客户端的基本流程包括创建套接字、连接到服务器、发送和接收数据。

2025-03-26 10:42:37 350

原创 Linux输入系统应用编程

Linux 输入系统是处理用户输入设备(如键盘、鼠标、触摸屏、游戏手柄等)的软件架构。在应用编程层面,它提供了与这些输入设备交互的接口。

2025-03-25 22:27:09 1487

原创 交叉编译程序

如果交叉编译工具链的前缀是arm-buildroot-linux-gnueabihf-,在交叉编译开源软件时如果里面有configure,万能命令如下。为了知道我使用当前编译器时会遍历哪些头文件路径以及库文件路径时,可以用以下命令(这里使用的编译器为。后面遇到具体的程序时同上过程。交叉编译程序的万能命令。

2025-03-20 16:43:41 967

原创 头文件、库文件的区分与作用

头文件和库文件在C/C++程序开发中扮演着不可或缺的角色。头文件提供了函数和数据的声明,是编译器理解代码的桥梁;库文件则提供了函数和数据的具体实现,是链接器和运行时系统的基础。理解它们的区别与联系,对于编写高效、可维护的代码至关重要。通过合理使用头文件和库文件,开发者可以实现代码的模块化、复用和高效管理,从而提高开发效率和程序性能。

2025-03-20 15:08:44 1118

原创 Framebuffer应用编程

Framebuffer(帧缓冲区)是操作系统提供的一块内存映射区域,直接对应显示设备的像素数据。用户可以通过mmap将该区域映射到用户空间,进而操作屏幕上的像素点。常见的 Framebuffer 设备文件是/dev/fb0,不同的显示设备可能对应/dev/fb1/dev/fb2等。本篇文章介绍了 Linux Framebuffer 的基本概念,并通过示例代码讲解了 Framebuffer 设备的初始化、内存映射、像素绘制和清屏等操作。

2025-03-19 21:20:44 284

原创 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 1052

原创 GCC与Makefile

gcc过程:预处理(.i文件)-> 编译(.s文件)-> 汇编(.o文件)-> 链接(将目标文件.o和库文件链接生成可执行文件)生成可执行文件test后,当需要对a.c改动时,重新进行gcc,这时对b.c也会重新编译,完全没有必要。所以一开始应该分开编译,最后再将所有目标文件进行链接。,只重新编译那些需要更新的文件,从而提高构建效率。Makefile 的核心思想是通过定义。改进Makefile,自动生成依赖文件。Makefile语法。

2025-03-17 15:18:54 216

原创 C++函数指针和std:function、std:bind

std:bind——将函数或可调用对象与特定参数绑定,从而创建一个新的可调用对象;语法:函数类型+(指针)(参数类型)= 所指函数。封装lambda表达式。

2024-09-23 09:10:19 285

原创 C++lambda表达式

lambda表达式——匿名函数(闭包)

2024-09-22 17:14:20 393

原创 STL-常用算法

注意:统计自定义数据类型的时候,需要配合重载。

2024-09-06 20:34:38 327

原创 STL—函数对象

其中negate是一元运算,其他都是二元运算。

2024-09-04 14:42:58 209

原创 C++STL

STL(Standard Template Library,标准模板库)STL从广义上分为:容器(container)算法(algorithm)迭代器(iterator)容器和算法之间通过迭代器进行无缝连接STL几乎所有代码都采用了模板类或者模板函数

2024-09-03 21:26:16 1557

原创 C++模板

将声明和实现写到同一个文件中,并更改后缀名为.hpp,.hpp是约定的名称,并不是强制。typename --- 表面其背后的符号是一种数据类型,可以用class代替。建立一个通用类,类中的成员数据类型可以不具体制定,用一个虚拟的类型来代表。建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个。T --- 通用的数据类型,名称可以替换,通常为大写字母。全局函数类外实现 - 需要提前要编译器知道全局函数的存在。在上述代码中,如果传入的是数组或者类,就无法实现了。模板的通用性并不是万能的。

2024-08-16 10:08:38 360

原创 C++文件操作

文件的类型分为两种:1.文本文件 - 文件以文本的ASCII码形式存储在计算机中2.二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们操作文件的三大类1.ofstream:写操作2.ifstream:读操作3.fstream:读写操作。

2024-08-03 22:55:40 403

原创 C++多态

1.有。

2024-07-29 22:08:01 217

原创 C++继承

首先,无论是哪一种继承方式,父类中的私有类型是无法访问的(设置成友元除外)。而变成子类中的private类型时,子类本身是可以对其进行访问的,比如第三种情况。当然,在类外依旧无法访问类内的私有成员。父类的所有非静态成员属性都会被子类继承下去,其中private类型的只是没有办法访问,但是依旧被继承下来了。这里加上了Animal::,等于说指明了作用域,因此可以访问父类中的同名成员了。这样,后来的Sheep类,Tuo类以及YangTuo类都能指向同一份数据c。保护类型:类内可以访问,而类外不能访问。

2024-05-17 20:34:49 804

原创 C++运算符重载

原理和成员函数基本相同,返回值为类型,区别只是参数变成了两个类。将函数名命名为operator+,就可以对‘+’进行重载。

2024-05-12 23:09:54 255 1

原创 C++ 友元

将一个类作为另一个类的友元,这样前一个类创建的对象就可以访问后一个类的私有成员变量。这时,将Friend设置为Building类的友元,就可以继续访问。在Friend函数中,如果直接调用私有成员变量,程序报错。这样,可以单独将类的一个成员函数作为友元。

2024-04-18 21:05:26 376 1

原创 C++ 深拷贝与浅拷贝

我们注意test函数,在p1创建时调用了含参构造函数,而这里m_Height由于是指针类型的,所以我们new了一块内存,使m_Height指向160的内存地址。此时在拷贝构造函数中我们看到,对于m_Height,这个是进行直接赋值的,由于m_Height是指针类型,所以这里代表。由于堆中内存需要手动销毁,所以我们选择在析构函数调用时顺便手动销毁堆中的内存,运行后发现程序报错。我们观察拷贝构造函数,发现此时p1,p2的堆区已经不一样了,这时再运行就没有问题了。这就是浅拷贝直接赋值会出现的问题,堆区指向重叠。

2024-04-16 23:13:03 621 1

原创 Java开发-一小时学会贪吃蛇游戏

(paintComponent方法其实属于Panel的超类JComponent,不过因为添加到框架时要用到JPanel,故这里也可以理解为重写),同时在MySnake类中,创建一个MyPanel类的对象,添加到f中。画完之后,要建立食物和蛇的互动,当蛇头坐标等于食物时,蛇的长度增加,由于长度增加这一事件属于活动,我们自然想到在actionPerformed方法中进行。是一种常见的做法,主要用于执行一些基本的图形绘制处理,如清除旧的画面内容,确保组件的其他部分正确渲染,以及处理一些继承的绘图逻辑。

2024-04-15 13:00:23 2269 1

原创 Java 稀疏数组

运行结果:意思是11行11列,有两个有效的元素(其余元素为0)1 2 1 的意思是第二行第三列有一个元素,值为12 3 2 的意思是第三行第四列有一个元素,值为2。

2024-04-11 21:17:44 275 1

原创 Java 多态

static 方法:因为static方法属于类本身而不是实例,因此子类无法提供一个不同的static方法来“替换”或“重写”父类中的static方法。(当你尝试在子类中定义一个与父类static方法签名相同的方法时,你实际上是在子类中隐藏(或阴影,shadowing)了父类的static方法,而不是重写它。这意味着在子类中调用该方法时,将执行子类的static方法,而不是父类的。对于子类对父类重写的方法,无论是父类引用指向子类对象(多态)还是直接创建一个子类对象,都会调用子类中已经重写的方法。

2024-04-11 19:47:09 300 1

原创 Java static字段

在使用时,(静态)代码块会在类被加载到JVM时运行,主要用于初始化静态变量,或者在类加载时执行一些只需执行一次的代码。如图在导入random后将其设为静态的,即可不用Math.random(),而是直接调用。关键字进行标记,并且它们不是类的成员,而是属于类本身。调用顺序:静态代码块->代码块->构造器。,且按照它们在类中出现的顺序执行。

2024-04-11 19:21:21 236 1

Java开发-一小时学会贪吃蛇游戏

MyPanel类的源代码

2024-04-15

空空如也

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

TA关注的人

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