自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CPU组成原理及基本运算过程

这是一个CPU的基本构成,它主要分为两个部分一个是运算器,一个是控制器,下面的主要做一个简单的了解。我们先看运算器。这个是计算器用于实现计算的,这其中有4个部分组成分别是ACC(放数的),MQ(放数的和用来乘除的),X(放数的),ALU(用来计算的)。接着我们再来看控制器。这相当于CPU的大脑(好像怪怪的),CPU的控制器有三个部分组成,CU(控制单元用来分析指令的),IR(存放当前要执行的指令),PC(计数器,用来读取下一条指令)

2022-09-18 14:20:10 1436 1

原创 u-boot顶层Makefile分析及u-boot启动流程分析

清理整个u-boot工程,包括编译出来的.o 、.h 、.bin 、 .imx 、.config 等,其中最重要的是.config,它是由使用u-boot的工程师来根据自己需要配置出来的文件,所以在清除时最好备份一下.config。

2022-09-17 23:39:33 876 1

原创 uboot启动流程图以及boot启动linux流程图

u-boot启动流程。

2022-09-15 16:32:29 1992

原创 C关键字volatile总结;*((volatile unsigned int *)0X020C4068)什么含义?

直接从变量地址中读取数据。

2022-07-31 23:27:13 895

翻译 ARM-CPU工作原理,基于ARM的SOC讲解

目前,ARM体系架构共定义了8个版本,从版本1到版本8,ARM体系的指令集功能不断扩大,不同系列的ARM处理器,性能差别很大,应用范围和对象也不尽相同,但是,如果是相同的ARM体系架构,那么基于它们的应用软件是兼容的。当我们拿到一个新的SOC的datasheet,首先就要根据这个架构,来查看SOC的RAM空间、时钟频率、包括哪些外部设备的控制器,各个外设控制器的操作原理,各个外设对GPIO的引脚复用情况、各个控制器的SFR地址、中断控制器是如何管理众多中断源的等等。控制总线的具体情况取决于CPU。...

2022-07-31 22:34:29 3924

转载 指令集、架构、处理器、内核,芯片之间的关系

处理器、内核是芯片内部的核心单元模块,是在硬件层面按照指令集的设计规范,把它实现出来,可以把内核当作指令集的实物化,但是硬件的设计方案各有不同,所以同一个版本的指令集可能也有不同版本的内核,我们经常说的cotex-m3,cotex-m4,cotex-A7等等就是属于内核层面的概念。是指arm公司把内核的核心电路图,把它的内核测试方法和测试程序提供给第三方公司,第三方公司获取到内核到内核授权之后,基本上可以找工厂流片生产内核了,我们很多熟悉的半导体公司,都是获取了内核授权,比如st,nxp,ti,......

2022-07-31 16:54:12 4660

原创 I.MX6U从SD卡启动程序过程

启动流程

2022-07-28 19:54:23 433

原创 字符串解码(先进后出,栈)

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数k,例如不会出现像3a或2[4]的输入。isalnum用来判断一个字符是否为数字或者字母,也就是说判断一个字符是否属于a~z||A~Z||0~9。reverse(str.begin(),str.end());reverse(v.begin(),v.end());for(autois)//书上说i是char类型,那s[n]呢?for(auto&is)//i是个引用i到底引用的是什么?...

2022-07-19 10:10:42 159

原创 链表中倒数第k个节点(赋值数组、快慢指针、顺序查找占空间少)

例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。给定一个链表1->2->3->4->5,和k=2.返回链表4->5....

2022-07-15 11:38:54 62

原创 846.链表的中间结点(快慢指针、赋值数组)

此列表中的结点3(序列化形式[3,4,5])如果有两个中间结点,则返回第二个中间结点。的非空单链表,返回链表的中间结点。

2022-07-15 10:41:00 127

原创 234.回文链表()

