- 博客(54)
- 收藏
- 关注
原创 stm32学习-CubeIDE开发
参考stm32开发常用开发环境(代码编写软件)MDK5:通用所有的ARM芯片,收费、界面功能原始CubeMx+MDK5:CubeMX图形化配置外设,生成CubeIDE(集成了CubeMX):st自家图形化编程,简单直观,生成只支持ST自家的芯片。
2024-05-29 16:42:20 460
原创 stm32学习-vs1053使用
1.不能一次性从sd卡中读取所有音频数据通过read每次从sd卡读取4096个字节,没次向vs1053发送32个字节,处理完以后再进行下一次读取,知道从sd读取数据长度小于4096说明一首歌曲文件读取完成或曲度错误。read函数读取文件可以指定每次读取数据长度,下次接着读取。2.单线程如何实现音乐播放同时按键检测。
2024-03-25 09:49:57 911
原创 多线程编程
1.背景知识相比于多进程效率高,调度以线程为单位,分配内存以进程为单位。防止CPU一直被占用防止同一资源被多线程抢用使用互斥量:和一般变量的区别就是,通过上锁函数检测到锁被其他线程使用时时线程会。mutex状态为0表示共享资源正在被其他线程/进程访问,状态为1表示没有被线程/进程访问。
2024-03-25 09:32:28 214
原创 进程间常用通信方式
使用流程:创建/获取共享内存-附加共享内存(将内存链接进当前进程)-使用内存-分离共享内存-剥离共享内存。5.sockets套接字。
2024-03-21 09:30:17 193
原创 程序运行时,常见存储区分类及作用
作用 栈区(stack) 存放函数的形参和局部变量(auto类型),由编译器自动分配和释放。 生命周期与函数调用相关,函数结束时自动回收。 栈区的大小有限,通常较小。 例如,函数参数和局部变量。 堆区(heap) 由程序员手动申请和释放,需要注意避免内存泄漏。 存放动态分配的内存,如使用malloc或new。 生命周期由程序员控制,程序结束时可能由操作系统回收。 例如,动态分配的对象、数组等。
2024-03-19 10:18:34 560
原创 c++ 全局变量、局部变量、静态全局变量、静态局部变量
参考链接:C++ 变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6 种:,,,,。函数执行时存在。
2024-03-19 10:09:24 565
原创 嵌入式学习-网络编程
1.端口、程序、进程关系,多进程监听同一端口(多个网络应用进程监听80端口)如何区分是那个进程的数据2.IP地址是如何被分配的3.如何解决僵尸进程问题添加语句signal(SIGCHLD,SIG_IGN)
2024-03-18 14:45:04 990
原创 c++ 模板template
如下函数就只能接收int类型数据输入,并返回int类型,想处理string类型或者其他类型只能重新定义一个函数。使用template进行定义,可以同时适用于多种数据类型。有多个模板参数是,增加typename个数就行了。作用:通过template定义。
2024-03-15 22:10:45 385
原创 c++ 字符串常用api
1.截取substr(index,size),从下标index处截取长为size的内容。5.字符串分割,使用stringstream API,需要添加sstream类。6.查找子字符串find(),返回第一次出现的位置,没有会返回一个无穷大值。4.字符串长度size(),不包含最后的‘\0’字符。2.末尾添加字符push_back。3.字符串拼接,直接使用+运算。
2024-03-12 15:38:05 423 2
原创 浅拷贝和深拷贝
(改变一个变量的值,另一个变量也会改变),可以理解为就是创建了一个应用。浅拷贝只复制指向某个对象的指针,不复制对象的数据,新旧对象。深拷贝会复制原对象的额所有元素,
2024-03-11 10:52:04 322
原创 线程和进程
影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响(一个工地烂尾不影响其他工地),但是一个线程崩溃整个进程都死掉(建房子任意一个环节出问题,工地就做不下去了)。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。内存分配:同一进程的线程共享本进程的地址空间和资源(同一工地的公共材料),而进程之间的地址空间和资源是相互独立的(两个工地老板都不同)简单理解进程是为了实现一个大的任务(修一栋大房子),每一个线程负责分工实现其中的各个部分(打灰,粉刷,通水,通电等等)
2024-03-10 12:46:50 392
原创 stm32学习记录-5.2PWM输出控制sg90舵机角度
1.同一定时器输出多路PWM波形都是一样的吗同一个定时器所以频率、相位一样,占空比由各自输出比较配置确定2.输出PWM错误1.端口输出模式要配置为复用推挽输出。2.检查定时器是否选择错误,通道端口号是否正确3.使用定时器高级定时器无法输出PWM高级定时器还要进行主输出使能, TIM_CtrlPWMOutputs。
2024-03-09 12:47:26 2330 1
原创 c/c++ 指针
复杂指针定义涉及较多运算符,分析指针功能从变量名处起,根据运算符优先级结合,一步一步分析。首先根据变量最先进行运算的远算符确定该变量是指针,还是该变量存储的数据类型、返回值是指针。如果该变量是指针,只要把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。int p;//这是一个普通的整型变量int *p;//首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针int p[3];
2024-03-06 19:59:44 444
原创 c/c++ 数组
定义double类型大小为5的数组balance,并初始化前4个元素,剩余元素默认为0;定义double类型数组balance,数组大小由后面初始化数据确定。通过中括号“[]”加下标进行访问,下标要。访问第一个元素1000.0,使用下标0;初始化元素使用大括号‘{}’定义数组使用中括号‘[]’
2024-03-05 10:35:13 334
原创 ACM模式笔试
参考链接:https://blog.csdn.net/qq_39295220/article/details/116785551
2024-03-05 08:21:11 465 1
原创 stm32学习-FATFS文件系统
1.如何读取SD卡中指定音乐文件,如何知道那一部分是文件名,那一部分是文件内容文件系统自己分配文件名和文件内容间的映射关系2.文件卷名如何确定的(正点原子代码中如何知道SD卡是0:)自己通过宏定义确定的3.写入数据以后直接读取,无法读取到数据写入数据以后,光标指针指向最后,后面没有数据,通过f_lseek函数将光标移动到指定位置。
2024-02-26 10:47:21 413
原创 c++命名空间
1.与引用第三方库区别个人理解本质一样的。选择使用命名空间还是将内容写入库文件中取决于你的需求和项目的规模。如果你只是在单个项目中组织代码,并且不需要与其他项目共享功能,那么使用命名空间可能更加简单和方便。而如果你希望将功能封装为独立的模块,并且可以被多个项目共享使用,那么将内容写入库文件中可能更适合。
2024-02-08 10:45:12 374
原创 stm32学习-8.spi读取W25Q64的ID信息
SPI的数据通信其实是数据交换,两个输入输出线和主从设备的数据寄存器构成一个回路,每一次数据位移出和移入通过边缘触发(移入移出分开进行的,完成一位数据交换需要两个边沿1.寻址不是还是要ss发送完整地址信息吗主机有多个ss线,用哪个从设备就控制对应ss口置低位2.没有从机应答,那从机数据没准备好就开始读,不是就冲突了吗有个状态标志位,可以先读这个数据再判断是否进行数据交换3.读取w25q64设备id失败4.oled屏无法正常显示。
2024-01-27 11:16:11 2955
原创 嵌入式八股整理
1.extern关键字作用是应用不在同一文件中的变量或者函数。1.只有当被引用变量是全局变量时才有用;2.不能在使用extern引用同时重新赋值,原文件中不初始化的话,全局变量会被自动初始化为0;2.
2024-01-26 12:54:45 490 1
原创 stm32学习-7.2iic-oled天气展示
1.访问最近几天天气数据时,cJSON解析需要更多的堆栈空间。文件中栈空间改为0.x1000。2.数据解析失败解析数据要挨着get命令之后,否则串口接收数组中天气数据已经被覆盖了。3.内存溢出,多按几次以后,天气数据无法解析了cJSON数据解析以后,要通过cJSON_Delete(root);释放root = cJSON_Parse((const char*)USART2_RX_BUF);命令占用的空间。结果展示初始化成功,上位机可以接收到如下信息,并获取一次当前天气。通过按键切换显示。
2024-01-25 20:39:25 1089
原创 6.esp8266获取天气数据
开启透传模式(connect ip mode),AT指令失效。每次传输不用设置数据长度,每次要重新配置。配置流程,英文翻译问的gpt方便记忆。
2024-01-16 15:25:21 963 3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人