自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 互斥锁理解和优化

互斥(Mutual Exclusion)就像物理世界中的“排他性”。想象一下,你和朋友同时想拿路边的一辆共享单车,你们都想先骑,结果可能会撞在一起。并发编程中的共享内存也是如此:多个线程同时访问全局变量sum,就会“撞车”。互斥的解决办法是引入一种机制,确保同一时间只有一个线程能访问共享资源,其他线程必须等待。为了实现互斥,我们可以使用锁(Lock)。在访问共享资源(比如sum += 1)之前,线程需要调用lock()获取锁。如果锁已经被其他线程持有,调用lock()

2025-08-16 20:51:49 624

原创 面试技巧与准备

自我介绍需简洁,突出个人信息、项目经验,并主动引导面试官提问。自我介绍控制在2-3分钟,结尾明确表示结束并引导面试官提问。面试准备需全面,涵盖技术、沟通、形象、合同等细节,合理规划城市和行业选择,保持积极心态。

2025-08-01 11:18:56 575

原创 I2C协议的组成

飞利浦公司双向两线串行总线解决芯片和芯片之间的通信一个芯片和多个芯片通信的时候, 飞利浦公司, 提出IIC总线同一时刻只有一个器件作为主机, 其他器件作为从机两线串行, 就是两根线一根是数据线, SDA, 一根是时钟线, SCL开漏的, 所以要加上拉电阻半双工的, 一主多从, 也可以多主多从, 串行 的, 有一根SCL 一根SDA, 有时钟, 所以是同步的, 同一时间只能传输单向, 所以同一时间, 只能同一时刻只有一个器件作为主机, 其他器件作为从机。

2025-07-31 11:20:03 232

原创 韦东山freeRTOS快速入门视频教程学习笔记记录

韦东山freeRTOS快速入门视频教程

2025-07-21 16:29:35 123

原创 P1. “正常”使用 NYLinux

今天我们来聊聊 NYLinux,尤其是如何以“正常”的方式使用它,帮助大家快速上手这个系统。可能有些同学会觉得,NYLinux 听起来有点陌生,甚至有点“炸锅”,尤其是今年 CCF 全面推行 Linux 环境,彻底告别 Windows 的编程环境!但别担心,我会用最直白的方式,带你一步步驯服这头“野生的” NYLinux,就像驯服一只小怪兽一样,简单又有趣!我们今天的内容分为两大部分:第一部分是 NYLinux 的“正常”使用,也就是像用 Windows 或 Mac 一样,把它当成一个普通的操作系统;

2025-07-12 22:59:12 364

原创 嵌入式开发中的终端与人机交互:STM32开发指导思想

同学们,今天我们从终端和人机交互的关系聊到了Unix Shell的编程特性,最后结合STM32开发分享了一些指导思想。我常说:“Unix Shell是一个强大的工具,它不仅能管理任务,还能通过脚本编程。在STM32开发中,终端帮你调试,Shell脚本帮你自动化,二者结合能极大提高效率。希望你们回去试试这些例子,比如用串口终端调试STM32,或者写个脚本简化工作流。有什么问题随时来问我!流程图:知识总结fill:#333;color:#333;color:#333;fill:none;终端与人机交互。

2025-03-19 12:05:25 572

原创 10_NB-IoT模块判断联网状态实现

判断联网是个条件逻辑,成功失败得返回值表示。直接用 0、1 太 low,咱们定义个枚举状态。文件创建:在项目里新建个,专门放公共宏定义和枚举,方便复用。枚举定义:定义个枚举COM_STATUS,包含COM_OK(成功)、COM_FAIL(失败)、(超时)、COM_OTHER(其他错误)。使用场景:判断联网结果,返回枚举值,方便后续逻辑处理。好了,今天咱们把 NB-IoT 模块判断联网状态的逻辑跑通了!核心是啥?用AT+CGATT?查询附着状态,解析+CGATT:1或0。

2025-03-04 21:40:28 1118

原创 09_NB-IoT模块数据发送流程与实现

好了,今天咱们把 NB-IoT 模块发数据的流程过了一遍!从判断联网到创建 Socket、连接、发数据、再到确认成功,核心就是这几步。流程清楚了,代码就好写了。关键点是:先用AT+CGATT?确认联网,60 秒超时。用AT+NSOCR创建 Socket,AT+NSOCO创建连接,20 次重试。用AT+NSOSD发数据,数据转十六进制,AT+NSOSTS查状态。课后可以试试把这几步写成代码,跑跑看,感受下完整流程。下节课咱们再细聊封装细节,有问题随时来问我哈,休息下,继续搞~

