自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP和UDP的区别

TCP面向连接,UDP是无连接的,即采用UDP协议,发送数据之前是不需要建立连接的。TCP提供可靠的服务。它通过校验和,丢包时的重传控制,序号标识,滑动窗口,确认应答,次序乱掉的分包进行顺序控制实现可靠传输。即通过TCP连接传输的数据,无差错、不丢失、不重复、且按序到达;UDP尽最大努力交付,即不保证可靠交付。UDP具有较好的实时性,工作效率比TCP高,适用于对实时性有较高要求的通信场景或广播通信场景。每一条TCP连接是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信方式。TCP对系统.

2021-06-26 17:19:56 133 2

原创 代码编辑器SourceInsight的使用介绍

SI整套软件的核心是工程,所以需要先新建工程一、SourceInsight创建使用工程1.点击project新建工程2.输入工程名和工程文件保存目录3.选择工程源文件保存目录4.向工程中添加目录选择好目录后,点击add即向工程中添加目录5.由于是一个空的工程,所以需要向工程中添加文件新建文件,并将该文件添加到工程。点击file->new添加好之后即可再Source...

2020-01-28 17:55:47 685

原创 STM32 DMA介绍

DMA功能简介DMA:Direct Memory Access,直接存储器存取,是一种大大减少CPU工作量的数据存取方式,被广泛的使用。在硬件系统中,主要由CPU(内核)、外设、内存(SRAM)、总线等结构组成,数据经常在内存和与外设之间转移,或从外设A转移到外设B。例如:在CPU需要处理由ADC外设采集回来的数据时,CPU首先要把数据从ADC外设的寄存器读取到内存中,然后进行运算处理,这是一...

2019-10-29 21:52:02 600

原创 I2C总线及Linux下的I2C体系结构

一.I2C总线I2C(内置集成电路)总线是由Philips开发的两线式串行总线,支持多主控模式,任何能够进行发送和接收的设备都可以成为主设备。I2C是philips提出的外设总线。I2C只有两条线,一条串行数据线SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线。因此,I2C总线被非常广泛地应用在EEPROM,实时钟,小型LCD等设备与...

2019-08-12 12:00:56 590

原创 链表学习笔记

链表是由若干个节点构成的,且链表在内存中的存储位置是不连续的,链表的两个节点之间一般通过一个指针来从一个结点指向另一个结点。C语言实现不带头结点的单向链表(头插法)#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node ...

2019-08-05 16:31:58 131

原创 多线程编程原理简要分析

线程是进程的一条执行路径。在UNIX系统下,线程常被称为轻量级的进程。同一主线程下的所有子线程都在统一进程空间运行,所以多个线程将共享进程中的全部系统资源,如虚拟地址空间,文件描述符等;但同一进程下的各个线程都有其各自的调用栈(call stack),寄存器环境(register context)和线程本地存储(thread-local storage),一个进程可以有很多线程,不同线程执行不同的...

2019-08-02 16:11:22 552

原创 多路复用之select

内核提供的多路分离函数select()是建立IO多路复用模型的基础。select()可以避免同步非阻塞模型中的轮询等待的问题。在这种模式下,我们先将需要进行IO操作的socket加入到select中,然后便阻塞等待select()系统调用返回。有数据到达时,socket便被激活,select函数返回,此时用户线程发起read请求,读取数据便继续执行。select虽然在流程上与同步阻塞IO相同,并且...

2019-07-24 11:40:01 428

原创 经典排序算法之选择排序和插入排序

选择排序(select sort)选择排序的主要优点与数据移动有关。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序算法中,选择排序属于非常好的一种。选择排序的算法步骤如下:1.在未排序序列中找到最小(最大)元素,存放在排序序列的起始位置;2.然后,再从剩余未排序元素中...

2019-07-23 20:50:41 209

原创 经典排序算法之冒泡排序

冒泡排序(bubble sort)是一种基础的交换排序。之所以叫冒泡排序,是因为数组中的每一种元素都像气泡一样往数组的一侧移动,于是数值小的元素就冒上来了。冒泡排序的时间复杂度是O(n^2),即平方阶。冒泡排序的算法步骤如下:1.比较相邻的元素,如果第一个元素比第二个元素大,就交换这两个元素;2.对每一对相邻的元素作同样的工作,从开始一对到结尾的最后一对,于是当比较完一轮后,最后的元素就是...

2019-07-17 17:04:36 165

原创 cJSON的使用

cJSON源码下载:https://sourceforge.net/projects/cjson/一.JSON1.先来了解什么是JSON。JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation);JSON 是轻量级的文本数据交换格式;JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语...

2019-07-16 19:52:23 441

原创 C程序编译过程

