自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 驱动的阻塞与非阻塞IO

本文介绍了Linux设备驱动中阻塞/非阻塞IO与轮询操作的实现机制。阻塞IO会在资源不可用时挂起进程,而非阻塞IO会立即返回状态;轮询操作通过select/poll/epoll系统调用查询设备状态。文中详细阐述了等待队列的使用方法,包括队列初始化、添加/移除元素、唤醒机制等,并给出了globalfifo设备驱动的完整实现示例。该驱动支持阻塞/非阻塞读写,通过互斥锁保护共享资源,使用等待队列实现进程同步。此外,还介绍了poll函数在驱动中的实现方式,以及用户空间如何通过select监控设备状态。最后提供了测试

2025-07-21 22:26:52 384

原创 驱动的并发控制

摘要:本文介绍了Linux内核中处理并发与竞态的关键机制。主要内容包括:1) 并发与竞态的概念及成因,如SMP多CPU、中断与进程间的资源竞争;2) 解决竞态的多种方法,包括中断屏蔽、原子操作、自旋锁、信号量和互斥体;3) 编译和执行乱序问题及其解决方案;4) 特殊锁机制如读写自旋锁、顺序锁的特点和使用场景;5) 信号量与互斥体的区别及选用原则;6) 完成量用于同步的机制。这些机制为内核开发提供了多层次的并发控制手段,开发者需根据具体场景选择合适的同步方法。

2025-07-09 15:53:12 773

原创 linux驱动开发-字符驱动

字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、IIC、SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。首先我们知道应用程序运行在用户空间,而 Linux 驱动属于内核的一部分,因此驱动运行于内核空间。当我们在用户空间想要实现对内核的操作,比如使用 open 函数打开/dev/led 这个驱动,因为用户空间不能直接对内核进行操作,因此必须使用一个叫做“系统调用”的方法来实现从用

2025-07-02 23:38:46 748

原创 数据结构-指针

指针数组:本质是数组 存放指针的数组 二,高级指针 字符指针 数组指针:本质是指针 指向数组的指针 函数指针:本质是指针,是指向函数的指针, 函数也是有地址的。函数名<=>&函数地址,数组名不等于&数组地址

2025-03-25 13:45:15 457

原创 数据结构-冒泡 简单选择

原理:从待排序的尾部元素,俩俩比较,较小值交换到前面。代码:从下标为一的顺序表,插入n个元素第一个for是遍历元素,第二个for是进行内层交换,从最后一个元素开始,小的元素在前面。

2024-06-18 16:37:58 368

原创 stm32-软件iic 硬件iic

原理:多个设备共用scl和sda信号线,支持多主机多从机。scl是单向串行时钟线,始终由主设备控制,sda是双向串行数据线,可以由主机和从机控制。每个设备在这个协议中都有固定的设备号。有俩个上拉电阻,当设备空闲时,由上拉电阻拉高。如果是多主机,那么会使用仲裁,避免数据冲突。有3种传输模式,100k,400k,3.4m。为什么要使用俩条信号线?节省资源。为什么scl时钟线由主设备控制?进行通信的主动权是掌握在主机手中。为什么sda是双向串行数据线?因为设备和设备之间要通信,交换数据。为什么通过设备号区分?

2024-06-17 20:25:46 3138

原创 stm32-串口通信

俩个设备通过各种的转换电平芯片进行 ttl和rs232 转换,ttl叫正逻辑,rs232负逻辑。

2024-06-17 18:40:52 541

原创 数据结构-链队

链队:队列的链式存储结构,链队和单链表直接,多了一个尾指针,并且只能够尾指针进队,头指针出队。空队列时,俩个指针都指向头节点。它的节点和普通节点一样,在链队的结构体定义了俩个节点型指针,这样这个结构通过指针就能够表示一个链式存储的队列。

2024-06-17 14:55:09 413

原创 NRF24L01

常用寄存器。

2024-06-16 17:41:20 699

原创 数据结构-链栈

学习栈,需要知道他的栈顶指针的作用,对栈操作永远是从栈顶开始,顺序栈的本质是数组,链栈的本质是链表。学习链栈,先要知道顺序栈的栈顶下标的含义,再结合链表进行融合。

2024-06-16 15:12:48 1598

原创 数据结构-链表

初始化俩个链表类型指针,初始化一个头节点:定义节点,分配内存创建一个循环,循环中创造新节点把尾指针的指针域指向新节点尾指针后移循环结束后给尾指针的指针域置为null对链表的操作,首先要判断当前操作是否合法,比如插入位置和造成链表丢失。其次就是插入,删除链表的操作,要安全的插入,安全的删除,那么安全在链表的定义是什么,是链表顺序和完整。在这个过程中要注意节点会不会丢失。

2024-06-15 19:17:22 1402

原创 蓝桥杯——单片机——第四天

今天用了挺长时间去理解原理,理解代码,感觉还是模模糊糊的,应该是不太熟悉嘛。后面继续加油,看不懂多去找一下资料,找一下视频来巩固一下。

2023-09-22 23:40:13 358 1

原创 蓝桥杯——单片机——第三天

今天又学了数码管和矩阵按键俩个模块的原理,也跟着范例敲了一遍,虽然没有自己敲,我的想法是先了解完全部模块的原理,大致的敲一下,最后在自己敲,总结出自己的模板!每天学的的模块虽然不多,但是官方代码还是有点不好理解,对我来说,相信会越来越好!

2023-09-21 23:47:07 222

原创 蓝桥杯——单片机——第二天

当然代码不是我自己想出来的,我也是跟着书上敲,但是原理基本都是懂了的,下面就是自己更加熟悉一下代码逻辑和编写方面,每天学一点嘛!

2023-09-20 23:33:21 251 1

原创 蓝桥杯——单片机学习中

学习目标:这几天先把指导书上内容大致过下,就是看一下模块设计,了解原理,在跟着代码敲一遍 学习内容:led程序设计,中断程序设计 学习时间:这几天都是只看俩个项目模块,大致看懂了,就结束了 学习产出:对keil 5更加熟悉了,对国信长天这块板子也有了一定了解,对代码的理解能力稍微好了一点,但是对项目模板程序的编写,现在也还完不成嘛,只有慢慢看b站,看chat-gpt。遇见不会,也会在csdn上发出来,大佬们帮忙回答一下

2023-09-19 18:58:13 115

linux驱动学习:字符,块,网络;常见驱动子系统;设备树

linux驱动学习:字符,块,网络;常见驱动子系统;设备树

2025-08-09

空空如也

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

TA关注的人

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