- 博客(234)
- 资源 (4)
- 收藏
- 关注
原创 KEIL定制bin文件名字
详细理解bat,可以看到需要从main.c中读取,任何一个工程都应该有一个main函数,对应有一个main文件,在这个文件里面定义两个宏SOFTWARE_VERSION和BIN_NAME,这样bat就能知道你想重命名的文件名字和版本了。多个版本多个修改怎么办?使用时间进行区分!
2025-03-20 17:08:47
841
原创 最近遇到的中断和主流程数据读写冲突问题
方法适用场景性能影响实现复杂度互斥锁通用共享资源保护中低原子操作简单变量操作低中中断屏蔽单核中断敏感操作高低无锁结构高并发读写场景极低高双缓冲生产者-消费者模式低中实际开发中需要根据实时性要求(如中断延迟容忍度)、性能需求(吞吐量要求)和资源限制(内存/CPU能力)综合选择方案。对于关键系统,建议组合使用多种机制(如原子操作+内存屏障)实现多重保护。关闭中断适用于:临界区代码非常简单,执行时间很短,并且对系统实时性要求不高的场景。
2025-03-19 11:24:59
810
原创 HLK LD2412毫米波雷达模块深度解析:原理、应用与开发指南
HLK LD2412模块凭借其独特的毫米波技术优势,正在重新定义非接触式传感的标准。其微型化设计与高性能的结合,为物联网设备开发提供了新的可能性。未来,随着算法优化和成本降低,毫米波雷达将在更多垂直领域实现大规模应用。(注:本文数据基于HLK官方2025年Q1发布的V3.1版本规格书,实际参数可能因固件更新而变化。
2025-03-13 17:09:40
1181
原创 如何使用华大芯片 HC32F460 实现 USB 主机驱动(配套 CDC+MSC 复合设备)
通过以上步骤,我们可以使用华大的 HC32F460 芯片实现 USB 主机驱动,配套的从机是一个复合设备 CDC+MSC。在实际开发中,我们需要根据具体的需求和硬件平台进行适当的调整和优化。同时,我们还需要注意 USB 通信协议的细节,确保通信的稳定性和可靠性。希望本文对你有所帮助,祝你在嵌入式开发中取得成功!
2025-03-11 15:36:39
1349
2
原创 嵌入式开发秘籍:一套代码适配多项目的优雅之道
我一般会在工程文件的 source 文件夹名称后面加上日期来进行版本维护,同时再配上一个 readme.txt 文件,把每个版本的修改内容、功能特点都记录清楚,这样也能很好地管理版本。就拿常见的 debug 版本和 release 版本,还有带 bootloader 的版本和不带 bootloader 的版本来说,用同一套代码,通过不同的 target 来区分,是不是方便又实用?通过这种方式,就能实现相同代码的共用,还能快速切换不同代码,下次更新代码的时候工作量能大大减少。选择dog版本,打开了看门狗。
2025-03-04 14:36:49
511
1
原创 LeetCode 2353. 设计食物评分系统题解
实现构造函数:用于初始化系统,foods数组存储食物名称,cuisines数组存储对应食物的烹饪方式,ratings数组存储对应食物的初始评分,三个数组长度均为n。:修改名字为food的食物的评分。:返回指定烹饪方式cuisine下评分最高的食物的名字。如果存在并列,返回字典序较小的名字。为了实现最大堆的排序规则,我们需要自定义一个比较函数// 按第二个元素从大到小排序// 如果第二个元素相等,按第一个元素字典序从小到大排序这个比较函数确保了堆顶元素是评分最高且字典序最小的食物。
2025-03-02 13:05:08
950
原创 假如林黛玉是程序媛
工位隔板上的便利贴随风轻颤,倒像大观园里的诗笺,写着些 “接口文档未更新”、“生产环境报错 500” 的荒唐字句。” 晨会上我不再抢着认领需求,反倒教新人写单元测试:“这些测试用例,倒似潇湘馆的竹篱,虽不能挡风雨,总能护着些诗稿。可通宵的疲惫、旁人的夸赞,也让我渐渐明白,这江湖并非想象中那般简单,荣耀背后,是无数的付出与牺牲。成功的喜悦被家人的病痛瞬间冲淡,我开始迷茫,这一路的拼搏,究竟是为了什么?如今的我,不再为名利所累,只愿在这代码的世界里,为他人点亮一盏灯。这秋雨,不再是悲伤的象征,而是新生的预兆。
2025-02-17 23:06:32
962
原创 GNSS定位局限性与综合PNT及5G定位技术研究
用户设备通过接收卫星发射的信号,解析信号中的导航信息,并结合自身的位置数据,通过三角定位法计算出用户设备的位置。因此,在未来的定位系统中,5G定位技术与GNSS/PNT的融合将成为一种趋势,为用户提供更加精准、稳定、可靠的定位服务。例如,在PPP-RTK技术与GNSS的融合中,可以利用PPP-RTK技术的快速收敛特性和GNSS的高精度特性,进行融合计算,以实现更高精度的定位。同时,随着技术的不断进步,GNSS系统的成本也在逐渐降低,使得更多的行业和用户能够享受到这一技术带来的好处。
2024-12-17 17:33:29
1284
原创 自主系统认知导航技术
自主系统认知导航技术是一个复杂且具有前瞻性的技术领域。它如同人类利用自己的感官来认识周围环境,然后规划出行路线一样,让自主系统在复杂环境中感知周围环境信息,理解信息含义,并进行路径规划和导航。例如,无人驾驶汽车的认知导航系统通过传感器收集道路形状、交通标志、其他车辆和行人位置等信息,进行处理后识别各种物体和路况,基于预设目标规划最佳行驶路径。
2024-12-05 17:59:14
1069
原创 北斗系统在航空导航技术与应用研究报告
北斗三号系统采用由地球静止轨道卫星、倾斜地球同步轨道卫星和中圆地球轨道卫星组成的混合星座。这种混合星座在航空导航领域具有显著优势。首先,它能更好地满足航空导航对卫星可见数量的要求。在亚太地区等大部分区域,可见北斗卫星数量可达 14 - 16 颗,相比其他单一中圆地球轨道卫星星座的导航系统,大大降低了因卫星信号遮挡等导致的导航精度下降或信号中断的风险。此外,这种混合星座的分布使得北斗系统在全球范围内提供服务时具有更高的覆盖率。尤其在低纬度地区,由于高轨卫星更多,抗遮挡能力强,性能优势明显。
2024-12-05 17:56:40
1637
原创 北斗系统增强技术和应用
一、北斗系统增强技术的定义北斗系统增强技术是指通过一系列技术手段,提高北斗卫星导航系统的定位精度、可靠性和服务范围的技术。它主要包括地基增强技术、星基增强技术和低轨卫星导航增强技术等。原理:通过在地面建立大量的基准站,接收卫星信号并进行处理,然后将修正信息发送给用户,以提高定位精度。组成部分:基准站网络、数据处理系统、运营服务平台、数据播发系统和用户终端。基准站网络:由多个分布在不同地点的基准站组成,负责接收卫星导航信号。数据处理系统:对基准站接收到的信号进行处理和分析,生成修正信息。运营服务平台:负责管理
2024-12-05 17:55:24
2243
原创 量子导航技术:开启精准定位新时代
摘要本文详细介绍了量子导航技术,包括其核心原理、发展现状、应用前景及面临的挑战。量子导航技术利用量子效应传感器,分为星基量子导航和量子惯性导航两大类。其发展历经早期理论基础研究、关键技术突破及各国研究进展。在军事和民用领域具有广泛应用前景,但也面临纠缠光源稳定性、干涉仪精度、成本高昂等诸多挑战。各方需共同努力,推动量子导航技术发展,为人类科技进步和社会发展做出贡献。关键词量子导航技术;星基量子导航;量子惯性导航ABSTRACTThis paper elaborates on quantum navigati
2024-12-03 11:12:04
2106
原创 嵌入式软件问题解决之道:从认识到实践的循环
在嵌入式软件开发的复杂领域中,问题的出现如同潜藏于暗处的礁石,随时可能使项目的航船触礁搁浅。有效地解决这些问题,不仅是保障项目顺利推进的关键,更是提升软件质量与性能的核心所在。本文将以认识和实践论为最高指导原则,深入探讨解决嵌入式软件问题的方法论与具体操作,并结合实际例子详细阐述,为广大嵌入式软件开发者提供一套系统且实用的问题解决思路。
2024-11-29 22:27:39
1053
原创 嵌入式设计模式之中介者模式
中介者模式是一种行为型设计模式,它通过引入一个中介对象来封装一系列的对象交互。中介者模式的主要作用是降低多个对象之间的耦合度,使得这些对象之间的交互更加简单和清晰。在嵌入式系统中,各个组件之间的交互往往非常复杂。如果直接让这些组件相互交互,可能会导致系统的耦合度非常高,难以维护和扩展。而中介者模式可以将这些组件之间的交互封装在一个中介对象中,使得各个组件只需要与中介对象进行交互,从而降低了系统的耦合度。
2024-11-28 21:47:15
672
原创 “天通”卫星移动通信系统
原创风一样的航哥航哥小站2024年11月25日 19:23江苏天通一号图片来自于知乎天通卫星:万万没想到,我是这样的一款卫星 - 知乎卫星移动通信系统是我国自主研制建设的卫星移动通信系统,也是我国空间信息基础设施的重要组成部分,被称为 “中国版的海事卫星”。它由空间段、地面段和用户终端组成。空间段由多颗地球同步轨道移动通信卫星组成。2016 年 8 月 6 日,天通一号 01 星在西昌卫星发射中心成功送入预定轨道,这是我国卫星移动通信系统首发星。该星基于东方红四号平台研制
2024-11-25 20:54:35
3582
原创 函数打桩相关内容及应用示例
例如,在测试高温情况下`control_temperature`函数的行为时,使用配置好返回高温值(如35°C)的`read_temperature_sensor_stub`桩函数,然后检查`control_temperature`函数是否正确启动了冷却设备(可以通过检查冷却设备的控制信号是否被触发,或者查看系统日志中是否有冷却设备启动的记录),以及系统状态是否正确切换到降温模式(检查相关状态变量的值)。-在桩函数`read_light_sensor_stub`中,可以模拟光传感器故障的情况。
2024-11-22 10:18:22
1047
原创 EIGEN库使用三天案例!上手仅需一天
按照这样的定义,Vector3cd中的3指的是向量的维度为 3,c表示复数类型,d表示双精度浮点数类型,而它的定义本质上是一个 3×1 的矩阵,所以是列向量。其中,Vector表示这是一个向量,3表示向量的维度是 3,即它是一个三维向量,c表示向量元素的类型是复数(complex),d表示复数的实部和虚部是双精度浮点数(double)。其中,`Matrix`表示这是一个矩阵类型,`4`代表矩阵的行数和列数都是4,即它是一个4×4的矩阵,`d`表示矩阵元素的类型是双精度浮点数(`double`)。
2024-11-19 12:03:47
1003
原创 matlab实现主成分分析方法图像压缩和传输重建
继续阅读:“主成分分析(PCA)计算协方差矩阵的特征值和特征向量,并选择少数几个主分量代表多变量的方差(即协方差)结构,是一种有效的特征提取方法。数字图像是二维矩阵,对其通过PCA处理来提取特征,可以在一定比例上保留原始图像的特征信息,并且能够大大减少计算量。因此,PCA图像压缩处理属于一种降维方法,它通过对高维图像块向量空间进行降维处理,将多变量的图像块数据表进行最佳综合、简化,导出少数几个主分量,进而实现在一定比例上保留原始图像信息,又能保持图像块之间的不相关性,进而保证图像压缩的有效性。参考例程:
2024-11-12 17:07:33
1321
原创 读书电子书资源个人常用汇总
除了这些网站,常用的百度/谷歌/BING等都可以直接搜索,当然大名鼎鼎的Zlibrary也有用到,不过总是打游击的状态,并不是我的首选。“问渠哪得清如许,为有源头活水来!”喜欢读书的朋友,一定想阅读更多的书籍充实自己的人生,以下提供一些网络上免费的资源。
2024-10-23 11:59:24
2013
原创 cMake学习笔记(初级使用)
安装vs、mingw、cMake都是基础操作,安装完事在Windows上要添加环境变量,mingw最好自行放在一个路径比如我的路径:C:\MinGW,同时更改mingw32-make.exe换成make.exe,如果不改名的话,直接make就会报错,为了两个系统上面的操作一致,改名即可。所以先学习基础的cmake用法,目前只用到了linux和Windows,在Linux上面编译器使用GCC,在Windows上默认使用visual studio ,也可以使用mingw,类似Linux上的gcc。
2024-09-26 15:59:39
324
原创 基于HC32F460petb芯片给FLASH安装fat文件系统
目前单片机中用的最多的文件系统就是fat32,得益于正点原子和野火的大量资料,让我们很快的就能开发出来相关的功能,本篇用来记录一次fat32的移植过程,芯片采用的是华大的PETB,flash才采用的是GD25Q40,虽然是GD系列的存储芯片,但是命令上基本兼容W25Q系列。需要注意的是,fat32是单片机读写flash的操作,USB的msc操作是通过USB主机如电脑读写flash的操作,这两个操作应该是独立的,否则会有冲突。
2024-04-15 16:45:28
1424
原创 基于小华例程3.2版本USB之usb_dev_cdc_msc工程深入代码详解
USB如何区分CDC和MSC的呢?USB(通用串行总线)设备可以通过其设备类和子类来区分不同的功能,例如CDC(通信设备类)和MSC(大规模存储设备类)。以下是USB设备如何区分CDC和MSC功能的基本原理:1. **描述符**:USB设备通过其描述符来告诉主机它的功能和属性。描述符是一系列数据结构,包括设备描述符、配置描述符、接口描述符和端点描述符等。2. **设备类**:在设备描述符中,有一个字段指定了设备的类别。CDC和MSC分别有不同的类代码。
2024-04-15 16:26:45
1293
1
原创 修改代码的艺术--读书笔记
我可以只把这当作某种私人的怪癖,但是我发现,在我使用新的、不熟悉的编程语言时,这种不同的查看代码方法对我起到了很大的帮助作用。2.如果修改可以是方法中某个地方的一系列声明,那么就为新方法编写一个调用,完成相关的工作,然后把它注释掉(我喜欢在编写方法之前就先做这一步,这样我就能够知道方法在上下文之中会是什么样子)。在被包装的类中编写另一个方法,它会调用新方法和旧方法。重构背后的理念是,编写测试确保现存的行为不会改变,一点一点进行改进,如果我们在整个过程中都做到这些,就可以让软件更易于维护,而不会改变其行为。
2024-04-11 14:21:19
480
原创 用定时器在单片机中实现一次性回调函数执行
在定时器中断服务例程中,我们遍历链表,更新每个事件的剩余时间,并在事件超时执行回调函数。还有一个点要注意,中断回调函数执行事件不应该超过定时器的最小粒度,要求我们最小粒度定义不能太小,比如最小粒度定义为10ms,这个值是很多操作系统的参考值。当CPU处理其他任务时,定时器会在后台独立运行,当达到设定的时间后,触发中断,执行回调函数。检查是否有事件的剩余时间减到零,如果有的话,调用相应的回调函数,并更新事件状态。在中断服务例程中,清除中断标志,停止定时器,以便将其复用为一次性定时器。
2024-03-11 16:27:57
1791
原创 使用回溯法解决leetcode 1219
只要当前位置不是0,就可以dfs,记得dfs之后,要恢复原状,遍历完整个数组之后,返回最大值即可。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是。一种收集最多黄金的路线是:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7。当有了不少算法在脑海中之后,很快想到这是一个深度优先搜索+回溯的题目。你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为。一种收集最多黄金的路线是:9 -> 8 -> 7。
2024-03-11 15:03:13
537
原创 C++结合Lambda表达式在函数内部实现递归
python果然更加现代,函数里面可以定义函数。这是一道leetcode上面的题目,题目本身不难,只需要改变一次状态就行了。改变状态中需要确定点击的是什么内容,如果是空白则需要递归找到所有的空白。击败97.79%使用 C++ 的用户。击败15.20%使用 C++ 的用户。C++感觉需要重新学习了。让我们一起来玩扫雷游戏!还是不行,不能递归调用。)中的下一个点击位置(
2024-02-20 22:02:27
1098
原创 基于HC32F460使用J-link RTT实现调试信息打印
网上有很多基于stm32的教程,RTT的原理是一样的,使用小华的芯片,SEGGER目前没有直接支持,所以要修改一下配置文件JLinkDevices.xml,这个文件提供了支持的器件目录。里面增加的内容个人理解是增加了制造商、名称、内核,ram和flash信息,从而让jlink能够识别,里面涉及到一个文件 HC32F46x.FLM,这个文件如果安装了华大的pack之后,是有的,我使用了everything来搜索到到这个文件。下,只会写入适合缓冲区的数据,或完全不写入缓冲区,其余的数据将被丢弃。
2024-01-29 11:59:20
1543
原创 解决Android studio中的Installed Build Tools revision 34.0.0 is corrupted的问题
AS官方推荐使用最新版,但是由于一些原因,可能用的不是最新版。我今天在搭建环境的时候,使用的AS版本是4.1.1,就报了标题中的错误,IDE提示卸载重新下载安装,我照做了,但是问题依旧存在。既然34.0.0不行,那其他行不行呢?我把其他版本也下载下来了,发现29.0.0是可以的。于是上网查找原因:找到这个解决方案。将这两个名称修改一下就可以了。
2023-06-26 14:52:37
14729
原创 配合AI刷leetcode 实现1170
题目思路不难,实现一个函数f(s),实现一个二分查找,然后遍历就可以了。复杂度O(nlogn)。于是写出来这样的代码:
2023-06-10 11:01:55
982
原创 leetcode 347 C++和kotlin的解法
该算法的时间复杂度为 $O(n \log n)$,其中 $n$ 是数组的长度。哈希表的插入操作的时间复杂度为 $O(1)$,排序的时间复杂度为 $O(n \log n)$,取出前 k 个元素的时间复杂度为 $O(k)$。空间复杂度为 $O(n)$。先上C++版本的,基本思路是用hashmap统计出现的次数,然后维护一个大小为K的最小堆,最小堆的比较函数使用频率作为比较量。其中用到了自定义的pair数据和比较函数。使用kotlin就充分使用了各种数据直接的转换和库函数,写起来确实简明多了。
2023-06-01 15:02:27
530
原创 使用kotlin用回溯法解决电话号码的字母组合问题
我们先定义了一个字母表,将数字映射到对应的字母组合上。接着定义了一个结果集合result。在函数letterCombinations中,我们首先判断特殊情况,如果数字串为空,则返回空列表。否则,我们开始递归调用回溯函数backtrack。在回溯函数中,我们首先判断是否已经到达数字串的末尾,如果到达,则将当前的组合字符串加入结果集合中。否则,我们取出当前数字所对应的字母组合,对于每一个字母,都将其加入到组合字符串中,并递归调用backtrack函数,最后将该字母从组合字符串中删除(回溯到上一步)。这样
2023-05-28 12:12:21
1046
原创 leetcode 1209 学会删除字符串
首先定义一个数据类 CharWithCount,用来表示字符和其出现的次数。然后遍历字符串,对于每个字符,如果栈顶元素和当前字符相同,就将栈顶元素出栈,将其出现次数加一,否则将当前字符作为新的元素入栈。每次入栈或者出栈时,要判断栈顶元素出现次数是否达到了 k,如果是的话就将其出栈。最后将栈中剩余的元素按顺序拼接成字符串即可。
2023-05-25 21:45:00
585
原创 使用优先队列解决自己构造的数据类型-解决贪心问题
题解:其实题目就是一种排序,让不相等的变成相邻,这个有一点贪心法的很自然可以想到一种方案:按照数字的值划分成不同的组,每次从不同值的组里面选择最多数量的,直到选择完毕。上面就用到了自己构造的数据类型和排序方法,预处理部分采用了hashmap来统计每一个元素出现的次数。执行用时:88 ms, 在所有 C++ 提交中击败了61.47%的用户。根据我的理解,贪心问题大部分跟有限队列有关,在上篇文章写了。之后,今天看leetcode题目,就是典型的一道贪心题目。配合优先队列的最大堆,于是可以写出来如下的代码。
2023-05-14 20:37:56
394
无GPS的室内定位技术概述
2021-02-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人