自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 数据结构与算法——链表的创建,堆栈,队列

持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持前言本篇文章我们讲述一下链表的创建方法。链表创建的方法分为两种,主要分为头插法,和尾插法,也叫堆栈式和对列式。建立单链表算法总结:头插法:在链表的头部插入结点建立单链表,数据读入顺序和线性表中的逻辑顺序正好相反。即先入后出也叫堆栈式。 尾插法:在链表的尾部插入结点建立单链表,数据读入顺序和线性表中的逻辑顺序正好相同。即先入先出也叫对列式堆栈方式建立单链表(头插法)每次把新结点插入到链表的头部,使新插入的结点成

2021-05-11 22:05:45 423

原创 数据结构与算法——链式存储(链表)的插入及删除

持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持上篇文章我们讲述了链表的基本概念及一些查找遍历的方法,本篇我们主要将一下链表的插入删除操作,以及采用堆栈方式如何创建链表。链表的插入首先我们先看一下链表的插入是如何实现的在单链表中第i个数据元素之前插入一个数据元素,需要首先在单链表中找到第i-1个结点并由指针pre指示,然后申请一个新的结点并由指针p指示,其数据域的值为x,并让p结点的指针域指向第i个结点,然后修改第i-1个结点的指针使其指向s算法.

2021-05-10 21:39:50 8022

原创 数据结构与算法——带你走进链表(链式存储)的世界

持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持链式存储的定义采用链式存储结构的线性表称为链表 。不要求逻辑上相邻的两个数据元素物理上也相邻,它是通过“链”建立起数据元素之间的逻辑关系。因此对线性表的插入、删除不需要移动数据元素,只需要修改“链”为了便于理解可以通过下图表示:从上面可以看出,第一张图表示的是链表里面的数据,第二张图表示的是数据在存储空间里面具体存储的位置,数据明显是不连续的。既然数据是不连续的,那么我们要如何访问呢,下面..

2021-05-10 21:39:03 378

转载 数据结构之二叉树的创建

创建二叉树首先定义相关结构体及其他变量#define BT_LEFT 0 // 左边#define BT_RIGHT 1 // 右边// 定义新数据类型,用于封装函数typedef void BTree;typedef unsigned long long BTPos;// 定义二叉树左右指针结构体typedef struct _tag_BTreeNode BTreeNode;struct _tag_BTreeNode{ BT...

2021-05-07 20:31:15 4156

原创 数据结构与算法——探索线性表

目录线性表的定义顺序表顺序表的基本操作总结线性表的定义线性表的定义: 用数据元素的有限序列表示从上图我们可以看出来,线性表主要有以下几个特点:有且仅有一个开始结点(该结点只有一个直接后继结点,没有直接前趋结点) 有且仅有一个终端结点(该结点只有一个直接前趋结点,没有直接后继结点) 其余节点有且仅有一个直接前趋和一个直接后继 元素及元素之间的关系为线性例如:( A, B, C, D, …… , Z)数据元素都是数字; 元素间关系是线性同一线性表中.

2021-03-25 20:54:28 520

原创 数据结构与算法——算法基础

目录算法的特征算法设计的要求时间复杂度算法的特征一个算法应该具有以下五个重要的特征:有穷性(Finiteness)算法的有穷性是指算法必须能在执行有限个步骤之后终止;一个算法总是需要(输入合法的情况下)在有限的步骤结束,即每个算法需要在有穷的时间内完成。确切性(Definiteness)算法的每一步骤必须有确切的定义;任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得到相同的输出。输入项(Input)一个算法有0个或多个输入,以刻

2021-03-25 20:52:49 261

原创 5:可执行目标文件概述

目录一:ELF文件结构二:程序头表一:ELF文件结构可执行目标文件的结构和重定位文件有些差异,主要表现在如下几个地方。ELF头中字段e_entry给出执行程序时第一条指令的地址,而在可重定位文件中,此字段为0 多一个程序头表,也称段头表(segment header table),是一个结构数组 多一个.init节,用于定义_init函数,该函数用来进行可执行目标文件开始执行时的初始化工作 少两个.rel节(无需重定位)下面这张图片就是可执行目标文件的结构上面的图中.

2021-02-28 14:50:27 930

原创 04可重定位目标文件ELF文件解析