Linux程序员可以根据自己的需要让gcc在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。...

2019-07-15 10:22:58 394

原创 Makefile和版本控制系统git的使用

Makefile的使用:在一个项目中,往往有多个c文件,这些源文件按其类型、功能和模块被放在各个不同的目录下,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,甚至是更复杂的功能操作,makefile就像一个shell脚本一样,其中也可以执行操作系统的命令。在Linux(Unix)环境下可以使用GNU的make工具构建一个过程,整个工程的编译只需要一个命令。这依赖...

2019-07-08 20:48:50 1749 1

原创 FL2440开发板第一次烧录以及启动过程简要分析

开发板烧录的流程如下图:1.J_link加载bootstrap到开发板的SRAM的0地址上运行,bootstrap程序用来初始化外部的SDRAM。2.J_link加载u-boot程序到外部的SDRAM 0x33f80000地址上运行,u-boot相当于PC上的BIOS。3.u-boot在SDRAM中运行起来后,使用tftp命令将u-boot,linux内核(包括根文件系统)烧录到nandfl...

2019-07-03 22:19:35 440

原创 linux下的静态库和动态库以及gcc常见编译选项

一、linux下的静态库和动态库linux和windows下都有大量的库,库在本质上就是可执行的二进制代码,可以被操作系统载入内存执行。我们通常将一些通用函数写成函数库,所以库是别人写好的,现有的,成熟的,可以复用的代码,你可以使用但要必须得遵守许可协议。1.静态库静态库的文件命名方式是“libxxx.a",库名前加"lib",windows和linux下都是用后缀”.a",“xxx"为静态...

2019-07-02 20:32:58 1307

原创 嵌入式linux安装dropbear

Dropbear是由Matt Johnston所开发的Secure Shell软件(包括服务器端与客户端)。期望在存储器与运算能力有限的情况下取代OpenSSH,Dropbear特别用于“嵌入”式的Linux(或其他Unix)系统,如无线路由器。1.源码包下载zlib官方下载:http://www.zlib.net/dropbear官方下载:https://matt.ucc.asn.au/d...

2019-06-28 16:48:54 1723 1

原创 进程间通信方法(inter-procession communication)

在fork之后,子进程和父进程就分叉了,至于父子进程哪一个先运行,是由操作系统进程调度算法决定的。如果想要父子协同工作,可以采用原语的办法解决。那么当多个进程需协同工作共同处理某一个任务时,这时就需要进程间的同步和数据交流。常用的进程间通信方法有:1.信号(signal):信号用于通知接收进程某个事件已经发生。2.管道(pipe):管道是一种半双工的通信方式,数据在同一时刻只能单向流动,而且...

2019-06-27 20:03:47 276

转载 linux内核双向链表

 概要前面一章"介绍双向链表并给出了C/C++/Java三种实现",本章继续对双向链表进行探讨,介绍的内容是Linux内核中双向链表的经典实现和用法。其中,也会涉及到Linux内核中非常常用的两个经典宏定义offsetof和container_of。内容包括:1. Linux中的两个经典宏定义2. Linux中双向链表的经典实现转载请注明出处:http://ww...

2019-06-02 19:39:06 153

原创 linux驱动开发之platform总线

1.什么是platform总线我们先来思考这样一个问题,当我们把usb设备插到电脑上时,电脑是如何识别到这个usb设备的?其实,每一个usb中都有一个vid(厂商id)和pid(设备id),vid和pid在usb的生产过程中就已经设置好了。同时,对于一个usb驱动,在驱动里也保存着这个pid和vid,当usb设备中的vid和pid是与usb驱动中的vid和pid相同时,驱动便可以识别到这个设备。...

2019-05-27 21:43:27 177

原创 linux设备驱动程序之低级led驱动

首先,内核开发人员需要明白的是,我们要做的是在内核里写一些函数,这些函数是在内核中,所以它不能用到应用程序空间的所提供的一些函数,如printf()等;其次,这些设备驱动函数,目的是提供一种为底层的物理设备(如led,按键等)实现某种操作的策略,注意,是策略而不是机制,如果想要实现某种机制,请把实现这种机制的方法放到应用程序空间;同时,设备驱动函数也向上一层提供了一些系统调用接口供应用程序空间使用...

2019-05-18 15:00:38 968

原创 linux设备驱动中的关键数据结构

对于linux设备驱动,我们需要认识到,当我们在应用程序空间调用某个系统调用时,位于内核的设备驱动是如何找到相应的硬件并完成我们在系统调用时所指定的操作的。在linux设备驱动下,有三种主要的关键数据结构,正是这三种关键数据结构的相互联系,从而完成了应用程序空间和内核层设备驱动程序以及相应的硬件之间的关联。1.file_operation结构file_operation把系统调用和设备驱动程序...

