自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(119)
  • 资源 (2)
  • 收藏
  • 关注

原创 STM32F407无法正常使用PH10的外部中断功能

这里提到了单独配置PH10/PI10不能成功是能两者的外部中断。必须同时打开PH10和PH2,或者PI10和PI2.我在裸机使用STM32F407做一些开发需求时,发现。正确使能了PH10管脚后,无法触发外部中断。

2024-02-18 10:52:09 433 1

转载 Flash,ROM,RAM,EEPROM等区别和包含关系

Flash和EEPROM区别差异及关系解析-电子发烧友网EEPROM和flash的区别_yuanlulu的博客-CSDN博客_eeprom和flash的区别ROM, FLASH和RAM的区别 - 知乎

2022-10-14 14:23:46 327

转载 RT-Thread的INIT_xxx_EXPORT 宏详解

【代码】RT-Thread的INIT_xxx_EXPORT 宏详解。

2022-09-24 10:12:27 1371 1

原创 指针作为函数形参

【代码】指针作为函数形参。

2022-09-24 10:07:14 1316

原创 anaconda安装pyqt5和pyqt-tools,并配置

1、安装pyqt5打开anaconda环境Anaconda prompt载入你使用的环境conda info --envs查看环境activate 环境名进入环境pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5安装pyqtpip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5-tools 安装pyqt-tools

2022-01-03 14:47:11 9596

原创 win10环境下anaconda安装yolov5环境

1 创建新的虚拟环境在打开Anaconda Prompt,此时应该是在(base)环境下,直接输入conda create -n 环境名 python=X.X进入环境activate 环境名2 安装pytorch直接进入pytorch官网根据自己的电脑安装3下载Yolov5在https://github.com/ultralytics/yolov5上下载,在Anaconda Prompt下,进入该yolov5代码路径,输入pip install ..

2021-12-29 16:54:42 2863 1

转载 C/C++中的volatile关键字

为什么使用volatile ?C/C++中的 volatile 关键字 和const对应,用来修饰变量,通常用于建立语言级别的memory barrier。volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统,硬件或者其他线程等。举例说明遇到这个关键字声明的变量, 编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。声明时语法:int volatile vInt; 当要求使用 volatile 声明的变量的值的.

2021-09-28 19:35:29 202

原创 字母和数字的ASCII码应用

有时候在做有关字符的算法题经常出现字母和数字的转换得到的简便方法。#include <stdio.h>int main(void) { char a = 'a'; char b = 'A'; char c = '0'; printf("%d/n%d",a-b,b-c); return 0; }//输出3217...

2021-09-26 17:29:34 274

原创 IP地址的主机号和网络号

我们⼀般⽤ IP 地址给设备进⾏编号,对于 IPv4 协议, IP 地址共 32 位,分成了四段,每段是 8 位。只有⼀个单纯的 IP 地址虽然做到了区分设备,但是寻址起来就特别麻烦,全世界那么多台设备,难道⼀个⼀个去匹配?这显然不科学。因此,需要将 IP 地址分成两种意义:⼀个是⽹络号,负责标识该 IP 地址是属于哪个⼦⽹的;⼀个是主机号,负责标识同⼀⼦⽹下的不同主机;怎么分的呢?这需要配合⼦⽹掩码才能算出 IP 地址 的⽹络号和主机号。那么在寻址的过程中,先匹配到相同的⽹络号,才会去找对

2021-09-25 11:38:29 4120

原创 多线程——线程的退出

一般来说,一个线程的退出,有多种方式:1.return方式/exit/_exit2.利用pthread_exit退出3.利用phread_cancel退出以下几种方式均可以让线程退出,但是相互间也是有区别的,下面通过实例来演示。pthread_exit函数用于实现线程退出头文件#include<pthread.h>函数原型void pthread_exit(void *retval);无返回值参数列表void *retval:返回的参数NULL...

2021-09-24 11:23:00 4095

原创 I/O输入输出——I/O设备(块设备与字符设备)

从设备两个字我们应该了解它们属于操作系统的哪个部分,和什么部分交互,以及有什么性质和特征。块设备是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。这些数据片就称作块。最常见的块设备是硬盘,除此以外,还有软盘驱动器、CD-ROM驱动器和闪存等等许多其他块设备。注意,它们都是以安装文件系统的方式使用的——这也是块设备的一般访问方式。字符设备另一种基本的设备类型是字符设备。是一个顺序的数据

