自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 电力电子复习

1、直流变直流是指一种电压(或电流)的直流变为另一种电压的直流,可用直流斩波电路来实现交流变交流可以是电压或电力的变换,称做交流电力控制,也可以说是频率或相数的变换。2、晶闸管是通过对门极的控制能使其导通而不能使其关断的器件,属于半控型器件。对晶闸管电路的控制方式主要是相位控制方式,简称相控方式。晶闸管的关断通常依靠电网电压等外部条件来实现。3、全控器件的特点是,通过对门极的控制既可以使其开通又可以使其关断。此外,这些器件的开关速度普遍高于晶闸管,可用于开关频率较高的电路。

2021-12-29 21:39:11 7116

原创 学习资料Linux

1. 为什么学习Linux开发 — [野火]Linux基础与应用开发实战指南——基于i.MX6ULL系列 文档8. GPIO控制 — [野火]EBF_6ULL开发板快速使用手册 文档https://doc.embedfire.com/linux/imx6/base/zh/latest/index.html

2021-12-03 18:29:38 450

原创 56.Linux 条件变量

条件变量使用需要配合互斥量int pthread_cond_init(pthread_cond_t *cond,pthread_mutex_t *mutex);1、使用pthread_cond_wait等待条件变为真。传递给pthread_cond_wait的互斥量对条件进行保护,调用者把锁住的互斥量传递给函数。2、这个函数将线程放在等待条件的线程列表上,然后对互斥量进行解锁,这个是原子操作。当条件满足时这个函数返回,返回以后继续对互斥量加锁。int ...

2021-12-01 23:30:38 835

原创 55.Linux 高并发服务器

学习目标①了解各种服务器模型②熟悉使用select搭建并发服务器的方法③熟悉使用epoll搭建并发服务器的方法 为了提高服务器效率,服务器应能同时被多个客户端进程使用而且能处理多个用户请求。可同时处理多个客户端请求的服务器称为并发服务器,实际上,我们在生活、应用中接触到的服务器都能实现并发功能。 最基础的并发服务器为多进程并发服务器和多线程并发服务器,将从这两种服务器入手,讲解搭建并发服务器的方法。1.多进程并发服务器 在多进程...

2021-11-23 22:50:03 284

原创 54.Linux 网络编程

socket函数: #include <sys/socket.h> int socket(int domain,int type,int protocol); 创建一个套接字domain(领域) :AF_INET、AF_INET6、AF_UNIXtype: SOCK_STREAM、SOCK_DGRAMprotocol:0返回值:成功:新套接字所对应的文件描述符 失败:-1errnobin...

2021-11-21 21:49:32 1389

原创 54.Linux 网络编程

学习目标①掌握TCP/IP的基础知识②掌握嵌入式Linux基础网络编程③掌握嵌入式Linux高级网络编程④分析理解Ping源代码⑤能够独立编写客户端、服务器端的通信程序⑥能够独立编写NTP实现程序1 TCP/IP概述1.1 OSI参考模型及TCP/IP参考模型OSI参考模型,从上到下共分为7层:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。这7个协议因为复杂,没人用,但它仍是许多协议模型的基础,这种分层架构的思想在很多领域都得到了广泛使用。..

2021-11-20 00:51:56 1680

原创 53.Linux socket编程

学习目标①熟悉计算机网络体系结构②掌握socket通信流程③了解网络编程相关知识④熟练使用socket编程接口实现网络通信⑤熟悉socket本地通信Linux网络编程一般通过socket(套接字)接口实现,本章将以socket编程为主,结合计算机网络基础知识,讲解Linux系统中实现网络编程的方法。1.1 计算机网络概述 计算机网络是网络的一种,网络由若干个结点和连接这些结点的链路组成,网络中的结点可以是计算机、交换机、路由器等。 为了...

2021-11-15 23:43:23 2065

原创 52.Linux thread同步

1.pthread_mutex_t lock;//创建锁2.pthread_mutex_init;//初始化函数原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);restrict 关键字:限定指针变量,被该关键字限定的指针变量所指向的内存操作,必须由本指针完成。3.pthread_mutex_lock;.

2021-11-13 23:32:29 1533

原创 51.Linux 什么是线程?

什么是线程?①进程:一个正在运行的程序,它是资源分配的最小单位。进程中的事情需要按照一定的顺序逐个进行,那么如何让一个进程中的一些事情同时执行?②为何又出现线程?线程:有时又称轻量级进程,程序执行的最小单位,系统独立调度和分派CPU的基本单位,它是进程中的一个实体。一个进程中可以有多个线程,这些线程共享进程的所有资源,线程本身只包含一点必不可少的资源。进程出现了很多弊端,一是由于进程是资源拥有者,创建、撤销与切换存在较大的时空开销,因此需要引入轻型进程;二是由于对称多处理机(SMP)

