自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux基础(四):Linux系统文件类型与文件权限

各位看官,好久不见,在正式介绍Linux的基本命令之前,我们首先了解一下,关于文件的知识。

2024-05-24 23:05:42 669

原创 Linux基础(三):入门基础

命令行:即 Linux 终端( Terminal ),是一种命令提示符页面。以纯"字符"的形式操作系统,可以使用各种字符化命令对系统发出操作指令。命令:即 Linux 程序。一个命令就是一个 Linux 的程序。命令没有图形化页面,可以在命令行(终端中)提供字符化的反馈。在 Linux 操作系统中,命令行处于核心的地位。命令行是一种对操作系统的输入和输出界面,与图形界面对应。目前,在计算机操作系统中图形界面成为主流。

2024-05-20 00:51:36 612

原创 Linux基础(二):环境搭建

本文准备从0开始,一步步搭建一套属于自己的Linux系统环境,这将是后续学Linux、用Linux、Linux环境编程、应用和项目部署、工具实验等一系列学习和实践的基石,希望对小伙伴们有帮助。提前备好Linux编程实验环境非常重要,建议人手一套,这样以后每当学完一个理论知识需要实践时,立马就可以拿到上面去练手了。因此本文先把环境给搭建起来!

2024-05-19 17:12:53 1247

原创 Linux基础(一):初识Linux

Linux 也是众多操作系统之一,要想知道 Linux 是什么,首先得说一说什么是操作系统。计算机软件分为操作系统软件和应用软件, 计算机是由一堆硬件组成的,为了有效的控制这些硬件资源,于是乎就有了操作系统的产生,操作系统除了有效的控制这些硬件资源的分配,并提供计算机运作所需要的功能(如网络功能)之外,还要提供程序设计师更容易开发软件的环境,所以操作系统也会提供一组系统调用的接口。操作系统就是控制硬件的内核程序以及提供程序员使用的系统调用。

2024-05-19 12:05:56 781

原创 嵌入式开发十七:USART串口通信

每秒种传送二进制数码的位数(二进制系统码元数等于二进制比特数),单位为Baud。串口通信(Serial Communication)设备间通过使用串行接口来通信称之为串口通信,外设和计算机间,按位进行传输数据的一种通信方式,属于串行通信方式。串口(串行通信接口)是一种通信接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片上外设;STM32 标准库则是在寄存器与用户代码之间的软件层。

2024-05-16 21:38:03 936

原创 嵌入式开发十六:外部中断实验1:通过外部中断控制灯亮灭

中断在嵌入式应用中占有非常重要的地位,几乎每个控制器都有中断功能。中断对保证紧急事件得到第一时间处理是非常重要的,本篇博客主要是外部中断的一个简单应用,我们设计使用按键来作为触发源,使得控制器产生中断,并在中断服务函数中实现控制LED灯的任务。通过这样一个简单的中断实验来熟悉中断的配置过程,为后续使用中断打好基础。

2024-05-16 13:35:18 804

原创 嵌入式开发十五:STM32中断系统

中断其实就是当 CPU 执行程序时, 由于发生了某种随机的事件(外部或内部),引起 CPU 暂时中断正在运行的程序, 转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程就称为中断,简而言之:打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断。引发中断的称为中断源。比如:看电视时突然门铃响,那么门铃响就相当于中断源。事件的发出者--------中断源此次事件本身-------中断中断是⼀个动作。

2024-05-16 02:01:51 751

原创 嵌入式开发十四:按键输入实验

按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开。我们开发板上使用的按键及内部简易图如下图所示:按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态,如 果按键按下,初始导通状态变为断开,初始断开状态变为导通。几乎每个开发板都会板载有独立按键,因为按键用处很多。常态下,独立按键是断开的, 按下的时候才闭合。每个独立按键会单独占用一个 IO 口,通过 IO 口的高低电平判断按键的状态。但是按键在闭合和断开的时候,都存在抖动现象。

2024-05-15 19:25:51 1055

原创 嵌入式开发十三:有趣的蜂鸣器实验

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类 型。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工作电压),多谐振荡器起振,输出 1.5~5kHZ 的音频信号,阻抗匹配器推动压电蜂鸣片发声。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。

2024-05-15 10:01:21 572

原创 嵌入式开发十二:初入STM32世界—跑马灯实验

