自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 资源 (6)
  • 收藏
  • 关注

原创 mmap(内存映射)

1、mmap的引入我们都知道,应用程序是不能直接访问驱动程序的。对于数据量较小的数据交互,我们可以使用copy_to_usr()(read())和copy_from_usr()(write())来进行用户态buffer和内核态buffer之间的拷贝。但是,对于数据量较大的情况,还用这种方式进行buffer的拷贝,效率低下。为了解决这个问题,我们使用mmap()。将内核态的buffer映射到用户态,让APP直接在用户态进行读写。2、什么叫内存映射问题的引入:当我们同时运行两个程序:我们可以看出

2021-04-15 15:58:30 3906

原创 linux之定时器

1 问题的引入—》软件消抖在实际的应用中,如按键按下的的现象应该是:松开(高电平)-》按下(低电平)-》松开(高电平)但是由于实际按键的硬件原因导致的机械抖动,会导致产生多次中断,上报多次按键值。可是实际上,我们只要一次按键值。为了避免这种情况的发生1)、我们可以使用中断来处理,死等:在按键中断程序中,可以循环判断几十亳秒,发现电平稳定之后再上报。但是这样违背了中断的原则之一:将尽可能的快。2)、使用定时器每次产生中断,在中断执行函数中,我们做的不是读按键值,而是修改定时器的超时时间:

2021-04-15 15:28:09 299

原创 POLL机制

1、poll机制概述使用休眠和唤醒机制等待某个事件发生,方法简单。但是不能做其他事情。因为如果一个事件等待很久才发生,那么我就要一直等待。为了避免这种事情的发生,我们给他加上一个超时时间,这就是poll机制。2、实现流程其核心的实现流程如下:但是在内核中,他具体的实现方式如下:驱动程序部分:在应用程序中,可以指定poll的休眠时间:总结:对于POLL机制的使用,对于驱动编写人员来说,只是做了两件事情:1、使用poll_wait()函数,将线程放入等待队列(

2021-04-15 15:18:56 1791 1

原创 休眠与唤醒

本文的分享,基于获取按键值得历程:1、用户程序通过休眠与唤醒机制获取按键值图示2 重要函数分析这里,我们重点分析两个函数。1)、休眠函数2)、唤醒函数函数分析:wake_up函数哪里找到要唤醒的进程或者线程呢?答案就是他的参数:wq(wait queue),等待队列.他会从这个队列里面,取出线程。进行唤醒。当某个进程、线程要休眠的时候,他会调用休眠函数wait_event_xx将自己放入到等待队列中。event参数的含义是,false:不休眠。true:休眠。

2021-04-15 15:09:27 571

原创 linux中断系统中,重要的数据结构

1、硬件中断的发生这里举得例子有点难度,我们先来介绍一下:什么是共享中断?多个中断源,使用同一个GPIO引脚(这个GPIO引脚,已经配置好了,用做中断引脚)。2 中断系统中用到的关键结构体:3 硬件中断号和虚拟中断号3.1 假设,有两个中断,分别是GPIO1模块中的5号中断和GPIO2模块中的5号中断。虽然他们用的是同一号中断,但是属于不同的模块。显然,在设备树中,他们的配置是不同的。在设备树中,指定一个中断的方式如下://表示要使用的GPIO 1模块里面的引脚interrupt -

2021-04-15 14:59:45 151

原创 linux中,中断的处理方法的改进 中断线程化

前言之前使用的用内核线程去处理中断(任务队列),对于单CPU系统来说,是很高效的一种方式,但是随着CPU越来越多,这种方法就显得不是很高效。因为,一个CPU只能创建一个内核线程Kworker。多个中断的work都是由一个worker线程来处理。这会导致内核线程kworker对CPU的占用率过高,而其他CPU却空着。这对于多CPU系统来说,显然不能被接收!!1 改进改进的地方在于:我们不用再自己定义work结构体,也无需再使用函数schedule_work(&work)。我们可以使用reque

2021-04-15 14:55:17 426

原创 linux中,中断的处理方法 工作队列

1、前言为了提高中断的执行速度,我们将不是特别耗时的任务交给下半部tasklet来做(tasklet在在中断的上下文中工作,无法休眠),但是,当有非常复杂的操作需要执行的时候,如果依旧采用下半部tasklet来做,虽然系统依旧可以响应中断,但是,应用应用程序是不能执行的。因为整个系统都在执行软中断或是硬中断。将耗时的操作放在某一个线程(内核线程)去做,可以解决系统的卡顿问题,因为线程可以休眠。这就是工作队列。2 内核线程的介绍:内核会为我们自动创建一个kworker线程(一个CPU一个*),每个

2021-04-15 14:47:27 464

原创 RK3399 tftp和nfs服务器的搭建

自己编译buileroot固件,在uboot命令行ping不通虚拟机。无法使用tftp和nfs。排查流程:1、启动开发板,进入跟文件系统,参考正点原子的测试。发现tftp和nfs都无问题。排除,是tftp和nfs配置出错的原因,也排除防火墙原因。2、换用官方的buildroot固件,同样不能ping通。排除是编译问题。突发奇想。用ubuntu固件的u-boot,用自己编译的内核和buildroot的跟文件系统启动。结果,能启动内核,但是不能挂在跟文件系统。总结,和nfs有关,还未进行排查的地方

2021-04-10 22:07:10 528

原创 linux中,中断的处理方法 tasklet软中断

1、在linux中,对中断的处理有原则对中断的处理原则有两个:1)、中断不能嵌套中断(即使发生了更高优先级的中断)–》防止栈空间不够用。因为每个中断被执行,都要先保存现场。如果中断1在执行的过程中,嵌套了中断2;那么在中断2在被执行之前,中断1的现场应该先被保存(保存在栈中)。同样,如果还嵌套了其他中断,还要将现场保存在栈中。这样,就会发生一个问题,如果嵌套的中断很多,那么可能会导致栈空间不够用。为了避免这个问题,不允许中断嵌套。2)、对中断的处理应当越快越好。假设系统只有一个CPU,一个进程在执

2021-04-01 13:25:33 521

多人聊天项目资料包(服务端、客户端)

包含多人聊天项目的客户端和服务端程序,代码有详细注释。

2021-03-09

STM32通过298N控制电机.zip

STM32通过298N控制电机.zip

2021-03-07

ARM开发板阿里云实战项目资料mqtt.tar

ARM开发板阿里云实战项目资料

2021-03-01

智能家居实战项目程序

智能家居

2020-12-28

阿里云IoT物联网平台 MQTT 2路开关+三路数据(Web).zip

阿里云物联网源码

2020-12-28

linux项目实战:视频监控项目资源

linux项目实战:视频监控项目资源

2020-12-28

空空如也

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

TA关注的人

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