自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于idea中“冲突问题”直接修改文件后,依旧会“冲突”报错的问题?

idea中虽然弱化了本地缓存的操作,但如果直接在修改文件后直接commit,会操作失败,这是由于本地缓存未更新所导致的,故选中修改后的文件右击,选择Git->Add后,再进行commit

2023-04-18 19:32:11 392 1

原创 proteus8.12闪退以及其他版本闪退的通用解决方法,亲测有效

proteus8.12闪退以及其他版本闪退的通用解决方法,亲测有效

2023-03-10 20:06:16 6535 6

原创 Makefile简易笔记

Makefile的一些核心思想,常用语法总结

2023-01-04 10:32:47 382

原创 Vim的字符编码设置(不要整虚的,直接上操作)

在根目录下建立 .vimrc文件。2、在文件中添加内容如下。

2022-08-26 20:14:36 1041

原创 Linux下的网络设备驱动

与字符设备和块设备不同(通过应用层和驱动层指向同一个文件,通过file_operation作为两者之间的桥梁),网络设备并不对应于/dev目录下的文件,应用程序最终使用套接字完成与 网络设备的接口。因而在网络设备身上并不能体现出“一切都是文件”的思想。​Linux系统对网络设备驱动定义了4个层次,这4个层次为网络协议接口层、网络设备接口层、提供实际功能的设备驱动功能层和网络设备与媒介层。...

2022-08-03 22:06:26 3281

原创 slab为什么要进行染色处理

先说一下结论哈!slab中着色区的作用,是用来避免cache行的地址争用(跟缓存命中率的意思差不多),因为cache是一个固定映射,一次只能映射64k的空间,也就是说,如果两个访存操作(A,B),并不在同一片区(64k)。那么就必须要先让A完成访存操作,再切换cache的映射区间,再完成B的访问操作。然而染色区就是一个地址偏移,让A,B访问的地址位于同一片区间,防止频繁切换带来的效率低下 cache总共就32K,每个缓存行为64个字节,一共512行。为什么说cache行是一个固定映射呢,以内

2022-07-10 19:53:55 441

原创 origin如何指定某一个刻度线不显示

常见需求是要使origin的横或纵轴线的首刻度线不显示1、首先双击,坐标轴,进入设置页面2、进入特殊刻度线3、将轴始端,隐藏即可但如果你的要隐藏的的刻度线不是位于首端,如以下这种情况我们要隐藏的刻度值是0,通过这个值定位到这个刻度线,然后隐藏即可...

2022-06-18 15:43:33 27316

原创 AttributeError: Word.Application.Documents

AttributeError: Word.Application.Documentsb报错解决方案

2022-06-15 20:20:15 1720 4

原创 linux嵌入式项目之安防监控一(详解)

实现的功能系统运行环境软件配置开发平台: Ubuntu14.04 vs2012 vs2017开发环境: linux3.14.0、uboot2013.01、gcc4.6.4​ 通信协议: 串口、ZigBee、http协议等​ 数据库 : sqlite3硬件配置处理器:Cortex-A9(Exynos4412)开发板 (开发板上自带DHT11温湿度传感器,USB摄像头等数据采集装置,所以暂时可以不考虑远端的数据采集,将开发板采集的数据上传的应用层)

2022-05-15 22:17:51 2355 1

原创 linux中线程和进程的区别深度剖析底层实现

文章目录前言Linux中进程和线程的共性Linux中进程的创建Linux中线程的实现总结前言在没有仔细了解过Linux的进程和线程实现机制之前,看过很多关于进程和线程的博客,从这些博客中我大概知道进程和线程的区别1、进程拥有独立的内存空间,因此进程与进程之间相对独立,互不影响,但缺点进程间的通信相对复杂2、同一进程的线程共享进程的内存和资源(线程有自己的私有空间),因此同一进程下的线程之间的通信很方便,缺点是一个线程的出问题会影响到同一进程下的其他线程看完这些关于进程和线程的博客后,我有一些疑惑如

2022-05-10 20:57:37 1408

原创 简单说一linux内核的内存模型(平坦,不连续,稀疏等三种内存模型)