2025-03-04 21:39:53 963

原创 08_调试技巧:解决UART中断接收问题

今天聊了几个解决办法,虽然根因没完全挖出来,但能用就行。以后再遇到类似问题,咋办?解决方法总结重建项目,排除 HAL 库生成问题。别在中断里用printf,挪到主循环。隔离测试,逐步排查代码干扰。调试建议:多用标志位、GPIO 点灯调试,少依赖printf。代码逻辑先写简单,保证能跑,再加复杂功能。心态调整:这种问题有时候就是运气不好,遇到 HAL 库的坑,挺磨人。慢慢试,实在不行来找我,咱们一块儿揪。好了,今天咱们聊了 UART 中断接收问题的调试技巧。核心是啥?遇到。

2025-03-04 21:39:21 963

原创 07_NB-IoT模块AT指令响应处理实现

asdfasdfa

2025-03-04 21:38:50 849

原创 深度思考助我学习FreeRTOS

通过以上的学习步骤,我们可以利用AI工具和合理的工具选择来快速掌握FreeRTOS。这不仅仅是为了学术需求,也可以为实际项目开发打下坚实的基础。希望大家通过本课程,能够快速掌握FreeRTOS,并能够运用它到自己的项目中。下一节课程,我们将通过具体的示例进一步深入学习如何搭建开发环境、创建任务,并且优化代码!

2025-02-18 12:51:31 508

原创 无人机字幕day01

10 - 无人机 - 飞控项目 - 电源管理任务 - 概述呃,好,给大家说一下,就是咱这个电源任务,它存在一个存在一个问题,存在一个什么样的问题呢?就是它是不是会有一个低功耗的一个检测呀,对吧?哎,好,然后呢给大家看一下这个现象是什么样的啊?呃,这个遥控咱先录了,我现在是不是把当前咱这个程序烧录到了哪儿的同学,是不是已经烧录到了?咱的这个烧到我这个无人机上面了,对吧?OK好,那呃然然需需要大家注注意的一点,就是你这个插着电,它这个低功耗模式肯定是不会不会出现的,对不对?它是一直工作的。

2025-02-12 14:45:22 487

原创 无人机字幕day07

02 - 无人机 - 定高 - 芯片介绍哎,好的,各位同学。那接下来咱们要做的工作呢,就是呃实现一下这个定高的PID的控制逻辑啊。那其实这一套系统当中,我们现在唯一就是我们的切入点应该在哪缺缺点是应该是在它呀,对吧?我们得先拿到高度,你是不是才能考虑去做这个定高啊,对吧?高度你都测不出来,那你还聊啥,对不对?所以接下来咱们要做的就是去找一下这个高度传感器的手册,然后呢咱们去学一下来,咱们找一找啊呃这个手册肯定是在资料里,对不对?资料我们找到谁这儿是不是有一个激光测距啊,对吧?

2025-02-12 14:42:54 212

原创 无人机字幕day06

04 - 无人机 - 飞控任务 - 姿态PID - 姿态解算概述啊,对呃OK那这个所谓的自带结算呢,其实有很多现成的方案啊,这个咱们去打开文档去看一眼同学,找到咱那个无人机找到笔记,找到这个飞控板,大家稍等一下啊,这里边有一个小表格,咱们可以简单的搂一眼啊,来同学,呃,咱们去找一找,我先给这个全部收起来啊,全部折叠,应该是在哪儿呢?应该是在这个背景知识里边啊,背景知识里边这儿是不是有一个常用姿态解算呀?

2025-02-12 14:41:03 308

原创 无人机字幕day05

02 - 无人机 - 飞控系统 - MPU6050 - 概述好,刚才呢给大家简单的回顾了一下PID的基本理论啊。呃,通过我们刚才的这个复习,我们可以看出来就是不管你现在是想去实现这个姿态的稳定,还是实现这个高度的飞行高度的固定,是不是都需要用到这个PID啊,对吧?好,但是是啊,你甭管做哪个,你首要的应该是什么?同学首要的应该是什么?咱们先把这个硬件接口层先给它搞定为为为什么呀?

2025-02-12 14:38:34 203

原创 无人机字幕day04

【代码】无人机字幕day04。

2025-02-12 14:34:34 302

原创 无人机字幕day03

【代码】无人机字幕day03。

2025-02-12 14:32:16 220

原创 无人机day02

