自定义博客皮肤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)
  • 收藏
  • 关注

原创 “CAN”总线

CAN是Controller Area Network 的缩写(以下称为 CAN),是ISO*1国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统 被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很 多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需 要,1986年德国电气商博世公司开发出面向汽车的CAN通信协议。

2025-03-23 00:23:55 792

原创 嵌入式通信协议——“SPI通信”

SPI协议被广泛用于嵌入式通信,由Motorola(现在的NXP)在1980年代提出,它是一种“同步、全双工”的通信协议。

2025-01-19 18:26:04 1203

原创 STM32——“SPI Flash”

在给单片机写程序的时候,有时会用到显示屏,就拿市面上的0.96寸单色显示器来说,一张全屏的图片就占用8x128=1024个字节,即1kb的空间,这对于单片机来说确实有点奢侈,于是我买了一个8Mb的SPI Flash,型号为华邦的W25Q64。在手册里很容易看到他的介绍:它支持四线的SPI,在很大程度上增加了读写速度,同时在H7系列中还可以用作扩展的Flash,自带的QSPI功能强大,但是在F1系列中没有QSPI的功能,因此这里只介绍用STM32的普通硬件SPI来驱动这块Flash。

2024-12-23 00:13:44 1858

原创 linux入门——“实操‘自定义shell’”

因为我们不能影响到我们的父进程(这里使用了execvp来进行程序的替换,程序的替换是为了将该程序替换为其他程序来执行,并且程序的替换并不会创建新进程),所以在这里使用创建子进程来执行我们输入的命令,这里的程序替换的函数我们使用execvp,原因是第一个参数就是一个字符串(这里是命令),第二个参数可以传入字符的指针数组(这里是命令选项)。原因是这两个函数是把空格作为输入的两个字符串的分隔符,而我们的命令是带有空格的,所以我们直接从标准输入拿字符串。我在这里将空格替换为'\0',用来分割命令的参数。

2024-12-03 18:56:38 885

原创 C++入门——“C++11-lambda”

C++11支持lambda表达式,lambda是一个匿名函数对象,它允许在函数体中直接定义。

2024-11-28 20:54:58 487

原创 linux入门——“僵尸进程、孤儿进程”

在linux中,特别是我们自己写代码时,使用fork()创建子进程的时候,需要直到两种特殊的进程——僵尸进程、孤儿进程。这是我们不可忽视的进程的两种特殊情况。

2024-11-23 15:40:13 547

原创 linux入门——“初识make”

make是linux中的自动化构建工具,一般来说系统会自带make,如果没有,那么可以使用命令“sudo apt install -y make”来安装。

2024-11-05 01:39:12 1151

原创 C++入门——“C++11-右值引用和移动语义”

C++11相比于C++98增加以许多新特性,让C++语言更加灵活好用,但是貌似也增加了许多学习的难度,让我们依次了解一下这些特性都有啥吧。

2024-11-02 00:07:29 1023

原创 linux入门——“权限”

linux中有权限的概念,最常见的就是安装一些命令的时候需要输入sudo来提权,那么为什么要有这个东西呢?linux是一个多用户操作系统,很多东西看起来是有很多分,但是实际的存储只有一份(比如命令,不同的用户可以输入相同的命令,实际上用的是同一个地方的命令),多用户的时候,肯定不想别人能进入你的用户家目录,或者更改你的文件,这就是权限的意义所在。同时也能联系生活,很多东西都是我们不能接触的,所以,权限防的是想要更改你的文件的陌生人。

2024-10-12 23:05:16 1039

原创 数据结构——“AVL树”的四种数据旋转的方法

因为上次普通的二叉搜索树在极端情况下极容易造成我们的链式结构(这会导致我们查询的时间复杂度变为O(n)),然而AVL树就很好的解决了这一问题(归功于四种旋转的方法),它让我们的树的查询的时间复杂度变得接近于甚至等于O(logN)。它相比于普通的二叉搜索树,它增加了平衡因子来维持树的高度,增加了纸箱上一个节点的parent指针。另外,平衡因子的计算方法是右子树的高度减去左子树的高度,当当前节点的平衡因子的值为-1、0、1的时候,我们认为当前节点是平衡的,当为其他值的时候就不平衡,需要通过旋转来将树调整平衡。

2024-09-28 17:58:38 1239

原创 1.3寸单色OLED显示屏(128x64)驱动编写

市面上买到的显示屏的驱动给我的感觉很乱,资料也很老,于是突发奇想自己写驱动。我用的是四线SPI协议的1.3寸的屏幕,显示驱动是SH1106,在STM32F103C8T6单片机实现。

2024-09-24 23:49:16 1395

原创 linux入门——“linux基本指令”下