目录Linux内核支持的三种内存模型CONFIG_FLATMEM(平坦内存模型)基本概念(以第一个为例,不在复述)所以说什么是平坦模型所以说什么是不连续模型Linux内核支持的三种内存模型CONFIG_FLATMEM(平坦内存模型)CONFIG_DISCONTIGMEM(不连续内存模型)CONFIG_SPARSEMEM_VMEMMAP(稀疏的内存模型)CONFIG_FLATMEM(平坦内存模型)基本概念(以第一个为例,不在复述)就像管理一个学校,我们一般不以个人为单位,而是选择以班级为单位进

2022-04-28 22:28:24 2732

原创 有没有好记一点,c++ ,set容器遍历方法?(看过来)

老方法set count<int> kun ;//咱这就不实例化,所以说,这代码直接跑是跑不起来的set<int>::iterator it; //set类型迭代器for(it=order.begin();it!=order.end();it++){ cout<<*it<<endl; //遍历输出 }在以前的方法中需要,建立set类型的迭代器,才能实现遍历,多少有点麻烦,现在,auto,出来了,懒孩子们得救了,具体看下面

2022-04-24 16:14:34 4996

原创 几句话说明Linux中读写锁的实现逻辑

目录基本概念(可以跳过不看)为什么需要读写锁读写锁的功能读写锁的实现逻辑(重点在这里!!!)具体代码(有能力的可以看看,只保留的重要部分的代码)基本概念(可以跳过不看)为什么需要读写锁..在操作系统中,有很多共享数据,进程对这些共享数据要进行修改的情况很少,而读取的情况却是非常多的,这些共享数据的操作基本都是在读取。如果每次读取这些共享数据都加锁的话,那就太浪费时间了,会降低进程的运行效率。因为读操作不会导致修改数据,所以在读取数据的时候不用加锁了,而是可以共享的访问,只有涉及到对共享数据修改的时候,

2022-04-18 21:49:51 465

原创 什么是cache?为什么需要cache?cache存在的合理性

文章目录为什么需要cache?为什么从cache里面读取就能提高cpu的数据处理效率?cache存在的合理性程序的局部性原理什么是cache?cache的工作流程如何写出提高 Cache 命中率的代码?结尾为什么需要cache?..这里用一句话概括,CPU的数据处理速度,远远高于从内存中读取数据的速度,也就是说,如果CPU直接从内存中读取数据进行处理,CPU很长一段时间会用在等待数据读取完毕,这显示十分浪费CPU资源的。所以通过cache来缓存一部分数据,CPU读取数据时,先从cache里面找,从而提

2022-04-17 19:31:35 7423

原创 Linux进程如何实现用户空间与内核空间的转换

文章目录为什么进程需要从用户态进入内核态?用户态进入内核态的三种场景系统调用用户态进入内核态的具体实现用户栈和内核栈异常和硬件中断鸣谢单位为什么进程需要从用户态进入内核态?这里我不去细细区分什么是属于内核空间,什么又是属于用户空间。我讲一个逻辑:在用户空间,我们对进程不加限制,想干啥干啥,如果此时所有的资源都处于用户空间中,那么如果进程对那种系统级的资源随意修改,显然极易造成系统的崩溃。但同时又要保证进程有着足够的自由度,不然不利于开发。所以内核空间的开辟就显得极为重要,我们将不能随意修改的资源,放入内

2022-04-13 10:39:41 2733

原创 剖析linux的内存管理与分配

文章目录伙伴算法**1、伙伴算法原理****2、物理页的分配****3、 物理页的释放 ****总结**Slab分配机制**1、Slab如何对内存进行管理?****2、Slab中如何实现对页进行更细的划分?****3、Slab如何对内存进行分配**4、Slab如何对数据结构slab进行管理5、什么是kmem_cache?总结Slab与Slub的区别Slab的缺点伙伴算法Linux采用著名的伙伴算法来解决外碎片的问题1、伙伴算法原理Linux的伙伴算法把所有的空间页面分为10个块组,每个组中块的大小是

2022-03-27 14:24:14 2393

原创 如何查看自己的摄像头是否支持UVC

