- 博客(27)
- 收藏
- 关注
原创 常用文件操作api
Linux系统编程中常用的文件操作函数: open() - 打开/创建文件,需指定路径、打开模式(如O_RDWR/O_CREAT)和可选权限(如0644),返回文件描述符 write() - 向文件描述符写入指定字节数据,返回实际写入大小 read() - 从文件描述符读取数据到缓冲区,返回实际读取字节数 fstat() - 获取文件元数据(如通过st_size获取文件大小),需传入文件描述符和stat结构体 close() - 关闭文件描述符 文中包含各函数的原型、参数说明及典型用法示例,如使用
2026-07-19 10:33:37
35
原创 线程创建、销毁、互斥、同步
Linux线程编程的核心内容,分为线程管理和同步机制两大部分。线程管理部分详细讲解了线程创建(pthread_create)、分离(pthread_detach)、退出(pthread_exit)和取消(pthread_cancel)等基本操作。同步机制部分重点阐述了互斥锁(mutex)和条件变量的使用方法,包括静态/动态创建、加锁解锁操作、信号等待与通知等。文章通过具体代码示例(如线程创建和条件变量应用)展示了这些API的实际应用场景,帮助理解多线程编程中的资源共享和线程同步问题。所有操作均基于
2026-07-16 15:19:11
230
原创 多路IO复用[select版TCP服务器与poll版TCP服务器]与常用网络编程函数详解
本文介绍了Linux网络编程中的多路IO复用技术,包括select和poll两种接口的使用方法。主要内容包括: select函数原型及使用示例,展示了如何创建TCP服务器并监控多个客户端连接 poll函数原型及使用示例,提供了另一种高效的IO多路复用实现方式 常用网络编程函数详解:socket()、bind()、inet_addr()、htons()、listen()、accept()等 通过对比传统多线程方法,阐述了IO复用技术在资源利用和性能方面的优势 文章包含完整的代码示例,演示了如何使用select
2026-07-16 10:36:59
208
原创 2.8寸LCD屏驱动(ILI9341)
基于STM32通过GPIO模拟8080时序驱动2.8寸LCD屏,包含完整驱动代码。可实现初始化配置、ID读取、基本绘图功能(画点、直线、矩形)及图片显示功能。
2026-07-08 17:37:52
490
原创 keil下载报错Connection refused due to device mismatch!
解决keil下载报错Connection refused due to device mismatch
2026-06-10 14:29:51
229
原创 使用链表和数组实现栈
限定仅在表尾进行插入和删除操作的线性表。这一端被 称为栈顶,相对的,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶 元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻 的元素成为新的栈顶元素。堆栈又名栈(stack。先入的子弹最后被打出。
2026-04-08 17:17:41
52
原创 函数指针学习分享(嵌入式必备)
本文详细介绍了C语言中函数指针的概念和使用方法。函数指针是指向函数入口地址的变量,其核心作用是让函数可以像变量一样传递、赋值和调用。文章讲解了基础写法返回值类型(*指针变量名)(参数列表)和简化写法typedef返回值类型(*新类型名)(参数列表),并重点区分了普通类型typedef和函数指针类型typedef的语法差异。最后通过嵌入式驱动统一接口的实战案例,展示了函数指针在模拟多态方面的应用价值,即统一上层接口和便于扩展。掌握函数指针对提高C语言编程能力具有重要意义。
2026-03-25 19:27:23
316
原创 int* p[4] 和 int(*p)[4] 的区别(超详细)
声明形式典型用途易错点int* p[4]1. 存储多个 int 变量的地址;2. 模拟不规则二维数组(每行长度不同)不能直接指向二维数组的行(类型不匹配)int(*p)[4]1. 指向固定列数的二维数组;2. 遍历二维数组(精准控制行跳转)必须指向 “恰好 4 个 int 的数组”,列数不匹配会报错int* p[4]是数组,元素为int*int(*p)[4]是指针,指向int[4]
2026-03-24 14:28:00
243
原创 C语言位运算符 & | ~ ^ << >>
位运算是对二进制数的逐位操作,主要包括按位与(&)、或(|)、取反(~)、异或(^)、左移(<<)和右移(>>)。按位与见0为0全1则1,用于清零特定位;按位或见1为1全0则0;异或相同为0不同为1。左移相当于乘2,右移相当于除2。嵌入式开发中常用组合操作:&=~可精确清零指定位而不影响其他位,|=可将特定位设为1。这些操作高效且安全,是底层编程的重要技术。
2026-03-16 11:16:44
371
原创 ubuntu下的常用命令
ls (查看当前路径下的文件内容 -l 以列表形式展现,-a 查看所有文件包含隐藏文件 - h自动转换内存单位)-x 解压 -c 压缩 -v 打印过程信息 -f跟压缩包名字。cat 文件名 -n (将文件内容打印到终端, -n 显示行号)sudo dpkg -P 安装包名字 (彻底删除安装包及其配置文件)解压缩: tar -xvf 压缩包名称。sudo dpkg -i 安装包名字 (安装安装包)sudo dpkg -r 安装包名字 (卸载安装包)
2026-03-11 20:11:38
238
原创 Ubuntu安装(包含VMwere安装)
本文介绍了在VMWare虚拟机中安装和配置Ubuntu 20.04系统的完整流程。首先说明VMWare 17.6及以上版本可免费下载安装。然后详细讲解了在VMWare中创建新虚拟机并安装Ubuntu系统的步骤,包括重启等操作。系统安装完成后,指导用户通过终端更新系统并安装open-vm-tools-desktop工具包,该工具可实现自动分辨率调整和Windows系统间的数据交互功能。最后还提供了可选的虚拟化配置建议,说明开启虚拟化技术能提升虚拟机CPU利用率。全文提供了从软件安装到系统配置的一站式解决方案。
2026-03-10 10:17:45
84
原创 进制和进制之间转换
本文介绍了二进制与八进制、十六进制、十进制之间的转换方法。二进制转八进制采用3位分组法(421规则),转十六进制采用4位分组法(8421规则),转十进制则按位权展开求和。十进制转二进制通过除2取余法实现。八进制与十六进制间的转换需先转二进制再转换。文中提供了具体转换示例,如二进制10101101011010转八进制为025532,转十六进制为0x2B5A;十进制492转二进制为111101100。各进制转换规则清晰明了,便于理解和应用。
2026-03-09 16:27:06
359
原创 快速入门,使用Proteus进行stm32仿真
4.系列选择Cortex-M3,controller对应自己的芯片。选择hex文件,频率可对应自己芯片的主频。1.首先点击“文件”->“新建工程”2.这里可以设定自己工程的名称,3.如图,点击下一步。
2026-01-26 17:48:15
67
原创 共用体union学习心得
由于共用体所有成员位于同一段内存,因此共用体的大小就等于最大成员的大小。在程序中改变共用体的一个成员,其他成员也会随之改变。当给某个特定的成员进行赋值时,其他成员的值也会具有一致的含义,这是因为它们的值的每一个二进制位都被新的值所覆盖。1、同一个内存段可以用来存放几种不同类型的成员,但是每一次只能存放其中一种,而不是同时存放所有的类型。2、共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就会失去作用。3、共用体变量的地址和它各个成员的地址是一样的。
2024-12-28 08:00:00
1021
原创 keil5调试后出现 Encountered an improper argument 问题
keil5调试后出现 Encountered an improper argument 问题简单解决
2024-12-20 12:05:27
1887
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