自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 查看visual studio的MSVC版本的方法

然后点击库目录,下拉点击编辑。右键项目名称,下拉点击属性。就可以看见msvc版本了。

2025-03-21 17:16:51 602

原创 ubuntu下一键编译

这样只需在终端敲出make,就可以自动编译并且运行了。

2025-02-10 19:58:05 297

原创 NULL是什么东西

空指针用于指示指针不指向任何有效的内存位置,并且在编写健壮的指针操作代码时非常重要。使用空指针可以避免解引用无效指针导致的未定义行为,并有助于编写更安全和更可读的代码。(不让他指个东西的话,就是野指针,他会乱指)NULL就是(Type *)0,他表示一个不指向任何有效内存的空指针。

2024-05-15 19:07:38 300

原创 strlen计算长度不包括\0

2024-05-15 18:50:58 551

原创 为什么宏定义后面不要加分号

宏是把东西都替换掉,把SQUARE(4)替换成printf函数,如果定义带了分号,那么下面的语句将会有两个分号。没有初始化指针,这是一个野指针,地址随机分配,如果分配到不能访问就有很大的问题了。在printf打印的字符串里面,可以用宏定义的替换x。为什么宏定义后面不要加分号?#代表的时C的预处理。

2024-05-15 18:25:31 329

原创 逻辑与&&和按位与&

还有逻辑与在前面一个条件为0后,他不会去再执行右边的条件,如果数组长度为10,到第10个的时候,10<10,为假,他不会再去执行后面一个条件arr【10】,如果执行这一指令,可能会报错,超过数组长度的写入是一定会报错,但是写入一般不会,只有在那个区域为不可读时,才会报错,逻辑与符号:&&,他的两边只有两种情况,0或者1,即真或假, (就是他的名字意思,逻辑)按位与两边可能是数字,但是这个例子,在while括号里面的条件,他只有两种情况0 1。而按位与,一定会执行到这一条,没有报错,只是侥幸。

2024-05-15 16:33:26 262

原创 嵌入式面试题笔记

来源:b站大佬 嵌入式技术公开课。

2024-05-15 09:55:00 126

原创 【无标题】

问: a是一个指针,他存放的数据应该是“AAA”的首地址,为什么使用%s可以正确打印出“AAA”

2024-05-15 08:57:13 221

原创 郝斌 C语言详细笔记,指针部分

a是指针变量,他是以指针a的内容(即b的地址)为地址的变量,存放内容就是b所在的内存地址上所存储的数字2.指针a里面存放的是b的地址,a的内容是b的地址:4206608,a的地址是4225568(&a)。64位操作系统下,指针是8位的,他要拥有能寻址到每一个内存地址的能力。

2024-05-15 08:14:00 261

原创 C语言知识点

先看括号里面,c先和中括号结合,c[10],所以c就是数组,再看前面有个*号,所以这个数组里面装的是指针,即指针数组,然后再和后面的括号结合,这个数组里包含的指针指向函数,再看最前面,char*,说明这个函数的返回值就是指向char的指针。1.那里是在定义函数形参时使用的,他表示这个函数要传入一个FP函数指针类型,指针指向有两个int输入参数的函数又因为函数名就是保存首地址,可以看为指针,所以在2.那里调用时,就可以直接传入函数名,sum。1.指针函数:简单扩句,返回值是指针的函数(很简单,非要取个名字)

2024-05-15 07:13:28 350

原创 阅读《FreeRTOS内核实现与应用开发实战指南:基于STM32 (刘火良, 杨森) 》

就是这两文件,s是汇编编写的启动文件,c是时钟文件。

2024-05-14 14:51:44 287 1

原创 信号量----反转优先级

信号量只负责加或减,不负责其他信息交流,他的效果类似于票,有票,并且你得到了,你就能进入景区,反之没票,你就得等,等别人把票用完后,放回售票处。创建信号量有两种,一种二进制,一种计数,最大的区别就是二进制初始值为零,也就是说·,用二进制创建的信号量一开始是没票的,先要给他。这里要注意,你创建一个信号量之后,你想拿这个信号量来管理任务的运行,但是有哪些任务是归这个信号量管,哪些是不归这个信号量管呢?首先要明白,在freertos里面,任务是有优先级的,高优先级任务先运行,那么信号量是如何实现优先级反转的呢?

2024-05-14 09:20:27 367 1

原创 韦东山freertos,三跑道小车部分源码解读