2021-09-23 17:25:13 1442

原创 空指针和野指针

空指针未初始化的指针或者初始化为0的指针int *ptr_1 = 0;int *ptr_2 = NULL;空指针使用*ptr 会报错。printf("%d\n",*p)野指针区别于空指针,野指针指向内存,该内存不可用,并且危险。形成原因指针未初始化任何指针变量被刚创建时不会被自动初始化为NULL指针,它的缺省值是随机的。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。char* p = NULL; char* s

2021-09-23 14:36:49 146

原创 strcpy与memcpy

memcpy#include <string.h>void *memcpy(void *dst,const void *src,unsigned int len){ if((NULL==dst)||(NULL==src)) return NULL; char *Strdst = (char *)dst; while(len--)*dst++=*src++; return Strd

2021-09-23 13:54:44 2249

原创 内存、RAM、ROM、Cache的关系

1、内存内存在电脑中起着举足轻重的作用。内存一般采用半导体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。2、RAMRAM:随机存取存储器(random access memory),又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。我们通常购买

2021-09-23 09:55:09 22912

转载 实模式和保护模式

在学习操作系统时,出现了实模式或者保护模式的概念。我不是很清楚。历史发展 从80386开始,CPU有三种工作模式:实模式、保护模式和虚拟8086模式。80286开始的CPU引入保护模式,实际上,实模式概念是在保护模式推出之后为了区别保护模式之前的8086CPU工作模式才有的,在8086时代CPU工作模式只有一种,自然没有实模式之说。实模式有着先天的缺陷(下文详述),但出于向上兼容的考虑,现代CPU仍然保持着对16位操纵模式的兼容。 所谓工作模式,是指CPU的寻址方式、寄存器大...

2021-09-23 09:45:26 4151 1

转载 typedef 和 #define

概述typedef 为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。typedef 本身是一种存储类的关键字,与 auto、extern、static、register 等关键字不能出现在同一个表达式中。作用及用法typedef的用法使用 typedef 定义新类型的方法(步骤):在传统的变量声明表达式里,用(新的)类型名替换变量名,然后把关键字 typedef 加在该语句的开头就可以了。

2021-09-22 14:56:16 531

原创 自旋锁和互斥锁

背景我们知道互斥锁的概念经常和 进程(同步)通信 和 线程同步 等联系起来。自旋锁常常在内核同步的内容中。实现原理:在实现机制上,互斥锁属于sleep-waiting(睡眠等待)类型的锁。自旋锁则不然,它属于busy-waiting(忙等待)类型的锁。例如在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在A和 B上。我们从线程来了解。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被线程B所持有,那么线程A就会被阻塞 (blo

2021-09-21 17:36:37 379

转载 Linux——虚拟文件系统

组成在Linux组成中我们知道,Linux内核可以分为 进程管理 内存管理 网络接口 设备驱动程序 以及 虚拟文件系统。背景和定义“一切皆是文件”是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。而虚拟文件系统正是实现上述两点 Linux 特性的关键所在。虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux...

2021-09-20 23:41:34 584

原创 Linux系统——组成与结构

结构图这是我在不同的文章看到的不同的形式,实际上只是侧重点不同。左图是分为用户空间 和 内核空间 ,用户空间有应用程序 和 glibc。 内核空间 包括 内核 和 系统调用。右图是应用软件,shell——用户界面的意思,提供了用户与内核进行交互操作的一种接口;系统调用,库函数,以及内核。Linux内核的结构都基本是这个形式内核包括,进程管理,内存管理,文件系统——文件系统有虚拟文件系统,网络接口,以及设备驱动程序——这个模块在更底层,访问硬件设备。每个部分都可以自行搜索,..

2021-09-17 15:41:43 124

原创 C++查询变量类型

#include<iostream>#include<typeinfo>using namespace std;int main(){ char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char* str5 = "abc"; const char* str6 = "abc...

2021-09-17 14:50:32 354

原创 多线程——条件变量的概念和实现

概念条件变量,也称条件锁,是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:1)一个线程等待"条件变量的条件成立"而挂起;2)另一个线程使"条件成立"(给出条件成立信号)条件的检测是在互斥锁的保护下进行的如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁。如果另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,重新获得互斥锁,重新评价条件。如果两进程共享可读写的内存,条件变量可以被用来实现这两进程间的线程同步函数API

