自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (11)
  • 收藏
  • 关注

原创 正则表达式(一) --- 理论

1. 正则表达式的概念正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符".

2021-04-29 21:55:29 4

转载 Linux网络编程 --- UDP广播特性

1. 广播的特点广播的 UDP 的特性之一,通过广播可以向子网中多台计算机发送消息,并且子网中所有的计算机都可以接收到发送方发送的消息,每个广播消息都包含一个特殊的 IP 地址,这个 IP 中子网内主机标志部分的二进制全部为 1 (即点分十进制 IP 的最后一部分是 255)。点分十进制的 IP 地址每一部分是 1 字节,最大值为 255,比如:192.168.1.100前两部分 192.168 表示当前网络是局域网 第三部分 1 表示局域网中的某一个网段,最大值为 255 第四部分 100 用

2021-04-22 23:15:59 4

转载 Linux系统应用编程 --- 基于UDP的套接字通信

0. UDP通信特点udp 是一个面向无连接的,不安全的,报式传输层协议,udp 的通信过程默认也是阻塞的。UDP通信不需要建立连接 ,因此不需要进行 connect () 操作 UDP通信过程中,每次都需要指定数据接收端的IP和端口,和发快递差不多 UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息 UDP对接收到的数据报不回复确认信息,发送端不知道数据是否被正确接收,也不会重发数据。 如果发生了数据丢失,不存在丢一半的情况,如果丢当前这个数据包就全部丢失了1.

2021-04-22 23:15:34 5

转载 Linux网络编程 --- 服务器并发

1. 单线程/进程在 TCP 通信过程中,服务器端启动之后可以同时和多个客户端建立连接,并进行网络通信,但是在介绍 TCP 通信流程的时候,提供的服务器代码却不能完成这样的需求,先简单的看一下之前的服务器代码的处理思路,再来分析代码中的弊端:// server.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include &lt.

2021-04-22 22:11:15 7

转载 Linux网络编程 --- socket套接字基本概念

1. 网络相关的基本概念1.1 局域网和广域网局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。广域网:又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。1.2 IP(Internet Protocol)IP本质是一个整形数,用于表示计算机在网络中的地址。IP 协议版本有两个:IPv4 和 IPv6IPv4(Internet Protocol version4):使用一个 32 位的整形数描述一个 IP 地址,4

2021-04-22 21:27:13 12

转载 Linux系统应用编程 --- 多线程同步之信号量

1. 信号量函数信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作。信号量不一定是锁定某一个资源,而是流程上的概念,比如:有 A,B 两个线程,B 线程要等 A 线程完成某一任务以后再进行自己下面的步骤,这个任务并不一定是锁定某一资源,还可以是进行一些计算或者数据处理之类。信号量(信号灯)与互斥锁和条件变量的主要不同在于” 灯” 的概念,灯亮则意味着资源可用,灯灭则意味着不可用。信号量主要阻塞线程,不能完全保证线程安全,如果要保证线程安全,需要信

2021-04-18 16:27:46 19

转载 Linux系统应用编程 --- 多线程同步之条件变量

1.条件变量函数严格意义上来说,条件变量的主要作用不是处理线程同步,而是进行线程的阻塞。如果在多线程程序中只使用条件变量无法实现线程的同步,必须要配合互斥锁来使用。虽然条件变量和互斥锁都能阻塞线程,但是二者的效果是不一样的,二者的区别如下:1)假设有 A-Z 26 个线程,这 26 个线程共同访问同一把互斥锁,如果线程 A 加锁成功,那么其余 B-Z 线程访问互斥锁都阻塞,所有的线程只能顺序访问临界区2)条件变量只有在满足指定条件下才会阻塞线程,如果条件不满足,多个线程可以同时进入临界区,同时..

2021-04-18 16:18:00 5

转载 Linux系统应用编程 --- 多线程同步之读写锁【rwlock】

1. 读写锁函数1.1 读写锁概念介绍读写锁是互斥锁的升级版,在做读操作的时候可以提高程序的执行效率,如果所有的线程都是做读操作, 那么读是并行的,但是使用互斥锁,读操作也是串行的。读写锁是一把锁,锁的类型为 pthread_rwlock_t,有了类型之后就可以创建一把互斥锁了:pthread_rwlock_t rwlock;之所以称其为读写锁,是因为这把锁既可以锁定读操作,也可以锁定写操作。为了方便理解,可以大致认为在这把锁中记录了这些信息:锁的状态:锁定 / 打开 锁定的是什

2021-04-18 16:11:36 6