首先来看这个函数的形参,void *params,表示我们要传入一个指针,因为是void,所以传入的这个指针指向什么是无所谓的,结合数组和取地址符号&的知识,&g_cars[0]就是一个指针,他指向的是数组g_cars的第一个元素,{0,0,。首先,数组就是同一类元素的有序序列,按照这句话解读,这个数组里面的元素就是结构体car,所以每个数组内的元素有三个参数,分别对应结构体car的x,y,control_key,这样我们就可以在不同的位置和用不同的按键绘画和控制小车了。所指向的结构体(或类)的成员。

2024-05-13 20:43:34 441

原创 定义函数时,参数格式

我们可以得出结论struct ir_data* pdata,这种带星号的参数,是指针,我们在使用他的时候,要在传入的参数前加上&这样才是正确的传入了指针。注意,这时传入的参数已经是一个指针了,我调用他时在他前面又加上了&,这个就是指向指针的指针,二级指针。函数要求的就是一个指针,当然我们使用二级指针也可以正常运行,也可以改为。至此我们就知道了,我们调用他的时候要传入一个&结构体名的参数。指向结构体struct ir_data的一个指针。这个函数要传入什么参数?

2024-05-13 17:35:07 282

原创 freertos杂记

结构体可以作为函数的参数和返回值,通过传递结构体实例来传递和操作多个相关数据。{0, 1, 0}, // 第二个结构体的 x, y 为 0, 1,z 为 0。{0, 0, 0}, // 第一个结构体的 x, y, z 均为 0。更加安全和通用,可以提高代码的可读性、可维护性和灵活性。中的每一个二进制位都向左移动了一位,最右边的位被舍弃,同时在最左边补充一个零。第一个结构体对应的x,y,z,对应第二个结构体数组的{0,0,0}也是可行的,但两者之间有一些细微的差别。MyStruct类型。

2024-05-13 17:02:41 353

原创 老铁的杂记

这句里面strerror(err)是什么意思?对应的错误码转换为对应的错误消息字符串。

2024-05-09 20:20:34 423

原创 keil5编译器将全局变量优化问题

编译器一开始就将g的值放入了处理器的寄存器中,放进去的就是g=0的值,并不去访问ram,而是一直在调用处理器中寄存器的原始值,导致无法运行,解决方法是。kei5中,对于访问频繁的全局变量,编译器可以尝试将其值分配到处理器的寄存器中。这样可以减少内存访问的开销,提高程序性能。:对于访问频繁的全局变量,编译器可以尝试将其值分配到处理器的寄存器中。但是任务1执行完成后,已经将标志位置一了,通过调试器查看g的值,g的值已经为1,但是程序卡在这里死循环。再编写一个任务2,等待任务1执行完成后,再执行任务内容。

2024-05-05 10:15:30 1004 2

原创 c primer plus中的void用法

第一个void表示这个choice没有返回值,(如果你把他改为int,他表示这个有返回值,且是1个int),第二个void表示这个函数没有参数,调用时这也写 choice();首先说明一下这本书名字的含义,primer表示入门书的意思,plus表示加强版,c语言入门书加强版。

2024-04-27 08:39:55 117

原创 结构体变量

这样写就可以了,和int是一样的,student现在就相当于一个变量类型。普通变量,如int a,float b,这种只能存放一个单一类型,如果我们想定义一个数据,如学生的一些基本信息,这时候单一的类型已经无法满足,因为我们要存放生日,年龄,学号等这些一起构成了一个数据,他和int是同等地位的。在我们写完上部分代码后,每次使用都要struct student stu来使用他,每次都要写struct很麻烦,这是侯引入typedef,type表示类型,define表示定义,定义类型就是给他起个别名。

2024-04-26 23:05:11 323 1

原创 使用超声波模块HC-sr04测量距离

然后接收echo,进入中断,判断是上升沿还是下降沿,调用Hal_GPIO_ReadPin读取是上升沿还是下降沿,上升沿就清零计数值打开定时器,最后计算距离值,我们设置的tim3的预分频值为7200,那么tim3的时钟频率就是72x10^6/7200,计数器里一个数就是1*10^-4秒,乘上340/2得到米为单位再乘上100得到厘米为单位。PA2配置为外部中断,注意选择上升沿和下降沿都中断,并且在nvic里面使能exti2,否则无法进入中断。时钟源选择内部时钟,预分频值7200-1,便于计算,引脚配置完成。

2024-04-22 08:42:27 615

原创 cubemx配置软件iic,读取mpu6050数据(附mpu6050初始化代码)

再将这些文件的.h文件包含进去,iic软件部分要修改的地方只有一处,再文件最上方,改一下你定义的引脚就可以,不需要在主函数里面再初始化了,因为刚才cubemx配置的时候,gpio已经被初始化,这段代码的可移植性非常高,值得借鉴。接下来就是显示了,如果你的显示和我一样只能显示字符串,不能显示浮点数,那就用spritf((char*)buf,“%.2f”,pitch)来将pitch转化为保留两位小数的浮点数,放入定义的缓存数组buf,再显示就好了。iic通信在硬件资源不足的情况下,可以用软件iic来代替。

2024-04-20 09:09:21 1143

原创 stm32中利用sprintf将数字转变为字符串显示

在编写单片机程序读取编码器速度时,想使用 OLED_ShowNum(1,1,get,5,16);这个函数来显示读取到的速度,但是发现这个函数只能显示正数, OLED_ShowString();这个函数可以显示负数,因此我想把int类型的get变成字符串显示,就用到了 sprintf((char *)display_buf,"%d",get);这个函数,第一个参数表示你想将你转换成的字符串放到哪个指针地址里面,可以先定义一个数组,数组名字就是指针,这样就可以调用OLED_ShowString();

2024-04-20 09:00:00 925

原创 使用cubemx配置stm32单片机显示编码电机速度

1.开启编码器模式,这一步在外设使用里面很容易遗忘,以为用cubemx配置完端口就可以正常使用了,其实并不是,配置完端口只是设置好了这些端口工作时的一些参数,就好像我们要出门,告诉了cubemx我们要什么颜色的,什么型号的车,然后cubemx把车停在我们面前,但是真正要启动,还是我们来,如何启动?这里挺有意思的概念是,这个定时器的输入“时钟源”就是霍尔传感器产生的方波,方波频率很小,就用不到分频器了,定时器的本质就是计数器,在这里很能体现。代码思路:1.开启编码器模式,捕获霍尔传感器产生的方波,开始计数。

2024-04-19 21:34:23 768

原创 指针常量和常量指针

还是按照 *读作pointer to ,p4 is const pointer to int const,翻译过来就是p4是一个常指针指向常整数,这时候不仅指针地址无法改变,地址里面的内容也无法改变,写p4=100;以这个为例子,p2 is const pointer to int,翻译成中文就是p2是一个常指针指向整数,p2是常指针,那么指针地址就不能修改,如果再写,p2=&b,这时就会报错。const代表着“常”的意思,就是不可改变,最早见到他是在 const int a=100;

2024-04-19 09:37:55 417

原创 TB6612驱动板引脚功能

快速使用tb6612电机驱动板,tb6612使用指南

2024-04-19 09:00:00 2151 1

原创 使用cubemx配置stm32连接蓝牙模块jdy31,实现手机开关led灯

UART通信一个最重要的参数就是波特率,只有双方都用约定好的速度发送接收数据才能保证数据不丢失,打个比方,比如a与b约定通信,他们约定a每秒发送五个字节,b每秒接收五个字节,按照约定速率,顺利通信,如果a不按照协议,他每秒发送6个字节,但是b还是按照每秒5个字节接收,这样就会丢失一个字节。回到引脚配置,最上面的mode,选择Asynchronous,异步通信,用这个协议基本都是异步通信,他的同步通信功能更多的是为了兼容其他协议,这个文件里面,每次接收到1个字节后就进入中断,进入到这个函数里面。

2024-04-18 14:23:14 3599 3

原创 使用cubemx配置定时器输出pwm波

pwm波是由定时器产生的,我们设置定时器计数的值(记到这个数,定时器就会跳到0,重新开始数数,应该是叫自动重装值),以及一个比较寄存器ccr的值,ccr是定时器能输出pwm波的重点,输出pwm波只是定时器其中1种功能,ccr就是pwm波的特有标识了,我们知道定时器在向上计数模式下,记到重装值就变回0,而ccr的作用就是一直与定时器的当前值进行比较,当ccr值比当前值低,就输出低电平,ccr比当前定时器值高,就输出高电平,由此就能输出pwm波了,那如何改变pwm的波形呢?

2024-04-18 12:13:50 811 1

原创 stm32蓝牙接收数据类型

用手机蓝牙发送给单片机的数据类型

2024-04-17 17:59:11 292

空空如也

空空如也

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

TA关注的人

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