自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STM:TIM定时器——定时中断

定时器基本定时的功能:定一个时间,让定时器每隔一个时间产生中断,来实现每隔一个固定时间执行一段程序的目的

2024-05-11 09:00:00 1232 1

原创 STM32:EXTI—外部中断的初始化

右边就是中断嵌套的执行流程,当其中一个中断正在执行时,又有新的优先级更高的中断来,那么就会再次打断中断,然后执行新的中断;新的中断结束,再继续原来的中断,原来的中断结束,再继续主程序,这就是中断嵌套。EXTI模块只有16个GPIO的通道,但每个GPIO外设都有16个引脚,如果每个引脚都占用一个通道,那么EXTI的通道就不够用了,因此在这里就会有一个。4、配置EXIT,选择边沿触发方式,比如上升沿,下降沿或者双边沿,以及选择触发响应方式,可以选择中断响应和事件响应(一般是中断响应);

2024-05-07 10:31:05 2577

原创 STM32:GPIO输入输出

GPIO(General Purpose Input Output)通用输入输出口,也就是我们平时所说的I/O口。可配置为8种输入输出模式。引脚电平:0v~3v,部分引脚可容忍为5v。输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等。输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接受数据等。

2024-05-04 18:32:28 2303

原创 【C语言】:动态内存管理

p原本是指向一块空间的,使用完后这块空间被还给操作系统,但是p里面任然保留了那块空间的地址。当是情况2 的时候,原有空间之后没有⾜够多的空间时,他会:1. 开辟新的空间;因此malloc开辟空间是在动态内存的堆区上开辟空间的,栈区中p指向的就是堆区中malloc开辟出某块空间的起始地址,如此通过指针p就能很好去访问这块空间。有时候我们需要的空间⼤⼩在程序运⾏的时候才能知道,那数组的编译时开辟空间的⽅式就不能满⾜了。malloc开辟空间可能成功也可能失败,因此malloc的返回值需要做检查,如何去实现呢?

2024-04-29 09:00:10 939

原创 【C语言】:枚举和联合体

联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合⾄少得有能⼒保存最⼤的那个成员)。在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查比较严格。我们可以看到上面代码输出的三个地址一模一样,代码2的输出,我们发现将i的第4个字节的内容修改为55了。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。如上图所示,我们只需要判断第一个字节的大小就可以知道计算机是大端存储还是小端存储。{}中的内容是枚举类型的可能取值,也叫枚举常量。

2024-04-07 18:36:06 742

原创 【C语言】:自定义类型__结构体

有了结构体,那我们应该如何去定义变量呢?int main()//按照结构体成员的顺序初始化struct stu s = { "张三",18,"男","721065" };//按照指定的顺序初始化struct stu s2 = { .age = 18,.id = "721065",.sex = "男",.name = "张三" };return 0;在进行初始化时,结构体内部也可以包含结构体。int i;

2024-04-06 20:33:18 2260 1

原创 【C语言】:内存函数

• 将 ptr1 指向的内存块的第一个 num 字节与 ptr2 指向的第一个 num 字节进行比较,如果它们都匹配,则返回 0,或者返回一个与 0 不同的值,表示如果它们不匹配,则哪个值更大。• 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。将 num字节的值从源指向的位置直接复制到目标指向的内存块。将 num字节的值从源指向的位置复制到目标指向的内存块。

2024-04-05 20:08:33 548 1

原创 【C语言】:字符函数和字符串函数

• 如果source 指向的字符串的⻓度⼩于num的时候,只会将字符串中到\0 的内容追加到destination指向的字符串末尾。• strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针。• strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标。的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是。有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。

2024-04-03 19:25:00 1897 1

原创 【C语言】:sizeof和strlen对比_超详解

再将其赋给short类型的s,结果还是short类型,short类型占2个字节的空间,因此第一个printf输出结果为2。上面这个代码中我们需要注意的是,strlen函数参数的部分需要传一个地址,当传递的是’a’时,'a’的ASCLL码值是97,就是将97当作地址传参。如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。strlen的作用是求字符串的长度,他统计的是字符串中’\0’之前的个数,遇到’\0’就停止。当数组是连续的字符串时,我们可以对比一下sizeof和strlen用法的不同。

2024-03-31 19:48:08 867 1

原创 【C语言】:数据在内存中的存储

char //字符数据类型short //短整型int //整型long //长整型long long //长长整型float //单精度浮点型double // 双精度浮点型类型的意义:1.使用这个类型开辟内存空间的大小。2.如何看待内存空间的视角。字节序:以字节为单位,讨论存储顺序的。超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储。⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节。

2024-03-22 18:39:10 788 1

原创 【C语言】:结构体

