自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 进程间通信

进程间通信

2023-01-29 16:30:20 590

原创 进程大杂烩

进程的创建,子进程父进程,exec族函数,ststem函数,popen函数

2023-01-17 16:12:56 651

原创 进程相关概念

进程相关知识

2023-01-11 16:29:33 302

原创 蓝桥杯嵌入式模板构建_rtc

1、cube配置2、代码//存放获取到的时间值RTC_TimeTypeDef H_M_S_Time;RTC_DateTypeDef Y_M_D_Date;HAL_RTC_GetTime(&hrtc, &H_M_S_Time, RTC_FORMAT_BIN);//获取时间,注意这两行函数的区别,不要用成一样了,不然时间不动HAL_RTC_GetDate(&hrtc, &Y_M_D_Date, RTC_FORMAT_BIN);//注意这两行函数,一个是Time,

2022-01-28 20:34:26 493

原创 蓝桥杯嵌入式模板构建_tim

1、基本定时器TIM6配置及说明(需要中断)代码部分:TIM6_Init(); //初始化定时器不意味着开启了中断,需要下面代码开启中断HAL_TIM_Base_Start_IT(&htim6);//每100ms触发一次中断void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//溢出事件(更新事件)回调函数{ if (htim->Instance == TIM6) { //想干啥干啥 }}忘记配

2022-01-27 19:40:54 718

原创 蓝桥杯嵌入式模板构建_adc

1.引脚配置两个引脚一样的配置2、代码//实现读取ADC值的函数uint16_t Get_ADC1(){ uint16_t adc; HAL_ADC_Start(&hadc1); adc = HAL_ADC_GetValue(&hadc1); return adc;}uint16_t Get_ADC2(){ uint16_t adc; HAL_ADC_Start(&hadc2); adc = HAL_ADC_GetValue(&

2022-01-26 16:38:50 550

原创 蓝桥杯嵌入式模板构建___IIC

24c02、100k可编程电阻

2022-01-25 17:29:28 611

原创 蓝桥杯嵌入式模板构建_usart

串口的简单使用,滴答定时器优先级与串口优先级,滴答优先级所在的位置,怎么调整优先级

2022-01-24 23:30:41 1020

原创 蓝桥杯嵌入式模板构建_led_key