2021-09-16 17:37:31 1248

原创 多线程——join与detach区别及代码实例

什么是分离和非分离用来决定一个线程以什么方式来终止自己。非分离:线程结束之后,需要主线程调用pthread_join()回收资源分离:一个线程结束时就立即释放它的所占有的所有系统资源pthread_join 的概念:pthread_join函数主要用来获得另一个线程的终止状态并且释放该线程所占的资源。当调用pthread_join()时,当前线程会处于阻塞状态,直到被调用的线程结束后,当前线程才会重新开始执行。当pthread_join()函数返回后,被调用线程才算真正意义上的结

2021-09-16 16:41:00 552

原创 多线程——状态

多线程的生命周期有四种状态就绪线程能够运行,但是在等待CPU分配,如时间片,和进程类似运行线程正在运行,在多核系统中,可能同时有多个线程在运行阻塞线程在等待CPU以外的其他条件,如内存资源。终止线程从启动函数中返回,或者调用pthread_exit函数,或者被取消进入阻塞阻塞不管是进程还是线程都是比其他状态要理解更多一点的概念线程运行过程中,可能由于各种原因进入阻塞状态:a.线程通过调用sleep方法进入睡眠状态;b.线程调用一个I/O上被阻塞的操作,即该

2021-09-16 12:02:06 99

原创 多线程——概念

什么是线程线程又称轻量级进程,是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位。主要有以下特点1)线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源2)与同属一个进程的其它线程共享进程所拥有的全部资源3)同一进程中的多个线程之间可以并发执行4)线程间可以进行各种操作,如创建,取消,分离等等举个例子CPU是计算机的核心,承担所有的计算任务。我们把它比作一座工厂,它的电力是有限的,工厂里有生产不同产品的车间。每个运行的车间就相当于一个

2021-09-16 11:54:20 81

原创 github的入门

教程工具

2021-09-14 14:48:57 72

原创 vscode插件分享

这里

2021-09-14 14:19:10 64

转载 deque与vector的区别

概念deque与vector非常相似。它也采用动态数组管理元素,提供随机存取,有着和vector几乎一样的接口。不同的是deque的动态数组头尾都开放,因此能在头尾两端进行快速安插和删除。deque通常实作为一组独立区块,第一区块朝某方向扩展,最后一个区块朝另一个方向扩展。deque与vector的主要不同之处在于:1. 两端都能快速安插和删除元素,这些操作可以在分期摊还的常数时间(amortized constant time)内完成。2. 元素的存取和迭代器的动作比vector稍

2021-09-13 17:51:23 262

原创 C/C++预编译指令

//条件编译 #define // 宏定义 #undef // 取消宏 #include // 文本包含 #ifdef // 如果宏被定义就进行编译 #ifndef // 如果宏未被定义就进行编译 #if defined // 与ifdefine的区别在于可以可以组成复杂的判别条件 #if !defined // 与if !d.

2021-09-13 11:01:56 721

原创 可重入函数——学习笔记

什么是可重入函数?在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。可重入性是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。一般理解是一个函数在同时多次调用,在输入一定的情况下,输出结果必然固定, 不受任何其他情况的影响。比如int n = 0;//全局变量 int fun(int x){ n += x; retu

2021-09-13 10:57:05 291

原创 阻塞,忙等待,睡眠,挂起简单理解

阻塞是线程自己发现没资源,获取不到资源,它自己先去休息了,有资源它会自己回来,而且不占用CPU。忙等待是指线程找不到资源就一直等,并且将CPU占据。睡眠是指CPU告诉线程,你先去休息,过规定时间,你自己回来。挂起是指CPU告诉线程你先去休息,有资源我告诉你。它会释放CPU。...

2021-09-12 17:54:27 2532

原创 数据结构——1 基本概念