转载 Linux系统应用编程 --- 多线程同步之互斥锁【mutex】

1. 互斥锁函数互斥锁是线程同步最常用的一种方式,通过互斥锁可以锁定一个代码块,被锁定的这个代码块,所有的线程只能顺序执行 (不能并行处理),这样多线程访问共享资源数据混乱的问题就可以被解决了,需要付出的代价就是执行效率的降低,因为默认临界区多个线程是可以并行处理的,现在只能串行处理。在 Linux 中互斥锁的类型为 pthread_mutex_t,创建一个这种类型的变量就得到了一把互斥锁:pthread_mutex_t mutex;在创建的锁对象中保存了当前这把锁的状态信息:锁定还是打

2021-04-18 15:17:09 9

转载 Linux系统应用编程 --- 线程同步

转载链接:作者: 苏丙榅链接: https://subingwen.cn/linux/thread-sync/#1-2-%E5%90%8C%E6%AD%A5%E6%96%B9%E5%BC%8F为什么需要线程同步,笼统的说,有下面三个原因:1.共享资源,多个线程都可对共享资源操作2.线程操作共享资源的先后顺序不确定3.处理器对存储器的操作一般不是原子操作假设有 4 个线程 A、B、C、D,当前一个线程 A 对内存中的共享资源进行访问的时候,其他线程 B, C, D 都不可以对这块内存.

2021-04-18 15:04:37 11 1

原创 Linux系统应用编程 --- 线程原语

1. pthread_create#include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);pthread_t *thread:传递一个pthread_t变量地址进来,用于保存新线程的tid(线程ID)const pthread_attr_t *attr:线程属性设置,如使用默

2021-04-18 13:31:41 8

原创 Linux系统应用编程 --- 线程基本概念

1. 线程的概念LWP: light wight process,轻量级进程,本质还是进程(在Linux环境下)进程:独立地址空间,拥有PCB线程:也有PCB,但没有独立的地址空间(共享)区别:在于是否共享地址空间Linux下:进程:最小的执行单位线程:最小分配资源单元,可看成是只有一个进程的线程2. Linux线程实现原理1、轻量级线程也有PCB,创建线程使用的底层函数和进程一样,都是clone2、从内核里看进程和线程...

2021-04-18 12:23:37 6

原创 Linux系统应用编程 --- 信号

0. Linux提供了那些信号?信号编号32之前的信号,称之为unix经典信号。信号编号32之后的信号,称之为实时信号,驱动编程常用1. 信号产生种类1.1 特殊终端按键Ctrl+CSIGINTCrtl+Z SIGTSTPCtrl+\SIGQUIT1. 2硬件异常1)除0操作2)访问非法内存1. 3 Kill函数或者kill指令#include ...

2021-04-18 00:47:54 13

原创 Linux系统应用编程---进程间通信(二)【内存共享映射mmap】

参考链接:https://blog.csdn.net/qq_44361695/article/details/99075993https://segmentfault.com/a/1190000014616732http://www.cppblog.com/jerryma/archive/2011/08/02/152279.html1. 内存共享映射的概念mmap的作用就是把磁盘文件的一部分直接映射到进程的内存中,那么进程就可以直接对该内存文件进行操作。mmap也设置了两种...

2021-04-17 23:58:11 6

原创 Linux系统应用编程---进程间通信(一)【管道pipe fifo】

0. 进程间通信(IPC inter process communication)的概念每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。1. 管道的工作原理2. pipe(有名管道)函数原型#include <u...

2021-04-15 23:13:40 4

原创 Linux系统应用编程 --- Linux下C进程内存布局

1. C进程下,内存是怎么布局的?C进程内存布局如下图

2021-04-15 22:06:30 6

原创 Linux系统应用编程 --- 进程原语(三)

wait & waitpdi1. 僵尸进程和孤儿进程的概念僵尸进程(1)子进程先于父进程结束。子进程结束后父进程此时并不一定立即就能帮子进程“收尸”,在这一段(子进程已经结束且父进程尚未帮其收尸)子进程就被称为僵尸进程。(2)子进程除 task_struct 和栈外其余内存空间皆已清理(3)父进程可以使用 wait 或 waitpid 以显式回收子进程的剩余待回收内存资源并且获取子进程退出状态。【父进程帮子进程收尸是要调用函数的】(4)父进程也可以不使用 wait 或者 wa

2021-04-14 23:34:26 24

原创 Linux系统应用编程 --- 进程原语(二)

