自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言库函数实现

在字符串 str1 中查找第一次出现字符串 str2 的位置2、strlen

2022-07-08 16:27:32 429 1

原创 CPP-基操

在成员访问模式中:public 表示共有;类的数据成员和函数可以被该类对象和派生类访问。private 私有型;自己的类可以访问,但派生类不能访问。protected 保护型;自身类和派生类可以访问相当于自身的private型成员,它同private的区别就是在对待派生类的区别上。C++中 public,protected, private 访问标号小结第一:private, public, protected 访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何

2022-06-29 17:30:04 211

原创 提前批--Cpp版本

用CPP写的一些算法题

2022-06-29 17:29:33 211

原创 GCC/GDB 安装以及常用的指令

安装linux 下直接 apt-get install 就行win 安装稍微麻烦一点,首先下载一个MinGW默认安装,桌面生成快捷方式双击打开安装完打开是这样的1 首先选中箭头1所指右击 选择 Mark for Installation2 点击左上角箭头2所指,选择 Apply changes3 接着等待完成 close 就行4 添加环境变量添加到刚刚安装的 miniGW 的 bin 目录5 测试是否安装成功有版本号就可以了编译过程程序从源文件到可执行文件的过程的详细的内容可

2022-05-15 21:37:11 637

原创 ubuntu apt换源

Step1:cp /etc/apt/sources.list /etc/apt/sources.list.bakStep2:sudo gedit /etc/apt/sources.list更换为清华源tips:很多人在换源的时候一顿CV操作,千万注意版本对应Step3: sudo apt-get update sudo apt-get upgrade

2022-05-15 10:33:58 304

原创 零零散散的记事本

python 读取行去除换行符f = open('filepath','r')data = [line.strip('\n') for line in f.readlines()]

2022-05-06 21:40:49 543

原创 TF与keras版本对应关系

贴个地址以防丢失:https://zhuanlan.zhihu.com/p/465947475

2022-04-24 15:55:36 730

原创 Jetson Xavier NX(3)Bazel Mediapipe 安装

一、安装 Bazel1 - 下载2 - 拷贝过去解压3 - 安装依赖sudo apt-get install build-essential openjdk-8-jdk如果定位不到 openjdk-8-jdk 应该是 apt 源的问题,自己修改一下,可以参考我之前的博客内容4 - 编译env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" bash ./compile.sh会比较久,耐心等待(开启最大性能模式)5 - 将生成的ba

2022-04-18 19:41:53 2557 22

原创 LeetCode之回溯

