自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (1)
  • 问答 (4)
  • 收藏
  • 关注

原创 进程虚拟地址空间

1. 虚拟内存概述虚拟内存是计算机系统内存管理的一种技术,它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),这使得系统管理多进程的内存请求更加方便且高效。Linux操作系统为每一个进程提供一个固定大小、私有的虚拟地址空间,虚拟地址空间包含了当前进程需要的所有数据信息,然而虚拟内存指向的数据并非所有的都加载到主存中,一部分数据仅仅是记录了该数据在磁盘的起始位置以及大小,需要的时候由内核负责读入主存,同样的,内核也会在该内存不需要访问的时候将其回写磁盘,空出来共其他内存请求。正是这个原理,有限

2022-02-10 14:51:31 1787

原创 内存统计(未完待续...)

1. /proc/meminfo/prox/meminfo是Linux系统统计内存状态非常重要的接口,上层的free亦或者Android系统的lmk读取内存信息都来源于这个接口,其实现也非常简单,就是将内核中记录的各种内核数据打印出来,内存信息也非常全!如下是kernel-5.10版本输出的信息:MemTotal: 7334508 kBMemFree: 1327068 kBMemAvailable: 3464796 kBBuffers:

2022-01-25 10:53:07 1848

原创 描述物理内存

0. 内存在计算机系统的地位如下是一张非常简单的系统关系图,描述的是处理器(CPU)、内存(DDR)以及磁盘(Disk)三者之间的关系,可以看到DDR是作为一个CPU与Disk沟通的桥梁。CPU作为计算机指令的执行中心,其运算速度非常快,但是其却不能存储数据,一旦断电,数据就会消失;Disk则作为数据的存储中心,具有即使断电数据能够保存的特点。然而CPU与Disk的读写速度相差非常大,甚至高达1000多倍,由于木桶效应,当出现IO读写需求时,Disk的将极大的降低系统性能,所以引入中间件DDR,DDR与C

2022-01-24 20:26:23 537

原创 Linux内存管理概述

内存管理(Memory Management,简称mm)是Linux系统非常重要且复杂的模块,尽管该模块非常庞大且复杂,但是对于上层开发者来说,使用内存却又是非常的方便,这得益于mm提供高度封装的的接口,一方面是方便上层在不需要深入了解内存管理相关的知识而方便地使用内存服务;另一方面是保证内存资源的高效以及安全的被使用。如果从事系统相关开发工作,深入了解内存管理是十分必要的,系统异常以及性能都和内存管理息息相关。接下来将通过几个章节了解内存管理模块:认识内存如何描述物理内存内存统计内

2022-01-24 17:00:38 763

原创 hello world驱动设计(x86)

1. 这个驱动有啥不同        最近发现很多教程,上来就是往写led驱动,对于新手我来说,理解起来是十分费劲的,因为一个led的驱动涉及到许多的知识,加之写led驱动还需要开发板,这就受不了了,哪来那么多钱!所以最近在复习驱动设计时看到了陈莉君老师的视频教程Linux内核分析与应用[1],看到了一种更适合作为驱动设计Hello world的写法,因此有了这篇博文。事不宜迟主要介绍一下这个驱动设计有啥不同:不需要硬件操

2020-05-26 17:37:08 485

原创 Linux内核模块

1. 在讲内核模块之前什么是宏内核和微内核        目前来说,操作系统内核通常主要分为两种类型:宏内核或者称为单内核(Monolithic kernel)以及微内核(Micro kernel)。宏内核:将内存管理、进程管理、进程间通信、虚拟文件系统以及网络接口都包含在内核中。这样的优点是内核承担大部分服务,各服务之间由于都处于内核中,可直接通信,通信效率高;缺点是内核体积大,可扩展性弱,容错性差,如果需要扩展内核就必

2020-05-22 22:00:48 368

原创 ubuntu包管理系统

1.什么是包管理系统(针对Debian派系CentOS派系有点区别)        大多数同学接触的最多的PC端系统应该是Windows系统,我们都知道在Windows安装以及卸载软件其实是十分麻烦的,可以总结为下面几个步骤:官网找安装包执行安装程序接受软件协议选择安装位置下一步下一步...安装完成        可能还会有软件不可用❌&nbs