01 - 无人机 - 飞控项目 - 通信任务 - SI24R1 - 简介嗯,好了,各位同学,那接下来呢我们就一起来呃,看一看咱接下来要做的具体内容啊,呃按照我刚才的分析,我们这块儿是不是要先做一下这个通讯任务的,相当于是接口层啊,对吧?啊,这个接口层呢,其实主要就是呃实现一个什么操作呢?实现一个就是呃无线通信就是这么一回事啊。其实大家看我这个画的这个结结构图其实也能够看出来啊,我们这儿的无线通讯呢,其实使用的是一个什么?是一个SI二四r幺这样的一个二点四g的无线通信芯片,对吧?

2025-02-12 14:29:37 454

原创 无人机day01

呃,好,给大家说一下,就是咱这个电源任务,它存在一个存在一个问题,存在一个什么样的问题呢?就是它是不是会有一个低功耗的一个检测呀,对吧?哎,好,然后呢给大家看一下这个现象是什么样的啊?呃,这个遥控咱先录了,我现在是不是把当前咱这个程序烧录到了哪儿的同学,是不是已经烧录到了?咱的这个烧到我这个无人机上面了,对吧?OK好,那呃然然需需要大家注注意的一点,就是你这个插着电,它这个低功耗模式肯定是不会不会出现的,对不对?它是一直工作的。

2025-02-12 14:18:33 280

原创 DeepSeek核心成员专访,顶级团队的思维与执行力恐怖如斯 - 1

在与DeepSeek团队的核心成员合作时,他们给我带来的第一感觉是“快乐”,这不仅仅是因为大家都拥有卓越的技能,更因为能够与一群天才一起工作,是一种无与伦比的幸运。在DeepSeek,我们不仅注重技术的革新,还强调每一位成员的贡献,不仅仅是通过盈利或风险管理的成功来衡量,还包括对团队其他成员的帮助、持续的努力和创新。例如,团队中有一位刚毕业的本科生,他基于自己的独特研究经验,提出了一种全新的从另类数据中提取信息的方法,经过三个月的实践,这个策略在转正时就已经上线,并且取得了非常好的效果。

2025-02-10 10:01:16 1289

原创 正在经历新时代

今天,我们正处于一个“活法时代”,每个人的生活方式和追求都可以是独特的。在这个时代,大家不再是为了国家的生存而集结,而是为个人的自由和幸福而奋斗。每个人都在探索自己的人生意义,面对多元化的社会,如何定义自我,如何找到人生的方向,成为了我们每个人需要思考的课题。梁永安老师的演讲充满了哲理与深刻的思考,他不仅仅鼓励我们关注社会的变革,更强调了个体的内心成长。年轻人是时代的先锋,我们需要认清自己,学会在这个多元化的社会中找到自己的定位,为社会的进步贡献我们的力量。

2025-02-10 09:55:23 773

原创 [10-2] 事件组实验_车辆协同

事件组是一个数据结构,它包含多个事件,每个事件对应一个比特位。任务可以通过等待某些特定的事件,或者通过设置事件来通知其他任务。事件组的一个重要特性是它可以通过广播机制,在某个事件发生时唤醒多个任务。通过这节课程,我们学习了如何使用事件组来实现任务之间的同步和协作。通过广播机制、或的关系和与的关系,事件组能够提供强大的功能,使得多个任务能够高效地同步。事件组的应用在多任务系统中非常广泛,尤其是在处理多个任务共享资源或同步操作时。

2025-02-09 12:57:20 499

原创 [10-1] 事件组的本质

通过这节课的学习,我们对事件组有了更深的理解。事件组不仅仅是一个任务同步的工具,它还提供了广播机制,使得多个任务能够同时等待并响应某个事件的发生。这种机制在多任务系统中非常重要,特别是在需要同时控制多个任务的同步行为时,事件组提供了比信号量、互斥量更加灵活的解决方案。

2025-02-09 12:55:29 669

原创 [9-3] 互斥量_领导临时提拔你(解决优先级反转)

优先级反转是指在多任务系统中,低优先级的任务意外地阻塞了高优先级任务的执行。通常情况下,高优先级的任务应该优先执行,但在优先级反转的情况下,高优先级的任务反而无法运行,因为它被低优先级的任务所阻塞。**互斥量(Mutex)**是一种特殊类型的信号量,用于确保在同一时刻,只有一个任务能够访问共享资源。当任务想要访问共享资源时,它必须首先获取互斥量;当任务完成后,它需要释放互斥量,以便其他任务能够访问。互斥量能够解决优先级反转问题,它通过优先级继承机制。

2025-02-09 12:53:46 885

原创 [9-2-2] 信号量实验_优先级反转