1.对照原理图,将key和led的各个引脚进行配置key和led皆为No pull-up and No pull-down2.代码编写2.1 LED显示函数void Led_Disp(unsigned char which){ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8 |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12,

2022-01-22 17:53:48 360

原创 蓝桥杯嵌入式模板构建_Start

1.Pinout & Configuration1.1 配置时钟相关基准时钟:System Core->SYS->Timebase Source->SysTick(滴答定时器)1.2中断分组System Core->NVIC->Priority Group->4 bit for pre-emption 0 bit for subpriority(16级抢占优先级,0级响应优先级)1.3RCC2.Clock & Configuration蓝

2022-01-22 16:24:30 376

原创 linux安装软件之./configure、make、make install 命令含义

这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤一、基本信息1、./configure 是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。2、make 是用来编译的,它从Makefile中读取指令,然后编译。3、make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。注意:AUTOMAKE和AUTOCONF是非常有用的用来发布C程序的东西。二、详细解释1、con

2021-12-24 19:55:52 1323

原创 安卓学习---布局和页面的关系

1、布局的种类常用RelativeLayout和LinearLayout2、关系里面的一些代码只是它的参数layout里面是控制布局效果:

2021-09-06 18:48:19 93

原创 安卓学习---安卓工程结构介绍

**src:**存放Java代码,有包,有文件**gen:**存放自动生成的文件,关心的是R.java,程序的页面、按键、文本**Android4.4、Android Private Libraries:**存放安卓开发的一些库,供开发者使用**Asserts:**存放一些资源,配置文件、图片**bin:**编译后回生成的一些文件,包括libs:依赖库res:drawable存放app程序要用到的一些图片layout:存放布局文件的文件夹一般一个activity(安卓页面)对应一个布

2021-09-06 13:02:24 74

原创 安卓学习---安卓工程构建和第一个APP运行

1、构建程序new Android Application:最后点Finish就构建出一个安卓程序,跳出一系列文件夹:2、启动程序会弹出“没有目标的运行设备发现,是否添加新的安卓设备”,一般自带的模拟器较慢,我们用夜神模拟器配置夜神模拟器:首先打开你的cmd,输入adb然后回车,如果返回不认识,就需要添加环境变量添加环境变量:首先打开eclipse的安装位置,找到adb的位置,然后复制路径(下图是我的位置)把adb的路径复制进去就行下一步就是让夜神模拟器和安

2021-09-06 12:30:01 143

原创 Java学习---泛型(不完整)

1、泛型简介 JDK1.5以后引入泛型可以在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的。泛型的原理就是”类型的参数化“,即把类型看做参数。也就是说把所要操作的数据类型看做参数,就像方法的形式参数是运行时传递的值的占位符一样。简单的说,类型变量扮演的角色就如同一个参数,它提供给编译器用来类型检查的信息。泛型可以提高代码的扩展性和重用性。示例:public class GenClass <T>{ private T obj; public GenClass (T o

2021-09-02 16:04:55 65

原创 Java学习---异常(概念、分类、异常处理机制、(try、catch、finally)、throw和throws、自定义异常)

1、异常的概念(1)什么是异常所谓异常是指在程序运行的过程中发生的一些不正常的事情(如:除0溢出,数组下标越界,所要读取的文件不存在)(2)异常导致的后果Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常类对象封装了异常事件的信息,并将其被提交给Java运行时系统,这个过程称为抛出异常,不处理的话会直接导致程序直接中断。(3)如何防止程序中断设计良好地程序应该在程序异常发生时提供处理这些异常的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。2、Java异常处理

2021-09-01 12:04:03 120

原创 Java学习---多态(概念、对象上下转型、小应用)

1、多态的概念多态性是指同一个操作作用于某一类对象,可以有不同的解释,产生不同的执行结果。多态存在的三个必要条件1.需要存在继承的和实现关系2.同样的方法调用而执行不同的操作、运行不同的代码(重写)3.在运行时父类或者接口的引用变量可以引用其子类的对象多态的作用:1.多态通过分离做什么和怎么做,总一个角度将接口和实现进行分离2.多态消除了类型之间的耦合关系3.多态的存在提高了程序的拓展性和后期的可维护性代码示例:class animal{ public String name; p

2021-08-31 17:41:30 96

原创 Java学习---内部类(成员内部类、匿名内部类)

1、内部类(1)概念所谓内部类(Inner Class)。顾名思义,就是将一个类定义在另一个类的内部。内部的类称之为内部类public class Outer{ class Inner{ //省略 }}(2)特点内部类可以很好的实现隐藏,可以使用protected private修饰符内部类可以直接访问外部类的所有成员,包括私有的成员外部类不能直接访问内部类的成员,必须首先建立内部类的对象才能访问2、成员内部类即应用成员内部类属于外部类的示例成员,成员内部类可以有public

2021-08-31 12:22:22 86 1

原创 Java学习---抽象类和接口

1、抽象类Java中可以定义没有方法体的方法,该方法由子类来具体实现该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类(1) 抽象方法的特点a.只有方法头没有方法体的方法称为抽象方法b.抽象方法用abstract来修饰c.抽象方法代表一种不确定的操作或行为d.抽象方法不能被调用(2)抽象类的特点定义中含有抽象方法的类叫做抽象类抽象类用abstract来修饰抽象类代表一种抽象的对象类型抽象类不能被实例化抽象类中可以有具体方法,可以没有抽象方法//A是一个抽象类

2021-08-30 17:46:14 65

原创 Java学习---继承(概念、super关键字、方法重写、object类常见方法)

1、继承的概念和实现生活中,继承的概念随处可见继承需要符合的关系:is a;父类更抽象,子类更具体继承背后的思想就是 基于已存在的类来构建新类当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求约定:从其他类导出的类叫做子类。被导出的类叫做父类在Java中,除了object类之外,所有类都是子类,都只有唯一的父类继承在面向对象中不可或缺创建一个类时,总是在继承继承的意义:代码重用、体现不同抽象层次父子类关系:父类更抽象,更一般;子类更具体,更特殊

2021-08-29 21:58:02 172

原创 Java学习---封装(访问修饰符、构造方法、This关键字、static关键字、包)

1、封装是什么将东西包在一起。然后以新的完整形式呈现出来将方法和字段一起包装到一个单元中,单元以类的形式实现信息隐藏,隐藏对象的实现细节,不让外部直接访问到将数据和方法包装进类中,加上具体实现的隐藏(访问修饰符),共同被称作为封装,其结果是一个同时带有特征和行为的数据类型2、类的封装和使用示例class student { int age; String name; double score; void introduce(){ //方法 = 函数 //不需

2021-08-28 22:17:51 639 1

原创 Java学习---Java的数据类型、选择、循环、数组、函数、输入类Scanner

1、类型Java里面的类型和C语言中的差不多2、输出与C语言比较int a, b, c;a = 10;b = 10;c = a+b;System.out.println("a="+a); //java//printf("a=%d", a); //c ************************************************************System.out.println("a="+a + ",b="+b + ",c="+c)

2021-08-28 15:34:45 62

原创 Java学习---开发环境搭建并运行hello world

学习Java我们用eclipse来作为集成环境1、首先我们来new一个java project2、创建完毕,打开工程并创建class类3、Java的main函数和C语言不一样我们可以输入一个main后,再按下 “Alt+/”补全3、输出“hello world”...

2021-08-28 12:40:05 93

原创 Linux驱动---内核定时器

1、Linux内核定时器timer_list内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制2、timer_list 4.15之前的版本void callback(unsigned long arg)struct timer_list { /* * A1l fields that change during normal runtime grouped to the * same cacheline */ struct list_head ent

2021-08-27 16:16:54 180

原创 Linux驱动---platform进阶

1、platform架构硬件资源是在plat from_device里面用u32 num_resources(资源个数)和struct resource *resource(资源)来表示2、增加硬件信息flags:start和end:如果这个寄存器占四个地址,那么start:开始地址end:最后一个(开始地址+0x3)3、举例这是内核里面数组的一种赋值方式,[0]{} 表示数组第一个成员,里面的元素用.来赋值4、示例代码device:#include <linux/

2021-08-27 10:38:08 183

原创 Linux驱动---platform总线

1、什么是总线SOC上:数据总线、地址总线、控制总线物理总线:USB、I2C、SPI虚拟总线-Linux内核中:设备树依赖Platform2、为什么引入platform为了让硬件信息和驱动程序分离举例:串口驱动、网口驱动设备树3、内核如果表示总线每一个总线必须要定义有个叫bus_type的这样有个结构体变量,比如platform就要定义一个叫platform_bus_type这样一个结构体变量bus_register用来注册一个总线4、platform架构platform总线要

2021-08-25 20:33:10 184

原创 Linux驱动---信号驱动IO-sigio

1、Linux中的信号2、处理方式忽略:接收到信号后不做任何反应。捕获:用自定义的信号处理函数来执行特定的动作。默认:接收到信号后按系统默认的行为处理该信号。这是多数应用采取的处理方式。3、信号注册#include <signal.h>typedef void(*sighandler_t)(int);//参数的信号sighandler_t signal(int signum, sighandler_t handler);4、信号驱动IO工作过程fasync方法

2021-08-24 17:30:26 747

原创 Linux驱动---字符设备poll方法的实现

1、多路复用机制Select、poll、epollIO多路复用就是通过一种机制,一个进程就可以监视多个描述符,一旦某个描述符就位(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作select、poll、epoll是Linux API提供的IO复用方式2、API原型selectselect系统调用是用来让我们的程序监视多个文件句柄的状态变化的select函数监视的文件描述符分3类:writefds、readfds、exceptfds调用后select函数会阻塞,直到有描述符就绪(有数

2021-08-24 16:02:54 441

原创 Linux驱动---等待队列

1、等待队列waitqueue(等待队列)就是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好的时候,可以通过调用add_wait_queue()函数把进程添加到waitqueue中,然后切换到其他进程继续执行。当资源准备好,由资源提供方通过调用wake_up()函数来唤醒等待的进程2、定义定义头文件#include <linux/wait.h>定义实例wait_queue_head_t wq;init_waitqueue_head(&wq);3、阻塞接口

2021-08-23 17:12:52 573

原创 Linux驱动---IO模型

1、什么是IO在计算机系统中I/O就是输入和输出的意思,只要具有输入输出类型的交互系统都可以认为是I/O系统也可以说I/O是整个操作系统数据交换与人机交互的通道针对不同的操作对象,可以划分为磁盘I/O模型,网络I/O模型,内存映射I/O,Direct I/O,数据库等2、那么数据被Input到哪,Output到哪呢?Input(输入)数据到内存中,Output(输出)数据到IO设备(磁盘、网络等需要与内存进行数据交互的设备)中3、IO重要性4、五种IO模型阻塞式IO非阻塞式IOI/

2021-08-23 15:53:08 124

原创 Linux驱动---同步机制的总结

自旋锁和互斥体使用场合信号量和互斥体

2021-08-23 11:28:01 73

原创 Linux驱动---自旋锁死锁

1、自旋锁的死锁的两种情况(1)拥有自旋锁的进程A在内核态阻塞了,内核调度B进程,碰巧B进程也要获得自旋锁,此时B只能自旋转。而此时抢占已经关闭,(在单核条件下)不会调度A进程了,B永远自旋,产生死锁(2)进程A拥有自旋锁,中断到来,CPU执行中断函数,中断处理函数,中断处理函数需要获得自旋锁,访问共享资源,此时无法获得锁,只能自旋,获得死锁。2、死锁举例...

2021-08-22 17:28:04 767

原创 Linux驱动---自旋锁

1、概念内核当发生访问资源冲突的时候,可以有两种锁的解决方案选择:一个是原地等待,一个是挂起当前进程,调度其他进程执行(睡眠)Spinlock是内核中提供的一种比较常见的锁机制,自旋锁的“原地等待”的方式解决资源冲突的,即:一个线程获取了一个自旋锁后,另外一个线程期望获取该自旋锁但获取不到 ,自能够原地“打转”(忙等待)自旋锁的优点:自旋锁不会使线程状态发生切换,一直处于用户态,即线程一直都是active的;不会使线程进入阻塞状态,减少不必要的上下文切换,执行速度快。非自旋锁在获取不到锁的时

2021-08-22 17:02:14 295

原创 Linux驱动---信号量

1、信号量概念信号量又称为信号灯它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。2、Linux下几种的信号量3、核心操作·P·如果有一个任务想要获得已经被占用的信号量时,信号量会将其放入一个等待队列然后让其睡眠·V·当持有信号量的进程将信号释放后,处于等待队列中的一个任务将被唤醒(因为队列中可能不止一个任务),并让其获得信号量。4、初始化#include <linux/se

2021-08-22 15:20:06 73

原创 Linux驱动---内核互斥锁

1、互斥体概述互斥概念:只能有一个人使用信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,Muter用于互斥操作。mutex的语义相对于信号量要简单轻便一些,在锁争用激烈的测试场景下,Mutex比信号量执行速度更快,可拓展性更好,另外Mutex数据结构的定义比信号量小2、Mutex(互斥体)的使用注意事项·同一时刻只有一个线程可以持有Mutex·只有锁持有着可以解锁,不能在一个进程中持有Mutex,在另外一个进程中释放它·不允许递归的加锁和解锁·当进程持有Mutex时,

2021-08-21 17:13:42 836

原创 Linux驱动---原子操作

概念原子操作是指不被打断的操作,即它是最小的执行单位最简单的原子操作就是一条条的汇编指令(不包括一些伪指令,伪指令会被汇编器解释成多条汇编指令)定义在Linux中原子操作对应的数据结构为atomic_t,定义如下:typedef struct{ int counter;}atomic_t;常用操作1赋值操作#define atomic_set(v,i) (((v)->counter) = (i))读操作#define atomic_read(v,i) (*(volatil

2021-08-21 15:50:38 410

原创 Linux驱动---一个有问题的并发控制

举例要求:1、多个进程打开同一个设备的情况2、如果设备忙(有进程打开)返回-EBUSY3、不用互斥机制用flag来实现,分析一下可能出现的问题实例代码:用flag来区别是否忙,好像看起可行,但是有问题...

2021-08-20 17:35:13 47

原创 Linux驱动---并发机制

1、并发多个执行单元同时进行或多个执行单元微观串行执行,宏观并行执行。微观串行,宏观并行:理解成把时间轴放大以后,各个任务是串行执行,然后每个任务执行一定的时间片,执行完后由调度系统调度到另一个任务去执行。因为CPU的速度很快,所以宏观人看来是并行执行。2、 竞态并发的执行单元对共享资源(硬件资源和软件上的全局变量)的访问而导致的竞态状态3、临界资源临界资源多个进程访问的资源临界区多个进程访问的代码段4、并发场合并发场合1单CPU之间进程间的并发时间片轮转,调度进程。如:A

2021-08-20 17:12:56 167

原创 Linux驱动---如何同时支持多个次设备

1、原理一个驱动要支持两个次设备,两个次设备之间比较类似(例如com0、com1),区别就是地址不同。所以我们去操作这些不同的次设备时,去访问不同的基地址就行,但是我们的read、write等函数没有关于次设备的信息(inode),通过其他参数传递信息也不合适,所以我们把设备间有区别的信息放在file参数里面ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);在open里面怎么区别不同设备呢?open里面两个参数,i.

2021-08-19 20:50:23 2083

原创 Linux驱动---进程、文件描述符、file、inode、设备号关系

1、文件、inode每创建一个文件,都有一个inode;可以通过inode找到设备号,然后找到cdv;驱动只有一份,存在多个次设备号的时候,得由驱动来区分不同的次设备,怎么区别呢?无论是哪个次设备,都要通过file_operations里面的open来打开int (*open) (struct inode *, struct file *);open会传递一个inode参数,所以驱动可以据此分辨不同次设备2、进程与文件描述符当我们的进程去打开一个文件的时候,内核是怎么来维护这个操作的呢l

2021-08-19 13:15:15 898

空空如也

空空如也

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

TA关注的人

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