2020-05-14 13:14:26 464 1

原创 Qt使用QtCharts画滚动动态曲线

1. Qt画图太难了呀????        Qt虽属于图形用户界面应用程序开发框架,但是不提供例如matlab以及python的plot接口,这使得Qt的绘图显得比较繁琐,但是没有集成化的接口使用,Qt也提供了画图的对象,相比于plot库,我们需要实例化一个画图对象,配置坐标轴、绑定数据以及将图表加入窗口显示。虽说较为繁...

2020-05-06 15:06:35 6807 2

原创 Qt初始化工程详解

0. 写在前面为什么想记录这篇博文⁉️        由于项目原因,需要 重新 使用Qt,距离接触Qt大概过了半年左右,当初也仅仅是接触一下,并没有深究,再次使用,发现对初始化工程十分的陌生,又得花费蛮多时间重新学习,希望通过这篇博文记录起来,加深记忆的同时方便以后复习。写博客的意义其实就是再此!记录???? 和分享???? !...

2020-05-03 14:47:34 2931

原创 公网IP、私网IP和IP分类

0. 源于????        IP查询是一个经常性的操作,Windows平台可以在cmd中通过ipconfig查询,linux则在终端中输入ifconfig。发现我的IP通常是因为我到处蹭网:192.168.10.xxx。不是说IP地址全球唯一吗?怎么还有多个相同网段的IP呢?   &n...

2020-04-21 22:18:12 11261 6

原创 MAC地址以及IP地址

