- 博客(69)
- 收藏
- 关注
原创 蓝牙GATT协议总结(ESP32)
( "gatts_profile_a_event_handler" 和 "gatts_profile_b_event_handler")。连接和断开连接事件 "ESP_GATTS_CONNECT_EVT" 和 "ESP_GATTS_DISCONNECT_EVT"读写事件 "ESP_GATTS_READ_EVT" 和 "ESP_GATTS_WRITE_EVT"执行写入事件 "ESP_GATTS_EXEC_WRITE_EVT"注册事件 "ESP_GATTS_REG_EVT"初始化并启用蓝牙协议栈。
2025-03-05 11:27:07
400
原创 esp32 OTA学习笔记
ota是指先下载固件到ota1然后下次从ota1启动,回滚就是回到ota0 启动。不超过1600kb的程序可以ota(可手动划分)csv分区表中ota-0和ota-1存放程序。分区表中有 ota0和ota1两个数据分区。
2024-12-10 15:04:49
212
原创 在arduino分文件编译时可能遇到的问题以及解决方法
4.在主程序的 setup()函数中初始化每个库,可以使用库的初始化函数,例如library1_init()。3.在主程序中引用每个库文件,可以使用#include语句,例如#include "library1.h"。2.在每个程序的代码文件中,将不需要对外暴露的变量和函数都声明为static,以避免命名冲突。5.在主程序的loop()函数中调用每个库的循环函数,例如library1_loop()。首先是在你的主程序以及子程序都要用到某个全局变量时不应该写在头文件中。其他文件可以时.c,.cpp等等。
2024-12-05 17:02:09
256
原创 GIT的使用方法以及汉化方法
对于gui网上已有网友针对其开发出了对应的汉化包,我们只需要下载安装即可https://github.com/stayor/git-gui-zh解压之后里面的文件中找到 zh_cn.msg放到C:\Program Files\Git\mingw64\share\git-gui\lib\msgs即可汉化完成
2024-12-04 18:21:48
686
原创 ESP32蓝牙通信与蓝牙配网
buffer:指向存储读取数据的缓冲区的指针。返回值:int:读取到的字节数据。返回值:int:可用的字节数。参数:deviceName:蓝牙设备的名称,字符串类型。参数: buffer:指向存储读取数据的缓冲区的指针。参数:buffer:指向要写入数据的缓冲区的指针。功能:从蓝牙串口读取指定长度的字节数据到缓冲区。size:要写入的字节数。返回值:size_t:实际读取的字节数。返回值:size_t:实际读取的字节数。返回值:size_t:实际写入的字节数。返回值:size_t:实际写入的字节数。
2024-12-03 18:10:28
709
原创 esp32连接WiFi以及gpio的使用
arduino 编程比较直观,主程序分为setup以及loop部分。setup即是启动时初始化串口以及初始化外设使用的函数,loop相当于while(1)启动后一直运行的部分。目前esp32有多种编程软件例如arduino,mixly以及thonny。编程语言和c++比较相似,可以使用包含头文件。使用开发板管理器下载开发板配置文件。mixly编程比较简单,不用写代码。通过板载led以及串口反馈连接状态。即可保持WiFi的连接。通过函数连接WiFi。
2024-12-02 17:46:31
701
原创 BootLoader移植
在操作系统内核或用户应用程序运行之前运行的一小段代码。对软硬件进行相应的初始化和设定,为最终运行操作系统准备好环境,Boot loader不属于操作系统,一般采用汇编+C完成,加载系统并启动,启动后不参与系统运行。在嵌入式系统中,整个系统的启动加载任务通常由Bootloader来完成。
2024-11-18 14:57:45
128
原创 使用NFS启动的方法
就上篇的tftp本地启动而言,NFS启动可以简化文件系统的更新和管理,还可以方便驱动的开发。以下是NFS启动的方法。步骤3:通过xshell登录控制台,设置uboot相关参数。步骤1: 确保 tftp服务和nfs服务已经配置好。重新上电即可启动nfs的系统。步骤2:创建根目录文件。
2024-11-18 11:48:04
242
原创 如何进行系统移值
1.安装xshell,用于连接单片机串口,也可以远程连接linux主机。2.安装交叉编译器3.安装tftp4.安装nfs5.在虚拟机新建一个虚拟网卡,没有多余网口就买-个usb网卡6.开发板网络设置7.插入SD卡,进入单片机的uboot设置网络8.下载系统文件9.设置启动项就可以启动系统辣
2024-11-17 11:02:49
447
原创 C++笔试面试题
构造函数是一种特殊的成员函数,用于在创建对象时初始化对象的数据成员。它的名字与类名相同,没有返回值。一般有无参构造函数,有参构造函数,拷贝构造函数,移动构造函数等等析构函数是另一种特殊的成员函数,用于在对象销毁时进行清理工作,如释放对象占用的资源(动态分配的内存、打开的文件、网络连接等)。析构函数的名字是在类名前加上符号,并且也没有返回类型析构函数在手动分配内存,手动打开过文件或网络,有使用互斥锁等环境下需要手动定义。
2024-11-16 11:00:39
735
原创 某某科技笔试题
用于函数形参时可以确保函数不会修改其值,用于类中的函数时该函数不能修改类中的变量。修饰外部变量或函数时可以限定当前变量的作用域为当前文件,在函数内部定义时会延长变量的生命周期。是进程内的一个执行单元,同一进程内的线程共享资源。是操作系统进行资源分配的基本单位,每个进程都有独立的内存空间和资源。8、一个有 10 个指针的数组 ,该指针指向一个函数,该函数有一个整型参数并返回一个整型数。7、一个指向函数的指针,该函数有一个整型数参数并返回一个整数;5、一个有 10 个指针的数组,该指针是指向一个整型数的;
2024-11-13 15:46:55
1185
原创 IO,进程线程面试题
1.标准IO和文件IO的区别2.静态库和动态库的区别3.怎么创建进程4.什么是守护进程5.什么是僵尸进程?什么是孤儿进程?6.时间片了解么?7.进程和线程区别?8.线程的同步怎么实现9.线程的互斥怎么实现10.进程间通信方式有哪些?哪种效率最高11.通信方式的优缺点对比12.有名管道和无名管道的区别?13.共享内存的实现方式14.消息队列的实现方式15.fork和vfork区别16.线程的死锁,怎么避免?
2024-10-10 10:24:53
1070
原创 网络编程面试题
1. TCP和UDP的区别2. TCP的三次握手过程3. TCP的四次挥手过程?为什么是四次挥手?4. 在最后一次挥手时客户端为什么要等待2MSL?5. TCP是如何保证可靠传输的6. 如何实现并发服务器7. Select、poll、epoll的区别?Select有什么优点?8. Tcp的粘包问题9. UDP的丢包问题10. TCP编程框架11. 用过抓包工具么?抓过什么数据包?12. 广播和组播的区别
2024-10-05 23:12:19
768
原创 C++复习笔记
1> 不到万不得已的情况下,不要使用友元,因为友元的出现使得封装称为虚谈,友元破坏了类的封装性2> 友元不具有传递性:A是B的朋友,B不一定是A的朋友3> 友元不具有传递性:A是B的朋友,B是C的朋友,A不一定是C的朋友4> 友元不具有继承性:父类的朋友,不一定是子类的朋友5> 必须使用友元的情况:插入和提取运算符重载时,只能使用友元函数来解决。
2024-09-13 21:02:15
1084
原创 使用QT编写有图形界面的TCP局域网聊天室(app)
1.使用QTcpServer类实例化一个对象,就得到了一个服务器端2.调用该类对象的成员函数 listen 将服务器启动监听,该函数会进行绑定ip和端口号 ip地址可以指定也可以由系统自动绑定,端口号也可以自己指定和由系统自动指定3.当有客户端发来连接请求后,该服务器就会自动发射一个newConnection的信号 我们可以将该信号绑定到自定义的槽函数中完成相关逻辑4.可以使用类中的成员函数 nextPenddingConnection 可以获取最新连接的客户端套接字5.可以使用该客
2024-09-11 19:18:38
983
原创 使用C++编写一个语音播报时钟(Qt)
要求:当系统时间达到输入的时间时,语音播报对话框中的内容。countdownEdit作为书写目标时间的line_edit。systimelab显示系统时间的lab。start_btn作为开始和停止的按钮。qt界面如上图所示。stop_btn作为取消的按钮。textEdit显示播报内容。
2024-09-10 21:01:24
2195
1
原创 智能指针,QT,C++语言的关键字总结
bool、true、false:对于bool类型数据的相关处理,值为true和false。1> C++中一共有63个关键字,如上图所示,其中标红的为c语言中的关键字,有32个。int、short、float、double、long:整数和实数的数据类型。char、wchar_t:char是单字符数据,wchar_t多字符数据。6> 访问权限:public、protected、private。7> 异常处理:throw、try、catch。do、while、for:循环相关的关键字。
2024-09-05 21:00:55
755
原创 将string类中能够实现的操作都封装在MyString类中
包括:构造函数析构函数重载 = ,[],+=,+,==,!=,,=,;at;data;c_str;empty;length;capasityacity;clear;push_back;pop_back;append;
2024-09-02 21:28:28
334
原创 使用C++,仿照string类,实现myString
只需要将struct改成关键字class,就定义了一个类C++中类和结构体的区别:默认的权限不同,结构体中默认权限为public,类中默认权限为private默认的继承方式不同,结构体的默认继承方式为public,类的默认继承方式为privatepublic:该权限下的成员,可以在类内、子类中和类外被访问protected:该权限下的成员,可以在类内、子类中直接被访问,类外不允许被访问private:该权限下的成员,只能在类内被访问,在子类、类外不允许被访问。
2024-08-29 21:01:45
834
原创 使用C++手动封装一个顺序表,包含成员数组一个,成员变量N个
实现顺序表的判空,判满,添加数据,求实际长度,任意位置的插入/删除,访问数组中的任意一个元素,以及让顺序表自动扩容。
2024-08-28 20:21:51
363
原创 使用C++编写程序,提示并输入一个字符串,统计其中的英文字符,数字,空格以及其他字符的数量。
由于c++兼容c语言的程序,所以子函数使用了c语言的内容。程序统计了字符串中的各种字符的个数,达到要求。
2024-08-27 19:11:23
626
原创 select模型实现TCP聊天室
服务器和客户端都需要使用select模型去实现 服务器要监视2个客户端是否连接,2个客户端是否发来消息以及服务器自己的标准输入流 客户端要监视服务器是否发来消息以及客户端自己的标准输入流 在不开线程的情况下,实现互相聊天。
2024-08-21 23:36:25
447
原创 嵌入式企业面试真题
TCP和UDP是传输层协议。多线程是一种在单个进程中同时执行多个线程的技术,它们共享进程的地址空间和资源内存。多线程会出现同步互斥、访问临界资源会出现互斥问题、可以使用互斥锁避免多进程同时修改一个内存导致出错,互斥锁本质上也是临界资源,同一时间只能一个线程拥有互斥锁。答:socket是套接字,是一种用于进程间和设备间网络通信的文件类型。答:互斥锁是多线程编程中常用的同步机制,多个线程会争抢锁资源,当抢到锁的资源会上锁,其他线程等待,直到释放。指向的是数组第一个元素的地址,每次偏移一个数组的大小。
2024-08-20 21:01:47
448
原创 如何在linux环境下封装静态库和动态库
出现./dynamic: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory问题的解决方法:
2024-08-20 19:35:25
452
原创 实现网络聊天室(UDP)
项目需求:1.如果有用户登录,其他用户可以收到这个人的登录信息2.如果有人发送信息,其他用户可以收到这个人的群聊信息3.如果有人下线,其他用户可以收到这个人的下线信息4.服务器可以发送系统信息
2024-08-18 23:20:43
300
原创 使用C语言实现多进程文件管理器
支持文件的查看信息(ls)、拷贝(cp)、删除(rm)、移动(mv)、更改文件权限(chmod)和查看内容(cat)。每个操作将在一个单独的进程中执行。实现一个多进程文件管理器。
2024-08-11 21:59:33
468
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人