目录一:可重定位目标文件的特点二:可重定位目标文件的格式一:可重定位目标文件的特点•可被链接(合并)生成可执行文件或共享目标文件•静态链接库文件由若干个可重定位目标文件组成•包含代码、数据(已初始化全局变量和局部静态变量.data和未初始化的全局变量和局部静态变量.bss)•包含重定位信息(指出哪些符号引用处需要重定位)•文件扩展名为.o(相当于Windows中的.obj文件)我们都知道可重定位目标文件都是用来进行链接生成可执行目标文件的,那么下面我们来看下相应的链接试图

2021-01-17 17:36:32 1021

原创 3:目标文件格式概述

一:目标文件分类目标文件大致可以分为以下3类:•可重定位目标文件 (.o)– 其代码和数据可和其他可重定位文件合并为可执行文件• 每个.o 文件由对应的.c文件生成• 每个.o文件代码和数据地址都从0开始• 可执行目标文件 (默认为a.out)– 包含的代码和数据可以被直接复制到内存并被执行– 代码和数据地址为虚拟地址空间中的地址• 共享的目标文件 (.so)– 特殊的可重定位目标文件,能在装入或运行时被装入到内存并自动被链接,称为共享库文件– Windows

2021-01-17 12:54:03 893

转载 一文读懂计算机浮点存储的秘密

浮点数和IEEE754标准前言 一、浮点数 1.浮点数的表示形式 2.浮点数的规格化 二、IEEE754标准 三、我们回归到最开始的问题 1. 为什么float是32位的,但表示的数值范围比64位的long还大? 2.计算机如何存储浮点数?前言  我们知道float类型占4个字节,long类型占8个字节,但是与“常识”相反的是:float的存储范围要比long的存储范围大,64位的long类型可以自动转换成32位的float类型(存在精度丢失可能)。为什么float是..

2021-01-17 12:32:18 480

转载 STM32之串口DMA接收不定长数据

目录STM32之串口DMA接收不定长数据引言DMA简介什么是DMA在STM32的DMA资源DMA接收数据判断数据接收完成接收完数据时处理程序实现STM32之串口DMA接收不定长数据引言在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢?同学A:数据来了就会进入串口中断,在中断中读取数据就行了!中断就是打断程序正常运行,怎么能保证高效呢?经常把主程序打断,主程序还要不要运行了

2021-01-14 21:31:39 993

原创 02链接过程分析

一:使用链接带来的好处1:模块化一个程序可以分成很多源程序文件 可构建公共函数库,如数学库,标准C库等2:效率高(代码重用,开发效率高)时间上,可分开编译只需重新编译被修改的源程序文件,然后重新链接 空间上,无需包含共享库所有代码源文件中无需包含共享库函数的源码,只要直接调用即可(如,只要直接调用printf()函数,无需包含其源码)可执行文件和运行时的内存中只需包含所调用函数的代码而不需要包含整个共享库二:链接的本质话不多说先上图,我们先从一个简单的例子开始分析,大家都知道

2021-01-10 16:27:27 243

原创 01程序编译过程分析,预处理,编译,汇编,链接

目录前言一:hello word由浅入深二:预处理三:编译四:汇编五:链接总结:前言--------------------------------------------------------------------------------我们大多数开发人员在编写完程序之后都会通过相应的IDE执行编译的操作,将所编写的源代码转换成计算机可以识别并执行的文件。这个从源代码转换成可执行文件的过程有相应的IDE帮助我们完成,很多朋友对于这个过程都不太熟悉,今天我们就一起

2020-12-13 16:17:18 456 1

转载 常用10大排序算法总结,大厂必备

排序算法0. 算法概述 0.1 算法分类 0.2 算法复杂度 0.3 总结 1. 冒泡排序 1.1 算法描述 1.2 算法分析 1.3 动图演示 1.4 代码实现 2. 选择排序 2.1 算法描述 2.2 算法分析 2.3 动图演示 2.4 代码实现 3. 插入排序 3.1 算法描述 3.2 算法分析 3.3 动图演示 3.4 代码实现 4. 希尔排序 4.1 算法描述 4.2 算法分析 4.3 动图演

2020-12-03 22:15:27 313

转载 算法基本知识,入门必备

目录1.什么是算法2.算法的意义3.如何选择算法4.时间复杂度1.什么是时间复杂度2.时间复杂度的计算方法3.常见的时间复杂度5.常见的时间复杂度示例1、O(1)2、O(n2)3、O(n)4、Ο(n3)5、常用的算法的时间复杂度和空间复杂度6.排序实例1、冒泡排序原理分析:代码实现:2、选择排序代码实现:3、插入排序代码实现:4、快速排序排序示例:代码实现:1.什么是算法算法(algorithm):...

