- 博客(33)
- 收藏
- 关注
原创 C++学习笔记(聊天服务器)
error_category是抽象基类,它只定规则:必须实现name()返回类别名字,必须实现message(int ev)把错误码转文字。框架只操作基类error_category&,不需要关心是系统类别还是你自定义业务类别,自动调用你写的 name/message。痛点:如果手动申请资源,很容易忘记释放,或者中途 return / 异常跳出,漏掉释放 → 内存泄漏、句柄泄漏、死锁。就像 boost::system::error_category,库只规定接口,具体逻辑交给你写的子类实现。
2026-08-20 17:18:20
285
原创 QT开发笔记
继承 QObject,所有窗口控件的基类。凡是看得见的界面组件都是 QWidget。第五个参数:连接类型,跨线程必须用Qt::QueuedConnection。signal 信号:事件发生发出通知,只有声明没有实现,emit发射。slot 槽:响应信号的函数,可以普通成员函数、lambda。参数规则:信号参数 >= 槽参数,参数类型必须对应。窗口:独立弹窗(setWindowFlags)子控件:嵌入在其他窗口内部的组件。对象之间解耦通信机制,Qt 灵魂。connect 连接:绑定信号和槽。
2026-08-20 15:09:08
249
原创 leedcode笔记
则需要将左指针加加;也就是说遍历链表,若两个对应指针不相等,那么遍历,a遍历完到b的头节点,b遍历完到a的头节点。“矩阵置为0”:如果有一个元素是0,那么整个元素的这一行和这一列全置为0,解题思路:首先需要设置两个数组,分别表示行的列的零的标志位,先通过双层循环,若等零,则将这一行这一列的标志位为true;“合并区间”:对于区间有重叠的区域需要进行合并,即需要对当前区间的右端点和下一个区间的左端点进行判断,若是右端点大于左端点,更新这个合并后的右端点,左端点不变,push_back:先造临时,再塞进容器;
2026-08-10 15:48:20
192
原创 FREERTOS第七课队列集
RotaryEncorder_IRQ_Callback中断函数只将这个编码器数据解析(比如红外遥控器的话,是需要解析出每一个键值的asc码值,编码器需要解析出速度)然后写入到这个队列g_xQueueRotary中,具体的逻辑判断代码是放在RotaryEncoderTask这个任务中的,这样写的好处是方便移植,驱动代码和逻辑代码是互不影响的。队列集是把多个队列放到同一个队列里,在队列集中放入队列的句柄,可以区分每个任务的数据。先创建两个队列AB,然后创建队列集S。创建队列集,并把队列加入队列集实际代码。
2026-07-10 17:56:51
176
原创 FREERTOS第六课-链表 环形缓冲区 队列 结构体 static
1.结构体(struct):把多个不同类型变量打包成一个整体。int id;2.typedef 简化(工程最常用)typedef 给类型起别名,不用每次写 struct示例一int value;Node* next;}Node;//定义链表节点示例二Node* rear;} Queue;
2026-07-01 21:53:27
249
原创 FREERTOS第五课 任务管理与调度
当任务因为需要延迟(如 vTaskDelay)而进入阻塞态时,系统会将其 TCB 从优先级链表中取出,放入 DelayedTaskList。只有通过 vTaskResume 对该任务执行唤醒操作,其 TCB 才会从 xSuspendedTaskList 中移除,并重新放入 ReadyList,任务恢复就绪态,等待下一次调度。例如任务优先级,在RTOS系统中,一共有56个优先级,那么在代码中每一个优先级会定义一个链表,在这个链表中呢存放的是相同优先级的任务TCB结构体。c.最高优先级的任务有多个,轮流运行。
2026-06-30 11:12:55
180
原创 HTTP Cookie Session
比如你登陆B站,第一次登陆用户名和密码,下次再次访问这个网页时就不需要再次输入用户名和密码了,这是得益于cookie的功劳。比如你登录淘宝,刷新页面网站就不认识你了,于是诞生了 Cookie、Session 用来保存登录 / 身份信息。2.浏览器保存这条 Cookie之后每次访问同域名,请求头自动带上 Cookie: userid=1001。http是无状态的,即你打开一个网页,关闭之后,下次再重新登陆,网页是不记录任何信息,4.服务器拿到 ID,去服务端查找对应的用户数据,识别登录状态。
2026-06-25 22:49:23
202
原创 LWIP协议栈 MQTT协议
标准完整 TCP/IP(如 PC Linux 内核协议栈)内存开销大,不适合几 KB~ 几十 KB RAM 的单片机,LwIP 就是为解决这个问题而生。是一套标准 API 函数,封装了 TCP/UDP 底层细节,一套通用接口,Windows/Linux/RTOS+LwIP 全都兼容。,由瑞典计算机科学院开发,专门面向资源受限嵌入式设备(单片机、STM32、ARM Linux 小内核、FPGA、MCU)。常见:Mosquitto(本地测试)、EMQX、阿里云 IoT、腾讯云 IoT 平台。
2026-06-23 11:37:40
232
原创 FREERTOS第四课 同步互斥(队列互斥量事件组信号量)
然后任务 B 也调LCD_PrintString,任务 B 执行到第 4 行时发现 bCanUse 为 1 并把它减为 0,执行到第 5 行代码时发现条件成立可以进入 if 语句块使用 LCD,然后任务 B 也被切换出去了;在这种情况下, 任务 A、 B 都能使用 LCD。如果同一时间有第二个任务进来调用,此时 bCanUse=0,直接 return -1,拒绝使用 LCD,实现同一时刻只有一段代码操作 LCD。第一个任务进入:bCanUse-- → 变成 0,满足 ==0,拿到 LCD 使用权;
2026-06-22 14:24:08
163
原创 C++Day4 Boost.Asio Boost.Beast
C++ 刚诞生时,自带的标准库(STL)功能很少:只有容器、字符串、基础算法、IO;没有网络、日期时间、线程、正则、异步 IO、智能指针、文件系统、序列化等常用工具;不同编译器(VC/GCC/Clang)扩展各不兼容,写跨平台代码很痛苦。2000 年左右一群 C++ 大牛,把大量高质量、跨平台的通用工具库整合在一起,这个集合就叫 Boost。
2026-06-19 18:33:44
346
原创 FREERTOS第三课 ARM架构
单片机(system on chip,SOC),对于一台电脑的主板来说,包括CPU、内存条和硬盘;对于单片机来说也包括CPU(运行程序)、内存、Flash(保存程序)
2026-06-19 17:06:49
164
原创 C++Day3 进程和线程通信 同步异步 协程yield 构造析构
进程:操作系统资源最小单位(独立内存、文件句柄、PID、虚拟地址空间,互相隔离)线程:进程内执行单元,共享进程全部内存、文件、句柄,仅私有栈 / 寄存器。
2026-06-17 23:50:59
262
原创 C++学习Day2-cookie,哈希,struct和class区别
Cookie(HTTP Cookie)是浏览器存储在客户端本地的小型文本数据,由服务器下发、浏览器保存,后续请求自动带上。大小限制:单条 Cookie 一般 ≤4KB,单域名下数量有限(通常 50 条内)存储位置:浏览器本地(内存 / 磁盘文件)流向:服务器 → 浏览器保存 → 浏览器下次请求同域名时自动携带本质:浏览器本地小型文本存储,解决 HTTP 无状态,维持用户状态。核心属性速记:生命周期:Max-Age / Expires作用范围:Domain + Path。
2026-06-17 17:08:50
257
原创 C++学习笔记Day1
无 RAII:手动 new/delete、malloc/free、fopen/fclose 这类原生资源,自己写代码释放。**C++ 异常 (throw/catch):**隐式向上抛出,意外 / 致命错误,靠栈展开传递,有运行时开销。**错误码 (error_code):**显式返回错误状态,可预期、常规错误,纯值传递,性能无损耗。有 RAII:把资源包进类对象,靠构造拿资源、析构自动释放,不用手动写释放代码。引用 = 变量的「别名」,它不分配独立内存,和原变量指向同一块内存。内存优化方法(引用)
2026-06-15 17:12:33
196
原创 freertos第一课 freertos和裸机开发 堆和栈
运行过64行,通过my_malloc函数,申请了一段100字节的内存,返回这段地址的首地址指针buf,可以通过右下角Watch1看到是和heap_buf的首地址相同。多运行几次,看这个buf是否添加有内容,这是全速运行三次,会放入“0x41 0x42 0x43”三个字节,其中0x41是65对应于ASCII字符的‘A’程序在运行前,需要在启动文件中,先定义好栈的SP指针地址,之后主函数才可以执行。韦东山老师讲的非常细致,详细介绍了函数调用的每一步地址到哪里了,强推!定义一片空闲内存,来。
2026-05-28 01:12:27
181
原创 通过C++实现基于socket的TCP聊天服务器
socket是一套用于不同主机间的API。IP地址用于唯一标识;端口用于区分主机上的不同应用(进程);通过socket可以在不同主机不同应用之间建立一条虚拟通道;(点对点,应用对应用);socket有两种类型,TCP(一对一数据流,不会丢包)和UDP(广播式);
2026-05-13 23:28:11
55
原创 Unity学习笔记(c#)
同一个方法,父类引用指向子类对象,调用的时候执行的是「子类自己重写的逻辑」,同一个行为,不同子类有不同实现。把类的「数据」和「操作数据的方法」包在一起,同时把不想让外部随便改的东西藏起来,只留安全的入口给外面用。继承就是:一个类直接 “抄” 另一个类的所有属性和方法,不用重复写代码,还能自己再加新功能。2.父类方法用 virtual 标记(允许被重写)儿子继承爸爸,自动拥有姓名、年龄、吃饭、睡觉。eg: 爸爸有:姓名、年龄、吃饭、睡觉。父类:动物,都有「叫」这个行为。多态必须先有继承才能用。
2026-05-13 21:52:31
37
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1