自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STM32外部中断、定时器、USART和UART回顾

STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 个可屏蔽中断通道,系统 异常10 个,除了个别异常的优先级被定死外,其它异常的优先级都是可编程的//选择引脚//选择中断模式//NVIC配置基本定时器(TIM6 和 TIM7)主要两个功能,第一就是,生成时基第二就是 专门 用于基本定时器配置流程开启基本定时器时钟//设置定时器周期和预分频值,目的计数1s////使能定时器的更新中断配置NVICUSART。

2024-06-18 22:15:38 780

原创 STM32之ADC模数转换知识回顾

触发源触发方式:普通触发 和 外部触发 ,规则通道和注入通道都是这样普通触发:①。

2024-06-17 22:23:16 1163 1

原创 STM32F4之时钟树回顾

在main函数里,我们没有调用任何函数修改时钟参数,那么时钟频率被修改后是怎么生效的呢?启动文件由汇编编写,是系统上电复位后第一个执行的程序。它不同于晶振,晶振是由物理上产生的效果,RC振荡器不是由物理产生,所以它精确度并不是很高。最近再把时钟树好好重温一遍,并不是遗忘,而是想再阅读一遍,找到当初遗漏忽略的知识点。PLL PLL 的主要作用是对时钟进行倍频,然后把时钟输出到各个功能部件,由。出现故障的时候,系统时钟会 切换为HSI=16M。路漫漫其修远兮,吾将上下而求索。有两路的时钟输出,第一个输出时钟。

2024-06-17 01:07:54 652

原创 STM32之GPIO

然而,由于浮空输入模式的引脚状态容易受到外部干扰的影响,因此在使用时需要注意外部环境的干扰情况,以确保准确读取外部信号。最近稍微再复习了一下GPIO,再回过首来看当初自己初学GPIO时的那份懵懂,当初的一些疑惑也随之消散,原来所谓的困难也并非如此困难,我很喜欢天浩哥的那句话: 遇到困难,这时候你应该兴奋起来,每一个困难都在帮助我们自身找出问题,发现问题,解决问题,能力便会一步步提升。开漏模式,最重要的是只能输出低电平,高电平只能由外部上拉,I2C的线与,SPI等,基本会与通信协议挂钩。

2024-06-16 23:08:20 750

原创 STM32单片机MAX30102血氧检测模块全网不同的教学

还有个中断引脚,啥意思呢,就是数据准备好了,发个信号给你,你可以去读了,就是这个意思,新手可能会问 啊啊啊啊啊这个重要吗,是不是不弄就不能读数据了 我看别人都配置了,我只能说,见仁见智,不要害怕这些,学会不用中断的方式,那么对于其他,手到擒来。如果我要读300个数据,虽然缓存区只能存最多32个(这个好像自己也可以设置),但是我可以多读几次啊,这32个我先读走,后面又来32个满了,我继续读,那么现在我就有64 个数据了,那我继续读,把读到的数据存起来,存满300个即可。里面的逻辑是什么样子的呢?

2024-06-13 01:18:59 832 3

原创 STM32F407使用SPI协议读取ADXL345三轴加速度注意事项

关于ADXL345三轴加速度模块网上有很多都是关于I2C协议的,关于SPI的很少且对于新手没多少参考价值。于是我拿到模块想用SPI协议来读取信息,我们先来看一下这个模块。这个模块一共有10个引脚,在连开发板时,需要用到6个引脚(包括3V3 和 GND),关于引脚的连线我们先看一下官方提供的资料手册。在一开始,模块默认的SPI协议就是4线,根据手册,我们进行实物连接。根据实物图进行连接注意不要接反了,3V3,GDN正常接3V3/5V 和 GND就行。

2024-06-02 14:39:11 1070 3

原创 C语言2048小游戏精美代码

1.打印2048精美界面,有2种颜色界面,随机切换。3.随机方向出现"2或者4"5.使用递归算法实现。

2024-05-30 00:01:02 334

原创 Linux线程池添加任务实现拷贝目录下的所有文件

3.线程池头文件代码。4.main.c代码。

2024-05-29 23:47:11 343

原创 Linux系统编程之【线程池】

线程池时一种多线程处理形式,处理过程 将任务添加到任务队列上,线程池(thread pool)然后在创建线程后自动启动这些任务。

2024-05-29 23:29:28 143