2019-05-12 20:23:27 1000

转载 inittab文件详解

转载地址:http://www.2cto.com/os/201108/98426.html](http://www.2cto.com/os/201108/98426.htmlinit的进程号是1(ps -aux | less),从这一点就能看出,init进程是系统所有进程的...

2019-05-02 16:48:38 1080

原创 TLV协议

TLV协议是一种通讯协议,一般将数据封装成TLV的形式,即Tag,length,value。协议就是指通信双方对数据传输控制的一种规定,规定了数据格式,同步方式,传送速度,传送步骤的问题作出统一的规定。可以理解为两个节点之间为了协同工作,协商一定的规则和约定。例如我们...

2019-04-10 21:36:58 3638

原创 多路复用之epoll

一、为什么要用epoll?在高并发的情况下,我们可以在服务器端用多路复用的方法来处理,具体的多路复用方法有select(),poll()和epoll()。但与epoll()相比,select()和poll()都有一些比较明显的缺点,其具体的缺点如下:1.select()中单个进程所能监视的文件描述符存在限制,通常是1024个;并且select()采用轮询的方式扫描文件描述符,文件描述符越多,其...

2019-03-28 19:36:50 504

原创 多进程编程具体实现方法

Linux下可以通过fork()系统调用来创建一个子进程,fork,英文解释就是“分叉”,当我们通过系统调用fork(),就创建了一个子进程。fork()系统调用有两个返回值,其中一个返回给父进程,其返回值是子进程的PID(process id),另一个返回给子进程,其返回值是0。所以可以通过其返回值来判断当前的代码是在父进程还是子进程运行,如果其返回值大于0,说明在父进程运行,如果fork()系...

2019-03-01 16:36:45 887

原创 用树莓派制作无线路由器:

先来简要介绍无线路由器的工作原理:无线路由器有LAN口和WAN口,LAN口即局域网端口,WAN口即广域网接口(wide area network interface),是与Internet网连接的接口。数据传送时,局域网下的网络设备(笔记本电脑,平板,手机)将数据给LAN口,然后在路由器内部会进行NAT转化,生成NAT表,数据再由WAN口出去至Internet。用树莓派做无线路由器,主要需要完...

2018-12-17 13:05:08 1090 1

原创 C语言中指针的用法

int main(void){ int a = 10;}指针存放地址,那么在计算机中是如何存放上面定义的a呢?首先,a占4个字节,因为其是int类型,然后,int类型10的十六进制形式是0x0000000a,那么,它在内存中又是如何存放的呢, 在内存中有两种排序方式,大端字节序(MSB)和小端字节序(LSB); 字节序:超过一个字节的数据类型的数据在内存中的存储顺序。 大...

2018-09-15 16:38:29 3168

原创 操作系统原理

操作系统具有五大功能, 1.进程管理(Processing management) 2.内存管理(Memory management) 3.设备管理(Device management) 4.文件系统(File system) 5.网络通讯(Networking) 五大功能。 一.进程管理:程序要在内存中运行,正在运行的程序及其占用的资源(CPU,内存,其他的资源)就叫进程。一个单的...

2018-09-04 22:25:54 11420

原创 Linux下环境变量的简单设置

假如我们现在已经写好了一个hello.c的程序,打印:hello world 编译该程序:gcc hello.c 输入./a.out ,即执行该文件。接下来使用gcc hello.c -o hello生成可执行命令hello,输入hello,出现错误。 之所以会出现如上错误,是因为PATH的值中并没有包括当前执行hello命令的路径, 解决方法如下: 1. pwd查看当前路径...

2018-09-01 13:08:18 115

原创 Linux下的常用命令

1.命令行注意和技巧。 1)Linux下所有命令或选项,文件都区分大小写。 2)在输入Linux命令或路径时,如果命令或路径名很长,可以使用Tab键自动补齐。 3)Ctrl+c终止一条命令的正常执行。 4)向上方向键执行之前的历史命令,向下方向键执行历史命令中的下一条命令。 5)使用history命令,可以查看自己执行的相关命令的历史记录,然后用“!”和前面的索引就可以执行相关的命令。 ...

2018-08-25 17:27:56 160

原创 Ubuntu14.04下搭建FTP服务器指南

FTP(文件传输协议)用于在两台计算机之间上传和下载文件。 在这篇博客中,将展示如何安装,配置和保护FTP服务器,(vsftpd全称是very secure FTP Deamon),拥有强大的安全性,能够防范FTP漏洞。1....

2018-08-23 10:13:24 548

空空如也

空空如也

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

TA关注的人

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