1. 什么是MAC地址?​ MAC(Media Access Control Address),直译则为媒体存取控制位址,在Windows系统中通常被称为物理地址(Physical Address)。很多人其实不了解MAC地址包括我自身????,主要是因为在应用层面MAC使用的并不多。MAC地址是与网卡硬件相关的,由网络设备制造商生产时烧录到网卡的EEPROM中,MAC地址是由IEEE(电气与电子工...

2020-04-20 16:38:49 876

原创 OSI网络模型

0. 写这篇博文的出发点加强自身对OSI模型的理解。针对网上千篇一律的纯技术性博文提出自己不同的看法,更好地理解OSI模型。先声明,这篇博文并不是讲述OSI专业性很强的博文,仅仅是为了更好地了解OSI。有说得不恰当的地方希望大佬们指出,共同学习!1. 提出几个问题​ 作为刚接触的OSI的同学们以及我,对这个复杂的网络模型其实是有抵触心理,这都是出于一个心理,并不清OSI模型的...

2020-04-19 22:27:18 291

原创 如何使用有道云笔记私有云图床

前提概要​ 上一篇我们介绍了什么是图床查看下方链接!这一篇我们介绍如何使用有道云笔记建立私有图床,有一个小小的坑,建议大家拿起小本本记录????。​ 浅谈图床什么是图床?为什么需要图床?事不宜迟!开始正文????。1.将本地文件上传到有道云笔记前提是已经安装有道云笔记客户端图1-1 上传文件图1-2 查看有道云笔记2.分享图片​ 通过分享,你可以得到下面这样一段文字:文档:菜得安...

2020-03-28 22:54:58 4541 1

原创 浅谈图床

1. 什么是图床​ 什么是图床?图床其实是互联网中存储图片的空间,举个例子说明:​ 假设你在微博分享一张图片,你的粉丝可以通过互联网看到你分享的图片,那么他是去访问你的手机的相册吗?其实不是的,你分享图片,也就是把图片上传到微博的服务器,微博将为你生成一个独一无二的访问链接,这个链接指向的空间其实就是图床。2. 为什么需要图床​ 为什么需要图床?回去接触图床的人通常都是一些热爱在...

2020-03-28 21:47:12 9080 3

原创 Vim 安装、基本配置、使用、插件(bundle、nerdTree、tagbar、ctrlp、vim-airline、molokai、vim-fugitive、ctags)

此博客持续更新,有需要的可以点个关注!(2019/12/17笔者注)0. 目前我的Vim图0-1 我的vim左窗口:基于nerd tree的目录树显示窗口 主窗口:代码窗口 右窗口:基于tarbar的文件结构显示窗口 下窗口:基于ctrlp的全局搜索窗口 状态栏:使用vim-airline美化 背 景: molokai配色主题 进入正文:目录1. V...

2019-12-21 23:00:36 10042

原创 Linux驱动简介及分类

1. Linux驱动简介在介绍Linux驱动之前,我们首先来看Linux系统分层关系:图1-1Linux系统分层关系Linux驱动主要具有如下几点作用:系统调用是应用程序和内核之间的接口,驱动程序是内核和硬件之间的接口; 驱动程序接受上层软件(应用程序、内核)的请求,完成对硬件的操作,屏蔽了硬件的细节; 驱动程序将硬件设备抽象成一个文件,应用程序操作文件即操作硬件,符合L...

2019-12-16 16:01:35 3263

原创 #define #以及#define ##

无论是在面试还是查看源码过程,我们都经常会遇到一些宏的高级操作,使用这些宏操作可以给我们带来非常大的便利,例如#define #以及#define ##,下面通过一段代码分析:#include <stdio.h>//将 a 转化为字符串,属于数据操作#define TOSTR(a) #a//将 a 和 num连接,构成numa代码, 属于代码操作#define...

2019-12-15 15:53:07 703

原创 do while(0)在宏定义的妙用

do{ //do something ]while(0);上面是一段使用 do while(0) 的代码,显然如上代码只会执行一次,这样使用显然是毫无意义的的(当然莫种情况下还是有意义的,比如在里面定义局部变量),所以在常规的代码编写中,我们并不会使用 do while(0) 这种结构。但是在Linux内核代码中却大量使用了do while...

2019-12-15 14:57:02 250

原创 ioctl系统调用过程(深入Linux(ARM)内核源码)

1. 系统调用过程简述图1-1 系统调用过程图探究系统调用过程,以ioctl为例,通俗来说,其实就是探究操作系统实现应用程序的ioctl对应上特定驱动程序的ioctl的过程。由于应用程序的ioctl处于用户空间,驱动程序的ioctl处于内核空间,所以这两者之间不属于简单的函数调用关系;在者,考虑到内核空间操作的安全性,系统调用过程大量的安全性处理,进而使得系统调用看起来十分复杂,但是了解...

2019-12-13 16:27:11 7482 8

原创 Linux编程----动态库、静态库

1. 库是什么库(library),在计算机软件领域应该十分常见,从专业术语的角度来看,库是具有某种特定功能的封装好的模块。通俗来说,库是一堆函数的集合。那么为什么需要库呢?其实这是非常容易理解的,库的作用和函数的功能都是相似的,都是为了封装好功能模块,以便于代码重用,避免重复造轮子,而库和单纯的函数是有区别的,库属于文件,函数属于代码!举一个例子,在hello.c文件中,使用 abs()...

2019-12-08 22:07:42 352

转载 C语言结构体初始化的四种方法

声明struct InitMember{ int first; double second; char* third; float four;};方法一:定义时赋值struct InitMember test = {-10,3.141590,"method one",0.25};需要注意对应的顺序,不能错位。方法二:定义后逐个赋值s...

2019-11-26 15:02:08 276

转载 Linux根文件系统子目录功能讲解

1、/bin目录看到“bin”大家应该能想到bin文件,bin文件就是可执行文件。所以此目录下存放着系统需要的可执行文件,一般都是一些命令,比如ls、mv等命令。此目录下的命令所有的客户都可以使用。2、/dev目录dev是device的缩写,所以此目录下的文件都是和设备有关的,此目录下的文件都是设备文件。在Linux下一切皆文件,即使是硬件设备,也是以文件的形式存在的,比如/de...

2019-11-22 11:34:45 392

原创 嵌入式ARM板程序的生成器 ---- 交叉编译器

1. 什么是编译器以及交叉编译器对于C语言程序,编译器是啥?通俗的来讲编译器就是把C程序“翻译”机器语言(二进制)的“翻译官”,那么编译器和交叉编译器有什么区别?下面通过一张图感受一下:图1-1 编译器和交叉编译器对比图通过上面图我们可以很直观的看到使用编译器和交叉编译器去编译和执行程序大致流程是大同小异的,只不过交叉编译器的可执行程序需要从X86(PC)平台传送到ARM板平台提供用...

2019-11-20 10:51:36 975

原创 安装嵌入式ARM板的监视器 ---- minicom

0. minicom是啥minicom是一个串口通信工具,就像Windows下的超级终端。嵌入式板通常不会配置调试的屏幕,开发人员可以通过串口通行工具来输出内核打印的信息以及输入操作命令,在Windows环境下下,有 SecureCRT 和 xShell;在Linux环境小,可以使用minicom,安装使用十分方便,功能也足够强大!话不多说,我们接下来在Ubuntu环境下安装、配置、使用和卸...

2019-11-14 14:59:17 499

原创 浅谈C语言函数调用与系统调用

1. 函数调用和系统调用概述1.1 定性的去区分函数调用和系统调用很多初学C语言的同学,亦或者开发中很少接触系统底层的同学可能会认为函数调用以及系统调用是一回事。因为在应用程序,两者都被抽象成接口去给应用程序调用。其实函数调用和系统调用还是有区别,我们通过下图先有个全局的了解!图1-1 系统功能模块关联图从图1-1 我们可以知道应用程序访问内核,主要通过两种方式:中断和系统...

2019-11-12 21:55:21 5301

原创 C语言volatile关键字详解

1.volatile和什么有关百度翻译是这样子翻译volatile的: 图1-1 百度翻译volatile截图volatile属于C语言的关键字,《C Primer Puls》 是这样解释关键字的:关键字是C语言的词汇,由于编译器...

2019-11-03 21:33:19 28172 12

原创 编译器优化对多线程数据同步的影响(volatile详解实验二)

首先,这里没有博主的傻逼!由此可见(C语言volatile关键字详解),编译器优化会对多线程数据同步有影响,我们深入程序输出以及汇编程序去探讨为什么会产生影响!并解决问题1.上代码:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h&...

2019-11-03 16:43:48 2443 1

原创 编译器优化对自定义延时程序的影响(volatile详解实验一)

由此可见(C语言volatile关键字详解),编译器优化会对自定义延时程序有影响,我们深入汇编程序去探讨产生怎样的影响!首先是未加 volatie 使用和未使用编译器优化汇编程序的对比:有以下这么一个源程序(delay.c):#include <stdio.h>void delay(long val);int main(){ delay(100000...

2019-11-01 15:57:30 4013 1

原创 嵌入式系统框架----软件篇

1.overview 图1-1 嵌入式框架图嵌入式系统分为硬件以及软件两大部分,大多数人参与的是嵌入式软件设计,更多的是接触的是上层软件系统部分,可以分为两大类型嵌入式软件应用工程师以及嵌入式驱动工程师。前者主要负...

2019-10-30 11:43:18 7069

原创 嵌入式系统框架----硬件篇

1.系统框架图对于一个嵌入式系统,最重要的当然是运算以及存储单元,基本的嵌入式系统可以简化成如下系统框架图: 图1.1 系统框架图对于一个嵌入式系统,我们从常见的嵌入式ARM板进行分析:(从淘宝上截取了一张最多人用...

2019-10-28 09:40:06 2543

原创 Algorithm----快排

1.排序优化思想其实吧,按照博主目前的人生经历来说,优化算法,都会从一个基本的思想出发,操作有效性,为什么这么说。操作有效性就区别了高效率的算法和暴力算法。下列从排序算法祖宗冒泡算法和新生代快速排序作比较。大家对冒泡算法不太熟悉的可以参考我的上一篇博客:Algorithm----冒泡排序以及优化方法算了,先说说快排基本思想再做比较吧,顺序乱了ahhh2.单边循环法的快速排序...

2019-09-03 13:22:31 287

转载 中断全过程

1.执行过程 中断在嵌入式开发中十分重要,特别是对于裸机开发中,中断可以使程序更加简洁,减少程序负担,但是中断从头到尾到底经历了哪些阶段、做了哪些东西应该很多人都不明白把。由于现在嵌入式开发主流是C,C属于高级语言,我们通常配置一些参数,重写中断服务函数就完事,对其中的过程一无所知,所以在本次博文中分享一些关于中断的理论知识。 中断执行过程通常含有一下五个过程:中...

2019-08-31 20:38:20 4910

原创 C语言printf压栈问题

1. 事出有因 今天在刷面试题的时候遇到如下一个面试题:#include <stdio.h>#include <stdlib.h>int main() { int arr[] = { 6, 7, 8, 9, 10 }; int *ptr = arr; *(ptr++) += 123; printf("%d, %d\n", *pt...

2019-08-22 21:05:08 1010 8

原创 2019电赛----模拟电磁曲射炮

1.吐槽电赛 2019.TI杯8月2号电赛号角其实已经吹响,虽然仅仅是清单公布,但是淘宝上早已经腥风血雨,特别是带处理器的摄像头openmv、大功率舵机以及云台一售而空,作为只会控制题的本小白,当然不会错过任何可能出现在控制题中的器件,但是越看清单就越觉得什么东西都是我们控制题的,后面直到比赛的那一天都是在买买买和看网友猜题中度过。 2019.TI杯全国大学生电子...

2019-08-17 14:00:16 23405 2

原创 电赛提升----风力摆控制系统

1. 风力摆控制系统简介 虽然说风力摆已经是2015年的国赛题了,既没有用到摄像头,也无需搭建很大的系统,似乎觉得它不值得一练,但是当你去玩风力摆之后你就会发现,风力摆十分有趣,当你没掌握关键点的时候,你要么就是荡不起来,要么就是荡得天高。 首先看一下风力摆的要求吧。 ...

2019-08-16 23:11:51 9301 2

原创 电赛入坑----2017年电赛国赛真题滚球控制系统

1. 滚球控制系统系统简介1.1 题目要求 作为一名合格的研发人员,面对系统,首先要看的当然是需求,来看看需求长什么样。 图1-1 题目要求 看到 65cm*65cm 我觉得当年的参赛师兄师姐都已经哭了,...

2019-08-16 21:53:14 10220

原创 FLASH存储任意类型的数据

1.数据的存储存储数据,我们当然需要了解数据在计算机中的存储方式。然而不同平台又有差异,其中就有大小端存储的差异以及数据长度的差异。想了解这两种差异的可以自行查找相关资料,本博客针对STM32F4平台,使用的是Cortex-M4内核,小端存储方式、32位处理器;使用的FLASH是W25Q128。1.1 char类型数据存储 ...

2019-08-02 12:19:53 2597 2

原创 SPI协议学习笔记----结合W25Q128

本篇博客重点在于介绍SPI时序以及W25Q128操作的相关知识点以及注意事项。1. SPI协议SPI(Serial Peripheral interface),串行外围外设接口,属于一种高速全双工的通信总线。1.1 SPI物理层 图1-1 SPI通讯接线...

2019-07-30 16:54:07 1820

原创 STM32操作增量式编码器(二)----使用编码器接口实现定位

上一个博文介绍了编码器实现测试,这也是编码器最普遍的应用,我们需要操作的东西并不多,通常来说记录脉冲数。STM32操作增量式编码器(一)----使用外部中断实现测速1.增量式编码器实现定位思路对于增量式编码器如何进行定位,我也是一直存在疑惑,并不是说整体定位算法难,这仅仅需要利用一个变量去记录当前脉冲数即可,正转递增,反转递减。但是真实情况真的如此简单吗?首先我们需要明确两个存在的...

2019-07-14 16:48:18 8520 2

原创 STM32操作增量式编码器(一)----使用外部中断实现测速

1.编码器概述这里对此不再详细说明,本博文重在如何使用编码器,有兴趣的同学可以去网上了解,或者参考一下博文。旋转编码器工作原理2.增量式编码器控制思路 图2-1 编码器实物图 ...

2019-07-13 22:08:41 15295 5

DynamicPlot.zip

Qt使用QCharts画动态曲线。

2020-05-05

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

TA关注的人

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