自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线程池原理及代码实现

基础线程池实现方式

2022-07-09 17:18:48 259 1

原创 ARM架构获取精确时间的方法

ARM架构内核态使能PMU寄存器读取,满足应用层获取系统精确时间的功能。

2022-07-07 16:43:10 3699

原创 工具使用-git使用

git安装、配置、常用命令

2022-01-15 10:43:37 205

原创 Linux驱动-platform设备驱动

#1 platform设备驱动模型数据结构一般总线驱动设备数据结构驱动 总线 设备device_driver bus_type device一般总线驱动设备数据结构驱动 总线 设备platform_driver platform_bus_type platform_device#2 platform总线注册platform_bus_initbus_register(&platform_bus_type);/

2022-01-08 15:36:24 621

原创 Linux驱动-驱动分离与分层

#1 驱动分离主机控制器驱动和设备驱动分离,引入中间API;#2 驱动分层分为驱动,总线,设备;总线是Linux内核实现,用户需要实现驱动和设备;驱动:具体的设备驱动;设备:设备的属性,包括地址范围等信息;##2.1 总线数据结构 bus_type device.hstruct bus_type { const char *name; const char *dev_name; struct device *dev_root; struct device_attribute

2022-01-08 10:25:34 260

原创 应用编程-start启动线程

#include <stdio.h>#include <pthread.h>#include <unistd.h>#include <stdlib.h>typedef void (*myFunc) (void);typedef struct THREAD_S{ int index; myFunc funcl;}THREAD_T;void test1(){ int i = 0; while(i++ < 2) { prin

2021-12-13 22:49:21 709

原创 网络编程-TCP服务器的实现

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <netinet/tcp.h>#include <arpa/inet.h>#include <pthread.h>#include <errno.h>#include <sys/epoll.h>struct..

2021-12-05 15:31:40 65

原创 数据结构与算法-链表

#include <stdio.h>#include <stdlib.h>#include <string.h>/************************************************************雇员链表****************************************************************///定义数据结构typedef struct _employee{ char name[3

2021-12-05 13:35:43 174

原创 数据结构与算法-栈

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <assert.h>#define ALLOC_SIZE 512typedef int KEY_TYPE;typedef struct _stack { KEY_TYPE *base; int top; int stack_size; } stack;void init_stack(stack

2021-12-05 13:31:47 57

原创 数据结构与算法-队列