mv指令用于移动文件或者目录。语法是mv 源文件 目标文件。它的用法需要注意:当目标文件不存在的时候,默认是将源文件进行重命名操作,名字就是目标文件的名字,当目标文件存在的时候才会把源文件移动到目标文件。目标文件不存在:可以看到当目标文件不存在的时候,将test改名为mvtest。目标文件存在:可以看到test被移动到了mvtest的目录下。

2024-09-21 00:56:37 329

原创 数据结构——“二叉搜索树”

private:这里typedef了BSnode为Node的类型,方便使用。并创建了根节点,缺省值为空指针。

2024-09-17 00:02:43 756

原创 Linux入门——“Linux基本指令”上

在刚开始学习Linux时,首先需要掌握一些基本指令,以便我们能更好地使用Linux操作系统,以下指令在Ubuntu 22上执行。以下内容不过多介绍选项内容。

2024-09-14 23:11:55 1081

原创 C++入 门——“多态”

多态是面向对象的一个重要特性,它允许程序在运行时通过传入不同对象而呈现出不同的运行结果,比如同样的采访,询问老师的年龄和学生的年龄最后得到的结果是不一样的,这就呈现出一种多态。多态分为两种:静态多态(编译时期就确定)和运行时多态(运行时期就确定)。编译时的多态比如有:重载,模版等,本文介绍运行时多态。

2024-09-12 21:59:48 896

原创 C++入门——“继承”

面相对象的计算机语言有三大特性:“封装”、“继承”、“多态”。今天来讲解一下C++的一大重要特性——继承。通俗理解来讲,继承就和现实生活一样,子辈继承父辈的一些特性,C++中的继承也可以这样理解。它允许我们在保持原有类(父类/基类)特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称⼦类(派生类)。它的语法是:子类:继承方式 父类以上代码中,动物类是一个父类,而马类和驴类就是子类,他们继承了动物类的特点,并且子类拥有动物类的参数。

2024-08-20 17:02:38 1027

原创 C++入门——“模版”下

在原模板类的基础上,针对特殊类型所进行特殊化的实现方式就是模版的特化,从语义上理解就是给某个特定类型定制一套方案,以免在函数执行的时候出现错误的结果。二、全特化、偏特化//创建一个模版//模版的特化template<>int main()//测试return 0;运行结果:模版的特化有两种:一种是“全特化”即把模版参数列表中的所有参数都特化(以上示例),另一种是“偏特化”或者称作“半特化”(函数模板不支持偏特化),即只特化一部分模板参数。

2024-08-16 16:50:31 291

原创 C++“STL”——模拟实现String类

char* _str;

2024-08-01 16:12:32 709

原创 C++入门——“模版”上

在C++中,有一个用起来感觉很爽的功能,那就是模版,顾名思义,就是提供一个图纸,让编译器制动生成某个东西,可以很方便的达到我们的某些需求(例如,实现一个加法函数,可以避免开发者写很多个重载函数)。C++中,模版可以分为两类:“函数模版”,“类模版”。

2024-07-19 17:41:38 327

原创 C++入门——“类和对象”下

值得注意的是,友元类具有单向性,即A是B的友元,B不是A的友元(只在B中声明friend class A),而且不具有传递性:A是B的友元,B是C的友元,但是A不是C的友元,即A能访问B,B能访问C,但是A不能访问C。内部类在本质上是一个独立的类,外部类的大小不包括内部类,但是它受外部类的访问限定符的限制,而且内部类默认是外部类的友元类,即内部类可以访问外部类的资源,但是外部类不可以访问内部类的资源。成员变量的初始化顺序和初始化列表中成员变量出现的顺序不一样,它的顺序取决于成员变量在类中声明的顺序。

2024-07-15 20:07:06 585

原创 C++入门——“类和对象”中

C++中,类有六个默认函数,他们分别是“默认构造函数”,“析构函数”,“拷贝赋值运算符”,“拷贝构造函数”,“移动构造函数”,“移动赋值运算符”。如果开发者不显式地定义以上函数,编译器会自动生成,但是有一些时候编译器生成的往往不能满足我们的需求,因此需要开发者自己实现。那么今天介绍常用的前四种函数。

2024-07-13 22:32:59 839

原创 C++入门——“类和对象”上

class Test可以看到,类和C语言的结构体相似(虽然在C++中,结构体也可以定义类)但是他们又有所不同。1.类里面可以定义或者声明函数。2.类有访问限定符(public、private、protected)用来限制类域内容的访问权限。3.在类中定义的函数默认内联。

2024-07-11 20:58:50 1015

原创 C++入门——“命名空间”、“缺省参数”、“函数重载”、“引用”