给你一个单链表的头节点 ,请你判断该链表是否为回文链表。如果是,返回 ;否则,返回 。输入:head = [1,2,2,1]输出:true不能用反转链表,因为链表只有一条,反转之后还是那一条,并没有复制新的一条链表,是错误做法,除非自己花精力自己再复制一下这个链表。方法一:将值复制在数组中再采用双指针(因为链表只能单向遍历,不能双向遍历)方法二:递归(和反转不一样,递归式用一个全局变量存链表的头节点,然后和归的节点比较)要点: if(!reserveList(head -> next)

2022-07-14 16:56:07 138

原创 160.相交链表(哈希表查找set、双指针)

给你两个单链表的头节点 和 ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at '8'方法一:哈希表(set查找)set.insert() set.count()方法二:双指针(带公式,具体看力扣解析)要点:pA = pA == NULL ? headB : pA

2022-07-13 17:04:21 156

原创 142.环形链表2(unordered_set(查找功能强大))

1、set里面每个元素只存有一个key值,它支持高效的关键字查询操作,比如检查一个关键字是否在set中。如果这个key值之前存在的话就不插入。2、 map是一种key(键),value(值)的形式,用来保存键和值组成的集合,键必须是唯一的,但值可以不唯一。里面的元素可以根据键进行自动排序,由于map是key_value的形式,所以map里的所有元素都是pair类型。pair里面的first被称为key(键),second被称为value(值)。它可以通过关键字key查找映射关联信息value,同时根据key

2022-07-12 21:46:09 346

原创 141.环形链表(哈希表、快慢指针)

给你一个链表的头节点 ,判断链表中是否有环。输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。 方法一:哈希表(存节点地址,不是存节点数值)要点:unordered_map map; 存指针类型方法二:快慢指针要点:一快一慢,如果是环形,总会相遇.........

2022-07-12 18:33:16 209

原创 83.删除排序链表中的重复元素(一次遍历、递归)

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3]方法一:一次遍历技巧:cur->next->next; 可连续使用指针箭头方法二:递归(本质是将链表压栈后倒序处理) (head->val == head->next->val) ? head->next : head; 条件语句......

2022-07-09 17:44:41 260

原创 448.找到所有数组中消失的数字(哈希表、原地哈希)

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。示例 1:输入:nums = [4,3,2,7,8,2,3,1]输出:[5,6]示例 2:输入:nums = [1,1]输出:[2]方法一:哈希表要点:将数组的每一个数都存在哈希表中,并把此处的second自加1,再把数字1到n存在哈希表中,哈希表返回为零表示此处数组未存过则为缺失的数字方法二:原地哈希(把每个数都

2022-07-08 18:02:50 301

原创 合并两个有序数组(sort、双指针)

需要头文件,其中为指向待的数组的第一个元素的指针,为指向待的数组的的指针,参数为排序准则,如果没有的话,默认以非降序排序。题目:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合

2022-07-08 11:20:20 112

原创 移动零(双指针)

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums = [0]输出: [0]双指针:第一个指针用于遍历整个数组,查看非零数,第二指针用于和第一个指针进行数的交换...

2022-07-05 15:17:02 80

原创 两数之和(暴力遍历、哈希表)

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target = 6输出:[

2022-07-04 22:25:44 60

原创 爬楼梯(动态规划、递归、哈希表)

题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入:n = 3输出:3解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶题解:递归解法:时间复杂度极高,会超时,不推荐,可理解思路递归:假如要算F(6),则需要算F(5)和F(4),

2022-06-24 11:14:41 271

原创 树的子结构(递归!)

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \ 1 2给定的树 B: 4 / 1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,1]输出:true题目解析

2022-06-23 11:20:31 51

原创 从上到下打印二叉树

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]二叉树层层遍历需利用队列先进先出的特性,使用队列对每一层的节点从左到右按顺序储存,就能通过队列的弹出一层层遍历...............

2022-06-20 10:34:55 608

原创 第一次只出现一次的字符(哈希表!!!记录重复次数)

哈希表上代码理解输入的字符串s={"aaaaaaabbcdefg"}执行代码结果跟注释描述的一样相当与利用value这个值来表示字符串出现的次数往map中插入值,再读取输出为10题目:在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例 1:输入:s = "abaccdeff"输出:'b'示例 2:输入:s = "" 输出:' '

2022-06-02 16:13:53 139

原创 二维数组中查找(暴力遍历、二叉树搜索)

vector容器构建二维数组获取二维数组行列增加操作删除操作遍历问题:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 2

2022-06-02 11:31:43 234

原创 0~n-1中缺失的数字(遍历、二分法)

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8易错实例:输入:[1]目标输出:0 常见错误输出为2输入:[0]目标输出:1方法一:遍历此题我使用的是最简单的遍历思想将数组中的每一个数组都遍历,同时定义一个自加1的变量和数组遍历的数看是否相等,如果不相等则自加1变量就

2022-06-01 14:37:58 308

原创 在排序数组中查找数字(二分法:查找功能)