查看我的摄像头信息确定 USB 摄像头支持 UVC (在 PC 上)  那什么 USB 摄像头适合我们这一章的教程呢,这里有几个关键字:1.支持UVC(免驱), 2.YUV 或者 MJPEG 格式输出。把摄像头插入 PC 机的 USB 接口,查看 ID注:如果你是在 Ubuntu 等 linux操作系统下请看 1~2,在 windows 下请直接看看 3 。1. 在 linux 类操作系统下插入 USB 摄像头,用 dmesg 打印信息#dmesg[134691.269053] usb 1-1:

2022-03-24 10:16:10 5919

原创 嵌入式wed服务器Boa到底是啥?

前言因为以前没有接触过web服务器,看了网上的教程,虽然能够搭建好boa的运行环境,但我对于web服务器在嵌入式领域起到的作用还是感到模糊,总感觉差点意思,其他的博客没法为我解惑,查阅资料,我想我知道了答案正文什么是web服务器   通俗的讲,web服务器的服务对象是浏览器,Web服务器传送(serves)页面使浏览器可以浏览,Web服务器专门处理HTTP请求(request)(我们在浏览器上输入一个http开头地址,就是一个访问web服务器的过程),而Boa就是一个典型的嵌入式web服务器为啥在

2022-03-19 19:49:24 2274

原创 Linux字符设备驱动应用层与驱动层之间的联系(详解file与inode之间的关系)

文章目录前言正文前言在开始这篇文章的阅读之前我们首先思考几个问题:1、驱动运行在内核层,应用程序运行在应用层,它们之间是如何进行这么一个信息的交互的?2、Linux中一切皆文件,每一个字符设备都是由一个文件来表示的,文件里记录着相关的硬件信息的,应用层是如何根据找到这个文件?并最终实现对该设备的控制?3、每一个设备都有唯一的文件进行表示,如果是同一类型的设备,那么我们需要为每一个设备都写一个驱动么?正文​ 对于字符设备驱动的讲解,我觉得的从open()函数开始,那逻辑就相当是清

2022-03-16 22:41:08 1632 1

原创 mjpg_streamer的源码学习(详解)

源码阅读顺序mjpg_streamer/mjpg_streamer.c       ->int main(int argc, char argv[])mjpg_streamer/plugins/input_uvc.c               ->input_init()                     ->intput_run()                         *->cam_thread()mjpg-streamer\plugins\out

2022-03-14 21:22:19 3046

原创 linux信号量配合共享内存应用分析(详解)

共享内存与信号量共享内存,指的是两个不相关的进程访问同一个逻辑内存,进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。如果我们不允许两个进程同时对共享内存进行读写操作,光靠共享内存的机制是做不到的。共享内存并未提供同步机制,也就是说,在第一个进程结束对共享内存的写操作之前,并无自动机制可以阻止第二个进程开始对它进行读取,所以我们通常需要用其他的机制来同步对共享内存的访问,例如

2022-03-12 15:48:34 2090 2

原创 嵌入式面试题收集七

如何用c语言实现读写寄存器变量,假设地址为0x01254263#define voti *((volatile unsigned long *) 0x01254263)voti = 0x12 ;用预处理指令 #define 声明一个常数 ,用以表明 1 年中有多少秒(忽略闰年问题)。#define mtime (3650*12*30*24*60)UL(1)注意预处理器将为你计算常数表达式的值,并且整个宏体要用括号括起来。(2)注意这个表达式将使一个16位机的整型数溢出,因此要用到

2022-03-11 10:53:39 758

原创 linux线程中互斥锁和条件变量的使用(详解)

互斥锁pthread_mutex_t在linux中,互斥锁的出现是为了限制多个线程同时对临界资源区进行访问。通过互斥锁对临界资源区进行保护,只有拥有锁的线程才可以访问临界区,没有的锁的线程如果要访问临界区则需要等到锁的释放后,竞争到锁的拥有权后,才能进入临界区。 但这里会出现一个问题:单纯加锁也会导致一直是一个线程访问临界资源的问题,个别线程竞争力很强,可能会一直占据锁的使用权,导致其他线程的无法进入临界区。    这就需要引入另一个机制 条件变量条件变量pthread_cond_t条件变量被用于线程

2022-03-10 20:03:51 1682

原创 linux进程间通信之消息队列底层源码分析(详解)