原创 超详细最全数据结构个人笔记【哈希表】

哈希表是一种为了提高查找效率的数据存储方式,其核心思想就是将节点的存储位置与节点本身对应起来,让我们在查找数据时无需通过比对就能直接计算得到它的位置。

2024-05-29 23:20:45 709

原创 超详细最全数据结构个人笔记【平衡二叉树】

​ 平衡二叉树又称AVL树,它或者是一棵空树,或者是具有以下特性的二叉排序树(BST)(1) 它的左子树或者右子树都是平衡二叉树(2) 左子树和右子树的深度之差的绝对值不超过1(1,-0,-1)若将二叉树上的节点的平衡因子定义为该节点的左子树的深度减去它右子树的深度,所以平衡二叉树所有节点的平衡因子只可能是-1,0,1只有二叉树上有一个节点的平衡因子的绝对值大于1,则该二叉树不平衡。

2024-05-29 23:15:45 293

原创 超详细最全数据结构个人笔记【BST树】

​ 对于BST而言,插入一个节点主要是要保持其"小-中-大"的逻辑不变,因此插入的的逻辑可以从根节点开始,一步一步寻找新节点的"最终归宿",比如在如下BST中,要插入新节点16,最终应该插入到节点17的左孩子处。由于树中所有的节点均满足,“小-中-大”的规律因此当从根开始查找某个节点时速度比顺序查找要快的多,比如要找节点38,当发现38大于根节点13后,就可以确定13的左子树一定没有38,这就去掉了半边子树的节点。b. 否则,若有右子树,则用右子树中最小的节点min替换根节点,并在右子树中递归删除min。

2024-05-29 23:09:42 914

原创 超详细最全数据结构个人笔记【树】

​ 树是一种非线性结构,其严格的数学定义是:如果一组数据中除了第一个节点(第一个节点称为根节点,没有直接前驱节点)之外,其余任意节点有且仅有一个直接前驱,有零个或多个直接后继,这样的一组数据形成一棵树。​ 节点拥有的子树的数量,称为该节点的度,度为0的节点称为叶子节点或者终端节点,度不为0的节点,称为非终端节点或者分支节点,比如上图节点B的度为2。​ 日常生活中,很多树的例子,比如一个公司的职员层级关系,学校中院系层级关系,族谱关系等,由于树状结构表现出来都是具有层次的,因此也称为层次结构。

2024-05-29 23:06:30 839

原创 超详细最全数据结构个人笔记【队列】

顺序存储的队列之所以被称为循环队列,是因为可以利用更新队头队尾的下标信息,来循环地利用整个数组,出队入队时也不必移动当中的数据。从上图可以看到,链式队列主要控制队头和队尾,由于管理结构体中保存了当前队列元素个数size,因此可以不必设计链表的头节点,初始化空队列时只需要让队头队尾指针同时指向空即可。构建一个顺序存储的循环队列,当用户输入数字时,将数字入队,当用户输入字母时,将队头元素出队。​ 队列是最常见的概念,日常生活经常需要排队,仔细观察队列会发现,队列是一种逻辑结构,是一种特殊的线性表。

2024-05-29 22:59:10 676

原创 超详细最全数据结构个人笔记【数据结构与时空复杂度】

​ 数据是指对事物的进行的记录并可以鉴别的符号,可以是文字,图片,字母,特殊字符,视频,音频…,对我们有用的信息都可以称为数据。​ 结构体是指元素(数据)的相互关联和相互作用的关系,比如学生,图书,交通干线等等​ 数据结构体 = 数据+数据与数据之间的关系​ 算法是为了实现计算的目的而制定一系列的计算步骤程序 = 数据结构体 + 算法。

2024-05-29 22:52:02 282

原创 超详细最全数据结构个人笔记【顺序表】

​ 顺序存储中,由于逻辑关系是用物理位置来表达的,因此从上述示例代码可以很清楚看到,增删数据都是比较繁琐的,需要成片的移动数据。顺序表对数据节点的增删操作是很不友好。总结其特点如下:1.优点​ 不需要多余的信息来记录数据的关系,存储密度高​ 所有数据顺序存储在一片连续的内存中,支持立即访问任意一个随机数 据,比如上述顺序表中第i个节点是s->data[i]2.缺点​ 插入、删除时需要保持数据的物理位置反映其逻辑关系,需要成片移动数据​ 当数据节点较多时,需要一整片较大的连续内存空间。