2021-11-11 18:00:05 2500 4

原创 50.Linux 线程三 同步

Linux系统中常用实现线程同步的方式有三种,分别为互斥锁、条件变量与信号量。 下面将对这三种方式逐一进行讲解。 4.1 互斥锁 使用互斥锁实现线程同步时,系统会为共享资源添加一个称为互斥锁的标记,防止多个线程在同一时刻访问相同的共用资源。互斥锁通常也被称为互斥量(mutex),它相当于一把锁,使用互斥锁可以保证以下3点: ①原子性:如果在一个线程中设置了一个互斥锁,那么在加锁与解锁之间的操作会被锁定为一个原子操作;这些操作要么全部完成,要么一个也不执行。...

2021-11-09 15:34:55 1227

原创 49.Linux 线程 Thread

3.线程属性 使用pthread_create()函数创建线程时,可以通过传入参数attr来设置线程的属性,该参数是一个pthread_attr_t类型的结构体,在调用pthread_create()之前应先初始化该结构体。pthread_attr_t结构体的定义如下:该结构体中成员的值不能直接修改,必须使用函数进行相关操作。初始化线程属性结构体的函数为pthread_attr_init(),这个函数必须在pthread_create()之前调用,且线程终止后必须通过pthread...

2021-11-08 23:51:13 960

原创 48.Linux 线程 Thread(一)

学习目标①了解线程的定义②掌握常用的线程操作③熟练通过线程属性设置线程状态④掌握线程同步的方法从很多Linux的书籍我们都可以这样子描述进程(process)和线程(thread)的: 进程是资源管理的最小单位,线程是程序执行的最小单位。线程的本质是一个进程内部的一个控制序列,它是进程里面的东西,一个进程可以拥有一个进程或者多个进程。当进程执行fork()函数创建一个进程时,将创建出该进程的一份新副本。 这个新进程拥有自己的变量和自己的PID,它的执行几乎完全独立于父进程

2021-11-08 00:14:31 5459

原创 47.Linux 进程间通信

学习目标 ①了解进程间通信的常用方式 ②掌握使用管道实现进程间通信的方法 ③掌握使用消息队列实现进程间通信的方法 ④掌握使用信号量实现进程间通信的方法 ⑤掌握使用共享内存实现进程间通信的方法1.管道管道是一种最基本的进程通信机制,其实质是由内核管理的一个缓冲区。可以形象地认为管道的两端连接着两个需要进行通信的进程,其中一个进程进行信息输出,将数据写入管道;另一个进程进行信息输入,从管道中读取信息。管道逻辑如...

2021-11-05 00:58:37 1167

原创 27.C语言 数据结构三:队列

队列:先进先出的结构head 头部tail 尾巴#include <stdio.h>#include <stdlib.h>#define QUEUEMAX 15typedef struct kiki{ int id; char *name;}DATA;typedef struct queue{ DATA data[QUEUEMAX]; int head; int tail;}MyQueue;//...

2021-11-04 14:19:29 126

原创 26.C语言 数据结构二 : 栈

先进后出后进先出#include <stdio.h>#include <stdlib.h> #define SIZE 10typedef struct Student{ int id; char *name;}Data;//定义栈结构typedef struct stack{ Data data[SIZE];//栈数据 int top; //栈顶 }SeqStack;SeqStack *

2021-11-04 00:30:26 456

原创 25.C语言 数据结构一:链表

#include <stdio.h>#include <stdlib.h>typedef struct Person{ char *id; char *name; struct Person *next;}Node;int main(void){ Node *p1,*p2,*p3,*head,*p; p1 = (Node*)malloc(sizeof(Node)); p2 = (Node*)malloc(sizeof(N.

2021-11-03 23:43:57 358

原创 46.Linux 重定向(duplicate)复制

(duplicate)复制dup和dup2函数 int dup(int oldfd); oldfd:已有的文件描述符 返回:新文件描述符#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(int argc,...

2021-11-02 23:25:37 476

原创 45.Linux 目录操作

opendir函数根据传入的目录名打开一个目录(库函数) DIR*类似于FILE* DIR *opendir(constchar *name); 成功返回 指向该目录结构体指针失败返回NULL参数支持相对路径、绝对路径两种方式:例如:打开当前目录:①getcwd(),opendir() ②opendir(".");closedir函数关闭打开的目录int closedir(DIR *dirp);成功:0;...

2021-11-02 14:18:16 495

原创 44.Linux 管道

管道的概念: 管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。有如下特质:1.其本质是一个伪文件(实为内核缓冲区)。2.由两个文件描述符(fd[0]、fd[1])引用,一个表示读端,一个表示写段。3.规定数据从管道的写端流入管道,从读端流出。管道的原理:管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。管道的局限性:①数据不能进程自己写,自己读。②管道中数据不可反复读取。一旦读走,管道中不再...

