Herok

擅长C/C++/linux/python/深度学习
私信 关注
HeroKern
码龄6年

欢迎关注嵌入式开发公众号,定期更新技术文章。

  • 5,856,400
    被访问量
  • 385
    原创文章
  • 315
    作者排名
  • 2,028
    粉丝数量
  • 于 2014-10-09 加入CSDN
获得成就
  • 博客专家认证
  • 获得1,586次点赞
  • 内容获得324次评论
  • 获得1,951次收藏
荣誉勋章
兴趣领域
  • #算法
    #推荐算法
TA的专栏
  • CUDA
    1篇
  • 机器学习
    10篇
  • 嵌入式应用开发
    12篇
  • work
    56篇
  • U-boot notes
    23篇
  • Linux driver
    44篇
  • U-boot学习笔记
    10篇
  • 电脑技术
    5篇
  • 嵌入式驱动开发
    20篇
  • 算法与数据结构
    13篇
  • 51单片机项目实战
    9篇
  • Linux note
    38篇
  • Linux app
    7篇
  • Smart home
    5篇
  • Data Structures
    16篇
  • computer technology
    7篇
  • zigbee note
    17篇
  • MCU for 51
    11篇
  • BUG
    12篇
  • chat
  • C language
    34篇
  • Linux Net Program
    11篇
  • hardware
    8篇
  • ubuntu tools
    20篇
  • cammer for web to control
    7篇
  • PC tools
  • HTML5
    24篇
  • CSS
    7篇
  • javascript
    5篇
  • e-book project
    7篇
  • HTML game
  • Python
    8篇
  • ALSA
    11篇
  • WIFI
    5篇
  • photo note
    3篇
  • android
  • 3G
    1篇
  • Linux Power Manage
  • photo and font
    10篇
  • C Caputer
    8篇
  • C++
    4篇
  • QT
    27篇
  • VLC
    1篇
  • dpdk
  • DSP
    1篇
嵌入式开发公众号
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

secureCRT开发脚本

secureCRT开发脚本。
7z
发布资源于 6 月前

likely(x)与unlikely(x)函数,即__builtin_expect的使用

likely(x)与unlikely(x)函数,即__builtin_expect的使用 转载自:http://velep.com/archives/795.html 本文讲的likely()和unlikely()两个宏,在linux内核代码和一些应用中可常见到它们的身影。实质上,这两个宏是关于GCC编译器内置宏__builtin_expect的使用。顾名思义,likely()指“很有可能”之意,...
转载
171阅读
0评论
0点赞
发布博客于 6 月前

Linux中断 - IRQ Domain介绍

Linux中断 - IRQ Domain介绍 一、概述在linux kernel中,我们使用下面两个ID来标识一个来自外设的中断:1、IRQ number。CPU需要为每一个外设中断编号,我们称之IRQ Number。这个IRQ number是一个虚拟的interrupt ID,和硬件无关,仅仅是被CPU用来标识一个外设中断。2、HW interrupt ID。对于interrupt controller而言,它收集了多个外设的interrupt...
转载
254阅读
0评论
0点赞
发布博客于 6 月前

__attribute__特性

一、介绍GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。__attribute...
转载
225阅读
0评论
0点赞
发布博客于 6 月前

以太网PHY寄存器分析

以太网PHY寄存器分析    11、以太网PHY标准寄存器分析    21.1 Control Register    21.2 Status register    51.3 PHY Identifier Register   &...
转载
1082阅读
0评论
0点赞
发布博客于 7 月前

SerDes知识详解

一、SERDES的作用1.1并行总线接口  在SerDes流行之前,芯片之间的互联通过系统同步或者源同步的并行接口传输数据,图1.1演示了系统和源同步并行接口。   随着接口频率的提高,在系统同步接口方式中,有几个因素限制了有效数据窗口宽度的继续增加。a)、时钟到达两个芯片的传播延时不相等(clock skew)b)、并行数据各个bit的传播延时不相等(data skew)c)...
转载
549阅读
0评论
0点赞
发布博客于 7 月前

PRBS介绍

转自:http://blog.sina.com.cn/s/blog_9fa828d10102y3dp.html之前一直在讲高速串行的协议,MAC,PHY,PMD层,PMA层吗,PCS层。。。看大家回答的数量也不是很多,弱弱的问一句大家都消化了吗?的确,讲到各个层的功能,数据在芯片内部如何去运作协调这方面的确有点高深。其实坦白说哈,作为...
转载
360阅读
0评论
1点赞
发布博客于 7 月前

PCIe Switch高级功能及应用

PCI-E Switch芯片,估计不少人已经听说过这个东西了。但是估计多数人对其基本功能知之甚少。PCI-E Switch作为最先进的生产力,已经被广泛应用在了传统存储系统,以及少量品牌/型号的服务器平台。 笔者作为拥有全球最领先PCI-E Switch产品的PMC-Sierra公司的系统架构师,想在这里为大家普及一下PCI-E Swi...
转载
753阅读
0评论
1点赞
发布博客于 7 月前

MAC/PHY与MII(GMII/SGMII/RGMII)

 MAC(Media Access Control)即媒体访问控制子层协议。该部分有两个概念:MAC可以是一个硬件控制器 及 MAC通信以协议。该协议位于OSI七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。MAC硬件大约就是下面的样子:在发送数据的时候,MAC协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC协议首先判断输入的信息并是否发生传输错误,如果没有错误,...
转载
458阅读
1评论
0点赞
发布博客于 8 月前

SMI(MDC/MDIO)总线接口介绍