2024-05-29 22:49:54 533

原创 超详细最全数据结构个人笔记【顺序栈与链式栈】

只要满足上述条件,那么这种特殊的线性表就会呈现出一种"后进先出"的逻辑,这种逻辑就被称为栈,栈在生活中到处可见,比如堆叠的盘子、电梯中的人等等。​ 不管是顺序栈,链式栈,栈的操作逻辑都是一样的,但由于存储形式不同,代码的实现是不同的。使用链式栈,实现十进制转八进制:键盘输入一个十进制数,经过链式栈的相关算法,输出八进制数。入栈: 将节点插入栈顶之上,也称为压栈,函数名通常为push()​ 栈是一种逻辑结构,是特殊的线性表,特殊在只能在固定一端操作。取栈顶: 取得栈顶元素,但不出栈,函数名通常为top()

2024-05-29 22:45:03 952

原创 超详细最全数据结构个人笔记【单向链表】

另外注意到,整条链表用一个所谓的头指针 head 来指向,由 head 开始可以找到链表中的任意一个节点。​ 新节点接在原来链表的首节点前面,即新的节点指向原来的首节点,然后首节点被新节点替代。​ **1. 从无到有:**第一个节点的诞生,此时的首节点和尾节点都是它本身。​ 新节点接在尾节点后面,即尾节点指向新节点,原来的尾节点被新节点替代。​ 特点 : 新接入的节点在前面,后接入的节点在后面。​ 特点:后接入的节点在前面,先接入的节点在后面。​ 2.实现链表的修改节点和删除节点。

2024-05-27 10:03:27 738

原创 超详细最全数据结构个人笔记【双向链表】

​ 对链表而言,双向遍历数据节点相较于单向而言方便许多,因此双向链表在实际运用中是最常见的链式形态。附加题:合并两个链表,按从小到大排序(拆链表,比较节点,插入节点到新链表)1.实现循环链表删除节点。2.判断链表是否有环。

2024-05-27 10:02:59 307

原创 C语言实现2048小游戏

哈哈哈,我有点追求完美,我弄的东西一点要很完美,哪怕是一个小小的界面,我都会钻研几个小时。不过这也是我好久之前写的代码了,同志们也可以尝试自己去写一写,算是个C语言小项目!好了大概就是这个效果, 实现的核心逻辑我是用的递归算法,这里贴出一部分。那么这个界面图案是怎么打印出来的呢,废话不多说,直接贴代码。用递归的核心思想,实现C语言2048游戏!废话不多说,先上截图,看看效果。颜色是会改变的,是随机的。

2024-05-27 10:00:14 154

原创 超详细最全C语言个人笔记【第五章节-宏定义与条件编译】

ifndef 宏名...#else...endif#ifndef B#define B#endif1. 预定义日期和时间 __DATE__ __TIME__ 2. 函数名和当前行号__FUNCTION__ ___LINE__ 3. 文件名 __FILE__printf("日期:%s 时间:%s 当前文件:%s 当前行数:%d 函数名:%s\n",__DATE__,__TIME__,__FILE__,__LINE__,__FUNCTION__);// 打印行号。

2024-05-27 09:59:01 995

原创 超详细最全C语言个人笔记【第五章节-头文件】

