- 博客(42)
- 收藏
- 关注
原创 基于HAL库的stm32中串口的数据收发--基于串口命令shell实现(PC端通过usb转串口模块给单片机发指令,单片机接受指令并执行)以及对接安信可 ESP_01SWIFI模块的AT指令处理
STM32基于hal库串口的收发以及对接安信可esp_01swifi模块的at指令处理
2024-06-29 03:05:08
897
原创 C语言之main函数的返回值(在linux中执行shell脚本并且获取返回值)
C语言mian函数返回值以及在linux中执行shell脚本并且获取返回值
2024-06-10 19:16:12
632
原创 基于HAL库的stm32中定时器的使用--定时器中断每隔一秒进行led灯的闪烁以及定时器生成PWM
基于HAL库的定时器的使用--定时器计数中断实现led灯每隔1s闪烁以及使用TIM1定时器生成PWM
2024-04-26 02:05:04
3568
3
原创 安信可 ESP_01SWIFI模块的使用 (电脑通过usb转tll模块连接wifi模块进行调试)
电脑使用usb转tll连接安信可ESP-01wifi模块进行调试,使用手机端网络调试精灵app进行 数据的收发验证
2024-04-21 15:41:40
2274
1
原创 基于HAL库的stm32中串口的数据收发(使用stm32cubemx工具)
基于stm32(HAL库)的串口的数据收发 阻塞方式 串口中断方式 DMA方式 以及解决不定长数据的发送接收
2024-04-17 12:39:44
12393
5
原创 C语言之枚举
(1)枚举是把多个有关联的符号封装在一个枚举中,而宏定义是完全散的,也就是说枚举其实是多选一(2)什么情况下用枚举?当我们要定义的常量是一个有限集合时(譬如一星期有七天,一个月有31天,一年有12个月......),最适合用枚举(其实用宏定义也行)(3)不能用枚举的情况下(定义的符号常量无关联,或者无限的)用宏定义总结:宏定义先出现,用来解决符号常量的问题:后来发现有时候一些宏定义彼此之间有关联(多选一的关系),用宏定义来做可以但不贴切,于是乎发明了枚举来解决这个问题。
2024-03-14 15:58:54
629
1
原创 C语言之共用体
(1)共用体union和结构体struct在类型定义、变量定义、使用方法相似//共用体类型定义int a;char b;//共用体变量定义return 0;(2)共用体和结构体的不同:结构体类似一个包裹,结构体中的成员是彼此独立存在的,分布在内存不同单元中,只是被打包变成一个整体;共用体各个元素其实是一体的,他们共用一个内存单元。可以理解为:有时候是这个元素,有时候是那个元素 更准确的说法:同一个内存空间有多种解释方式//定义结构体类型int a;char b;
2024-03-09 18:51:01
2650
原创 C语言之offsetof宏与container_of宏
(3)这个宏的工作原理:先用typeof得到member元素的类型定义成一个指针,然后用这个指针减去该元素相对于整个结构体变量的偏移量(偏移量用offsetof宏得到的),减去之后就是整个结构体变量的首地址了,再把这个地址强制类型转化为(type *)即可。(1)知道一个结构体某个元素的指针,反推这个结构体变量的指针,有了container_of宏,可以从一个元素的指针得到整个结构体变量的指针,继而的到结构体中其他元素的指针。(2)升级:理解两个宏的工作原理,能表述出来(有些面试题会这么要求)
2024-03-04 22:05:11
510
原创 C语言之结构体
(1)C语言的两种类型:原生类型和自定义类型(1)结构体需要先定义结构体类型再用类型定义变量struct s1 //定义结构体类型int age;//定义结构体变量return 0;(2)也可以在定义结构体的同时定义结构体变量//定义结构体的同时定义结构体变量struct s1 //定义结构体int age;struct s2 //定义结构体的同时定义结构体变量int age;}p2;//定义结构体变量return 0;
2024-03-03 23:02:50
787
原创 C语言之字符串类型以及字符串和字符数组的细节
实际上总共耗费了10个字节(64位linux的话是14个字节),这10个字节中:4字节的指针p(64位linux系统中是8个字节)叫做字符串指针(用来指向字符串的,理解为字符串的引子,但是它本身不是字符串),5字节的用来存linux这5个字符的内存才是真正的字符串,最后一个用来存'\0'的内存是字符串结尾标志(本质上也不属于字符串)(C语言中不可能存在一个包含'\0'字符的字符串),这种思路就叫做"魔数"(魔数就是选出来的一个特殊的数字,这个数字表示一个特殊的含义,你的正式内容中不能包含这个魔数作为内容)
2024-02-29 13:17:55
4441
原创 C语言之关于程序中内存的问题(内存是从哪里来的)
(1)void * 是个指针类型,malloc返回的是一个void * 类型的指针,实质上malloc返回的是堆管理器分配给我本次申请的那段内存空间的首地址(malloc返回的值其实是一个数字,这个数字表示一个内存地址) 为什么要使用void * 作为类型?)、使用内存、释放内存(向操作系统归还这块内存的使用权限)。(3)数据段(也被称为数据区、静态数据区、静态区):数据段就是程序中的数据,直观理解就是C语言中的全局变量(注意:全局变量才算是程序中的数据,局部变量不算是程序的数据,只能算是函数的数据)
2024-02-24 00:14:08
1877
原创 C语言之二维数组与二维数组的运算和指针
二维数组的第二维是里面的那一层,第二维本身是一个一维数组,数组中存储的元素是普通元素,第二维这个一维数组本身作为元素存储在第一维的二维数组中。首先第一维是最外面的一层数组,所以inta[3][4]这个数组里面有三个元素,其中每个元素中又是一个含有4个元素的数组(这个数组就是第二维)(5)总结:我们使用二维数组(C语言提供二维数组),并不是必须,而是为了简化编程的一种方式,一维数组的出现也不是必然的,也是为了简化编程。(1)二维数组的数组名表示二维数组第一维数组中首元素(也就是的第二维的数组)的首地址。
2024-02-07 23:05:08
1177
1
原创 linux之虚拟机上网问题 (在VMvare中)NAT方式 与 桥接方式
第二步 :打开终端命令行->切换root用户-> vi /etc/network/interfaces->改成动态分配ip(保存退出)第二步 :打开终端命令行->切换root用户-> vi /etc/network/interfaces->改成动态分配ip(保存退出)第一步 : 菜单栏 ->虚拟机->设置->网络适配器->右侧选择桥接模式->确认。第一步 :菜单栏 ->虚拟机->设置->网络适配器->右侧选择NAT模式->确认。(3)NAT方式,虚拟机上网,局域网中只需要一个ip地址。
2024-02-05 21:38:40
3241
1
原创 linux 基础知识与技能 、常用命令、高阶命令
一linux基础1.1 :操作基础及其概念Windosws与Linux的关系:当前主流的操作系统(2015)windowslinuxandroidiossymbianunix(与c语言伴生)操作系统的特点:Windows傻瓜式让所有人都会用电脑) ,好学习工资低。Linux:(linux认为每一个用户都是专业人士)操作麻烦学习比较难免费的开源的linux性能好可移植性好好的设计理念。Android移动操作系统,android。
2024-02-03 19:19:07
932
1
原创 C语言之二重指针
一重指针完全可以做二重指针做的事情,之所以要发明二重指针(函数指针、数组指针),就是为了让编译器了解这个指被定义时定义它的程序员希望这个指针被用来指向什么东西,(定义指针时用数据类型来标记,譬如int *p,就表示p要指向一个int类型的数据),编译器知道指针类型之后可以帮我们做静态类型检查。(2)所有的指针变量本质都是相同的,都是4个字节(在32位系统中),都是用来指向别的东西的,不同类型的指针变量只是可以指向的(编译器允许你指向的)变量类型不同。就是为了做类型检查。(1) 二重指针指向一重指针的地址。
2024-01-21 13:16:30
391
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人