定义数据结构:是相互之间存在的一种或多种特定关系的数据元素的集合。逻辑结构与物理结构定义提到了一种或多种特定关系,那具体是什么关系呢?逻辑结构是指数据对象中数据元素之间的相互关系。分四种:集合结构集合结构中的数据元素除了同属于一个集合之外,它们之间没有其他关系。各个数据元素是 平等 的。线性结构线性结构中的数据元素之间是一对一的关系.树形结构树形结构中的元素之间存在一对多的层次关系图形结构图形结构的数据元素是一对多的关系....

2021-09-12 16:45:32 185 1

原创 数据结构——线性表基本概念

什么是数据结构是数据之间存在一种或多种特定关系的数据元素集合。一个程序简单来说就是数据结构加上算法。数据结构是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。逻辑结构数据之间的相互关系。有 线性表 图 树物理结构/存储结构:数据在计算机中的表示。物理结构是描述数据具体在内存中的存储(如:顺序结构、链式结构、索引结构、哈希结构)等一些数据结构线性表(linear list)线性...

2021-09-12 16:17:06 234

原创 Linux的inode

inode是什么?——index node理解inode,要从文件储存说起。文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个block。文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方

2021-09-11 22:58:36 107

原创 C++ this指针

背景我们知道一般的类可以声明很多对象,这些对象在调用类的成员函数的时候,怎么区分它们之间的数据成员呢?然后就有了this指针,指向该对象的指针。this指针的概念在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。限制this只能在成员函数中使用成员函数默认第一个参数为T* const register this。(友元函数,全局函数不是成员函数)this指针不能在静态函数中使

2021-09-11 22:06:31 60

原创 IO多路复用

了解什么是IO对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段:1. 等待数据准备 (Waiting for the data to be ready) 等待客户端连接(conn ,addr 客户端的每一个连接就是一个socket对象) 2. 将数据从内核拷贝到进程中 (Copying the data from the kernel to the process.

2021-09-11 17:15:54 175

原创 STL容器——vector

什么是vector?vector(向量)是一个封装了动态大小数组的顺序容器。可以简单的认为,向量是一个能够存放任意类型的动态数组。性质阐述就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存.

2021-09-10 22:31:26 116

原创 strncpy和strcpy

strcpy//定义char *strcpy(char *dest, const char *src)//用法 char str3[] = "hellohello";//不能用char* str1,指向常量区后不可改变值 char str4[] = "worldworld"; char str5[] = "world"; cout << strcpy(str3, str4)<<endl; cout << strcpy(str3, s.

2021-09-10 18:17:36 205

原创 Linux的进程间通信(IPC)

管道( pipe ):最初是半双工的,现在某些系统提供全双工管道。Linux的管道是继承Uinx的进程间通信机制。在管道的具体实现中,根据通信所使用的的文件是否具有名称,有“匿名管道”和“命名管道”。通常,一个管道由一个进程创建,然后该进程调用fork,此后父进程与子进程之间就可以使用管道通讯。这就是匿名管道。命名管道是在实际文件系统上实现的一种通信机制。由于它是一个与进程没有“血缘关系”的、真正且独立的文件,所以它可以在任意进程之间实现通信。由于命名管道不支持诸如lseek()等文件定位操作.

2021-09-10 15:29:21 111

原创 Linux指令——系统信息和性能查看

uname -a //查看内核/OS/CPU信息uname -r //查看内核版本uname -m //查看处理器架构arch //查看处理器架构cat /proc/version //查看Linux版本信息cat /proc/cpuinfo //查看CPU信息cat /proc/loadavg //查看系统负载uptime .

2021-09-10 12:08:19 107

原创 有符号数与无符号数相加

#include<stdio.h>int main( ){ unsigned int a = 10; int b = -10; (a + b > 0) ? printf(">0") : printf("<=0"); return 0;} //b = -10, b 与无符号数相加会转换成无符号数—— -10 + 2^32 = 4,294,967,286(unsinged int);此时与 a = 10 相加必然大于 1...

2021-09-10 10:56:31 660

GPIO模拟IIC,通信AT24C02

STM32F7GPIO模拟IIC,用EEPROM_AT24C02

2022-08-17

使用pycharm.pdf

使用pycharm.pdf

2021-12-29

Rv1126使用,仿真yolov3和板端运行yolov5.pdf

rv1126linux环境配置和PC端仿真yolov3,板端运行yolov5.

2021-08-26

空空如也

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

TA关注的人

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