int* p;//对S进行初始化//也可进行初始化struct Bstruct S s;double d;int main()按照结构体成员的顺序初始化//按照指定的顺序初始化//这里用到了结构体访问操作符 .return 0;输出结果如上图所示。

2024-03-18 10:30:00 382

原创 【C语言】:指针__初阶

①指针是内存中最小单元的编号,也就是地址。②平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量。每个内存都有一个唯一的编号,这个编号也被称为地址,也就是说编号=地址。总结:指针就是地址,口语中说的指针通常指的是指针变量。//在内存中开辟一块空间//pa是专门用来存放地址(指针)的,这里的pa就被称为指针变量return 0;我们可以通过&(取地址操作符)取出变量的内存起始地址,把地址可以存放到一个变量中,这个变量就是指针变量。

2024-03-16 16:15:55 794 1

原创 【C语言】:操作符详解

型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。表达式的整型运算要在CPU的相应运算器件内执⾏,CPU内整型运算器(ALU)的操作数的字节⻓度⼀般就是int的字节⻓度,同时也是CPU的通⽤寄存器的⻓度。如果某个操作符的各个操作数属于不同的类型,那么除⾮其中⼀个操作数的转换为另⼀个操作数的类型,否则操作就⽆法进⾏。有符号整数的三种表⽰⽅法均有符号位和数值位两部分,2进制序列中,最⾼位的1位(最左边的一个数)是被当做符号位,剩余的都是数值位。如果两者的优先级相同,取决于他们的结合性。

2024-03-13 21:49:35 696

原创 C语言:数组

从输出的结果来看,每⼀⾏内部的每个元素都是相邻的,地址之间相差4个字节,跨⾏位置处的两个元 素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以⼆维数组中的每个元素都是连续存放的。从输出的结果来看,每⼀⾏内部的每个元素都是相邻的,地址之间相差4个字节,跨⾏位置处的两个元 素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以⼆维数组中的每个元素都是连续存放的。数组的下标是有范围限制的,数组下标规定从0开始,如果数组有n个元素,那么最后一个元素的下标就是n-1。

2024-03-11 12:30:00 972 1

原创 函数的递归__【C语言】

程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中广泛应用,一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,他通常把一个大型复杂的问题转化为一个与原问题相似的规模小的问题来求解。递归策略只需要少量的程序就可以描述出解题过程中所需要的多次重复计算,大大地减少了程序的代码量。我们通过一个代码来解释他的实现过程。例如:接收一个无符号的整型值,按照顺序打印出他的每一位。输入:1234,需要打印出1 2 3 4。

2024-03-09 15:15:00 418

原创 C语言:函数

了解了库函数,自定义函数其实更加重要。自定义函数和库函数一样,有函数名、返回值类型和函数参数。ret_type fun_name(形式参数)//ret_type是函数返回类型//fun_name是函数名//{}内的是函数体ret_type是用来表示函数计算结果的类型,可以是void,表示什么都不返回。fun_name是为了方便使用函数,可以根据自己所想要实现的函数功能去设计一个函数名。举个栗子吧~//写一个加法函数,完成两个整型变量的加法操作int main()int a = 0;

2024-03-08 14:49:11 851 1

原创 猜数字游戏

从上面的结果中我们可以看到虽然第一次的运行结果是随机的,但是下一次运行的结果和上一次的一模一样,这里就说明有点问题了。了解一下发现,rand函数生成的随机数是伪随机的,也就是说不是真正的随机数,真正的随机数是无法预测下一个值是多少的,而rand函数是对一个叫“种子”的基准值进行运算生成的随机数。程序中调用rand函数之前先调用srand函数,通过srand函数的参数seed来设置rand函数生成随机数的种子,只要种子在变化,每次生成的随机数序列也就变化起来了。time函数返回的这个时间差也被叫做:时间戳。

2024-03-05 19:31:29 370 1

原创 C语言:分支与循环(二)

(二)循环语句。

2024-03-03 15:43:25 882 1

原创 C语言:分支和循环(一)

C语言是结构化的程序设计语言,这里的结构指的,在我们日常生活中所见到的事情都可以拆分成这三种结构或者这三种结构的组合。如果表达式为真,则语句执行;如果表达式为假,则语句不执行。而在C语言中,也就是说如果表达式的结果是0,则语句不执行;表达式的结果如果不为0,则语句执行。例如:输入一个整数,判断是否为奇数。如果一个数不是奇数,那就是偶数了,那么对于任意一个数来说,我们如何去清楚的判断它是奇数还是偶数呢?这里就需要引入例如:输入一个年龄,若

2024-03-02 18:54:13 361 1

空空如也

空空如也

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

TA关注的人

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