前言本篇博客所涉及到的linux源码来自linux2.6,通过从应用->底层实现来分析分析整个消息队列是如何搭建的应用层首先我来看看消息队列是如何应用,因为应用层反应的是整个消息队列大概逻辑,有利于我们对于底层代码的理解1、首先什么是消息队列?消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即ID)来标识。(那我们思绪扩展一下,如果进程创建了很多的消息队列,每一个消息队列都对应着一个标识符。如果我们想通过标识符找到相应队列,那进程中是不是应该要有一个类似于数组的结构将标识符

2022-03-06 21:01:34 2069

原创 linux进程间通信之管道通信底层实现源码分析

文章目录前言什么是管道管道是如何实现的底层源码分析前言本文所引用的内核代码,来源于linux0.11什么是管道​ 进程用户空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。管道就是作为进程间的一种通信方式,为啥这种通信方式就做管道呢?​ 我想这是它的通信特性决定,通俗点来讲,我们来内核中申请一块缓存区,这个缓存区留有两个接口,分别接在两个不同的进程上,这个缓冲区不需要很大,它被设计成为环形的

2022-03-03 19:56:37 1514 1

原创 linux中 man 函数的使用

man手册:man 1,用户命令手册man 2,Linux内核系统调用手册man 3,标准库函数手册man 1 pwd ---------用户命令手册NAMEpwd - print name of current/working directorypwd [OPTION]…man 2 exit ----Linux内核系统调用手册_EXIT(2) Linux Programmer’s ManualNAME_exit, _Exit - terminate

2022-03-03 11:53:23 655

原创 嵌入式面试题收集六

进程和程序的区别进程和程序的区别:程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念进程是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡程序主要构成:代码段(只读,共享)、数据段(虚拟地址)进程主要构成:代码段、数据段、堆栈段、PCB(描述进程信息的一个结构体)(实际分配物理地址)...

2022-03-03 11:52:24 92

原创 linux之虚拟文件系统源码分析(详解)

文章目录前言基础知识VFS的数据结构正篇前言​ 虚拟文件系统是一个很庞大的架构,如果要分析的面面俱到,会显得特别复杂而笨拙,让人看着看着,就不知所云了(当然主要还是笔者太菜),所以这篇博客,以open() 函数为切入点,来试着分析分析VFS文件系统的运转机理,本文的代码来源于 linux3.4.2基础知识首先我们来看一张图​ 从这张图中,我们可以看出,系统调用函数并不是直接操作真正的文件系统,而是通过一层中间层,也就是我们说的虚拟文件系统,为什么要有虚拟文件

2022-02-28 20:50:23 2354

原创 linux之根文件系统

前言1、板卡上电后首先由UBOOT启动初始化板卡,将Linux内核移到内存中运行2、由linux内核自行做了初始化等操作,挂在了第一个应用程序上(根文件系统/linuxrc)3、根文件系统会提供磁盘管理服务,glibc设备节点,配置文件,应用程序shell(Android就是一个Linux多了个文件系统)文件系统的重要组成宏观:​ 1、标准库,glibc, OpenGL,media,Framework​ 2、配置文件 /etc/init.d/rcS 想要开机运行什么软件,载入什么画面

2022-02-27 08:12:51 2204

原创 Linux的信号底层实现机制(源码详解,奶妈教程)

目录前言信号的机制的底层逻辑前言这里不对基本概念进行讲述,只通过源码分析,linux中信号到底是如何实现的,该文中的函数参考源于linux0.11信号的机制的底层逻辑首先,信号的产生是随机,所以进程是不会专门用一个类似 wait( ) 函数去等待信号的发生,因为在进程运行的整个周期(开始->结束),信号可能根本不会发生。那我们进程是如何接受到信号的呢?注意看在进程描述的结构体里面,有个代表信号的成员 (long signal)变量以及(struct sigaction)结构体,先记住这个变量

2022-02-26 18:45:24 2345 1

原创 C语言易错点记录

1、读取未初始化的内存BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。其特点是可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。虽然BSS内存位置(如未初始化的全局变量)总是被加载器初始化为零,但是对于堆内存却不是这样的。一个 常见的错误就是假设堆内存被初始化为零。错误程序如下所示 :int * HuTutu(){ int k = 5 ; int *y = (int *

2022-01-05 18:37:29 204

原创 matlab, 生成一个数值一样的n维列向量

经过实践:如下方法可以实现:函数linspace 用来生成数据按等差形式的行向量x=linspace(X1,X2 ,n) : 在X1和X2间生成n个线性分布的数据,相邻的两个数据的差保持不变。构成等差数列。如果 X1 == X2 那么是不是就可以生成一个n维的数值一样的行向量了, 然后转置一下就OK啦...

2022-01-05 10:20:56 2743

原创 嵌入式面试题收集五

信号量实现的底层原理,可不可以用一个全局变量代替信号的计数值….....任务在内存中的组织形式TCB任务控制块:用来记录任务的堆栈指针、任务当前状态、任务的优先级等一些与任务属性相关的数据结构表。任务控制块相当于任务的 “身份证”,TCB记录着任务的重要信息。对于系统内核而言,各个任务就是通过任务控制块链接成一个表....任务抢占的底层实现通过一个抢占式任务调度器来实现,在这种调度方式中,系统总是选择优先级最高的任务进行调度,并且 一旦高优先级的任务准备就绪之后,它就会马上被调

2022-01-02 20:34:35 393

原创 几句话讲清,TCP为啥要进行三次握手和四次分手

三次握手为了方便理解,我们给客户端 和 服务器端,赋予两个属性,接受和发送(第一次握手)客户端 : 你吃饭了么(第二次握手)服务器端 : 吃了 (==服务器端听到了客户端的问题,说明客户端发送正常,服务端的接受正常 ==,此时我们并不知道客户端的接受和服务端的发送功能是否正常)(第三次握手)客服端:okk(客服端,知道到了服务端的答案。说明客户端接受正常,服务端的发送正常)所以必须要三次握手,才能确认出服务端和客户端的接受和发送功能是正常的四次分手为了方便理解,我们模拟一段分手情景模拟:

2021-12-27 16:58:03 1163

原创 Linux 与 RTOS的主要区别到底是啥?

看了不少博客,浏览量最多的也是详细的介绍了这两种系统,可我对这种操作系统的界限还是很模糊(当然我知道Linux,功能更强大),我想要的答案是,为啥在Linux功能这么强大的情况下,RTOS还能有一席之地,我想这也是他们的主要区别。在经过查阅资料后,我想我得到了答案

2021-12-13 09:28:03 24884 6

原创 Source insight4.0配置成兼容UTF-8 和 GB2312的字符编码

点击进入Eeload As Encoding选择UTF-8 with BOM大功告成!

2021-12-11 16:00:54 5114

原创 python将一个word文档中内容全部复制,添加到另一个word文档末

from win32com.client import Dispatch,DispatchEximport win32comimport win32com.clientimport ospath = os.getcwd()file_mode = path + r'\第一个文档.docx'# document = Document(file_mode)# # 读取word中的所有表格# tables = document.tables# document.tables[1].add_row

2021-12-02 18:39:01 8039 6

原创 嵌入式面试题收集四

目录中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动?原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源只有一个使用者行不行?中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动?**中断是CPU处于被动状态下来接受设备的信号,而轮询是CPU主动去查询该设备是否有请求。凡事都是两面性,所以,看效率所以,看效率不能简单的说那个效率高。如果是请求设备是一个频繁请求cpu的设备,或者有大量数据请求的网络设备,那么轮询的效率是比中断高。如果是一般

2021-11-26 21:30:46 798

原创 中断和DMA的区别

1、DMA:是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率中断:是指CPU在执行程序的过程中,出现了某些突发事件时CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回源程序被中断的位置并继续执行所以中断和DMA的区别就是DMA不需要CPU参与而中断是需要CPU参与的中断注册函数和中断注销函数注册中断:int request_irq(unsigned init ir

2021-11-26 15:24:05 3998

原创 Cortex-M3 和 M4 的区别

1 、 更快的图像处理速度,浮点运算能力,M4大约是M3的1.4倍2、M4具有32位乘法累加器MAC3、M4支持SIMD指令集4、M4具有一个专用浮点运算单元FPU5、更高级的电源管理模式,从而带来更好的功率效能...

2021-11-23 15:54:27 2549

空空如也

空空如也

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

TA关注的人

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