2021-11-02 13:19:03 488

原创 24.C语言 结构体与链表

结构体变量分为数据域和指针域结构体变量和数组变量一样都是由大到小开始分配存储单元0FFFF Node1 1 NULL 0FFF0 Node2 2 NULL 0FF00 Node3 3 NULL

2021-11-01 12:02:52 1061

原创 43.Linux 消息队列

msgget(messageget)msgctl (messagecontorl)msgsnd (messagesend) msgrcv (messagereceive)(1)msgget(创建消息队列)所需头文件 #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> 函数原型 int msgget(k...

2021-10-31 17:41:33 171

原创 42.Linux 进程控制

fork函数 创建一个子进程。头文件: #include <sys/types.h>#include <unistd.h>函数原型: pid_t fork(void);返回值:RETURN VALUE On success, the PID of the child process is returned in the parent, and 0 is returned i...

2021-10-30 20:00:05 373

原创 23.C语言 学生系统管理

一、实验目的1.掌握链表的基本结构和关系。2.掌握C指针和结构体的使用方法,掌握链表编程。链表知识点讲解:链表的遍历:有·两种链表,第一种是第一个节点数据部分为空。另一种是第一个节点就存放数据。两种方式的编程是有点不同的: 第一种方式,不管怎样对链表进行增加修改和删除,head的位置都不会变化,head的值只需要传入到函数中,不需要返回,不需要返回。 第二种方式,如果数据插入到第一个节点,head存储的地址会发生变化。这种方式的链表在定义...

2021-10-30 17:43:38 306

原创 41.Linux 共享内存

IPC和文件IO函数的比较文件I/O IPC open Msg_get Shm_get Sem_get read write msgsnd msgrecv shmat shmdt semop close msgctrl shmctrl s...

2021-10-29 23:13:09 300

原创 40.Linux 信号通信

进程间不能通信,只有通过管道才能实现两个进程之间的通信。杀死进程的命令:kill 9 pid号信号通信,其实就是内核向用户空间进程发送信号,只有内核才能发信号,用户空间进程不能发送信号。内核可以发送多少种信号?64kill -l命令:kill -9 pid信号通信的框架-信号的发送(发送信号进程):killraisealarm-信号的接收(接收信号进程):pause(),sleep while(1)-信号的处理(接收信号进程):signal...

2021-10-29 09:51:24 428

原创 39.Linux 有名管道

因为无名管道只能实现父子进程或者是有亲缘关系的进程之间。正由于这无名管道的缺点,对无名管道进行改进:有名管道。所谓的有名,即文件系统中存在这个一样的文件节点,每一个文件节点都有一个inode号而且这是一个·特殊的文件类型:p管道类型。1.创建这个文件节点,不可以通过open函数,open函数只能创建普通文件,不能创建特殊文件(管道-mkfifo,套接字-socket,字符设备文件-mknod,块设备文件-mknod,符号链接文件-ln -s,目录文件mkdir)2.管道文件只有inode号,

2021-10-29 00:16:41 270

原创 38.Linux 无名管道

通信对象不一样,通信方式不一样1、管道:一种是无名管道、一种是有名管道在文件系统中无文件结点无名管道通信原理:管道文件是一个特殊的文件,是由队列来实现的。在文件IO中创建一个文件或打开一个文件是由open函数来实现的,它不能创建管道文件。只能用pipe函数来创建管道。文件open——只能创建或打开普通文件,它不能创建管道文件。只能用pipe函数来创建管道。创建管道——pipe函数形式:int pipe(int fd[2]);#include <u..

2021-10-28 23:47:51 138

原创 37.Linux 进程间的通信

一:进程通信概述1.什么是进程间通信? 什么是线程间通信?进程间通信:在用户空间实现进程间通信是不可能的,通过Linux内核通信#include <unistd.h>#include <stdio.h>#include <sys/types.h>#include <stdlib.h>int main(){ pid_t pid; int process_inter=0; pid = fork(); if(pid==0)..

2021-10-28 21:26:23 114

原创 22.C语言 链表

目录链表的概念单链表的实现1 链表的概念引例1建立学生信息表假设需要建立一个学生信息表,学生人数无法估计,而且学生人数经常发生变化,该如何实现?单链表:线性表的链接存储结构。 存储思想:用一组任意的存储单元存放线性表的元素。 不连续、分散分布单链表*单链表存储特点:1.逻辑次序和物理次序不一定相同。2.元素之间的逻辑关系用指针表示。举例:...

2021-10-28 17:46:51 1385

原创 21.C语言 单链表