1. MDIO接口SMI:串行管理接口(Serial Management Interface),也被称作MII管理接口(MII Management Interface),包括MDC和MDIO两条信号线。MDIO是一个PHY的管理接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC为MDIO提供时钟。MDIO原本是为MII总线接口定义的,MII用于连接MAC和PHY,包含两种信号接口:1. ...
转载
548阅读
0评论
0点赞
发布博客于 8 月前

高速硬件接口

DLM: dual-lane modules, 是双差分收和发对接口,共有4对差分总线,收和发各两对, 可以复用的总线: sgmii, qsgmii, rxaui,pcie,sata.QLM: quad-lane modules, 是4差分收和发对接口,共有8对差分总线,收和发各4对, 可以复用的总线: sgmii, xaui, dxaui,rxaui, KR,XFI,pcie,ILA,ILK,XLAUI .SGMII:1.25Gbps波特率/差分对, 1Gbps数据速度, 1G以太的内部总线,..
转载
282阅读
0评论
0点赞
发布博客于 8 月前

交换机的工作原理

原文链接:链接一、交换机的工作原理     当交换机收到数据时,它会检查它的目的MAC地址,然后把数据从目的主机所在的接口转发出去。交换机之所以能实现这一功能,是因为交换机内部有一个MAC地址表,MAC地址表记录了网络中所有MAC地址与该交换机各端口的对应信息。某一数据...
转载
212阅读
0评论
0点赞
发布博客于 9 月前

路由器和交换机的区别?