exec函数1. exec函数作用用fork创建子进程后执行的是和父进程相同的程序,可以通过if判断pid的返回值让子进程执行不同的代码分支,这样设计程序不灵活。通过调用exec函数,用新程序将子进程的用户空间代码和数据替换,直接去执行新程序。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。2. execc族函数原型其实有六种以exec开头的函数,统称exec函数:#include <unistd.h> int execl(const char .

2021-04-14 22:56:36 6

原创 Linux系统应用编程 --- 进程原语(一)

进程原语一. fork函数1. 函数原型pid_t fork(void);子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。2. 以具体的程序讲解fork函数特点第一段代码#include <stdio.h>#include <sys/types.h>#include <unistd.h> int main(void){ //fork创建一个新进程 pid_t p1 = -1;

2021-04-13 23:32:18 7

原创 Linux系统应用编程 --- 虚拟地址空间的理解

操作系统会为每个进程分配0-3G的虚拟空间,3G-4G是留给内核空间的假设物理内存为2G,那个操作系统如何给每个进程分配内核空间和用户空间?1、为什么不同进程的内核空间可以共用?因为应用层是无法修改内核空间的内容的2、操作系统是怎么管理内存空间的?(1)虚拟内存映射表,按照page去管理内存的,1page = 4096bytes所以我们在malloc内存的时候,如果先malloc2000字节,在malloc 3000字节,就会分配两个page,造成内存浪费,所以应该按照409

2021-04-13 21:51:09 6

原创 Linux系统应用编程 --- ext2文件系统

参考链接:https://www.linuxidc.com/Linux/2019-08/159814.htmhttps://www.linuxidc.com/Linux/2019-08/159815.htm1. 文件系统的概念文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,.

2021-04-10 23:54:06 8

原创 Linux系统应用编程 --- 文件I/O实现输出重定向

实现输出重定向,当用C标准printf打印 时,打印到指定的output.log文件思路:1)printf默认输出到标注输出文件描述符指向的终端2)关闭标准输出文件描述符,那么新建文件的文件描述符就替代了标准输出文件描述符。#include <sys/stat.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#

2021-04-10 22:35:51 9

原创 Linux系统应用编程 --- 文件I/O

1. 文件描述符Linux系统将所有设备都当作文件来处理,而Linux用文件描述符来标识每个文件对象。文件描述符是一个非负整数,用于唯一标识计算机操作系统中打开的文件。 它描述了数据资源,以及如何访问该资源。下面这张图, 不同进程拥有自己独立的PCB,PCB是存放进程管理和控制信息数据的一个结构体,其中包含了管理文件的指针,每个进程都会默认打开三个文件,对应文件描述符为0,1,2.标准输入(standard input)的文件描述符是 0,标准输出(standard output)的文件

2021-04-08 22:50:27 9

大彩串口屏-正点原子STM32DEMO

广州大彩屏,STM32程序,用正点原子的例程移植的,他们自带的例程是Keil4的,改了很多地方。

2018-06-21

LD3320语音模块STM32

硬件基于正点原子F1开发板,控制LD3320模块,用于语音控制,程序只是给出了控制LED示范。

2018-10-04

STM驱动有刷电机源码

STM32驱动25GA370电机,PWM驱动,可以直接改引脚去用到自己的项目

2018-10-04

根文件系统

参考朱有鹏老师嵌入式视屏课程,自己制作的根文件,跟视屏里面一样的操作

2018-09-25

STM32 L298N代码

STM32控制L298N驱动电机,通过按键实现控制,是调节PWM脉宽以及正反转

2018-10-04

C语言中如何使用全局变量示例

C语言中如何使用全局变量简单示例,多文件.c中如何使用全局变量

2018-11-20

CanFestival3.10源码

从CanFestival官网下载的最新的源码,可以自己移植到工控机或者单片机

2002-10-11

F1正点原子开发板移植CanOpen源码

硬件是正点原子开发板,移植CanFestival源码,可以直接发CAN报文,亲测可用

2002-10-13

龙邱SYN7318非特定语音识别模块程序

SYN7318语音模块,代码已经移植到正点原子F1开发板,只需要简单的实验下,就可以移植到自己的项目

2018-10-28

PCB封装库---经过很多次画板检验

常见的各种接口封装包括DB9、USB内存等等、芯片封装(常见的sTM32、DSP、以及常见电源芯片)、元器件封装(0603、SOT23等等)

2018-09-27

GNU_Makecn.rar

GNU_make ,用makefile管理工程的时候,很好的参考文档,比一起学makefile更具体

2019-08-14

空空如也

空空如也

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

TA关注的人 TA的粉丝

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