C++在C语言的基础上增加了许多东西,在我看来,它和它的名字一样,是C语言的Plus的Plus版本,而且支持C语言的大部分语法,让码农写起来很是别有一番韵味。在这里向大家介绍C++的一些语法结构。

2024-07-11 16:37:30 865

原创 STM32H750XBH6“SysTick“延时实现

在STM32H7中,系统的时钟源并不像f1,f4一样来源于AHB总线,而是来源于PLL锁相环(在一般的配置中,会将Sys进行一分频),因此Sys的时钟是480MHz,因此系统滴答定时器输入时钟就是480MHz。

2024-06-06 14:25:33 710

原创 数据结构《堆》

堆是一种特殊的数据结构,它不同与我们队列和栈,堆属于二叉树的范畴,另外,堆分为大堆和小堆,大堆简单理解为就是父节点大于等于它的子节点,小堆就是父节点小于等于它的子节点,大堆小堆都属于完全二叉树。为了便于访问各个节点,这里使用数组实现堆。(已知父节点是i,那么左子树就是2i+1,柚子树就是2i+2;已知任意一个子树节点的下标是i,那么它的父节点就是(i-1)/2,这是因为整数的除法只保留整数位)。

2024-05-23 13:26:13 343 1

原创 数据结构《队列》

队列也是一种特殊的线性表,它遵循在一端插入数据,另一端删除数据,遵循先进先出的原则,由于特殊的读写方式,因此用链表比用数组更容易操作。

2024-05-17 18:37:11 434

原创 数据结构《栈》

栈是一种特殊的线性表,它只允许在固定的一端进行插入和删除的操作,进行数据插入和删除操作的一端叫栈顶,另一端叫栈低,另外,栈遵循先进后出的操作。

2024-05-17 13:01:17 317 1

原创 51单片机入门《点亮LED》

欢迎来到51单片机入门,本教程在大家会用keil创建工程的条件下,教大家如何使用51单片机,具体是代码讲解及其思路,教大家如何使用一些基本外设,话不多说,先开始学习单片机的第一步:点灯。本教程用的是普中的开发板,型号是A2,主控是STC89C52。

2024-04-12 16:28:58 1058

原创 数据结构“动态顺序表”实现方法及其原理

顺序表是基于数组来实现的,它属于线性表的一种,而顺序表又分为“静态顺序表”和“动态顺序表”。今天我们讲解的是动态顺序表。

2024-04-03 23:12:11 1932 1

原创 C语言“指针”学习总结(1)

在算计中,数据被储存在内存里,计算机是如何找到数据的位置呢?答案是通过地址查找,内存里的地址是已经约定好的,以字节为单位,如果我们想要访问内存的地址,那就用到指针变量来储存和访问内存里的地址。可以说指针就是地址,指针变量就是储存地址的变量。

2024-03-06 16:24:31 400 1

原创 stm32f10xEXTI外部中断基本步骤

2024-02-05 17:53:09 479 1

原创 C语言《指针》命名解析

学到指针,笔者发现在C语言里面有很多名字会让人摸不着头脑,比如“指针数组”“数组指针”“指针函数”“函数指针”“函数指针数组”......这些名字会让人觉得头大。那么他们到底是怎么个事呢?接下来让我分别给大家解释一下。

2024-02-03 20:38:14 1829 1

原创 《扫雷》游戏代码及其编程思路

首先这里有一个知识点,就是生成随机数用来当做坐标,将雷子放入里面,需要用到“rand”函数,但是为了防止每次生成的随机数都是一样的,所以还需要用到“srand”函数用来设置“种子”,为了保证每次的“种子”不一样,还需用到“time”函数来返回时间戳,需要用到“stdlib.h”和“time.h”的头文件,具体用法请查询资料,这里不作过多解释。那么第二步就是选了之后应该干什么,如果选了1,那么开始,选了0,那就退出,那么如果输入了其他的数字呢?前方设置成11*11的数组就是为了便于统计9*9最边缘的雷子数。

2023-12-12 16:21:38 455

原创 学习C语言章节《分支与循环》自我总结

1, “分支”,顾名思义,是在某一主干上额外生出来的一部分,如同每一条江河一样,都由许多细小的河流汇聚在一起,共同构成我们看到的,波涛汹涌的江河。那么,分支在C语言中的作用也和那些细小的河流一样,共同构成庞大的代码工程。1,循环就是在一定区域里面重复做某一件事,在C语言中,循环是一个不可或缺的功能,他的重要性如同西方不能失去与耶路撒冷,因此,学习并理解好循环在C语言入门时是非常重要的。

2023-11-29 23:47:59 1684 1

空空如也

空空如也

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

TA关注的人

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