链表中数据元素的构成每个元素本身由两部分组成:本身的信息,称为“数据域”; 指向直接后继的指针,称为“指针域”。图2 结点的构成这两部分信息组成数据元素的存储结构,称之为“结点”(node(结点))。n个结点通过指针域相互链接,组成一个链表。图3 含有n个结点的链表图 3 中,由于每个结点中只包含一个指针域,生成的链表又被称为线性链表或单链表。链表中存放的不是基本数据类型,需要用结构体实现自定义:struct Node{ int data;...

2021-10-28 12:32:56 541

原创 20.C语言 如何重定义typede

typede:为已有的数据类型改名typedef int * IP;IP A,B; ----------------->int *A,int *B;struct node_st{ int i; float f; };typedef struct node_st NODE;NODE a;------------------------------------------->struct node_...

2021-10-27 15:57:20 171

原创 19.C语言 动态内存分配---malloc和realloc的使用

malloc ralloc reallocfree原则:谁申请,谁释放(防止内存泄漏)freemalloc函数函数原型void *malloc(size_t size);返回值:成功:返回一个非空指针失败:返回NULL#include <stdio.h>#include <malloc.h>#include <stdlib.h>int main(){ int *p =NULL; ...

2021-10-25 13:32:26 327

原创 18.C语言 构造类型

结构体的描述及嵌套结构体1.产生及意义2.类型描述struct结构体名{ 数据类型 成员1; 数据类型 成员2; ...............};3.嵌套定义struct birthday_st{ int year; int month; int day;};struct student_st{ int id; char...

2021-10-24 21:17:09 1090

原创 36.Linux系统编程之总述

应用层-----------------------------------------------------------内核-------------------------------------------------------------硬件层为什么要学习Linux下高级编程? 应用层课程的学习:不知道Linux内核的强大功能 Linux下高级编程课程的学习:感知到内核的存在,内核的强大功能-文件管理-进程管理-设备管理...

2021-10-23 23:59:38 232

原创 17.C语言 常见面试题

嵌入式工程师必备0x10到题目宏定义1.用预处理指令#define声明一个常数,用于表明1年中有多少秒#define 宏名 宏体宏名:大写字母表示#define SECOND_OF_YEAR (365*24*3600)int的常量数据声明修饰符的使用总结类型修饰符auto、register、static、const、extern、volatile对内存资源存放位置的限定资源属性中位置的限定修饰符的使用总结关键字static的作用..

2021-10-23 21:44:32 401

原创 16.C语言 函数的使用

函数的概述函数就是一堆代码的合集,用一个标签去描述它传入参数值传递地址传递连续空间的传递1.数组数组名-----数组标签实参:int abc[10];fun(abc);形参:void fun(int *p) void fun(int a[10])2.结构体结构体变量struct a{int a;int b;int c};struct a buf;实参:fun(buf); ...

2021-10-23 20:35:33 91

原创 15.C语言 内存分布图

a为局部变量时a的地址是000000000061FE4Cmain的地址是0000000000401550a为全局变量时内核空间 应用程序不能访问------------------------ 3G栈空间 局部变量 RW------------------------运行时的堆空间 malloc------------------------全局数据...

2021-10-22 23:32:41 238

原创 35.Linux lseek详解

1、lseek函数介绍(1)文件指针:当我们要对一个文件进行读写时,一定需要先打开文件,所以我们读写的所有文件都是动态文件。动态文件在内存中的形态就是文件流的形式。(2)文件流很长,里面有很多个字节。那我们当前正在操作的是哪个位置?GUI模式下的软件用光标来识别这个当前正在操作的位置,这个给人看的(3)在动态文件中,我们会通过文件指针来表征这个正在操作的位置。所谓文件指针,就是我们文件管理表这个结构体里面的一个指针。所以文件指针其实是vnode中的一个元素。这个指针表示当前我们正在操作文

2021-10-21 23:20:04 1352

原创 34.Linux link和ulink隐式回收

给文件创建硬链接sudo ln a.c a.hard下面使用link函数创建硬链接的功能int link(const char *oldpath,const char *newpath);实现mv的功能:#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(int argc,char *argv[]){ link(argv[1],ar.

2021-10-21 15:48:05 554

原创 33.Linux 文件读写的一些细节

1.errno和perror(1)errno就是errornumber,意思就是错误号码。Linux系统中对各种常见错误做了个编号,当函数执行错误时,函数就会返回一个特点的errno编号来告诉我们这个函数到底哪里出错了。(2)errno是由OS来维护的一个全局变量,任何OS内部函数都可以通过设置errno来告诉上层调用者究竟刚才发送了一个什么错误。(3)errno本身实质是一个int类型的数字,每个数字编号对应一种错误。当我们只看errno时只能得到一个错误编号数字(譬如-37),不适合人看

2021-10-21 11:54:04 141

空空如也

空空如也

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

TA关注的人

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