/************************************************************************** * 队列操作需要提供的数据结构:* 1.数据的类型* 2.队列节点的结构封装,下一个节点的指针+数据* 3.队列结构体:首、尾节点,队列深度* * 队列操作需要提供的接口:* 1.队列初始化:首尾节点置空* 2.队列销毁:释放队列中的每一个节点* 3.入队操作:为队列添加节点,需要判断队列是否非空* 4.出队操作:从队列头部输出节点*

2021-12-05 13:30:21 58

原创 设计模式-代理模式

1.代理模式定义为其他对象提供⼀种代理以控制对这对象的访问。2.代理模式遵循的模式设计原则3.要点a.远程代理(隐藏⼀个对象存在不同的地址空间的事实),虚代理(延迟加载lazyload),保护代理(在代理前后做额外操作,权限管理,引⽤计数等);b.在分布式系统中,actor模型(skynet)等常⽤的设计模式;4.本质控制对象访问;5.代码在有些系统中,为了某些对象的纯粹性,只进⾏了功能相关封装(稳定点),后期添加了其他功能需要对该对象进⾏额外操作(变化点),为了隔离变化点(也就是不直接在

2021-11-14 10:20:05 351

原创 模式设计-适配器模式

1.适配器模式定义将⼀个类的接⼝转换成客户希望的另⼀个接⼝。Adapter模式使得原本由于接⼝不兼容⽽不能⼀起⼯作的那些类可以⼀起⼯作。2.适配器模式遵循的模式设计原则3.要点a.原来的接⼝是稳定的,新的外来的需求是变化的,那么可以通过继承原来的接⼝,让原来的接⼝继续保持稳定,在⼦类通过组合的⽅式来扩展功能;4.本质转换匹配,复⽤功能;5.代码⽇志系统,原来是通过写磁盘的⽅式进⾏存储,后来因为查询不便,需要额外添加往数据库写⽇志的功能(写⽂件和数据库并存);#include <str

2021-11-14 09:12:53 192

原创 设计模式-装饰器模式

1.装饰器模式定义动态地给⼀个对象增加⼀些额外的职责。就增加功能⽽⾔,装饰器模式⽐⽣成⼦类更为灵活。2.责任链模式遵循的模式设计原则3.要点a.通过采⽤组合⽽⾮继承的⼿法, 装饰器模式实现了在运⾏时动态扩展对象功能的能⼒,⽽且可以根据需要扩展多个功能。 避免了使⽤继承带来的“灵活性差”和“多⼦类衍⽣问题”。b.不是解决“多⼦类衍⽣的多继承”问题,⽽是解决“⽗类在多个⽅向上的扩展功能”问题;c.装饰器模式把⼀系列复杂的功能分散到每个装饰器当中,⼀般⼀个装饰器只实现⼀个功能,实现复⽤装饰器的功能;

2021-11-11 22:26:12 79

原创 设计模式-责任链模式

1.责任链模式定义使多个对象都有机会处理请求,从⽽避免请求的发送者和接收者之间的耦合关系。将这些对象连成⼀条链,并沿着这条链传递请求,直到有⼀个对象处理它为⽌。2.责任链模式遵循的模式设计原则3.要点a.解耦请求⽅和处理⽅,请求⽅不知道请求是如何被处理,处理⽅的组成是由相互独⽴的⼦处理构成,⼦处理流程通过链表的⽅式连接,⼦处理请求可以按任意顺序组合;b.责任链请求强调请求最终由⼀个⼦处理流程处理;通过了各个⼦处理条件判断;c.责任链扩展就是功能链,功能链强调的是,⼀个请求依次经由功能链中的⼦处理

2021-11-09 23:36:11 104

原创 设计模式-策略模式

1.策略模式定义定义⼀系列算法,把它们⼀个个封装起来,并且使它们可互相替换。该模式使得算法可独⽴于使⽤它的客户程序⽽变化。2.策略模式遵循的模式设计原则3.要点a.策略模式提供了⼀系列可重⽤的算法,从⽽可以使得类型在运⾏时⽅便地根据需要在各个算法之间进⾏切换;b.策略模式消除了条件判断语句;就是在解耦合;c.充分体现了开闭原则;单⼀职责;4.本质分离算法,选择实现;5.代码某商场节假⽇有固定促销活动,为了加⼤促销⼒度,现提升国庆节促销活动规格;5.1 版本1enum Vacation

2021-11-07 21:25:23 60

原创 设计模式-单例模式

1.单例模式定义保证⼀个类仅有⼀个实例,并提供⼀个该实例的全局访问点。2.单例模式遵循的模式设计原则3.要点4.本质5.代码5.1 版本1// 内存栈区// 内存堆区// 常数区// 静态区 系统释放// ⼆进制代码区class Singleton {版本2版本3public:static Singleton * GetInstance() {if (_instance == nullptr) {_instance = new Singleton();}return

2021-11-07 20:38:52 76

原创 设计模式-观察者模式

1.观察者模式定义 定义对象间的⼀种⼀对多(变化)的依赖关系,以便当⼀个对象(Subject)的状态发⽣改变时,所有依赖于它的对象都得到通知并⾃动更新。2.观察者模式遵循的模式设计原则3.要点 a.观察者模式使得我们可以独⽴地改变⽬标与观察者,从⽽使⼆者之间的关系松耦合; b.观察者⾃⼰决定是否订阅通知,⽬标对象并不关注谁订阅了; c.观察者不要依赖通知顺序,⽬标对象也不知道通知顺序; d.常使⽤在基于事件的ui框架中,也是MVC的组成部分; e.常使⽤在分布式系统中,actor框架中;

2021-11-06 22:21:10 92

原创 设计模式-模板模式

1.模板方法定义 定义⼀个操作中的算法的⻣架 ,⽽将⼀些步骤延迟到⼦类中。Template Method使得⼦类可以不改变⼀个算法的结构即可重定义该算法的某些特定步骤。2.模板模式遵循的设计模式的原则 依赖倒置原则:⾼层模块不应该依赖低层模块,⼆者都应该依赖抽象;抽象不应该依赖具体实现,具体实现应该依赖于抽象; 单一职责原则:⼀个类应该仅有⼀个引起它变化的原因; 接口隔离原则:不应该强迫客户依赖于他们不⽤的⽅法;⼀般⽤于处理⼀个类拥有⽐较多的接⼝,⽽这些接⼝涉及到很多职责;3.要点 a.⾮

2021-11-06 21:24:47 161

原创 Linux设备驱动-设备树

设备树的概念设备树就是以树的方式组织描述板级设备信息,比如CPU数量、内存基地址、IIC接口上面挂接了哪些设备、SPI接口上挂接了哪些设备等等。一般 .dts描述板级信息 (也就是开发板上有哪些 IIC设备、 SPI设备等 ),.dtsi描述 SOC级信息 (也就是 SOC有几个 CPU、主频是多少、各个外设控制器信息等 )。...

2021-09-02 22:51:08 264

原创 数据结构与算法-红黑树

红黑树的性质1.每个节点是红的或者黑的;2.根节点是黑的;3.每个叶子节点时黑的(所有叶子节点都隐藏,并且为黑色);4.如果一个节点是红的,则它的两个儿子都是黑的(两个红色节点不能相邻,既红色节点的父子节点均为黑色);5.对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点(红色节点用于方便区分)。红黑树的代码typedef int KEY_TYPE;//数据结构-节点typedef struct _rbtree_node { unsigned char color;

2021-08-26 00:52:33 77

原创 数据结构与算法-二叉树

二叉树#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#if 0//二叉树的数据结构typedef int KEY_VALUE;struct bstree_node { KEY_VALUE data; struct bstree_node *left; struct bstree_node *right;};struct bstre

2021-08-26 00:25:07 43

原创 Linux源码分析-内核启动过程

1. 启动入口 通过链接脚本arch/arm/kernel/vmlinux.lds可以找到内核的入口函数,通过ENTRY(stext)可以知道内核进入的第一个接口为stext接口,由于初始化部分的代码是与架构相关的,所以在不同架构中都有对stext接口的实现,例如查看arm64架构的初始化流程,则进入arch/arm64/kernel/head.S文件,stext接口的实现如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/3086824ac98b48ee8

2021-08-15 10:09:01 495

空空如也

空空如也

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

TA关注的人

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