(1)外形上交换机通常端口比较多,路由器端口少体积小,(路由器一般都集成了交换机的功能,LAN口就是作为交换机的端口来使,WAN用于连接外网的端口。(2)工作层次不同交换机在数据链路层(实现数据帧的转发),而路由器在网络层(肩负着网络互连的作用)。(3)数据的转发对象不同交换机是根据MAC地址转发数据帧,而路由器是根据IP地址来转发数据报。IP地址决定最终数据要到达某一台主机,而MAC地址是决定下一跳将要交给哪一台设备(一般是交换机或者路由器),IP地址是软件实现的,可以描述
转载
241阅读
0评论
0点赞
发布博客于 9 月前

win10安装cuda10.0以及VS2013下的CUDA编程测试

win10安装cuda10.0以及VS2013下的...
转载
548阅读
1评论
1点赞
发布博客于 10 月前

YOLOv3 算法的一点理解

<p>今天讲一讲 YOLOv3, 目标检测网络的巅峰之作, 疾如风,快如闪电。</p> 算法背景假设我们想对下面这张 416 X 416 大小的图片进行预测,把图中 dog、bicycle 和 car 三种物体给框出来,这涉及到以下三个过程: 怎么在图片上找出很多有价值的候选框?接着判断候选框里有没有物体?如果有物体的话,那么...
转载
1765阅读
1评论
4点赞
发布博客于 1 年前

YOLOv3使用笔记——Kmeans聚类计算anchor boxes

        anchor boxes用来预测bounding box,faster rcnn中用128*128,256*256,512*512,分三个尺度变换1:1,1:2,2:1,共计9个anchor来预测框,每个anchor预测2000个框左右,使得检出率提高很...
转载
1685阅读
2评论
1点赞
发布博客于 1 年前

facadesPix2Pix数据集

facadesPix2Pix数据集.zip 记得点赞
zip
发布资源于 1 年前

horse2zebra斑马.zip

horse2zebra数据集,方便用于CycleGan训练,欢迎点赞
zip
发布资源于 1 年前

一文读懂GAN, pix2pix, CycleGAN和pix2pixHD

本文翻译、总结自朱俊彦的线上报告,主要讲了如何用...
转载
352阅读
0评论
1点赞
发布博客于 1 年前

『TensorFlow2.0正式版』极简安装TF2.0正式版(CPU&GPU)教程

转载https://xiaosongshine.blog.csdn.net/article/details/101844926#comments0 前言TensorFlow 2.0,今天凌晨,正式放出了2.0版本。不少网友表示,TensorFlow 2.0比PyTorch更好用,已经准备全面转向这个新升级的深度学习框架了。本篇文章就带领大家用最简单地方式安装TF2.0正式版本(CP...
转载
660阅读
0评论
1点赞
发布博客于 1 年前

集显显示与独显运算

博主手上有一块显卡,支持视频接口是DVI,而显示屏接口只有VGA和HDMI。这样的情况显示屏不能接在显卡,当插上显卡显示屏不亮的情况出现了,然后拔掉显卡后显示屏还是不亮,最终分析找到原因如下。 当独显和集显同时候工作时,BIOS默认设置时自动切换,并且优先选择独显,当插上独显后视频就从独显输出,并且BIOS自动设置为独显为视频输出接口,这时候拔掉显卡也不能切换到集显输出,这...
原创
1285阅读
0评论
1点赞
发布博客于 1 年前

深入浅出机器学习CIFAR实战

CIFAR是另外一种数据集,包含了如下10中数据。本次实验采用VGG网络模型,精度非常高,resnet残差网络模型没有测试成功,在拟合时候一直不收敛加载数据集(x,y), (x_test, y_test) = datasets.cifar10.load_data()剔除标签多余维度y = tf.squeeze(y, axis=1) #tf.Tensor([6 9 9...
原创
155阅读
0评论
0点赞
发布博客于 2 年前

MNIST数据集下载与读取

数据集下载连接:https://download.csdn.net/download/qq_21792169/12007051解压后格式如下:代码如下:import numpy as npimport structimport matplotlib.pyplot as plt# 训练集文件train_images_idx3_ubyte_file = './train-i...
原创
845阅读
0评论
0点赞
发布博客于 2 年前

herok_mnist.zip

herok_mnist.zip 包含mnist数据集 和0~9测试图片 大小为28*28
zip
发布资源于 2 年前

深入浅出机器学习MNIST实战(三)

卷积网络创建,卷积层后是池化层,第三层卷积层后添加了压平层Flatten,三个全连接层model = models.Sequential()# 第1层卷积,卷积核大小为3*3,32个,28*28为待训练图片的大小model.add(layers.Conv2D( 32, (3, 3), activation='relu', input_shape=(28, 28, 1)))mod...
原创
565阅读
0评论
2点赞
发布博客于 2 年前

深入浅出机器学习MNIST实战(二)

上篇文章采用的是TensorFlow2.0接口函数,这里讲解一下自定义函数。加载数据(x, y), (x_test, y_test) = datasets.mnist.load_data()转换成张量并且将数据归一化到0~1x = tf.convert_to_tensor(x, dtype=tf.float32) / 255.y = tf.convert_to_tensor(...
原创
492阅读
0评论
2点赞
发布博客于 2 年前

深入浅出机器学习MNIST实战(一)

第一次接触机器学习,觉得这个方向挺有趣的,人工智能是未来IT发展的趋势。人工智能,机器学习,神经网络,深度学习的相互之间的关系如图所示。同样机器学习分为有监督学习,无监督学习,强化学习三类,本次实验从最简单的有监督学习入手。神经网络目前有两种主要方向分类与回归,比如区分猫和狗属于分类问题,识别图片中人属于线性回归问题。本次实验环境PyCharm+Python3.7+TensorFlow...
原创
400阅读
0评论
2点赞
发布博客于 2 年前

F:\python\chi_sim.traineddata和eng.train.rar.zip

chi_sim.traineddata和eng.train.rar
zip
发布资源于 2 年前

F:\python\tesseract-ocr-w64-setup-v5.0.0-alpha.20191010.zip

tesseract-ocr-w64-setup-v5.0.0-alpha.20190623.exe ......
zip
发布资源于 2 年前

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block

在制作根文件系统,在U-boot阶段通过nfs挂载文件系统后出现了该问题,这个问题网上已经有很多解答,但是没有一个是我需要的。我出错的现象如下:在此期间我尝试了很多种方法都没有得到解决,并且我在nfs服务器端查看Log发现有nfs mount迹象,这就很奇怪了,我通过抓包软件抓nfs的交互字段发现:Accept State: remote can't support version ...
原创
393阅读
0评论
2点赞
发布博客于 2 年前

am437x ubi文件系统制作问题解决方案

由于工作原因,需要用到这款芯片,但是官方提供的dameo是从文件系统中烧写U-boot,设备树,内核,文件系统等操作。这种方式很不方便生产,于是打算走最常规的思路,从u- boot中去烧写,于是需要制作Ubi文件系统镜像。制作流程如下:首先看一下mtd分区情况0: NAND.SPL 0x00040000 0x00000000 01: NAND...
原创
231阅读
0评论
2点赞
发布博客于 2 年前

qmake 添加额外参数 分开编译

qmake添加传参,生成不同的Makefile,可用于不同场景。使用方法如下:传一个参数:arm-qmake "TARGET = ax03" ax03.pro传两个参数:arm-qmake "TARGET=xinetd" "DEFINES +=GUARD" ax03.pro这样很方便时候嵌入式开发,arm-qmake是自定义嵌入式qmake的软链接,为了区分x86的qma...
原创
779阅读
0评论
2点赞
发布博客于 2 年前

dtc工具下载

下载链接:https://mirrors.edge.kernel.org/pub/software/utils/dtc/
原创
1047阅读
0评论
0点赞
发布博客于 2 年前

g++编译线程失败

源代码test.cpp:编译结果如下:用g++编译会出现上述错误,如果将文件名改成test.c,同时使用gcc编译,那么就能够正常编译通过,最后查找原因是C++禁止将void指针随意赋值给其他指针,因为定义函数时,程序没有定义函数指针的类型,那么默认就是void *型,注意代码中函数名前的void *,这个是该函数返回一个void *的指针,属于指针函数,这里一定要区别。那么我们可...
原创
358阅读
1评论
1点赞
发布博客于 2 年前

警告“未引用的形参/局部变量”的消除方法

如果我们编译以下代码:#include <stdio.h>int main(int argc, char** argv){ int n; int nRet = printf("Hello, world!"); return 0; }编译器一般会发出以下警告(VS2015):1>f:\mycode\cpptest\main.cpp(5...
转载
4249阅读
0评论
1点赞
发布博客于 2 年前

spi ioctl无效参数解决

方法一:struct spi_ioc_transfer tr; /* 这种写法一定要赋初值 */ memset(&tr,0,sizeof(struct spi_ioc_transfer)); tr.tx_buf = (unsigned long)tx; tr.rx_buf = (unsigned long)rx; tr.len = sizeo...
原创
1975阅读
2评论
3点赞
发布博客于 2 年前

udp recvfrom返回-1 Invalid argument

UDP的sendto对应着recvfrom,一发一收.如果sendto的数据大于MTU,则会在IP层分片发送,到达目标后由IP层重组,再从recvfrom一次性返回.如果使用IP层分片重组则存在乱序,丢包,重包的问题.调用一次sendto,只要数据长度小于MTU都会以一个独立的UDP包发送.recvfrom的接收大小必须大于或等于sendto时的是数据大小.更正确的说法应该是UDP的包单位是以IP...
原创
871阅读
0评论
0点赞
发布博客于 2 年前

linux环境代码不能发送UDP广播包

执行该命令:route add -net 255.255.255.255 netmask 255.255.255.255 dev eth0 metric 1eth0是网络设备名称
原创
1279阅读
4评论
0点赞
发布博客于 2 年前

linux内核max函数实现

Linux内核函数中的max函数编写得非常优秀,让我忍不住要拿出来分析一番。传统定义max函数是#define max(X,Y) ((X) > (Y) ? (X) : (Y))。是不是觉得这样定义已经perfect了,那先看下面这个例子。int x = 1, y = 2;printf("max=%d/n", max(x++, y++));printf("x = %d, y = %...
原创
1297阅读
0评论
2点赞
发布博客于 2 年前

container_of实现原理详解

container_of在内核函数中经常使用,该函数的功能是根据一个结构体成员的指针,返回这个成员指针所在的结构体的首指针。举例说明如下:struct std{int a;short b;char c;int d;};Stuctstd test;Int *p = &test.d;container_of(p, Stuctst...
原创
971阅读
0评论
0点赞
发布博客于 2 年前

i2c总线驱动详解

I2c总线应用也是很广泛的,i2c总线经常挂载eeprom、温度传感器、湿度传感器等设备。I2c总线下可以挂载多个设备,识别设备采用一个地址,这个地址在一条i2c总线是独一无二的。I2c总线驱动与spi总线驱动框架是一致的,都是采用控制器、core、设备三层驱动。下面开始讲解i2c总线驱动流程。强烈建议读者看完本篇文章。首先看一下设备树文件,本次示例程序是一个i2c控制器下挂在eeprom设备...
原创
1004阅读
0评论
1点赞
发布博客于 2 年前

spi总线之flash设备驱动

这篇文章分析挂在spi总线下的flash设备驱动程序,设备树信息如下所示。Spi设备驱动程序如下:看到没有,spi_driver驱动结构与platform_driver结构基本一致。我们来看看spi总线的匹配方式如何。Spi核心层定义与注册如下所示。注册方式与platform总线完全一致,看到初始化驱动的入口函数了吗,这也是在前文提到过的,是module_init的一种...
原创
404阅读
0评论
3点赞
发布博客于 2 年前

spi总线驱动详解

Spi总线在实际应用得比较多,所以这篇为文章讲解以实际应用为主,bus总线类型细节不做讲解,感兴趣的读者可以分析源码,研究内核源码我觉得是一件非常有趣的事情,同时也是一门艺术。Spi总线上可以挂flash、wifi网卡等常见设备。本文讲解以挂在flash作为实例。 Spi总线硬件电路如下图所示。一般有四根线– MOSI, MISO, SCK, SS;spi下可以挂在多个设备,S...
原创
1865阅读
0评论
1点赞
发布博客于 2 年前

platform总线驱动程序

从这篇文章开始讲解驱动程序,Linux内核中有很多总线驱动,但都是由bus_type总线内管理,在/sys/bus目录下能够看到该内核定义了那些系统总线,常见的有platform、iic、spi、input等。内核中的总线与实际物理总线不一样,这里的总线是虚拟的,仅仅是一系列链表管理的对象,我们称这个管理链表为驱动总线。本文分析platform总线,这个总线在驱动结构中比较常用。平台定义与注册...
原创
302阅读
0评论
1点赞
发布博客于 2 年前

华容道算法之性能优化

上篇文章讲解了华容道算法基本算法知识,也是最简单的,效率也是最低的。这篇文章讲解高效率算法。从下篇文章开始主要分析linux 驱动代码以及嵌入式相关设计知识。本次编码采用棋子在棋盘中的位置编码,顺序是从左往右/从上到下。以横刀立马举例说明。正方形的应该是1(记得从0开始计算),横方块值是0x80 、竖方块是0x909、单个方格值是0x96000、空格是0x60000编程思路与上一篇文章一致,...
原创
1384阅读
0评论
3点赞
发布博客于 2 年前

CCSv6.0以上版本实现软件仿真

CCSv6.0以上版本是取消了软件仿真,因此哪怕是跑一个简单的”Hello World!”程序,也必须借助于开发板,而CCSv3.3~CCSv5.5都是支持软件仿真的。本文介绍如何在CCSv6.0上实现软件仿真。本次使用CCS6.1支持软件仿真CCS5.5软件仿真包:链接:https://pan.baidu.com/s/1tynbZGwbbw4f6F3hNnP-ZA提取码:o1ro...
原创
264阅读
0评论
1点赞
发布博客于 2 年前

华容道算法进阶版

华容道算法进阶版,横刀立马耗时15ms。
zip
发布资源于 2 年前

华容道算法基础版

今天来聊聊华容道算法具体实现方法,华容道算法我会通过链表和红黑树两种方法实现查找算法,程序体现出来的效率差别很大。本篇文章拿华容道横刀立马做分析,华容道游戏下图所示。游戏原理是每个方块每次只可以移动一个方格,如何将正方形移除到方块外部。拿到这个需求我们首先需要构建数学模型,该游戏设计到的方块数量较少,走法也比较少,那么可以采取穷举思想计算出最佳走法。图 1当方块每移动一步时,...
原创
4636阅读
0评论
2点赞
发布博客于 2 年前

Linux平台PCIe驱动编写

以前文章分析了PCIe整个系统知识,包括如何扫描PCIE树,这篇文章讲解一下当拿到一个PCIe设备时如何编写驱动程序。编写驱动程序在应用程序中编写,同样可以在内核层编写驱动。从应用层编写驱动主要是使用pcilib库和/dev/mem接口,下面开始分析代码。根据pcie设备的厂家ID和设备ID初始化设备,并且返回访问设备指针描述符,pci_dev指针指向我们需要访问的设备。 ...
原创
6051阅读
9评论
3点赞
发布博客于 2 年前

华容道算法简洁版

华容道算法简洁版,
cpp
发布资源于 2 年前

Linux中Pcie驱动

玩转Linux中Pcie驱动,
zip
发布资源于 2 年前

人工智能之字符识别

1 概述上篇文章讲解了PCA主成分分析,这篇文章使用该训练模型实现验证码识别,同时作者也会提供全部源代码。希望能够帮助到大家。2 图像原理在计算机图形学里,位图就是一个像素的矩阵,矩阵中的每一个点都是各种颜色的点,最后总体上来看就是一副图像。如何显示每一个像素的具体颜色,有很多种颜色空间,最常见的就是RGB,每一个像素含有三个分量——R,G,B,分别代表红、绿和蓝三种颜色,三个分量的值的具体...
原创
11147阅读
0评论
3点赞
发布博客于 2 年前

验证码识别源代码

该资源支持验证码识别,识别率是100%,解压密码在公众号:herok
zip
发布资源于 2 年前

source insight4.0

支持最先版的source insight 4.0版本的破解,其他方式破解查看原文:https://blog.csdn.net/qq_21792169/article/details/85835864
zip
发布资源于 2 年前

平衡二叉树

上篇文章分析了二叉结构,这篇文章讲解平衡二叉树(AVL),有二叉树就能够实现基本的算法结构,为什么还需要引入平衡二叉树呢,下面看一个二叉树示例。按照二叉排序树格式插入序列{1,2,3,4,5,6,7,8,9},如果不进行旋转将得到图 1中链式存储格式,当需要查找数字9需要比对9次,经过旋转后将的到图 1旋转后的结果,旋转后查找数字9仅仅需要4,当二叉树结点很大时,平衡二叉树将能够快速遍历到二叉树中...
原创
225阅读
0评论
1点赞
发布博客于 2 年前

Source Insight 4.0 完美破解

安装程序下载在官网上下载Source Insight 4.0的安装程序.30天的试用安装首次启动选择授权方式,这里选择第二个选项,30天试用。 image.png点击下一步,输入名称、公司或组织名称、邮箱信息,申请30天的试用。输入完成后,点击下一步,直到安装完成。修改sourceinsight4.exe用16进制编辑器(sublime text)打开sour...
转载
61821阅读
4评论
9点赞
发布博客于 2 年前

二叉树排序

1 树的概念树是一种数据结构,其中一个元素可以有两个或者多个数据元素,具有一对多的特点,用树结构来存储文件。树的基本概念如下:结点的度:子结点的个数。 树的度:树的度等于所有结点度中度最高的值。 叶子结点:度为0的结点,即没有子结点的结点。 分支结点:除了叶子结点以外的结点,即度不为0的结点。 内部结点:除了根结点以及叶子结点或在分支结点的基础之上在去掉根结点。 树的深度:树中结...
原创
915阅读
3评论
0点赞
发布博客于 3 年前

解读gcc和g++编译器分别对c与c++文件影响

概述为什么需要解读gcc/g++编译器对c/c++文件的影响呢?由于系统内核一般是使用C语言来编写的,系统内核中用C语言实现了很多库。而上层应用程序有可能是用C++来开发,如果在内核库函数头文件中不用extern“C”来声明库函数的话,在编写C++应用程序时,包含库头文件,在C++文件链接时就会以C++标准来链接库的函数名,而在库文件实现时是用C来实现的,二者函数名不同,在链接时就会出现找不到函...
原创
4203阅读
3评论
6点赞
发布博客于 3 年前

QQFork.zip

个人使用代码 QQFork。
zip
发布资源于 3 年前

UltraVNC_1_2_16_X64_Setup.zip

UltraVNC_1_2_16_X64_Setup.zip 该工具是windos7 64位系统的。 如何使用在https://blog.csdn.net/qq_21792169/article/details/85090145、
zip
发布资源于 3 年前

CentOS 7 上设置 grub2启动项

红色部分就是传递给内核的参数,一般只需要修改该选项就可以。 1. 开机选单是自动创建出来的请勿尝试手动编辑开机选单,因为它是按照 /boot/ 目录内的文件自动创建出来的。然而你可以调整 /etc/default/grub 档内定义的通用设置,及在 /etc/grub.d/40_custom 档内加入个别自定项目。/etc/default/grub 档的内容如下:GRUB_T...
原创
10022阅读
0评论
2点赞
发布博客于 3 年前

Linux服务器ssh维护

网络上的服务器很容易受到攻击,最惨的就是被人登录并拿到root权限。有几个简单的防御措施:1. 修改ssh服务的默认端口。ssh服务的默认端口是22,一般的恶意用户也往往扫描或尝试连接22端口。所以第一步就是修改这个默认端口打开/etc/ssh/sshd_config,找到Port 22然后将22修改为其它没有被占用的端口,如1022。最好在1-1024之间,防止与用户进程端口冲突。...
原创
376阅读
0评论
0点赞
发布博客于 3 年前

Windows远程连接Linux界面

使用VNC连接,最简单.首先在linux端键入命令安装vncserversudo yum -y install *vnc*.x86_64然后键入命令设置vncserver密码vncpasswd然后键入命令来查看当前的vncserver端口vncserver可以看到类似下面的显示(这里的2代表我运行了此命令2次,已经迭代到了2,假如你是第一次,应该是1.这个数字后面链接的时候会用...
原创
752阅读
0评论
2点赞
发布博客于 3 年前

往linux内核函数挂钩子

概述本文讲解替换一个已经在内存中的函数,使得执行流流入我们自己的逻辑,然后再调用原始的函数。比如有个函数叫做funcion,而你希望统计一下调用function的次数,最直接的方法就是如果有谁调用function的时候,调到下面这个函数就好了。void new_function(){         count++;         return function();}...
原创
2156阅读
0评论
2点赞
发布博客于 3 年前

使用C++为对象分配与释放内存时的几个好习惯

在默认情况下,也就是不存在 operator new 的重载时,new一个自定义类型 ClassA 的对象时,C++ 会先调用 malloc 来申请一块 sizeof(ClassA) 大小的内存(操作系统会记录这块内存的首地址与大小),然后调用 ClassA 的构造函数在这块内存上初始化对象。此时,new 关键字会返回 malloc 得到的地址。调用delete时,会首先执行 ClassA 的析构...
原创
997阅读
0评论
2点赞
发布博客于 3 年前

如何在CentOS 7中安装内核头文件

在本文中,我们将解释如何使用默认包管理器从基本存储库中安装CentOS / RHEL 7和Fedora发行版中的内核头文件。当您在CentOS系统上编译自定义内核模块(如设备驱动程序)时,您需要在系统上安装内核头文件,其中包括Linux内核的C头文件。 内核头文件在安装或编译任何与内核接口的代码时提供了不同类型的函数和结构定义。安装内核头文件时 ,确保它与系统上当前安装的内核版本相匹配。 ...
原创
4305阅读
0评论
1点赞
发布博客于 3 年前

Centos永久修改系统时间

Centos系统,必须同时修改系统时间和硬件时间,才可以保证修改有效,单纯的使用date命令修改系统时间,是立即生效,重启后系统还原。具体操作如下:1.date {查看目前本地的时间}2.hwclock --show {查看硬件的时间}3.如果硬件时间和系统时间不同,那就对硬件的时间进行修改4.clock -w   保存系统时间为硬件时间,即是rtc时间----------------...
原创
2532阅读
0评论
1点赞
发布博客于 3 年前

CentOS7将应用快捷方式加到桌面

同时可以直接拖动标签到桌面。。 依次到usr/share/applications这个目录下你会看到: 然后你想将哪个应用放到桌面然后Ctrl+c(复制)到桌面Ctrl+v(粘贴)就ok了。...
原创
1986阅读
0评论
0点赞
发布博客于 3 年前

centos7开机不进入图形界面

CentOS7开机不进入图形界面设置和cent6系列不同的是,不再是直接改文件中的5就可以了。systemctl get-default    //获取当前的默认targetsystemctl set-default multi-user.target设置当前的target,可选值有graphical.target,multi-user.target,multi_user.target...
原创
6639阅读
2评论
1点赞
发布博客于 3 年前

CentOS7配置本地Yum源

这里需要注意,当电脑不能连接外界网络时候,需要用U盘拷贝镜像包,但是一个镜像包有8G左右,fat32格式只支持4GB,儿centos默认是不支持NTFS格式文件系统,这里可以将镜像包用软碟通提取里面iso文件,这里不能直接解压,软碟通的提取类似linux下的mount操作,提取完成后将该文件拷贝到centos某个目录,然后指定路径。 从CentOS7官网下载DVD中存在需要的大部分软件,所...
原创
13304阅读
0评论
3点赞
发布博客于 3 年前

U盘安装CentOS 7流程

准备工具1.准备8GU盘(启动盘制作完成后,U盘占用约4.02G,所以需要8G)2.最新版UltraISO(软碟通),一定要使用最新版的,因为老版本的软碟通制作出来的U盘启动盘有问题,例如9.3.6.2750这个版本。问题体现在哪呢?我简单说两点。第一点就是你用9.3.6.2750这个版本的软碟通打开镜像文件后会发现你无法看到镜像中应有的全部文件,你可以用压缩工具打开比较一下。第二点就是,...
原创
1953阅读
1评论
2点赞
发布博客于 3 年前

U盘安装CentOS 7流程

准备工具1.准备8GU盘(启动盘制作完成后,U盘占用约4.02G,所以需要8G)2.最新版UltraISO(软碟通),一定要使用最新版的,因为老版本的软碟通制作出来的U盘启动盘有问题,例如9.3.6.2750这个版本。问题体现在哪呢?我简单说两点。第一点就是你用9.3.6.2750这个版本的软碟通打开镜像文件后会发现你无法看到镜像中应有的全部文件,你可以用压缩工具打开比较一下。第二点就是,...
原创
1953阅读
1评论
2点赞
发布博客于 3 年前

从cpu角度理解PCIe续集

概述上篇文章剩下两个问题,上电扫描PCIe树和存储地址到PCIe地址的映射,本篇文章将对这两个问题做出解答。本文可能会针对某一款芯片做出详细流程解答,读者可以只关注整个流程,具体映射机制和寄存器参考芯片datasheet。上篇文章已经了解到如何访问配置空间,前256Bytes可以通过寄存器方式访问,后面的256B~4k必须通过映射才能访问,映射无非就是把配置空间映射到存储地址空间,或者把PCIe...
原创
2642阅读
3评论
8点赞
发布博客于 3 年前

大话存储:存储系统底层架构原理极限剖析(终极版)_张冬2015.01_P989

大话存储:存储系统底层架构原理极限剖析(终极版)_张冬2015.01_P989
pdf
发布资源于 3 年前

从cpu角度理解PCIe

概述为什么需要写这篇文章,当我阅读《深入浅出SSD》这篇书籍中PCIe章节时发现,本书籍的侧重点是放在PCIe控制器和PCIe协议上,从CPU角度理解PCIe知识偏少,本文对下面几个知识点做出一些补充。CPU访问外设寄存器与内存编址方式; CPU如何访问PCIe配置空间; CPU能够通过寄存器访问配置空间,为什么还需要映射PCIe配置空间; 如何扫描PCIe树并且为PCIe分配ID;...
原创
6834阅读
0评论
16点赞
发布博客于 3 年前

浅谈CPU寻址内存机制

本文讲解的内容是Processor如何访问内存,TLB Cache和MMU的在Processor中扮演的角色。涉及的硬件平台是Xilinx Zynq-7000,dual-core ARM® Cortex-A9 MPCore,架构是armv7,下面分别对TLB、MMU、Processor如何访问cache和主存深入分析。在早期计算机系统中,程序员都是直接访问物理地址进行编程,当程序出现错误时,整...
原创
3584阅读
0评论
1点赞
发布博客于 3 年前

QT封装exe和安装包详解

1. 前言Qt 是 1991 年由奇趣科技开发的跨平台 C++图形用户界面应用程序开发框架。它既可以开发 GUI 程式,也可用于开发非 GUI 程式,比如控制台工具和服务器。Qt 是面向对象的框架。相比较Microsoft的mfc框架,我推荐使用Qt平台。2 搭建Hello工程2.1 下载QT和软件库在早期qt版本中,需要单独安装Qt Creator、qt-opensource、m...
原创
10039阅读
0评论
8点赞
发布博客于 3 年前

Cache地址映射

  理解Cache地址映射之前补充一些基础知识,Cache的地址映射和MMU(内存管理单元)和TLB Cache(转译查找缓存)中的映射是有区别的。Cache、TLB Cache、MMU在CPU中结构如图1所示,图1展现的是Cortex A9 Processor内部结构,采用的指令和数据总线分开的哈佛结构。CPU访问内部存储和外部存储,以及各种外设空间在硬件层面上看都是物理地址(硬件总线),然后为...
原创
9832阅读
0评论
7点赞
发布博客于 3 年前

几行C代码剖析Cache参数

Cache的容量一般都很小,即使是最大的三级 Cache(L3)也只有20MB ~30MB。cache加快了CPU对内存的读写速率,CPU第一次执行需要将数据时候需要从主存--&gt;L3 Cache---&gt;L2 Cache --&gt;L1 Cache传递到CPU的计算单元。cache分成多个组,每个组分成多个行,linesize是cache的基本单位,从主存向cache迁移数据都是按照l...
原创
1374阅读
0评论
0点赞
发布博客于 3 年前

深入浅出cache写策略

随着计算机行业的飞速发展,CPU的速度和内存的大小都发生了翻天覆地的变化,在处理器速度不断增加的形势下,处理器处理数据的能力也得到大大提升。数据是存储在内存中的,内存吞吐率虽然得到很大的提升,但是相对于处理器来讲,仍然非常慢。处理器要从内存中直接读取数据都要花大概几百个时钟周期,在这几百个时钟周期内,处理器除了等待什么也不能做。在这种环境下,才提出了Cache的概念。计算机中常见的存储介质如图1所...
原创
7742阅读
0评论
2点赞
发布博客于 3 年前

CPU性能发展所遇到的瓶颈

通常一个处理器通常包含多个核心(Core),集成 Cache 子系统,内存子系统通过内部或外部总线与其通信。在经典CPU中一般有两个常用的组件:北桥(North Bridge)和南桥(SouthBridge)。它们是处理器和内存以及其他外设沟通的渠道。图1给出了处理器、内存、南北桥以及其他总线之间的关系。 从图一可以看到:1)处理器访问内存需要通过北桥。2)处理器访问所有的外设...
原创
6792阅读
0评论
6点赞
发布博客于 3 年前

centOS 7镜像文件下载

CentOS 7官方下载地址:https://www.centos.org/download/ 在CentOS官方网站上,CentOS 7提供了三种ISO镜像文件的下载:DVD ISO、Everything ISO、Minimal ISO。 以下针对各个版本的ISO镜像文件,进行一一说明: CentOS-7.0-x86_64-DVD-1503-01.iso 标...
转载
2559阅读
0评论
0点赞
发布博客于 3 年前

华容道穷举算法实现

1、广度优先的树型结构由于整个棋局的可行解可以描述成一个树型结构,并且为了得到最少移动步数需要采用广度优先的搜索算法,因此考虑将链表与树型结构整合起来,便于进行广度搜索。如图,当我们试图搜索第三步可行解时,只需要顺着第二步的链表依次搜索便可以实现了。2、堆栈结构输出最少步数由于在树型结构设计上,每个子节点都保留了一个对父节点的引用。所以一旦找到最优解,我们就需要从最底层向上追溯所有移动步骤(如下图...
原创
3891阅读
2评论
1点赞
发布博客于 3 年前

c++中的 栈 stack实现

C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。c++ stl栈stack的头文件为: #include &lt;stack&gt; c++ stl栈stack的成员函数介绍操作 比较和分配堆栈empty() 堆栈为空则返回真pop() 移除栈顶元素push() 在栈顶增加元素size() 返回栈中元素数目top(...
原创
3699阅读
0评论
3点赞
发布博客于 3 年前

编译debian内核模块驱动

debian 系统中默认的linux源在/usr/src/目录下,有些没有这个源,需要手动安装sudo apt-get install linux-headers-`uname -r`/usr/src/linux-headers-`uname -r`    /* 内核文件目录,动态编译debian驱动指定这个路径久Ok */...
原创
1636阅读
0评论
0点赞
发布博客于 3 年前

debian添加本地iso为apt源

通常虚拟机安装debian后安装软件,需要手动切换本地镜像软件源,这样非常麻烦,下面方法很实用。1、上传debian-9.4.0-amd64-DVD-1.iso  debian-9.4.0-amd64-DVD-2.iso  debian-9.4.0-amd64-DVD-3.iso 三个镜像文件到debian系统中/home/google/debian/目录下。2、分别挂在这三个文件到/media/...
原创
7675阅读
2评论
6点赞
发布博客于 3 年前

qt5搭建libcurl环境

1.安装QT5的注意事项安装qt5说起来非常简单,但是经常出错,有时候是装上之后运行QT creator的时候出现错误。下面介绍一个我测试过没有问题的安装方法: 首先是qt5建议安装qt5.5.0等公认的稳定性比较好的版本,不要随便找个版本就安装。推荐一个下载地址http://mirror.bit.edu.cn/qtproject/archive/qt/5.5/5.5.0/打开这个地址,看一看到里...
转载
2843阅读
0评论
1点赞
发布博客于 3 年前

Python与C/C++相互调用

转载自:https://www.cnblogs.com/yanzi-meng/p/8066944.html一、问题      Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结。二、Python调用C/C++1、Python调用C动态链接库        Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可。(1)C语言...
原创
14828阅读
5评论
2点赞
发布博客于 3 年前

C语言结构体全通详解

#include #include struct student{ int num; char *tel; int *can;};struct test_pfun { int id; char name[10]; int *age; struct student stu; struct student *pstu; int (*add) (int a,int b);
原创
1120阅读
0评论
0点赞
发布博客于 4 年前

sqlitedbms-0.5.1.tar.gz

sqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gzsqlitedbms-0.5.1.tar.gz
gz
发布资源于 4 年前

sqlite3.tar.gz

sqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gzsqlite3.tar.gz
gz
发布资源于 4 年前

Linux下测试SSD硬盘读写速率

硬盘分为机械硬盘HDD和固态硬盘SSD两种。现在固态硬盘已经是大势所趋咯。SSD用的接口是NVME。在NVME协议下面还有一层PCIe协议。HDD硬盘接口有SATA,SATA接口常用的工作模式有AHCI。SATA硬盘接口最大速率是600MBytes/s。接下来我通过C代码测试SSD的读写性能。代码采用的是直接IO方式,这个测的速率不加直接IO的四倍。test_ssd.c#define _GNU_S
原创
11447阅读
2评论
2点赞
发布博客于 4 年前

万兆网络UDP速率传输性能测试(接受端)

接受端是在VS2010下开发的控制台程序,接受采取的是多线程去接收,VS2010不自带pthread库,这个库是Linux下线程操作库,习惯了在Linux下开发,就把这个库文件安装到VS的安装目录。线程库下载地址:pthreads-w32-2-8-0-release.zip 控制台程序exe文件(采用的是静态编译,只有一个exe文件,方便操作),下载地址:udpserver.exeexe界面效果如
原创
7115阅读
1评论
2点赞
发布博客于 4 年前

udpserver1.zip

udpserver.zip udpserver.zip udpserver.zip
zip
发布资源于 4 年前

pthreads-w32-2-8-0-release.zip

pthreads-w32-2-8-0-release.zip 非常好用
zip
发布资源于 4 年前

万兆网络UDP速率传输性能测试(发送端)

客户端代码运行平台是在Linux,开发平台是在Debian上交叉编译,采取多线程发送数据,并且将每个线程绑定到每个核上,这样最大性能发挥CPU的处理速度,万兆网络传输速率测试结果达到920MByte/s,这个速度接近极限了。写代码遇到了一些问题,虽然比较简单,下面我会说明的。代码如下:遇到问题:(1)  添加头文件#include 还是提示找不到这个文件里面的宏定义,打开头文件发现需要定义#def
原创
3841阅读
0评论
1点赞
发布博客于 4 年前

二进制、十进制、十六进制同步转换器

很久没有开始没写文章了,挺对不起一些支持我的博友。一些博友也经常给我发私信叫我写文章,其实写文章真心还挺不错的,以前文章过于基础但很实用。现在在公司开始做实际开发,以后逐渐会给大家分享实际的代码。以前把那个群解散了,也挺对不起大家的,现在我会重新建群。 到公司发现很多时候需要用到进制转换器,然后我第一天上班就开发了一个,这里会分享代码,工程文件,以及制作好的工具。代码写得不够简洁,大家凑合用吧,但
原创
1765阅读
0评论
0点赞
发布博客于 4 年前

ViewBit-project.zip

ViewBit-project.zip , ViewBit-project.zip
zip
发布资源于 4 年前

ViewBit.rar

大家贡献一点分数吧 ,这个软件挺好用的
rar
发布资源于 4 年前

Ultraedit.rar

Ultraedit.rar 破解版 非常实用
rar
发布资源于 4 年前