- 博客(43)
- 资源 (8)
- 收藏
- 关注
原创 C++学习笔记——类与对象-封装
最近在学习C++ ,下面整理学习的步骤和笔记,以便日后查看,希望对读者有帮助。 若喜欢的话可以三连支持一下,谢谢!封装封装是C++面向对象三大特性之一封装的意义:将属性和行为作为一个整体,表现生活中的事物将属性和行为加以权限控制封装意义一:在设计类的时候,属性和行为写在一起,表现事物语法:class 类名{访问权限 : 属性 / 行为};设计一:设计一个圆类,求圆的周长#include <iostream>using namespace std;#define .
2022-04-19 17:23:36
580
原创 C++学习笔记——函数提高
最近在学习C++ ,下面整理学习的步骤和笔记,以便日后查看,希望对读者有帮助。 若喜欢的话可以三连支持一下,谢谢!函数的默认参数在C++中,函数的形参列表中的形象是可以有默认值的。语法: 返回值类型 函数名 (参数 = 默认值) {}因为b有默认参数,所以b后面变量都得有默认值最后一个有,但前面没有是可以的#include <iostream>using namespace std;int func1(int a, int b, int c){ return a.
2022-04-19 01:06:26
649
原创 数据结构与算法学习笔记——时间复杂度和空间复杂度
最近在学习数据结构与算法,下面整理学习的步骤和笔记,以便日后查看,希望对读者有帮助。 若喜欢的话可以三连支持一下,谢谢!事后统计法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。但这种方法显然是有很大缺陷的:必须依据算法事先编制好测试程序,通常需要花费大量时间精力,完了发觉测试的是糟糕的算法,那岂不是功亏一篑?不同测试环境差别不是一般的大!事前分析估算方法:在计算机程序编写前,依据统计方法对算法进行估算。经过总结,我们发.
2022-04-17 22:52:52
531
原创 数据结构与算法学习笔记——介绍
最近在学习数据结构与算法 ,下面整理学习的步骤和笔记,以便日后查看,希望对读者有帮助。 若喜欢的话可以三连支持一下,谢谢!程序设计 = 数据结构 + 算法数据结构就是关系,就是数据元素在相互之间存在的一种或多种特定关系的集合。逻辑结构:是指数据对象中数据元素之间的相互关系。物理结构:是指数据逻辑结构在计算机中的存储形式。四大逻辑结构集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他不三不四的关系。线性结构:线性结构中的数据元素之间是一对一的关系。树形结构:树形结构中的数.
2022-04-17 14:54:37
132
原创 C++学习笔记——引用
引用作用:给变量起别名语法:数据类型: &别名 = 原名事例:#include <iostream>using namespace std;int main(){ int a = 5; //内存 int &b = a; a = 10; cout << a << endl; cout << b << endl; b = 20; cout << a << endl;
2022-04-17 01:39:16
186
原创 C++学习笔记——内存四区
内存分区模型C++程序在执行时,将内存划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的参数值,局部变量堆区:由程序员分配和释放,若程序员不释放,程序结束是由操作系统回收内存死区意义:不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程程序运行前在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域代码区:存放CPU执行的机器指令代码区是共享的,共享的目的是对于频繁被执行
2022-04-17 00:08:54
161
原创 Git学习笔记——版本穿梭
最近在学习git ,下面整理学习的步骤和笔记,以便日后查看,希望对读者有帮助。 若喜欢的话可以三连支持一下,谢谢!(1)基本语法git reset – hard 版本号(2)实例操作穿越回之前的版本号,具体操作如下:这里变成了第二个版本不仅可以往前穿越,还可以往后穿越Git 切换版本,底层其实是移动的HEAD指针,具体原理如下head ——>master ——> first...
2022-04-15 01:02:07
205
原创 Git学习笔记——修改文件
最近在学习git ,下面整理学习的步骤和笔记,以便日后查看,希望对读者有帮助。 若喜欢的话可以三连支持一下,谢谢!命令 vim hello.txt 就是进入到hello文件里面,然后我在里面的第一行加了10个2,然后再查看库的状态显示 hello.txt已经被修改了,红色表示这次修改的文件还没有添加到暂存区。这是需要追踪一样,和之前的一样,具体操作如下:这时 hello.txt已经变成绿色的,表明已经添加到了暂存区,然后再次提交到文件库,具体操作如下:(这是第二次提交)这里修改了一行,但.
2022-04-15 00:25:43
925
原创 Git学习笔记——提交本地库
最近在学习git ,下面整理学习的步骤和笔记,以便日后查看,希望对读者有帮助。 若喜欢的话可以三连支持一下,谢谢!将暂存区的文件提交到本地库(1)基本语法git commit(2)案例实操这里的 d9b0a23] 是第一次提交的版本号查看状态时,与没有提交时少了 No commits yet查看历史记录,显示当前已经有一个版本通过git log 可以查看详细记录不仅可以查看已经提交,哈可以看到是谁提交了这个版本,所以用户签名一定要设置一下。...
2022-04-14 23:45:26
210
原创 git学习笔记——添加暂存区
最近在学习git ,下面整理学习的步骤和笔记,以便日后查看,希望对读者有帮助。 若喜欢的话可以三连支持一下,谢谢!出现了警告:CRLF将会被RL替换掉因为Windows换行符是CRLF,在Linux是LF。这时候我们来查看一下本地库的状态看看发生了什么变化:前两个依旧就没变,第三行的hello.txt由红色变成了绿色,绿色说明追踪到了这个文件,这个文件只是存在于暂存区里面。删除文件,这里的删除只是把暂存区里面的文件删掉,工作区还是存在的,可以 ll查看一下:那发生了什么变化,具体可以查.
2022-04-14 23:09:55
471
原创 Git学习笔记---初始化本地库和查看本地库的状态
最近在学习git ,下面整理学习的步骤和笔记以及一些错误提示的解决方法,以便日后查看,希望对读者有帮助。 若喜欢的话可以三连支持一下,谢谢!GitGit 命令 基于开发案例Git :分支特性 分支创建 分支转换 分支合并 代码冲突解决GitHub创建远程库代码推送 Push代码拉取 Pull代码克隆 CloneSSH免密登录Idea 集成 GithubGitee 码云码云创建远程库Idea 集成Gitee 码云版本控制在软件开发过程中,协同开发以及版本迭代更新是再正常不过.
2022-04-14 21:38:37
833
原创 全加器高进位和低进位的理解
全加器在将两个多位二进制数相加时,除了最低位以外,每一位都应该考虑来自低位的进位,即将两个对应位的加数和来自低位的进位3个数相加。这种运算称为全加。全加器的真值表如下:结果位因为要顾及低位,因此只要输入1 + 输入2 + 低位进位 = 结果位而高进位就是三个数相加有没有进位,有进位高进位的值为1,低进位则高进位的值为0。...
2022-04-13 21:25:27
13969
5
原创 模拟电子技术------半导体
半导体半导体的共价键结构硅是四价元素,原子的最外层轨道上有4个电子,称为价电子。本征半导体本征半导体是一种完全纯净的、结构完整的半导体晶体。半导体重要的物理特征是它的电导率,电导率与材料内单位体积中所含的电荷载流子的数目有关,电荷载流子的浓度越高,其电导率越高。电荷载流子的浓度取决于很多因素,包括材料的基本性质、温度值以及杂质的存在。半导体的中共价键对电子的束缚并不像绝缘体那样牢固,例如在室温下,被束缚的价电子就会获得足够的随机热振动能量而挣脱共价键的束缚,称为自由电子,这种现象称为本征激发
2022-03-06 00:10:14
3094
原创 HAL库笔记——通过按键来控制LED(基于正点原子STM32F103ZET6精英板)
首先我们来看看控制LED灯和按键的IO口LED初始化#include "bsp_led.h"void LED_GPIO_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStructure.Pin = GPIO_PIN_5; GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStr
2021-10-24 20:20:06
1093
原创 STM32F4 CAN 配置注意的细节问题
CAN总线通信的各节点通信时会产生相位差,所以要进行位同步,两个节点保持步调一致。CAN_SJW:重新同步跳跃宽度(SJW) 。定义了在每位中可以延长或缩短多少个时间单元的上限。其值可以编程为1到4个时间单元。CAN_BS1:时间段1(BS1):定义采样点的位置。其值可以编程为1到16个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频率差异所造成的相位的正向漂移。CAN_BS2:时间段2(BS2):定义发送点的位置。其值可以编程为1到8个时间单元,但也可以被自动缩短以补偿相位的负向漂移。C
2021-10-23 14:52:16
1366
原创 STM32 CAN 介绍以及相关配置
STM32有两组CAN 控制器,CAN1是主设备,CAN2是从设备,存储访问控制器由CAN1控制,CAN2不能直接访问存储区域,所以使用CAN2的时候必须使能CAN1的外设时钟。禁止收发任然可以访问FIFO里面的数据。发送错误和接收错误的次数达到一定的值时,就会进入离线状态,在离线状态下,CAN是不能接收和发送报文的。ABOM:自动离线管理AWUM:发送报文时,总线会自动唤醒NART:报文发送失败,会自动重传,直到成功为止RFLM:锁定接收FIFO,锁定后,当接收FIFO溢出时,就会丢弃一个接收
2021-10-21 11:35:52
3493
转载 STM32中GPIO工作原理详解
STM32的GPIO介绍GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。STM32的大部分
2021-10-10 23:56:37
409
原创 C语言——volatile关键字讲解
许多程序员都无法正确理解C语言关键字volatile,这并不奇怪。因为大多数C语言书籍通常都是一两句一带而过,本文将告诉你如何正确使用它。在C/C++嵌入式代码中,你是否经历过以下情况:代码执行正常–直到你打开了编译器优化代码执行正常–直到打开了中断古怪的硬件驱动RTOS的任务独立运行正常–直到生成了其他任务如果你的回答是“yes”,很有可能你没有使用C语言关键字volatile。你并不是唯一的,很多程序员都不能正确使用volatile。不幸的是,大多数c语言书籍对volatile的藐视,只是
2021-10-10 23:48:49
4000
1
原创 控制系统与电机的关系
什么是控制系统控制系统是指由控制主体、控制客体和控制媒体组成的具有自身目标和功能的管理系统。 也可理解为:为了使控制对象达到预期的稳定状态。例如一个水箱的温度控制,可以通过控制水温加热设备输出的功率进而来改变水温达到目标温度,这个水箱的温度控制可以称之为一个简单的控制系统。自动控制系统的工作原理是什么对生产某些关键性参数进行自动控制,使它们在受到外界干扰(扰动)的影响而偏离正常状态时,能够被自动地调节而回到工艺所要求的数值范围内。自动控制系统一般分为开环和闭环。...
2021-09-03 23:30:27
569
原创 编码器笔记
什么是编码器编码器是一种用来测量机械旋转或位移的传感器。这种传感器能够测量机械部件在旋转或直线运动的位移位置或速度等信息,并将其转成一系列电信号。编码器的分类根据检测原理分为光电编码器、磁编码器、感应式编码器。根据运动方式分为线性编码器、旋转编码器。根据编码类型分为增量式、绝对式、混合式。旋转编码器原理-增量式将设备运动时的位移信息变成连续的脉冲信号,脉冲个数表示位移量的大小。增量式编码器只输出设备的位置变化和运动方向,不会输出设备的绝对位置。旋转编码器原理-绝对式绝对式编码器的码盘上有很
2021-08-18 17:29:26
764
原创 FreeRTOS笔记——计数型信号量(实验附代码)
计数型信号量简介有些资料中也将计数型信号量叫做数值信号量,二值信号量相当于长度为 1 的队列,那么计数型信号量就是长度大于 1 的队列。同二值信号量一样,用户不需要关心队列中存储了什么数据,只需要关心队列是否为空即可。计数型信号量通常用于如下两个场合:1 、事件计数在这个场合中,每次事件发生的时候就在事件处理函数中释放信号量(增加信号量的计数值),其他任务会获取信号量(信号量计数值减一,信号量值就是队列结构体成员变量uxMessagesWaiting)来处理事件。在这种场合中创建的计数型信号量初始计数
2021-08-15 23:13:34
1162
原创 FreeRTOS笔记——低功耗 Tickless 模式
很多应用场合对于空耗的要求很严格,比如长期无人照看的数据采集仪器,可穿戴设备等。 其实很多 MCU 都有相应的低功耗模式,以此来降低设备运行时的功耗,进行裸机开发的时候就可以使用这些低功耗模式。但是现在我们要使用操作系统,因此操作系统对于低功耗的支持也显得尤为重要,这样硬件与软件相结合,可以进一步降低系统的功耗。这样开发也会方便很多,毕竟系统已经原生支持低功耗了,我们只需要按照系统的要求来做编写相应的应用层代码 即可。FreeRTOS 提供了一个叫做 Tickless的低功耗模式。下面是低功耗模式的笔记!.
2021-08-13 00:14:29
1901
原创 C语言笔记——指针的高级应用
动态存储分配C语言的数据结构通常是固定大小的。例如,一旦程序完成编译,数组的元素就固定下来了。因为在编写程序时强制选择了大小,所以固定的数据结构可能会有问题。也就是说,在不修改程序并且再次编译程序的情况下无法改变数据结构的大小。为了扩大数据库的容量,可以增加数组的大小并且重新编译程序。但是,无论如何增大数组,始终有可能填满数组。幸运的是,C语言支持动态存储分配,即在程序执行期间分配内存单元的能力。利用动态存储分配,可以设计出能根据需要扩大(和缩小)的数据结构。虽然动态存储分配适用于所有类型的数据,但主
2021-07-23 16:28:23
291
原创 C语言笔记——预处理器(入选C/C++领域热榜)
预处理指令大多数的预处理指令都属于3中类型之一宏定义。#define指令定义一个宏,#under指令删除一个宏定义文件包含。#include 指令导致一个指令文件的内容被包含到程序中。条件编译。#if、#ifdef、#ifndef、#elif、#else和#endif指令可以根据预处理器可以测试的条件来确定是将一段文本块包含到程序中还是将其排除在程序之外。剩下的#error、#line、#pragma指令是更特殊的指令,较少用到。指令都以#开始。#符号不需要在一行的行首,只要它在之前只有空白字符就
2021-07-22 23:02:13
167
2
原创 用c语言求水仙花数的另一种方法
相信大家都知道求水仙花数的通用方法,可能有人会觉得用/或%来求个位,十位,百位有些难理解,下面我来介绍另一种方法。#include <stdio.h>int main(){ int i,j,k; for(i=1;i<=9;i++) { for(j=0;j<=9;j++) { for(k=0;k<=9;k++) { if((i*i*i+j*j*j+k*k*k)==i*100+j*10+k) { printf("%d\
2021-07-22 15:44:01
88
原创 原来两个整数的最大公约数和最小公倍数还可以这样求(不用辗转相除法)
有人说,求两个整数的最大公约数和最小公倍数的辗转相除法有些难记且不易理解,下面我介绍自己的一种方法。#include <stdio.h>int max(int x,int y){ int k; if(x%y==0) return y; else { for(k=y-1;k>0;k--) { if(y%k==0) break; } return k; }}int min(int x,int y){ return x*y/max(
2021-07-22 15:29:38
145
原创 STM32——用PWM控制电机
最近在研究电机,于是想写一篇文章来记录我的学习历程。下面是用PWM来驱动电机,涉及的电机驱动是L298N。大概的思路:初始化连接电机的IO口,配置定时器的PWM模式,配置电机IO口的电平。代码如下:#include "moto.h"void MOTO_GPIO_Init(void){ /*定义一个GPIO_InitTypeDef类型的结构体*/ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2
2021-07-14 18:02:45
41819
116
原创 STM32笔记——USART
串口通信(Serial Communication)是一种设备间非常有用的串行通信方式。对于通信协议,我们以分层的形式来理解,最基本 的就是把它分为物理层和协议层,物理层规定通信系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通信逻辑,统一收发双方的数据打包、解包标准。简单来说,物理层规定我们用嘴巴还是肢体来交流,而协议层规定我们有中文还是英文来交流。物理层(主要讲解RS232)RS-232标准主要规定了信号的用途,通信接口以及信号的电平标准。由于RS232电平标准的信
2021-07-14 01:36:07
718
原创 STM32笔记——常用的存储器
存储器是用来存储程序源码和数据的部件,有了存储器计算机才具有记忆功能。存储器按其存储介质特性主要怕分为“易失性存储器”和“非易失性存储器”两大类。在计算机当中,易失性存储器最典型的代表是内存,非易失性存储器的代表则是硬盘。RAMRAM是Random Access Memory的缩写,被译为随机存储器。所谓“随机存取”,指的是当存储器中的消息被读取或写入的时候,所需要的时间与这段信息所在的位置无关。根据RAM的存储机制,又分为动态随机存储器DRAM和静态随机存储器SRAM两种。DRAM动态随机存储.
2021-07-14 00:42:03
509
原创 STM32——基本定时器实验
实验内容:用基本定时器TIM6中断来实现LED灯1s的闪烁1.初始化LED灯的GPIO#include "led.h"void LED_Init(){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPI
2021-07-07 21:45:09
2061
1
原创 STM32笔记——高级定时器
高级定时器(TIM1/TIM8)和通用定时器在基本定时器的基础上引入了外部引脚,可以实现输入捕获和输出比较功能。高级定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车功能,这些功能都是针对工业电机控制应用的。高级定时器的时基单元包含一个16位自动重装载寄存器ARR,一个16位的计数器CNT,可向上/向下计数,一个16位可编程预分频器PSC,预分频器的时钟源有多种选择,有内部的时钟、外部的时钟,还有一个8位的重复计数器RCR,这样最高可实现40位的可编程定时。高级定时器框图时基单元自
2021-07-07 16:54:02
1645
原创 STM32笔记——基本定时器
STM32F1系列中,除了互联型产品,共有8个定时器,分为(2个)基本定时器、(4个)通用定时器、(2个)高级定时器。基本定时器 (TIM6/TIM7)是16位的只能向上计数的定时器,只能定时,没有外部IO。通用定时器(TIM2/TIM3/TIM4/TIM5)是16位可以向上/下计数的定时器,可以定时,可以输出比较,输入捕获,每个定时器都有4个外部的IIO。高级定时器(TIM1/TIM8)是一个16位的可以 向上/下计数的定时器,可以输出比较,输入捕获,还可以有三相电机互补输出信号,每个定时器都有8个
2021-07-07 15:51:35
1308
stm32c8t6写的陀螺仪MPU6050代码
2023-05-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人