任何一个单片机,最简单的外设莫过于 IO 口的高低电平控制了,本章将通过一个经典的跑马灯程序,带大家开启 STM32F4 之旅,通过本次的学习,你将了解到 STM32F4 的 IO 口作为输出使用的方法。我们将通过代码控制正点原子探索者 STM32F4 开发板上的两个 LED:DS0 和 DS1 交替闪烁,实现类似跑马灯的效果。目录一、实现的功能二、硬件设计三、程序设计3.1 创建工程模板3.2 工程中创建对应的文件3.3 添加文件路径3.4 添加相应的外设固件库和所需文件3.5 程序流程图3.5.1

2024-05-14 23:41:21 856

原创 数据结构十三:八大排序算法

所谓排序,就是使一串记录/数据,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小, 插入排序对于有序的序列效率很高。

2024-05-11 22:17:38 799 3

原创 嵌入式开发十一:GPIO端口的八种工作模式

GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出。STM32 芯片的 GPIO 引脚与外部设备连接起来, 从而实现与外部通讯、控制以及数据采集的功能。GPIO的作用:负责采集外部器件的信息或者控制外部器件工作,即输入输出可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。

2024-05-10 23:44:30 767

原创 嵌入式开发十:STM32开发基础入门知识补充

CM4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256 级的可编程中断设置。但 STM32F4 并没有使用 CM4 内核的全部东西,而是只用了它的一 部分。STM32F40xx总共有 92 个中断, 在 92 个中断里面,包括 10 个内核中断和 82 个可屏蔽中断,具有16 级可编程的中断优先级,而我们常用的就是这 82 个可屏蔽中断。/*!/*!/*!/*!/*!/*!/*!STM32F4 的中断在这些寄存器的控制下有序的执行的。

2024-05-10 00:02:30 715

原创 嵌入式开发九:STM32时钟系统

时钟是由电路产生的具有周期性的脉冲信号,众所周知,时钟系统是 CPU 的脉搏,就像人的心跳一样。所以时钟系统的重要性就不言而喻了。相当于单片机的心脏,要想使用单片机的外设必须开启相应的时钟,因为驱动外设的本质是操作寄存器,而寄存器是由D触发器构成,而触发器需要时钟才能改写值,所以要想操作寄存器必须开启对应外设的时钟。

2024-05-09 22:07:58 738

原创 嵌入式开发八:STM32启动过程分析

使用一个STM32芯片,对于内存而言有两个直观的指标就是 RAM 大小,FLASH大小,那么着两个大小意味着什么?怎么去理解这两个内存,那就得从什么是Flash,什么是RAM说起。⾸先,对于嵌入式开发,⼀般使⽤的是C语言开发。⽽我们知道C语言都是从main函数开始 的,因此,对于处理器来说它是如何找到并执行main函数的,就需要用到启动文件,就是各种 startup_xxx.s文件。对于我们STM32f407来说其启动⽂件为:startup_stm32f40_41xx.s。

2024-05-08 21:13:26 1268

原创 数据结构十一:数组相关经典面试题

上述这种思想,就可以达到把原数组等于待删除元素的值全部覆盖,从而达到删除的效果!

2024-05-06 22:54:13 885 2

原创 数据结构十:哈希表

之前学习的这么多抽象数据结构类型,例如顺序表,单链表..., 他们有一个共同的特点:数据的存储地址和数据本身是没任何关系的,它是随机的,在这些结构中进行查找,因为不知道key(关键字)和记录在结构中存储位置的关系,所以只能让key和结构中的记录进行一一比较,但是不一定是每个记录都要与key进行比较。在顺序查找时,比较的结果有"=“和"≠"两种可能。在二分查找,比较的结果有”>“,”

2024-05-05 20:23:53 1145

原创 嵌入式开发七:新建工程与环境配置—库函数版

上一节我们学习了如何新建寄存器版本的工程,其中需要移植文件,相对来说,比较麻烦,并且我们是基于标准库的开发,因此,在这一节,我会详细介绍如何利用环境配置助手RTE新建库函数版本的工程,方便我们日后做开发,请务必熟练掌握!

2024-05-05 11:42:33 860

原创 嵌入式开发六:新建工程—寄存器版

通过前面的学习,我们对 STM32 有了个比较清晰的了解,本次我们将讲解新建寄存器库版本 MDK 工程的详细步骤。后期我们基于固件库开发,借助Keil5的环境配置助手界面RTE,不需要进行文件移植,本节的寄存器版本,作为了解内容,学习整个新工程的创建过程。

2024-05-04 20:09:51 1047

原创 嵌入式开发五:认识寄存器开发与标准库开发

以上所说的固件库是指“STM32 标准函数库”,它是由 ST 公司针对 STM32 提供的函数接口,即 API (Application Program Interface),开发者可调用这些函数接口来配置 STM32 的寄存器,使开发人员得以脱离最底层的寄存器操作,有开发快速,易于阅读,维护成本低等优点。

2024-05-04 13:31:50 1078

原创 嵌入式开发四:STM32 基础知识入门

define 是 C 语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方 便。常见的格式:#define 标识符 字符串“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。例如: #define HSE_VALUE 8000000U#define PLL_M 8 //定义标识符 PLL_M 的值为 8。定义标识符 HSE_VALUE 的值为 8000000,数字后的 U 表示 unsigned 的意思。

2024-05-03 11:59:42 1723

原创 嵌入式开发三:STM32初体验

经过以上对比,因此我们推荐使用 SWD下载,强烈推荐大家购买一个仿真器(如ST LINK、 CMSIS DAP 等),可以极大的方便学习和开发。不推荐使用串口下载(速度慢、无法仿真和调 试)和 JTAG 下载(占用 IO 多)。在正常编译完例程以后(0 错误,0 警告),点击:(开始/停止仿真按钮。

2024-05-02 13:06:17 1577 2

原创 力扣刷题第0天:只出现一次的数字

在数组的遍历中,可以利用整型变量/下标来代替指针,用于标记元素的位置,这道题引入了双指针思想来通过双层for循环暴力求解问题,这是算法题中一个基本的思想,必须熟练掌握。此外,异或运算具有“消消乐”的特点,需要注意。在后续更新中,我会一直写关于OJ题的题解,有兴趣的小伙伴可以关注作者,和作者讨论其他OJ题目,如果觉得内容不错,请给个一键三连吧,蟹蟹你哟!!!!!

2024-05-01 18:41:46 539

原创 力扣刷题第1天:消失的数字

通过这道题, 深刻体会到位运算中异或的巧妙之处,主要是利用了异或的重要性质:两个相同的数异或结果一定是0,0和任何数异或是它本身,并且满足交换律和结合律的,因此,位运算它是没有顺序之分的,改变数的运算顺序,并不会改变最后的结果。在后面的刷题中,注意总结这类题型,达到触类旁通!在后续更新中,我会一直写关于OJ题的题解,有兴趣的小伙伴可以关注作者,和作者讨论其他OJ题目,如果觉得内容不错,请给个一键三连吧,蟹蟹你哟!!!在时间的催化剂下,让我们彼此都成为更优秀的人吧!!!

2024-05-01 12:59:41 1246

原创 力扣刷题之准备工作

在刷算法题的过程中进行总结是非常重要的,它可以帮助你梳理思路、加深理解、记录学习成果,并提升解题能力。每天回顾:在每天结束时,对当天解决的题目进行回顾。检查解决方案的正确性,并思考是否有更优化的方法。记录下遇到的难点和解决方法,以及学到的新知识点和技巧。整理这些笔记并归档到适当的分类中,以便今后参考。每周汇总:在每周末或开始新一周时进行总结。复习过去一周解决的题目,分析解题过程中使用的算法和数据结构。总结你学到的关键知识点、解题技巧和模式,并将其整理到博客中。

2024-05-01 00:58:01 734

原创 数据结构九:线性表之链式队列的设计

现在,我们可以知道,其实从本质上来讲,链式队列就是重新设计头节点的单链表结构,并且只允许头删和尾插(队尾入队头出);对于循环队列与链队列的比较,可以从两方面来考虑,从时间上,其实它们的基本操作都是常数时间,即都为O(1)的,不过循环队列是事先申请好空间,使用期间不释放,而对于链队列,每次申请和释放结点也会存在一些时间开销,如果入队出队频繁,则两者还是有细微差异。对于空间上来说,循环队列必须有一个固定的长度,所以就有了存储元素个数和空间浪费的问题。

2024-04-30 01:00:32 662 1

原创 嵌入式开发二:搭建开发环境

我们开发 STM32 需要用到一些开发工具,如:IDE、仿真器、串口调试助手等。常见的工 具如表 3.1.1 所示:表中加粗部分是我开发使用的 STM32开发工具,即IDE推荐使用MDK、仿真器推荐使用DAP、串口调试助手推荐使用XCOM, 接下来我们介绍这几个软件的安装。至此,STM32 的开发环境就搭建完成了,关于如何使用串口助手与单片机进行通信,主要在后面串口通信进行详细分析与总结!

2024-04-29 23:19:32 1018

原创 数据结构五:线性表之带头结点的双向链表的设计

在单向链表中,如果要删除某个结点,必须先找到其前驱结点。而在双向链表中,由于每个结点都包含指向前驱结点的指针,因此无需查找前驱结点即可删除该结点。这种特性使得双向链表的删除操作更加简便和高效。因此,一个操作涉及到找一个结点的前驱结点时,双向链表是非常方便的,只需要访问它的前驱指针!!!双向链表有很多地方存在特殊情况,需要单独处理,因此,我们需要不断巩固,加深对于双向链表的理解,才能够灵活运用!

2024-04-27 18:34:07 753

原创 数据结构八:线性表之循环队列的设计

上篇博客,学习了栈,我们可以知道他也是一种线性表,遵从先进后出的原则,在本节,我们进一步学习另一种线性表—队列。就像饭堂里排队打饭的的队伍,作为一种先进先出的线性表,他又有哪些特别之处呢?又该如何应用呢?接下来,跟我走近队列的世界里。目录一、队列的应用场景二、队列的基本概念和结构2.1 队列的基本概念2.2 队列的结构2.3 队列的实现方式三、循环队列栈的接口函数实现3.0 循环队列设计的思想来源3.0.1 从数组存放的角度分析3.0.2 从时间复杂度的角度分析3.1 循环队列的三个关键问题及如何解决?3

2024-04-27 12:03:30 1072

原创 嵌入式开发一:初识Stm32

嵌入式,⼀般是指嵌⼊式系统。本质上是计算机系统的⼀种。计算机系统的应用市场: ①服务器市场:超强性能的处理器 ②桌面市场:通用处理器 ③嵌入式市场:嵌入式处理器。如何理解嵌入式系统?是以应用为中心,以计算机技术为基础,软硬件可裁剪适用于对功能、可靠性、成本、体积、 功耗有严格要求的专用计算机系统。嵌入式系统通常是嵌入到目标设备中的,为特定的任务提供计算和控制功能。是将应用程序、操作系统、和计算机硬件集成在⼀起的系统。单片机: Single-Chip Microcomputer,单片微型计算机。

2024-04-27 06:30:37 1133

原创 数据结构七:线性表之链式栈的设计

从以上分析,我们可以知道链式栈只是单链表的一种特殊情况,限定了数据元素的插入和删除位置,链式栈是一种基于单链表实现的栈,在空间复杂度上,顺序栈在创建时就申请了数组空间,若栈经常处于不满状态将造成存储空间的浪费;链式栈所需空间是根据需要随时申请的,比之顺序栈仅仅是其每个结点需要额外的空间以存储其next指针域。在时间复杂度上,对于针对栈顶的基本操作(压入、弹出和栈顶元素存取),容易看出,顺序栈和链式栈的时间复杂性均为O(1)。

2024-04-27 03:56:45 807

原创 数据结构六:线性表之顺序栈的设计

顺序栈的元素在内存中是连续存储的,这使得访问元素非常高效。由于数组支持随机访问,因此可以直接通过索引访问栈中的任何元素,而不需要下一节讲的链式栈那样遍历链表。顺序栈的实现比较简单,不需要额外的指针来维护元素之间的关系,只需要一个数组和一个指向栈顶的索引即可。这使得其在空间和时间复杂度上都比较高效。顺序栈适用于大多数栈的应用场景,无论是简单的数据处理还是复杂的算法实现,都可以方便地使用顺序栈来完成。4. 易于实现。

2024-04-26 10:01:17 997 1

原创 数据结构四:线性表之带头结点的单向循环链表的设计

单向循环链表的插入,删除算法与单链表基本一致,所不同的是若操作在链表的尾部进行,则判断条件发生变化不同,以让单链表继续保持循环的性质。因此,需要记住循环链表判空和判断是否为尾巴结点的条件!即循环链表中没有NULL指针。涉及遍历操作时,其终止条件就不再是像非循环链表那样判别p或p->next是否为空,而是判别它们是否等于某一指定指针,如头指针或尾指针等。

2024-04-25 22:45:06 1402 2

原创 C语言如何生成随机数以及设置随机数的范围

可以多运行几次,可以发现:会发现一次运行中产生的5个数字是相对随机的,下一次运行程序生成的结果会和上一次一模⼀样。如果再深入了解⼀下,我们就不难发现,其实rand函数生成的随机数是伪随数,伪随机数不是真正的随机数,是通过线性同余法算法生成的随机数。真正的随机数的是无法预测下一个值是多少的。而rand函数是对一个叫“种子”的基准值进行运算生成的随机数。之所以前面每次运行程序产生物的随机数序列是一样的,那是因为rand函数生成随机数的默认种子是1。如果要生成不同的随机数,就要让种子是变化的。

2024-04-13 11:35:44 901

原创 数据结构三:线性表之单链表(带头结点单链表设计)的设计

线性表的链式存储结构正是所谓的单链表,何谓单链表?通过地址将每一个数据元素串起来,进行使用,这可以弥补顺序表在进行任意位置的插入和删除需要进行大量的数据元素移动的缺点,只需要修改指针的指向即可;单链表的种类又可划分为很多种,本篇博客详细介绍带头结点单链表的设计与实现,掌握单链表的关键是要进行画图分析;单链表同时也是笔试和面试的必考点,因此,掌握好该章节非常重要!

2024-01-23 19:45:11 1169 2

原创 数据结构二:线性表之顺序表(不定长顺序表)的设计与实现

本篇博客详细总结数据结构中的第一种结构:线性表之不定长顺序表,主要从以下几个方面梳理:线性表的定义、顺序表的概念、顺序表的基本操作:增删改查的基本思想及代码实现、基本操作的算法效率分析(时间复杂度和空间复杂度)、顺序表的优缺点适用场合,以及常见的面试题。

2024-01-22 16:20:38 1084

原创 数据结构一:算法效率分析(时间复杂度和空间复杂度)-重点

本篇博客详细总结如何计算一个算法的时间复杂度和空间复杂度,根据代码的编写形式分为:非递归式(循环)和递归代码的时间复杂度,空间复杂度计算,根据出题的形式又可分为:给定代码计算时间复杂度和空间复杂度,或者给定题目请设计算法同时给出时间复杂度和空间复杂度;后者作为笔试面试的重点考查方式,需要重点掌握!

2024-01-20 17:32:49 1157

原创 C语言总结四:实用调试技巧

今天的软件环境在不断向着大型化 、并行化、复杂化方向发展 , 定位瑕疵的难度也在随之不断提高。完全靠读源代码来寻找 bug的方法已经很难适应今天的软件发展形势 。本篇博客详细总结VS2019平台代码调试的方法和技巧,代码的调试同时也是提高编程技能最有效的途径,通过大量的实践调试,可以总结出一定的经验,提高编码能力。

2024-01-19 16:49:24 1207 1

原创 C语言总结十四:程序环境和预处理详细总结

了解程序的运行环境可以让我们更加清楚的程序的底层运行的每一个步骤和过程,做到心中有数,预处理阶段是在预编译阶段完成,掌握常用的预处理命令语法,可以让我们正确的使用预处理命令,从而提高代码的开发能力和阅读别人代码的能力,本篇博客详细总结C语言中的程序环境和预处理,达到理解并运用的目的!

2024-01-18 18:05:36 1358

原创 C语言总结十三:文件操作详细总结

在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。我们不去探讨硬件设备是如何被映射成文件的,把任意 I/O 设备,转换成逻辑意义上的标准 I/O 设备或标准文件的过程,并不需要程序设计者感知和处理,是由标准 I/O 系统自动转换完成的。大家只需要记住,在C语言中硬件设备可以看成文件,有些输入输出函数不需要你指明到底读写哪个文件,系统已经为它们设置了默认的文件,我们对于文件的操作就相当于对硬件设备进行操作,在本篇博客,详细总结

2024-01-17 22:18:47 1381

空空如也

空空如也

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

TA关注的人

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