在多任务操作系统中,任务根据其优先级被调度执行。通常,高优先级的任务应该先运行,而低优先级的任务则应等待。但在一些特殊情况下,低优先级的任务可能会在高优先级任务之前运行,这种情况我们称之为优先级反转。优先级反转是多任务操作系统中的常见问题,特别是在资源共享的情况下。通过本次实验,我们演示了优先级反转的发生过程以及如何使用信号量进行任务同步。在实际应用中,可以通过优先级继承协议或互斥量来有效避免优先级反转,确保高优先级任务能够及时执行。

2025-02-09 12:51:38 872

原创 [9-2-1] 信号量实验_控制车辆运行

在这节实验中,我们通过信号量控制了多辆车的运行。通过设置信号量的初始值和最大值,我们成功地限制了同时运行的车辆数,确保了任务间的同步和资源的合理分配。信号量不仅可以控制资源的访问,还能帮助我们管理多个任务之间的执行顺序。

2025-02-09 12:50:05 651

原创 [9-1] 信号量的本质

信号量是一个特殊的队列,主要用于资源管理和同步。在信号量的操作中,我们通过take和give操作来管理资源的分配。信号量的本质就是通过管理资源的数量来控制任务的同步。通过这个例子,我们可以看到信号量如何用于多任务系统中,确保资源的合理分配和避免资源竞争。

2025-02-09 12:48:23 468

原创 [8-4] 队列实验_分发数据给多个任务(赛车游戏)

在这节课中,我们通过实现一个简单的赛车游戏,学习了如何通过队列将数据分发给多个任务。通过使用队列集,我们能够统一管理多个队列,并通过任务读取数据来控制不同的赛车。这个实验为后续学习信号量、互斥量等同步机制打下了基础。

2025-02-09 12:46:33 846

原创 [8-3-3] 队列集实验_增加姿态控制

通过这节课的学习,我们成功地将MPU6050的姿态控制集成到现有的游戏框架中。通过读取MPU6050传感器的数据并解析角度信息,我们能够实现通过设备的倾斜来控制游戏中的挡球板。我们使用了队列集来简化多个硬件设备的数据传输,使得系统更加高效和易于扩展。

2025-02-09 12:44:14 794

原创 [8-3-2] 队列集实验_改进程序框架(编程)

我们定义一个IRData结构体来存储红外遥控器的按键数据。int value;// 存储红外遥控器按键值} IRData;int count;// 旋转计数int speed;// 旋转速度通过使用队列集,我们实现了多设备数据传输的优化。通过将红外遥控器和旋转编码器的队列放入同一个队列集中,我们简化了数据处理的流程,并提高了系统的性能和扩展性。现在,输入任务可以根据不同的设备类型来处理数据,无需为每个设备单独创建任务和队列。

2025-02-09 12:41:14 522

原创 [8-3-1] 队列集实验_改进程序框架(思路)

通过使用队列集,我们大大简化了程序结构,避免了为每个设备创建单独任务的复杂性。队列集的使用能够有效减少系统资源消耗,同时提升代码的可扩展性和可维护性。

2025-02-09 12:39:31 864

原创 [8-2-4] 勘误_解决旋转编码器不好用的问题

通过本节课的学习,我们改进了旋转编码器在游戏中的表现,解决了不灵敏和响应慢的问题。防抖动处理:通过时间间隔判断,过滤掉抖动信号。最小速度值:确保即使时间间隔过短,旋转编码器依然能够响应操作。通过这些改进,游戏控制变得更加流畅,操作更加精准。希望你能够理解旋转编码器的工作原理,并在后续的开发中应用这些技巧来优化系统的性能。这篇博客详细讲解了如何解决旋转编码器不灵敏的问题,并通过防抖动处理和时间判断来优化系统响应。希望这些内容能帮助你提升对旋转编码器在嵌入式系统中应用的理解,进一步提高你的编程能力。

2025-02-09 12:37:37 817

原创 [8-2-3] 队列实验_多设备玩游戏(旋转编码器)_重录

通过引入旋转编码器并结合队列来优化游戏控制,我们成功提升了游戏的互动性和流畅度。旋转编码器通过提供更高精度和更快速的响应,使得玩家在控制挡球板时获得了更好的体验。同时,队列的使用使得数据传输更加高效,避免了原环形缓冲区中的一些问题。希望通过这篇博客,你能够理解如何使用队列与旋转编码器优化嵌入式系统中的多设备协作,并为你的项目提供更高效的解决方案。

2025-02-09 12:35:48 567

原创 5-1-1 创建任务:声光色影的任务链路实现