题目:统计一个数字在排序数组中出现的次数。直观的思路肯定是从前往后遍历一遍。用两个变量记录第一次和最后一次遇见 \textit{target}target 的下标,但这个方法的时间复杂度为 O(n)O(n),没有利用到数组升序排列的条件。由于数组已经排序,因此整个数组是单调递增的,我们可以利用二分法来加速查找的过程。小技巧:int search(std::vector& nums, int target)对数组加引用可减少内存的使用代码实现中要注意的点见注释

2022-06-01 10:33:30 501

原创 寻找旋转排序数组中的最小值(二分法)

重点理解二分法的思路二分法使用的前提: 数据集必须有此案后顺序(升序或者降序)二分法功能一:查找如果:nums[mid] = 6 < target(8) 右移left如果:nums[mid] = 12> target(8) 左移right如果left和right相等,则找到目标值二分法功能二:找最小(大)值流程图题目:已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。

2022-05-31 11:21:54 1283

原创 左旋转字符串(字符切分与拼接)

方法一:字符切分与拼接使用了string的substr()切分和字符串的功能,并将字符串拼接substr有2种用法:假设:string s = "0123456789";string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789"string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = "567"解题思路: 获取str[n:] 和 str[:n]子串,目标串target

2022-05-30 12:58:28 102

原创 替换空格(原地修改)

原地修改在 C++ 语言中, string 被设计成「可变」的类型,因此可以在不新建字符串的情况下实现原地修改。由于需要将空格替换为 "%20" ,字符串的总字符数增加,因此需要扩展原字符串 s 的长度,计算公式为:新字符串长度 = 原字符串长度 + 2 * 空格个数 。算法流程:初始化:空格数量 count ,字符串 s 的长度 len ;统计空格数量:遍历 s ,遇空格则 count++ ;修改 s 长度:添加完 "%20" 后的字符串长度应为 len + 2 * count ;倒序遍历修改:

2022-05-30 10:25:53 291

原创 206.反转链表(双指针)

反转链表:方法一:迭代(双指针)考虑遍历链表,并在访问各节点时修改next引用指向。多创建一个指针prev和指针curr进行交换指向,达到改变各节点的指向目的。#include<iostream>#include<stack>struct node { //用结构体变量和指向结构体变量的指针构成链表 int num; struct node* next; //*next表示指向node这个结构体的指针变量};cla..

2022-05-30 09:16:16 353

原创 从尾到头打印链表(递归思想、链表)

1.什么是递归  简单的来说递归就是一个函数直接或间接地调用自身,是为直接或间接递归。一般来说,递归需要有边界条件、递归前进段和递归返回段(其实就是进栈出栈的操作)。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。用递归需要注意以下两点:(1) 递归就是在过程或函数里调用自身。(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。递归一般用于解决三类问题:  (1)数据的定义是按递归定义的。(Fibonacci函数,n的阶乘)  (2)问题解法按递归实现。(回溯)..

2022-05-27 13:33:11 678

原创 包含min函数的栈

基础知识:1.比较两个数的大小min和maxc++ 使用 algorithm 提供的 max/min,返回最小最大的数。#include<algorithm>std::max(2, 3);std::min(2, 3);int temp = stack.top();std::min(temp,2);2.题目:包含min函数的栈本题难点:通过建立辅助栈实现;数据栈 AA : 栈 AA 用于存储所有元素,保证入栈 push() 函数、出栈 pop() 函数、获取栈顶 .

2022-05-26 14:24:59 1003

原创 用两个堆栈实现队列

本人小白,仅供自己学习参考!!!基础知识1.什么是堆栈概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为栈中进入数据称为 --- 入栈 push栈中弹出数据称为 --- 出栈 pop生活中的栈:1.1stack 常用接口功能描述:栈容器常用的对外接口构造函数: stack<T> stk; //stack采用模板类实现,...

2022-05-25 14:35:47 353

原创 数组中重复的数字(哈希表)

本人小白,仅供自己学习参考!使用STL库的vector 和 unordered_map先巩固一下基础知识!!!1.创建一个vector并直接赋值std::vector<int> b{ 1,2,3,4,5,6,7,1 };2.用数组给向量赋值int a[6]={1,2,3,4,5,6};vector<int>c(a,a+4);//把数组a的前四个数据赋值给向量c3.定义一个全是1的向量vector<int>a(10,1);.

2022-05-24 19:25:25 111

空空如也

空空如也

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

TA关注的人

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