2020-12-03 21:56:06 3593 1

原创 LeetCode6:Z字形变换 --- LeetCode7:整数反转

6:Z字形变换 6. Z 字形变换 难度中等 将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。 比如输入字符串为"LEETCODEISHIRING"行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 代码char * convert(char * s, int numRows){ int n = strlen(...

2020-11-30 22:06:44 114

原创 C语言指针剖析一:指针的声明与访问

一:指针的声明与访问前言在计算机中,所有的数据都是存放在存储器中的,一般把存储器的一个字节称为一个内存单元。不同的数据类型占用的内存单元是不同的。为了快速、准确的访问这些内存单元,计算机为每一个内存单元进行编号,内存单元的编号也就是内存单元的地址。C 语言中,把这个地址叫做指针。1:指针的定义指针的定义:指针是一种数据类型,基于该类型声明的变量称为指针变量,该变量存放的是内存中的某个地址,指针的声明:类型 * 指针变量名;//如 int * pNum;“*”表示语句声明的是一..

2020-11-30 21:44:05 595

原创 leetcode 5:最长回文子串

目录5:最长回文子串解题思路代码5:最长回文子串 5. 最长回文子串 难度中等 给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 解题思路...

2020-11-25 22:39:38 126

原创 signed、unsigned 关键字

目录前言实例前言我们知道计算机底层只认识 0、1.任何数据到了底层都会变计算转换成 0、1.那负数怎么存储呢?肯定这个“-”号是无法存入内存的,怎么办?很好办,做个标记。把基本数据类型的最高位腾出来,用来存符号,同时约定如下:最高位如果是 1,表明这个数是负数,其值为除最高位以外的剩余位的值添上这个“-”号;如果最高位是 0,表明这个数是正数,其值为除最高位以外的剩余位的值。这样的话,一个 32 位的 signed int 类型整数其值表示法范围为:- 231~ 231 -1;8 位

2020-11-22 10:27:16 414 2

原创 gcc生成静态库和动态库

目录前言1:编辑源代码2:编译.O文件3:创建库文件4:使用静态库5:创建动态库6:使用动态库前言我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。1:编辑源代码第1步:.

2020-11-22 10:03:52 175

转载 操作系统内存管理(思维导图详解)

目录前言一、 计算机的存储体系分层存储器体系计算存储的层次结构二、内存使用演化1、没有内存抽象的年代2、内存抽象:地址空间3、虚拟内存三. 物理内存:连续分配存储管理方式3.1 单一连续存储管理3.2 分区式存储管理3.2.1 固定分区(nxedpartitioning)。3.2.2动态分区(dynamic partitioning)。3.3 伙伴系统3.4 内存紧缩(内存碎片化处理)3.5 覆盖技术3.6 交换技术3.7 覆盖与交换比

2020-11-22 09:50:38 4190

原创 leetcode 3:无重复字符的最长子串

目录3:无重复字符的最长子串解题思路代码3:无重复字符的最长子串 3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的...

2020-11-18 20:18:41 137 2

转载 哈希算法总结

目录1. Hash是什么,它的作用2. Hash算法有什么特点2.1 Hash在管理数据结构中的应用2.1 Hash在在密码学中的应用3. Hash算法是如何实现的?4. Hash有哪些流行的算法5. 那么,何谓Hash算法的「碰撞」?5.1 MD5的实际碰撞案例5.2 SHA家族算法以及SHA1碰撞6. Hash在Java中的应用6.1 HashMap的复杂度6.2HashMap的实现6.3 扩容6.4 扩容如何提升性能?6.5 HashMap.

2020-11-17 21:39:00 944

原创 LeetCode算法题解---两数之和,两数相加

目录一:两数之和解题思路代码二:两数相加解题思路代码一:两数之和 1. 两数之和 难度简单 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9...

2020-11-15 15:25:56 876

原创 c++函数重载

每天进步一点点,时刻保持学习的状态目录1:普通函数重载2:成员函数重载3:函数参数带默认值4:构造函数重载5:复制构造函数6:构造函数和 new 运算符7:默认构造函数8:析构函数和 delete 运算符9:浅层复制构造函数10:深层复制构造函数1:普通函数重载将一个相同名字但是不同类型的函数重复重复调用多次,来处理不同类型的数据。2:成员函数重载用对象 分别访问并调用带参数和不带参数的 成员函数,编译器将根据参数的不同而自动调用不同的函数.

2020-10-26 22:25:00 118

原创 c++引用调用

目录1:什么是引用2:函数的参数传递3:传递对象4:总结1:什么是引用引用就是别名,如:int &rnum = num;rnum 是整型变量 num 的别名,这样,对 rnum 的操作实际就是对 num 的操作。&rnum的值&num的值(地址)是一样。注意:定义引用时一定要同时对该引用进行初始化,如:int a;int &b = a;而不能写成int a;int &b;b = a;这样是错误的。引用就如

2020-10-25 11:43:10 2046 1

原创 任务之间的同步与通信

目录系列文章目录前言:一:任务间的同步二:事件1.信号量2.消息邮箱3.消息队列三:事件控制块级相关操作函数1:事件控制块结构2:相关操作函数系列文章目录第一章裸机系统与操作系统第二章操作系统分类第三章实时操作系统简介第四章实时操作系统---内核结构第五章实时操作系统---内核结构2第六章实时操作系统---中断和时间管理第七章实时操作系统---任务管理第八章实时操作系统---系统初始化及任务的启动前言:我们都知道其实是操作系

2020-10-25 11:17:19 2032

转载 新手入门 | 算法书籍推荐

以下内容转载来着:https://blog.csdn.net/qq_41551359/article/details/81837296书籍语言一般是C或者C++语言,因此在学习下面这些书籍时,希望你能够已经掌握了C语言的基础知识,后面公众号也将陆续简单的补上C语言的学习和回顾,这样对于连C语言都不熟的萌新,也可以在这里多看多提问。 好了,让我们开始吧! 1、数据结构与算法分析:C语言描述(适合入门) 这本书相对于算法导论要简单一些,更...

2020-10-24 17:39:12 2238

转载 非常实用的自学习资源

一、视频、论坛学习资源哔哩哔哩弹幕网:www.bilibili.com相信大家应该都知道这个网站。如果不知道,那你应该就是外太空的。看动漫、看学习视频、看一些up主的奇思妙想,这个小破站里基本都能找到你想要的东西,好好利用哦(✪ω✪)(✪ω✪)(✪ω✪)中国大学MOOC:www.icourse163.org如果小伙伴是大学生的话,赶紧收下这个网站,在不声不响中超越你同学就靠这个网站了。里面几乎囊括了大学所有课程,不说了,赶紧收下吧 (σ゚∀゚)σ…:*☆哎哟不错哦。网易云课堂:https://s

2020-10-21 20:16:33 1458

原创 实时操作系统---系统初始化及任务的启动

目录系列文章目录前言一:ucos的初始化二:ucos的启动总结:系列文章目录第一章裸机系统与操作系统第二章操作系统分类第三章实时操作系统简介第四章实时操作系统---内核结构第五章实时操作系统---内核结构2第六章实时操作系统---中断和时间管理第七章实时操作系统---任务管理前言前面我们介绍了很多嵌入式相关的概念,任务的结构及相关的处理函数,本节内容我们主要看一下ucos的初始化流程以及任务的启动流程。一:ucos的初始化在使用uco.

2020-10-19 22:53:25 645

原创 实时操作系统---任务管理

文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结系列文章目录第一章裸机系统与操作系统第二章操作系统分类第三章实时操作系统简介第四章实时操作系统---内核结构第五章实时操作系统---内核结构2第六章实时操作系统---中断和时间管理前言前面几篇文章我们了解了实时操作系统的主要概念以及内核结构,接下来我们一起看下操作系统的精髓《任务管理》,本章所讲的内容包括如何在用户的应用程序中建立任务、删除任务、

2020-10-18 20:23:41 1045 2

原创 实时操作系统---中断和时间管理

系列文章目录第一章裸机系统与操作系统第二章操作系统分类第三章实时操作系统简介第四章实时操作系统---内核结构第五章实时操作系统---内核结构2文章目录前言这篇文章我们主要讲解一下ucos中的中断和时间管理,中断室计算机系统处理异步事件的重要机制,当异步事件发生时,硬件首先会向CPU发起中断请求,CPU响应这个请求之后会立即运行中断服务程序来处理该事件。为了处理任务延时,任务调度等与时间相关的事件,任何一个计算机系统都应该有个系统时钟,与其他系统一样,UCOS的系统时钟

2020-10-05 17:21:02 2194 1

转载 二分查找的原理及实现

目录前言算法分解前言二分查找算法思想非常简单,就是折半查找一个有序序列。通常情况,作为一个初学者,我甚至觉得二分查找过于简单,不值一提,最近经过思考,二分查找算法对于理论的要求并不是很高,但是若要把它变为有可行性的程序代码,则我们需要思考诸多的细节,否则这个代码写出来则是错误百出的。算法分解在这里,我用二分查找一个顺序排列的×××数组。若用C实现的话我们需要注意以下几个方面: 如何判断查找完成,定义返回值含义,定义退出循环条件 如何处理边界问题,例如1 2 3 这个序

2020-09-16 22:40:38 324

原创 实时操作系统---内核结构2

文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言上篇内容我们讲了任务控制块和任务就绪表等内容:实时操作系统---内核结构,这篇内容我们继续探讨实时操作系统的内核结构。一:任务调度cos-I的任务调度思想是:“近似地每时每刻让优先级最高的就绪任务处于运行状态”。在具体做法上,它在系统或用户任务调用系统函数及执行中断服务程序结束时来调用调度器,以确定应该运行的任务并运行它。上面我们提到了任务调度器,接下来我们就详细探...

2020-09-15 22:20:30 436

原创 实时操作系统---内核结构

目录 前言 一:代码临界段 二:任务 三:任务状态 四:任务控制块 五:任务控制块链表 ​六:任务就绪表 前言上篇文章我们主要介绍了实时操作系统的基本概念,相关内容可翻看前片博客:实时操作系统简介接下来我们来分析一下实时操作系统的内核结构。一:代码临界段首先我们先来了解下代码临界段的概念,代码临界段,也称之为代码...

2020-09-12 22:45:25 921

原创 实时操作系统简介

目录前言一、实时操作系统的概念二、实时操作系统的特征高精度计时系统多级中断机制实时调度机制三.实时操作系统的相关概念基本概念优先级的问题互斥前言前面几篇文章我们分别介绍了裸机系统和操作系统的相关概念,这里开始的几篇文章我们着重介绍下嵌入式的实时操作系统,嵌入式实时操作系统有很多种比如:ucos,rt-thread,Vxworks等一、实时操作系统的概念实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度...

2020-09-02 22:39:46 2366

原创 操作系统分类

目录前言一、操作系统的分类二、批处理操作系统的发展1.手工操作阶段(此阶段无操作系统)2.批处理操作系统1) 单道批处理系统2) 多道批处理系统3.分时操作系统4.实时操作系统前言上篇文章我们探讨了裸机系统与操作系统的区别,具体内容可以翻阅上面内容,这篇文章我们一起来看下操作系统的分类。一、操作系统的分类操作系统一般可分为三种基本类型,即批处理系统、分时系统和实时系统,随着计算机体系结构的发展,又出现了许多种操作系统,它们是嵌人式操作系统、个人操作系统、网