静态函数、宏定义、结构体、联合体的定义都只能在其所在的文件可见,因此如果多个源文件都需要使用的话,放到头文件中定义是最方便,也是最安全的选择。由于自定义的头文件一般放在源码文件的周围,因此需要在编译的时候通过特定的选项来指定位置,而系统头文件都统一放在标准路径下,一般无需指定位置。.c),当某些公共资源需要在各个源码文件中使用时,为了避免多次编写相同的代码,一般的做法是将这些大家都需要用到的公共资源放入头文件(其中,/home/gec/pro/inc 是自定义头文件 head.h 所在的路径。

2024-05-27 09:58:28 434

原创 超详细最全C语言个人笔记【第五章节-联合体与枚举】

/ 联合体声明union nodechar c;double a;int b;// 联合体声明并创建数据段空间unionchar c;double a;int b;}node1;// 计算联合体大小// 联合体不能使用普通成员初始化// 联合体指定成员初始化// 指定成员初始化的覆盖方式为从下往上覆盖,比如b会覆盖a// 和联合体的声明无关.c = 'k',.a = 3.14,.b = 97,// 联合体成员引用。

2024-05-27 09:58:08 310

原创 超详细最全C语言个人笔记【第五章节-结构体】

结构体 . 成员n.a = 200;n.b = 'y';n.c = 2.22;// 姓名// 年龄char sex;// 性别// 1. 申请栈空间// 先定义在使用,数组不能直接赋值// 字符串拷贝// 2. 申请堆空间return -1;// 结构体指针使用的是->// 释放空间free(pst);pst = NULL;return 0;3. 结构体指针与数组跟普通变量别无二致,可以定义指向结构体的指针,也可以定义结构体数组。

2024-05-27 09:57:08 879

原创 超详细最全C语言个人笔记【第四章节-函数】

在C语言中,函数意味着功能模块。一个典型的C语言程序,就是由一个个的功能模块拼接而成的整体。也因为如此,C语言被称为模块化语言。对于函数的使用者,可以简单的将函数理解为黑箱子,使用者只管按照规定给黑箱一些输入,就会得到一些输出,而不必要理会黑箱子里面的运行细节。​ 黑箱的输入和输出日常使用的电视机可以被理解为一个典型的黑箱子,它有一些公共的接口提供给使用者操作,比如开关、音量、频道等,使用者不需要理会其内部电路,更不需要管电视机的工作原理,只需要按照规定的接口操作得到结果即可。

2024-05-27 09:56:44 771

原创 超详细最全C语言个人笔记【第三章节-指针进阶[补充]】

void 一般运用在指针或者,函数的返回值,或者函数的参数传递,不能用在非指针的定义,比如 void a = 10;错误作业:1.复习今天的内容,并且自行敲一遍或多遍代码直到掌握为止2. 完成字符串逆序输出3. 预习const类型指针const 型指针const型指针有两种形式:①常指针 ②常目标指针常指针:const修饰指针本身,表示指针变量本身无法修改。常目标指针:const修饰指针的目标,表示无法通过该指针修改其目标。常指针在实际应用中不常见。

2024-05-27 09:56:04 881

原创 超详细最全C语言个人笔记【第三章节-指针】

地址。比如 &a 是一个地址,也是一个指针,&a 指向变量 a格式指针的尺寸概念:指向一块未知区域的指针,被称为野指针。野指针是危险的。很多情况下,我们不可避免地会遇到野指针,比如刚定义的指针无法立即为其分配一块恰当的内存,又或者指针所指向的内存被释放了等等。一般的做法就是将这些危险的野指针指向一块确定的内存,比如零地址内存。

2024-05-27 09:55:43 740

原创 超详细最全C语言个人笔记【第三章节-数组进阶[补充]】

语言只有在第一含义的场合下表现为数组,其他大部分场合都表现为首元素的地址,当数组表现为首元素地址时,实际上就是一个指向其首元素的指针。数组运算实际上就是指针运算。

2024-05-27 09:54:50 147

原创 超详细最全C语言个人笔记【第三章节-数组】

/把这个数组的内存图画出来,并且把数组的名字的地址,还有每个元素的地址都打印出来,每个元素的地址相差几个字节?1、定义一个二维数组,存入 5 个学生的数学、语文、英语、物理、化学 5 门课程的成绩,计算并输出每一门课程的平均成绩和每一位学生的平均成绩。**总结:**地址偏移+1是偏移一个对象类型的地址,比如char类型的地址+1是偏移1字节,int类型的地址+1是偏移4字节,依次类推。画出 该二维数组的内存图 , 数组的名字代表的地址范围 是哪个,还有 &str[1] [2] +2 代表的地址范围。

2024-05-27 09:53:59 1002

原创 超详细最全C语言个人笔记【第二章节-找的一些题目】

冰雹猜想最大的魅力,在于其不可预知性,数字N的转化过程变幻莫测,有些平缓温和,有些剧烈沉浮,但却都无一例外地会坠入4-2-1的谷底,这好比是一个数学黑洞,将所有的自然数牢牢吸住。一时间学生、教师、研究员、教授,甚至是一等一的数学大拿、天才都纷纷加入这个看似简单的数学游戏,人们取了各种各样的数字N去检验这个算法,最终都无一例外地坠入自然数序列4-2-1,于是就自然萌生出这样的猜想:对于任意非零自然数N,经上述变换最终都将落入4-2-1序列的宿命。【5】编写一个程序,将用户输入的天数转化为等价的星期数和天数。

2024-05-27 09:53:34 274

原创 超详细最全C语言个人笔记【第二章节-控制流】

5.编程规范,写完if或else后,不管后面又没有语句,先写{}圈定为它的范围,然后再到{}里面补充语句,请用4个格缩进。

2024-05-27 09:07:01 976

原创 超详细最全C语言个人笔记【第二章节-运算符】

​ 2. 如果非要进行有符号的移位运算,那么左移的时候,空出来的补0,右移的时候,空出来不符号位(原码阶段);​ 1.在进行移位运算的时候,凡是被移出去的位都丢弃,凡是空出来的都补零,移位运算是针对的是无符号整数。请编写一个程序用位运算把data的第14、15位修改1,把22、23位修改为0, 并且输出修改后的数据。逻辑与:将两个关系表达式串联起来,当且仅当左右两个表达式都为真时,结果为真。逻辑或:将两个关系表达式并联起来,当且仅当左右两个表达式都为假时,结果为假。&:按位与,两个都为1,结果才为1。

2024-05-27 09:05:38 840

原创 超详细最全C语言个人笔记【第二章节-数据类型】

*以睁眼(1)闭眼(0)形式描述,整数,那英文呢?**

2024-05-26 20:00:23 863

原创 超详细最全C语言个人笔记【第一章节】

超详细C语言个人笔记【第一章节】

2024-05-26 19:27:32 1098

原创 STM32keil调试汗流浃背

平时调试啥的一点问题没有,今天调试的时候发现能进入调试界面,也能打断点,就是按F5后,程序不能停在断点处,一点反应都没有,我就纳闷了,检查了很多,设置啥的都没问题。最后发现 供电不够,带不起来晶振,程序都无法运行到 main函数。然后去网上查资料,有框框一顿改,一点用没有。最后祭出终极大招 重启电脑 后还是一样。同志们拜拜keil!

2024-05-26 17:54:00 77 1

原创 C 语言 宏的技巧 结合回调函数

宏将在所有出现它的地方展开,这一方面浪费了内存空间,另一方面有节约了切换时间。直接文本替换,不做任何语法判断,更不做任何中间运算。宏在编译的第一个阶段就被替换掉,运行中不存在宏。答:你写的依托答辩,谁知道你代码在写啥!可以看出我在干什么吗?typedef与宏区别。

2024-05-26 17:40:58 116

原创 北电 面试题!

北电 面试题!

2024-05-26 17:31:47 131

原创 <<Sony 笔试题>> 打印N层图案

废话不多说直接上代码,代码注释我写的很清楚,但我还是建议同志们先自己尝试思考。同志们思考一下如何打印出这个图案呢?输入层数N,就打印N行的图案。放到vscode里面运行一下。

2024-05-26 17:23:24 191

原创 C语言之回调函数

另外 这么多参数,是不是可以用 结构体呢, 我觉得学习就是不断思考, 别人的东西 取之精华,去其糟粕,相信我们会越来越进步!3.回调函数本质用法就是 这个函数的功能可以根据用户传入的参数去执行不同的函数 是不是有点抽象。不加()会不会报错。printf 和 printf() 有什么区别。2.对函数指针的熟悉,什么是函数指针,什么是指针函数。那么同志们,可不要忘了内联函数,忘记的自己复习一下。我这里给出我简单写的 代码 供同志们学习参考。搞懂这些,回调函数自然很简单。1.要知道函数名就是地址。

2024-05-26 17:12:10 151

原创 力扣题.34 (二分查找)在排序数组中查找元素的第一个和最后一个位置

二分查找,能采用二分查找的题,基本都是要排序好的,无论是 非递减 或者 非递增。同志们可以先了解2分查找,再先试着做这道题,最后再看我的。34. 在排序数组中查找元素的第一个和最后一个位置。请你找出给定目标值在数组中的开始位置和结束位置。废话不多说,二分查找的基本题,直接上代码。给你一个按照非递减顺序排列的整数数组。如果数组中不存在目标值。

2024-05-26 16:59:31 297

C语言2048小游戏精美代码

              1.打印2048精美界面,有2种颜色界面,随机切换                 2.基本的游戏功能                 3.随机方向出现"2或者4"                 4.判别胜利                 5.使用递归算法实现

2024-05-30

空空如也

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

TA关注的人

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