负责播放音乐。ledTask():负责控制LED闪烁。:控制全彩LED的颜色渐变。:处理LCD显示。通过今天的学习,我们了解了如何在 FreeRTOS 中创建任务链路,以及如何通过设置任务的栈和优先级来控制任务的执行。虽然我们已经成功创建了四个任务,但在实际项目中,我们可能还会面临任务间资源共享、同步与互斥等问题。

2025-02-08 20:35:08 990

原创 4-2 内存管理:堆的使用与FreeRTOS配置

今天我们学习了:✅FreeRTOS中堆的配置:了解如何在FreeRTOSConfig.h中配置堆的大小和分配策略。✅不同的堆管理方法:如Heap_1, Heap_4, Heap_5等,根据系统需求选择合适的堆管理方法。✅堆内存的使用和管理:如何使用和vPortFree分配和释放内存。✅堆的碎片问题与优化:通过合并空闲内存块来减少碎片,保证内存分配的有效性。调整FreeRTOS配置文件中的堆大小,根据实际需求进行优化。实践使用和vPortFree来管理内存。

2025-02-08 20:32:23 781

原创 4-1 FreeRTOS源码概述:目录结构与编程规范

FreeRTOS 是一款轻量级的实时操作系统,它的源码结构清晰且高度模块化,能够适应不同硬件平台和应用需求。通过了解 FreeRTOS 源码的结构和编程规范,我们可以更高效地开发和调试 RTOS 项目。FreeRTOS源码目录结构源码中的编程规范如何开始阅读 FreeRTOS 源码通过今天的学习,你应该对 FreeRTOS 的源码结构和编程规范有了初步的了解。理解源码的目录结构、命名规范和编码风格,对我们在开发过程中修改和调试代码是非常有帮助的。

2025-02-08 20:25:04 952

原创 3-3-4 栈的概念:RTOS如何使用栈

今天我们学习了:✅每个任务都需要有独立的栈空间,以保证任务间的局部变量和返回地址互不干扰。✅任务切换时通过保存和恢复栈来保证任务执行的连续性。✅栈在多任务系统中的重要性,它是管理任务状态、局部变量、返回地址的关键。在多任务操作系统中,理解栈的作用对于掌握任务调度和系统管理至关重要。希望大家通过这篇文章能更深入地理解栈在 RTOS 中的应用,并且为未来的多任务编程打下坚实的基础。

2025-02-08 20:23:08 628

原创 3-3-3 栈的概念:局部变量在栈中的分配

栈的管理不仅仅对于局部变量非常重要,对于多任务系统中的任务切换、任务堆栈管理也有着深远的影响。是程序用来管理局部变量的地方,理解栈对局部变量的管理,有助于我们深入理解函数调用的过程、内存的分配与释放,尤其是在嵌入式和RTOS环境中,栈的管理至关重要。为了更好地理解局部变量是如何在栈上分配的,我们需要通过汇编代码来分析。栈空间的分配和回收过程与之前类似,只是此时栈空间的大小会增加。然而,如果寄存器不够用,编译器会将局部变量保存在栈中。今天,我们将通过一个简单的例子,详细讲解局部变量是如何在栈上分配和管理的。

2025-02-08 20:20:20 534

原创 3-3-2 栈的概念:函数调用与栈的作用

今天我们深入讲解了栈的概念及其在函数调用中的应用,尤其是在多任务系统中的作用:✅栈用于保存函数的返回地址和局部变量✅栈指针(SP)管理栈的操作,保证函数调用和返回时的数据正确性✅每个任务有独立的栈,保证任务切换时数据不被干扰✅递归调用和栈帧的概念,栈帧用于存储每个函数调用的局部信息🚀下一步学习:继续学习局部变量在栈中的存储,并理解如何在 RTOS 中使用栈管理任务。

2025-02-08 20:13:59 999

原创 3-3-1 堆的概念:理解堆内存的管理与实现

今天,我们通过一个简单的堆内存管理示例,学习了:✅堆的概念和用途✅如何通过链表管理堆内存✅堆内存的分配与释放机制✅内存碎片和堆管理的常见问题📌如果你想深入理解堆内存管理,建议尝试实现自己的堆分配器。可以研究如何优化堆管理算法,减少内存碎片的影响。堆是 RTOS 中非常重要的一部分,掌握堆内存的管理,能帮助你更好地理解任务和内存之间的关系。希望大家对堆有了更深入的了解,继续学习 RTOS 时,会发现它的内存管理技巧会非常有帮助!

2025-02-08 20:11:26 957

空空如也

空空如也

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

TA关注的人

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