回溯的一般格式path = [ ]res = [ ]def backtracking(param) { if (end condition): save result return } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { 处理节点 backtracking(路径,选择列表) 回溯,撤销处理结果 }}组合给定两个整数 n 和 k,返回范围 [1,

2022-04-02 15:08:06 182

原创 LeetCode之动态规划

整数拆分给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。class Solution: def integerBreak(self, n: int) -> int: dp = [0]*(n+1) dp[2] = 1 for i in range(3, n+1): for j in range(1, i-1): dp[i] = m

2022-04-02 15:07:46 400

原创 LeetCode之骚操作

滑动窗口乘积小于 k 的连续的子数组给定一个正整数数组 nums和整数 k ,请找出该数组内乘积小于 k 的连续的子数组的个数思想:关键的点在于记录个数的时候,某个窗口内的子数组个数大小 right-left+1,是因为我们需要从右边开始数,如果从左边开始就有重复。比如某次遍历符合题意的子数组为 ABCX,那么在该条件下符合条件的有X,CX,BCX,ABCX共四个(可以进行多个例子,发现个数符合right-left+1)class Solution: def numSubarrayProd

2022-03-26 17:17:39 531

原创 python一些操作函数

1 字符串有关函数# 1字母处理:.upper() # 全部大写.lower() # 全部小写.swapcase() # 大小写互换.capitalize() # 首字母大写,其余小写.title() # 首字母大写# 2格式化相关 .ljust(width) # 获取固定长度,左对齐,右边不够用空格补齐.rjust(width) # 获取固定长度,右对齐,左边不够用空格补齐.center(width) # 获取固定长度,中

2022-03-16 17:37:26 191

原创 Linux 查看cuda cudnn版本

cudacat /usr/local/cuda/version.txtcudnncat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

2022-03-02 16:05:03 802

原创 Running jupyter produces “ModuleNotFoundError: No module named ‘six‘“

使用 jupyter notebook 指令启动时报错"ModuleNotFoundError: No module named ‘six’"但pip list 中已经有 six解决方案:pip install --ignore-installed six

2022-02-25 17:09:45 617

原创 TensorFlow-GPU安装

一开始直接使用 pip install 安装但发现不行,因为之前一直用的torch而且装好了cuda和cudnn应该是版本对应的问题cuda、cudnn、TensorFlow-GPU三者版本要对应,链接cuda版本: nvcc -V(如果显示没有这指令应该是环境变量的问题)cudnn版本:如果是已经使用过cuda的应该是对应的,新装的话应该也会提醒你需要对应的,顺便说下怎么看cudnn版本,可以在cuda的安装的目录下,include的文件夹里面cudnn_version.h 如下就是8.0.5#

2022-02-22 13:03:25 185

原创 Jetson Xavier NX(2)创建虚拟环境以及安装 torch、torchvision

安装miniforge在ARM64上的anaconda替代品是miniforge,为方便管理我们安装miniforge(1)首先到官方下载对应的 sh 文件我这里最新版的是 Miniforge3-4.11.0-0-Linux-aarch64.sh,注意版本,aarch64(2)使用 sh 指令安装sh Miniforge3-4.11.0-0-Linux-aarch64.sh(3)添加环境变量# 编辑环境变量vim ~/.bashrc# 增加环境变量(如果修改了默认路径就是用你的路径)e

2021-12-18 15:12:16 2503 5

原创 Jetson Xavier NX(1)准备工作

这篇 blog 将会是在入手英伟达的 jetson 系列的开山之作,记录在学习路上遇到的问题与解决方案。镜像首先买到开发板的第一件是就是刷系统,那么这块内容不做详细阐述,需要从英伟达的官网下载 sdkmanger。从主机的 Ubuntu 系统中刷入即可。环境配置在进入系统之后我们需要做一些环境的配置pip我这里是自带了 python3.6sudo apt install python3-pipjtop 安装用来监视资源使用和硬件选项控制安装 jetson-statssudo pip3

2021-12-17 11:25:36 805

原创 Cpp-map&&multimap

map基本概念简介:map中所有元素都是pairpair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序本质:map/multimap属于关联式容器,底层结构是用二叉树实现。优点:可以根据key值快速找到value值map和multimap区别:map不允许容器中有重复key值元素multimap允许容器中有重复key值元素map构造和赋值功能描述:对map容器进行构造和赋值操作函数原型:构造:

2021-12-14 22:05:44 541

原创 Cpp-set&&multiset

set基本概念简介:所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现。set和multiset区别:set不允许容器中有重复的元素multiset允许容器中有重复的元素set构造和赋值功能描述:创建set容器以及赋值构造:set<T> st; //默认构造函数:set(const set &st); //拷贝构造函数赋值:set&amp

2021-12-14 17:07:13 390

原创 Cpp-List

list构造函数功能描述:创建list容器函数原型:list<T> lst; //list采用采用模板类实现,对象的默认构造形式:list(beg,end); //构造函数将[beg, end)区间中的元素拷贝给本身。list(n,elem); //构造函数将n个elem拷贝给本身。list(const lis

2021-12-13 11:20:16 753

原创 Cpp-Stack&&Queue

stack 常用接口功能描述:栈容器常用的对外接口构造函数:stack<T> stk; //stack采用模板类实现, stack对象的默认构造形式stack(const stack &stk); //拷贝构造函数赋值操作:stack& operator=(const stack &stk); //重载等号操作符数据存取:push(elem)

2021-12-12 11:32:07 449

原创 Cpp-deque

功能:双端数组,可以对头端进行插入删除操作deque与vector区别:vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度回比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关构造#include <deque>#include <iostream>using namespace std;void printDeque(const deque<int>&

2021-12-12 10:18:30 981

原创 Cpp-vector

vector数据结构和数组非常相似,也称为单端数组不同之处在于数组是静态空间,而vector可以动态扩展动态扩展并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间vector构造函数vector<T> v; //采用模板实现类实现,默认构造函数vector(v.begin(), v.end()); //将v[begin(), end())区间中的元素拷贝给本身。vector(n, elem);

2021-12-11 21:02:16 2519

原创 升级Ubuntu下的cmake版本

这里介绍一下如何升级 cmake 的版本,有的建议卸载原有的cmake,不建议这样做首先我们到官网下载想要的版本接着拷贝到 Ubuntu 中进行解压tar xf cmake-3.22.1-linux-x86_64.tar.gz解压得到的文件夹中有一个 bin 目录,目录下面就有 cmake,其实我们只要将这个文件连接到 bin 目录下就行了,接着往下看吧。将解压的文件夹移动到 /usr/share 目录下,其实这一步可以省略,拷贝过去是为了方便管理,原有的 cmake 文件夹也是在该目录下。

2021-12-08 19:48:36 9184 7

原创 虚拟机运行win11以及安装apk

安装win11在虚拟机中安装 win11, 首先需要 VMware Workstation Pro 以及 win11 的镜像准备好这两个后,就是在 VMware 中安装右击我的计算机选择 “新建”选择之前下载好的镜像文件这里选择 win10x64默认60G就行,win11 安装完会比较大装好后修改一些设置,内存拉到 8G 处理器数量根据自己的需求选择这里就装好了,接着启动虚拟机,启动后会有一个这样的界面,一直按 enter 跳过这里选择 专业版选择第二个 “仅安装

2021-12-05 20:18:51 4986

原创 Linux中的文件 I/O

linux下的文件管理文件存储在硬盘中最小单位是扇区(sector),操作系统读取文件的时候,以块为单位进行读取磁盘在进行分区、格式化的时候会将其分为两个区域,一个是数据区,用于存储文件中的数据;另一个是 inode 区,用于存放 inode table(inode 表), inode table 中存放的是一个一个的 inode(也成为 inode节点),不同的 inode 就可以表示不同的文件,每一个文件都必须对应一个 inode, inode 实质上是一个结构体,这个结构体中有很多的元素,不同的

2021-12-03 15:56:41 830

原创 Leetcode之树

1 二叉树镜像struct TreeNode* mirrorTree(struct TreeNode* root){ if(root == NULL) return root; struct TreeNode * tmp = root->right; root->right = root->left; root->left = tmp; mirrorTree(root->right); mirror

2021-12-02 11:59:59 371

原创 进程与线程

僵尸进程、孤儿进程当一个进程创建子进程之后,它们俩就成为父子进程关系,父进程与子进程的生命周期往往是不相同的,这里就会出现两个问题:父进程先于子进程结束、子进程先于父进程结束孤儿进程父进程先于子进程结束,也就是意味着,此时子进程变成了一个“孤儿”,我们把这种进程就称为孤儿进程。 在 Linux 系统当中,所有的孤儿进程都自动成为 init 进程(进程号为 1)的子进程, 换言之,某一子进程的父进程结束后,该子进程调用 getppid()将返回 1, init 进程变成了孤儿进程的“养父”。

2021-12-01 22:06:50 330

原创 freeRTOS (4)内存管理及源码分析

内容基本上是原子的开发手册,一边学习一边记录。标准 C 库中的 malloc()和 free()也可以实现动态内存管理,但是如下原因限制了其使用:● 在小型的嵌入式系统中效率不高。● 会占用很多的代码空间。● 它们不是线程安全的。● 具有不确定性,每次执行的时间不同。● 会导致内存碎片。内存碎片:经过很多次的申请和释放以后,内存块被不断的分割、最终导致大量很小的内存块● 使链接器的配置变得复杂。FreeRTOS 提供了 5 种内存分配方法, FreeRTOS 使用者可以其中的某一个方法,或者

2021-11-26 16:07:19 681

原创 freeRTOS(3)信号量及API分析

信号量简介信号量常常用于控制对共享资源的访问和任务同步。共享资源访问:两个例子(计数型信号量)公共停车场100个车位,当有车开出停车场的时候停车数量就会减一,也就是说信号量减一,此时你就可以把车停进去了,你把车停进去以后停车数量就会加一,也就是信号量加一。(二值信号量)使用公共电话,我们知道一次只能一个人使用电话,这个时候公共电话就只可能有两个状态:使用或未使用,如果用电话的这两个状态作为信号量的话,那么这个就是二值信号量。任务同步:用于任务与任务或中断与任务之间的同步。举例:当中断发生的时

2021-11-25 20:57:41 494

原创 Linux 驱动开发(二)IIC

根据Linux驱动的分离与分层的思想,Linux内核将 IIC 驱动分成 IIC 总线驱动和 IIC 设备驱动IIC 总线驱动就是 SOC 的 IIC 控制器驱动,也叫做 IIC 适配器驱动IIC 设备驱动就是针对具体的 IIC 设备而编写的驱动1 IIC 总线驱动I2C 总线驱动重点是 I2C 适配器(也就是 SOC 的 I2C 接口控制器)驱动,这里要用到两个重要的数据结构: i2c_adapter 和 i2c_algorithm, Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成

2021-11-20 21:57:59 969

原创 Linux 驱动开发(三)SPI

spi 驱动框架和 iic 驱动框架类似,都分为主机控制器驱动和设备驱动。1 SPI 主机驱动SOC 的spi外设驱动是半导体产商写好的,SPI 主机驱动器采用了 platfom 驱动框架。我们可以从内核中文件中找到 spi_imx_driver 结构体:static struct platform_driver spi_imx_driver = { .driver = { .name = DRIVER_NAME, .of_match_table = spi_imx_dt_id

2021-11-20 21:55:38 1339

原创 LeetCode之链表

1 反转链表给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。truct ListNode* ReverseList(struct ListNode* pHead ) { if(pHead == NULL || pHead->next == NULL){ return pHead; } struct ListNode *p

2021-11-19 10:16:45 707

原创 简单介绍MMU和TLB

简单记录一下有关MMU的一些东西背景引入虚拟地址的原因(一)让APP可以以同样的链接地址来编译举个例子,两个hello应用程序,编译后查看反汇编代码,这两个程序的起始地址都是0x80A4。于是CPU运行两个APP时,都会去0x80A4读指令,然后经过MMU转换成Addr1、Addr2。这样,不同的APP可以在任意地址,经过MMU地址转换后,在内存上是不同的地址,互不干扰。(二)让大容量APP可以在资源少的系统上运行在电子系统里面,内存都是有限的,无论是嵌入式系统还是电脑,比如我们的JZ2440内

2021-11-11 20:44:08 770

原创 LeetCode之数组

1 找出数组中重复的数字在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。思路:哈希建立一个哈希表,遍历数组,如果访问到同一个哈希表的同一个位置就返回。int findRepeatNumber(int* nums, int numsSize){ int *hash = (int *)calloc(numsSize, sizeof(int)); for

2021-11-08 11:22:19 2272

原创 一些处理技巧

将一个字符串转化为整数while(*s >= '0' && *s <= '9'){ sum = sum * 10 + (*s - '0'); s++;}统计字符串中字符出现的次数新建一个数组,利数组的索引来确定位置,值来统计次数int res[26] = {0};for(int i = 0; i < n; i++){ res[s[i]-'a']++;}如何取出一个整数的每一位首先定一个新的数组来保存,依次取出个位十

2021-11-06 14:54:05 124

原创 程序的编译和链接过程

当我们写完一段C语言的代码,再将其在编译器中运行的时候,很少去研究其内部执行了怎样的一些操作,这其中发生了一些什么样的变化呢?最近看了一些相关的内容,做一个记录。首先一段代码从编写到生成可执行文件大概要经历以下的一些流程,分别是:预处理、编译和链接。其中编译又包括两部分第一是将C源文件编译成汇编文件,第二部分是将汇编文件会变成可重定位的目标文件。预编译预编译会将我们的 *.c 文件进过处理变成对应的 .i 文件,主要完成的是对程序中一些以 # 号表示的代码段进行处理,一般会有(1)头文件的包括 #

2021-10-27 17:59:39 1614

原创 freeRTOS(2)队列及API分析

简介队列是为了任务与任务、任务与通信之间准备的先进先出(FIFO)的存储缓冲机制数据发送到队列中会导致数据拷贝,在队列中存储的是数据的原始值,值传递freeRTOS中的使用一个结构体来描述队列队列操作过程创建队列task A 要向task B 发送消息,内容为变量x的值。首先创建一个队列,指定长度与大小,这里创建一个大小为4,长度为sizeof(int)的队列。发送第一个数据task A 中的变量x=10发送到队列中,此时队列长度为3,因为数据发送到队列的方式是值传递,那么x的值就可

2021-10-26 15:44:49 303

原创 LeetCode之字符串

1 在一个字符串中查找另一个字符串的位置给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。示例 :输入:haystack = “hello”, needle = “ll”输出:2int strStr(char* haystack, char* needle) { int n = strlen(haystack), m = strlen(needle);

2021-10-25 11:01:18 633

原创 freeRTOS(1)任务及有关API

任务状态处于运行态的任务就是当前正在使用处理器的任务。就绪态的任务是指已经准备就绪的任务(没有被阻塞或挂起),处于就绪态的任务还没有被运行,是因为有一个同优先级更高的任务在运行中如果一任务正在等待某个外部事件就处于阻塞态,处于阻塞态的任务有一个超时时间,超出任务时间就会退出阻塞态,即使等待的时间没有到来。任务控制块freeRTOS 的每个任务都有一些属性需要存储,把这些属性集合到一起用一个结构体来表示的就成为任务控制块。任务堆栈freeRTOS 的任务堆栈是在进行任务切换的时候,将当前任

2021-10-21 20:41:13 273

TMF814_mtnm_R45

IDL文件,如果对你有用可以给个好评

2022-03-17

TMF608_MTNM_R45

TMF608标准 如果对你有用可以给个好评

2022-03-17

空空如也

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

TA关注的人

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