2020-09-01 22:04:50 12427

原创 裸机系统与操作系统

目录前言一、裸机系统通常分成轮询系统和前后台系统(中断)1.轮询系统2.前后台系统二、多线程系统总结前言裸机系统与操作系统存在什么区别,两者都适合在什么场景下使用,我们今天我们一起来探讨一下这个问题,一、裸机系统通常分成轮询系统和前后台系统(中断)1.轮询系统轮询系统中是最简单的一种软件结构,就像一条流水线一样是顺序循环执行的,可以看下下边的范例,嵌入式开发过程中一般都是先将硬件结构初始化,之后再加上一个循环控制来执行业务,这就是最简单的流程int ma

2020-08-30 22:59:38 3399

转载 解决pip安装时速度慢的问题

国内源:新版ubuntu要求使用https源,要注意。清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.aliyun.com/pypi/simple/中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学:http://pypi.hustunique.com/山东理工大学:http://pypi.sdutlinux.org/豆瓣:http://pypi.d.

2020-05-31 11:31:43 237

转载 hex,bin,elf,axf文件简介

1.BinBin文件是最纯粹的二进制机器代码, 或者说是"顺序格式"。按照assembly code顺序翻译成binary machine code,内部没有地址标记。Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。 BIN文件就是直接的二进制文件,一般用编程器烧写时从00开始,而如果下载运行,则下载到编译时的地址即可。可以直接在裸机上运行。2.HexIntel...

2019-11-24 17:29:30 414

gpio模拟iic drivers

gpio模拟iic驱动,基于stm8寄存器版,移植方便,只需要修改io即可

2019-03-17

单片机程序存储分析

解析单片机程序存储和数据存储的相关区别,有助于理解单片机的数据存储方式

2018-11-17

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

TA关注的人

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